Parsi Date - Version 4.0.0

Version Description

  • This release contains huge bug fix:
    • Conflict with jetpack
    • Dashboard page warrning
    • Conflict with DATE_W3C format
    • Date problem in comments feed
    • Error while save ACF fields
    • Notice: Undefined index: date_i18n
    • Notice error in archive.php pages
    • RevSlider conflicts
    • Date convertion problem in WordPress 5.3
    • Conflict with get_the_modified_date
    • Parsi Widget error
    • Notice: Undefined index: wp_date, disable.php
    • WooCommerce order detail fix
    • Conflict with polylang and wpml
    • Duplicate activity date in dashbaord
    • Type error in editor datepicke
    • Direction problem in legacy editor
    • Wrong callback in get_the_time hook
    • Default timezone problem
  • Displaying "@" instead of "at" in Jalali version
  • Persian number in WooCommerce prices
  • Better support of Persian date in WooCommerce
  • Persian datepicker in WooCommerce
  • ACF Parsi date
  • Mini support of WMPL and Polylang
  • Update Calendar widgets
  • Update attachments filter dropdown
  • New looks and feels of settings panel
  • Add Vazir font to admin area
Download this release

Release Info

Developer man4toman
Plugin Icon Parsi Date
Version 4.0.0
Comparing to
See all releases

Code changes from version 3.0.3 to 4.0.0

Files changed (57) hide show
  1. assets/css/admin-fix.min.css +1 -0
  2. assets/css/editor-rtl.css +15 -9
  3. assets/css/editor.min-rtl.css +1 -0
  4. assets/css/editor.min.css +1 -0
  5. assets/css/jalalidatepicker.css +243 -0
  6. assets/css/jalalidatepicker.min.css +1 -0
  7. assets/css/settings.css +214 -0
  8. assets/css/settings.min.css +1 -0
  9. assets/css/timepicki.css +91 -0
  10. assets/css/timepicki.min.css +1 -0
  11. assets/css/vazir-font.css +71 -0
  12. assets/css/vazir-font.min.css +1 -0
  13. assets/fonts/Vazir-Bold.woff2 +0 -0
  14. assets/fonts/Vazir-Regular.woff2 +0 -0
  15. assets/images/arrow-down.png +0 -0
  16. assets/images/arrow-up.png +0 -0
  17. assets/js/admin.js +153 -153
  18. assets/js/admin.min.js +8 -0
  19. assets/js/gutenberg-jalali-calendar.build.js +1 -1
  20. assets/js/jalalidatepicker.min.js +1 -0
  21. assets/js/timepicki.js +545 -0
  22. assets/js/timepicki.min.js +12 -0
  23. includes/admin/datepicker-rtl.php +9 -11
  24. includes/admin/gutenberg-jalali-calendar.php +30 -35
  25. includes/admin/lists-fix.php +62 -57
  26. includes/admin/styles-fix.php +13 -10
  27. includes/admin/widgets.php +20 -18
  28. includes/fixes-archive.php +24 -20
  29. includes/fixes-archives.php +191 -123
  30. includes/fixes-calendar.php +292 -234
  31. includes/fixes-dates.php +134 -113
  32. includes/fixes-misc.php +42 -57
  33. includes/fixes-permalinks.php +349 -312
  34. includes/general.php +153 -111
  35. includes/install.php +8 -6
  36. includes/parsidate.php +408 -404
  37. includes/plugins/acf-fields/class-wpp-acf-datepicker-v4.php +147 -0
  38. includes/plugins/acf-fields/class-wpp-acf-datepicker-v5.php +180 -0
  39. includes/plugins/acf-fields/class-wpp-acf-timepicker-v4.php +147 -0
  40. includes/plugins/acf-fields/class-wpp-acf-timepicker-v5.php +197 -0
  41. includes/plugins/acf.php +87 -0
  42. includes/plugins/disable.php +177 -146
  43. includes/plugins/edd.php +65 -73
  44. includes/plugins/fixes-woo.php +23 -27
  45. includes/plugins/woocommerce.php +314 -64
  46. includes/settings.php +425 -347
  47. includes/widget/widget_archive.php +133 -63
  48. includes/widget/widget_calendar.php +102 -27
  49. languages/fa_IR.mo +0 -0
  50. languages/fa_IR.po +75 -85
  51. readme.txt +45 -10
  52. screenshot-1.png +0 -0
  53. screenshot-2.png +0 -0
  54. screenshot-3.png +0 -0
  55. screenshot-4.png +0 -0
  56. screenshot-5.png +0 -0
  57. wp-parsidate.php +204 -169
assets/css/admin-fix.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .wrap #template textarea{direction:ltr;text-align:left}
assets/css/editor-rtl.css CHANGED
@@ -1,15 +1,21 @@
1
- body, #tinymce {
2
- font-family: tahoma, sans-serif;
3
- font-size: 13px;
4
- direction: rtl;
 
5
  }
6
 
7
  p {
8
- margin-top: 13px;
9
- margin-bottom: 13px;
10
  }
11
 
12
- h1, h2, h3, h4, h5, h6 {
13
- margin-top: 15px;
14
- margin-bottom: 15px;
 
 
 
 
 
15
  }
1
+ body,
2
+ #tinymce {
3
+ font-family: Vazir, tahoma, arial;
4
+ font-size: 13px;
5
+ direction: rtl
6
  }
7
 
8
  p {
9
+ margin-top: 13px;
10
+ margin-bottom: 13px
11
  }
12
 
13
+ h1,
14
+ h2,
15
+ h3,
16
+ h4,
17
+ h5,
18
+ h6 {
19
+ margin-top: 15px;
20
+ margin-bottom: 15px
21
  }
assets/css/editor.min-rtl.css ADDED
@@ -0,0 +1 @@
 
1
+ body,#tinymce{font-family:Vazir,tahoma,arial;font-size:13px;direction:rtl}p{margin-top:13px;margin-bottom:13px}h1,h2,h3,h4,h5,h6{margin-top:15px;margin-bottom:15px}
assets/css/editor.min.css ADDED
@@ -0,0 +1 @@
 
1
+ body{font-family:Vazir,tahoma,sans-serif;font-size:12px}#tinymce{font-family:Vazir,tahoma,sans-seriffont-size: 12px}
assets/css/jalalidatepicker.css ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!********************************************************************************************************************************************!*\
2
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/sass-loader/dist/cjs.js!./src/styles/index.scss ***!
3
+ \********************************************************************************************************************************************/
4
+ jdp-container {
5
+ position: absolute;
6
+ max-width: 307.875px;
7
+ background: #fff;
8
+ display: block;
9
+ direction: rtl;
10
+ padding: 0.5rem 0;
11
+ box-shadow: 0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.24);
12
+ border-radius: 4px;
13
+ overflow: hidden;
14
+ -ms-touch-action: manipulation;
15
+ touch-action: manipulation;
16
+ -moz-user-select: none;
17
+ -webkit-user-select: none;
18
+ -ms-user-select: none;
19
+ user-select: none;
20
+ -moz-animation: jdpOpenAnimation 300ms cubic-bezier(0.23, 1, 0.32, 1);
21
+ -webkit-animation: jdpOpenAnimation 300ms cubic-bezier(0.23, 1, 0.32, 1);
22
+ animation: jdpOpenAnimation 300ms cubic-bezier(0.23, 1, 0.32, 1);
23
+ }
24
+
25
+ jdp-container, jdp-container *, jdp-container *::after, jdp-container *::before {
26
+ -moz-box-sizing: border-box;
27
+ -webkit-box-sizing: border-box;
28
+ box-sizing: border-box;
29
+ }
30
+
31
+ jdp-container .jdp-icon-plus, jdp-container .jdp-icon-minus {
32
+ display: inline-block;
33
+ text-align: center;
34
+ cursor: pointer;
35
+ vertical-align: middle;
36
+ overflow: hidden;
37
+ flex: none;
38
+ text-decoration: none;
39
+ border: 1px solid #e6e6e6;
40
+ border-radius: 4px;
41
+ }
42
+
43
+ jdp-container .jdp-icon-plus svg, jdp-container .jdp-icon-minus svg {
44
+ width: 1.5rem;
45
+ height: 1.5rem;
46
+ padding: 0.375rem;
47
+ }
48
+
49
+ jdp-container .jdp-icon-plus.not-in-range, jdp-container .jdp-icon-minus.not-in-range {
50
+ cursor: not-allowed;
51
+ }
52
+
53
+ jdp-container .jdp-icon-plus.not-in-range svg, jdp-container .jdp-icon-minus.not-in-range svg {
54
+ opacity: 0.3;
55
+ }
56
+
57
+ jdp-container .jdp-years, jdp-container .jdp-months {
58
+ display: -webkit-inline-box;
59
+ display: -webkit-flex;
60
+ display: -ms-inline-flexbox;
61
+ display: inline-flex;
62
+ margin: 0 2.5%;
63
+ font-size: 120%;
64
+ color: rgba(0, 0, 0, 0.8);
65
+ fill: rgba(0, 0, 0, 0.8);
66
+ }
67
+
68
+ jdp-container .jdp-months {
69
+ width: 55%;
70
+ }
71
+
72
+ jdp-container .jdp-years {
73
+ width: 35%;
74
+ }
75
+
76
+ jdp-container .jdp-year, jdp-container .jdp-year input, jdp-container .jdp-year select, jdp-container .jdp-month, jdp-container .jdp-month input, jdp-container .jdp-month select {
77
+ width: 100%;
78
+ height: auto;
79
+ text-align: center;
80
+ background: transparent;
81
+ border: none;
82
+ border-radius: 0;
83
+ padding: 0;
84
+ margin: 0;
85
+ display: inline-block;
86
+ font-size: inherit;
87
+ font-family: inherit;
88
+ vertical-align: initial;
89
+ font-weight: 300;
90
+ color: inherit;
91
+ line-height: inherit;
92
+ outline: none;
93
+ }
94
+
95
+ jdp-container .jdp-year:focus, jdp-container .jdp-year:active, jdp-container .jdp-year input:focus, jdp-container .jdp-year input:active, jdp-container .jdp-year select:focus, jdp-container .jdp-year select:active, jdp-container .jdp-month:focus, jdp-container .jdp-month:active, jdp-container .jdp-month input:focus, jdp-container .jdp-month input:active, jdp-container .jdp-month select:focus, jdp-container .jdp-month select:active {
96
+ outline: none;
97
+ }
98
+
99
+ jdp-container .jdp-year:hover, jdp-container .jdp-year input:hover, jdp-container .jdp-year select:hover, jdp-container .jdp-month:hover, jdp-container .jdp-month input:hover, jdp-container .jdp-month select:hover {
100
+ background: rgba(0, 0, 0, 0.05);
101
+ }
102
+
103
+ jdp-container .jdp-year input, jdp-container .jdp-month input {
104
+ cursor: text;
105
+ -webkit-appearance: none;
106
+ -moz-appearance: textfield;
107
+ }
108
+
109
+ jdp-container .jdp-year input::-webkit-outer-spin-button, jdp-container .jdp-year input::-webkit-inner-spin-button, jdp-container .jdp-month input::-webkit-outer-spin-button, jdp-container .jdp-month input::-webkit-inner-spin-button {
110
+ -webkit-appearance: none;
111
+ }
112
+
113
+ jdp-container .jdp-year select, jdp-container .jdp-month select {
114
+ cursor: pointer;
115
+ position: relative;
116
+ -webkit-appearance: menulist;
117
+ -moz-appearance: menulist;
118
+ }
119
+
120
+ jdp-container .jdp-days {
121
+ padding: 0.5rem 0 0 0;
122
+ outline: 0;
123
+ text-align: left;
124
+ width: 100%;
125
+ display: inline-block;
126
+ display: -ms-flexbox;
127
+ display: flex;
128
+ flex-wrap: wrap;
129
+ -ms-flex-wrap: wrap;
130
+ -ms-flex-pack: justify;
131
+ justify-content: space-around;
132
+ }
133
+
134
+ jdp-container .jdp-day, jdp-container .jdp-day-name {
135
+ background: none;
136
+ border: 1px solid transparent;
137
+ font-weight: 400;
138
+ width: 14.2857143%;
139
+ flex-basis: 14.2857143%;
140
+ height: 31px;
141
+ line-height: 31px;
142
+ margin: 2px 0;
143
+ display: inline-block;
144
+ position: relative;
145
+ justify-content: center;
146
+ text-align: center;
147
+ color: rgba(0, 0, 0, 0.8);
148
+ }
149
+
150
+ jdp-container .jdp-day.today, jdp-container .jdp-day-name.today {
151
+ border-color: rgba(0, 0, 0, 0.3);
152
+ }
153
+
154
+ jdp-container .jdp-day.selected, jdp-container .jdp-day-name.selected {
155
+ background-color: #569ff7 !important;
156
+ color: #fff !important;
157
+ }
158
+
159
+ jdp-container .jdp-day.last-week, jdp-container .jdp-day-name.last-week {
160
+ color: #f44336;
161
+ }
162
+
163
+ jdp-container .jdp-day:empty {
164
+ background: rgba(0, 0, 0, 0.05);
165
+ border-color: #fff;
166
+ }
167
+
168
+ jdp-container .jdp-day:not(:empty) {
169
+ cursor: pointer;
170
+ border-radius: 4px;
171
+ transition: linear 0.1s;
172
+ }
173
+
174
+ jdp-container .jdp-day:not(:empty):hover {
175
+ background: rgba(0, 0, 0, 0.1);
176
+ transform: scale(1.15);
177
+ z-index: 1;
178
+ }
179
+
180
+ jdp-container .jdp-day-name {
181
+ border-radius: 0;
182
+ font-weight: 900;
183
+ font-size: 90%;
184
+ background-color: rgba(0, 0, 0, 0.1);
185
+ cursor: default;
186
+ }
187
+
188
+ jdp-container .jdp-footer {
189
+ padding: 0.5rem 0.5rem 0 0.5rem;
190
+ outline: 0;
191
+ width: 100%;
192
+ display: inline-block;
193
+ display: -ms-flexbox;
194
+ display: flex;
195
+ flex-wrap: nowrap;
196
+ -ms-flex-wrap: nowrap;
197
+ -ms-flex-pack: justify;
198
+ justify-content: space-between;
199
+ }
200
+
201
+ jdp-container .jdp-btn-today, jdp-container .jdp-btn-empty {
202
+ background: #569ff7;
203
+ font-size: 90%;
204
+ padding: 0.3em 0.6em;
205
+ border-radius: 5px;
206
+ font-weight: 400;
207
+ display: inline-block;
208
+ text-align: center;
209
+ color: #fff;
210
+ cursor: pointer;
211
+ }
212
+
213
+ @-webkit-keyframes jdpOpenAnimation {
214
+ from {
215
+ opacity: 0;
216
+ transform: scale(0.8);
217
+ }
218
+ to {
219
+ opacity: 1;
220
+ transform: scale(1);
221
+ }
222
+ }
223
+
224
+ @keyframes jdpOpenAnimation {
225
+ from {
226
+ opacity: 0;
227
+ transform: scale(0.8);
228
+ }
229
+ to {
230
+ opacity: 1;
231
+ transform: scale(1);
232
+ }
233
+ }
234
+
235
+ @media only screen and (max-width: 307.875px) {
236
+ jdp-container {
237
+ max-width: 90%;
238
+ }
239
+ }
240
+
241
+ #ui-datepicker-div {
242
+ display: none !important
243
+ }
assets/css/jalalidatepicker.min.css ADDED
@@ -0,0 +1 @@
 
1
+ jdp-container{-moz-animation:jdpOpenAnimation .3s cubic-bezier(.23,1,.32,1);-webkit-animation:jdpOpenAnimation .3s cubic-bezier(.23,1,.32,1);animation:jdpOpenAnimation .3s cubic-bezier(.23,1,.32,1);background:#fff;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.12),0 1px 4px rgba(0,0,0,.24);direction:rtl;display:block;max-width:307.875px;overflow:hidden;padding:.5rem 0;position:absolute;-ms-touch-action:manipulation;touch-action:manipulation;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}jdp-container,jdp-container *,jdp-container :after,jdp-container :before{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}jdp-container .jdp-icon-minus,jdp-container .jdp-icon-plus{border:1px solid #e6e6e6;border-radius:4px;cursor:pointer;display:inline-block;flex:none;overflow:hidden;text-align:center;text-decoration:none;vertical-align:middle}jdp-container .jdp-icon-minus svg,jdp-container .jdp-icon-plus svg{height:1.5rem;padding:.375rem;width:1.5rem}jdp-container .jdp-icon-minus.not-in-range,jdp-container .jdp-icon-plus.not-in-range{cursor:not-allowed}jdp-container .jdp-icon-minus.not-in-range svg,jdp-container .jdp-icon-plus.not-in-range svg{opacity:.3}jdp-container .jdp-months,jdp-container .jdp-years{fill:rgba(0,0,0,.8);color:rgba(0,0,0,.8);display:-webkit-inline-box;display:-webkit-flex;display:-ms-inline-flexbox;display:inline-flex;font-size:120%;margin:0 2.5%}jdp-container .jdp-months{width:55%}jdp-container .jdp-years{width:35%}jdp-container .jdp-month,jdp-container .jdp-month input,jdp-container .jdp-month select,jdp-container .jdp-year,jdp-container .jdp-year input,jdp-container .jdp-year select{background:transparent;border:none;border-radius:0;color:inherit;display:inline-block;font-family:inherit;font-size:inherit;font-weight:300;height:auto;line-height:inherit;margin:0;outline:none;padding:0;text-align:center;vertical-align:initial;width:100%}jdp-container .jdp-month:active,jdp-container .jdp-month:focus,jdp-container .jdp-month input:active,jdp-container .jdp-month input:focus,jdp-container .jdp-month select:active,jdp-container .jdp-month select:focus,jdp-container .jdp-year:active,jdp-container .jdp-year:focus,jdp-container .jdp-year input:active,jdp-container .jdp-year input:focus,jdp-container .jdp-year select:active,jdp-container .jdp-year select:focus{outline:none}jdp-container .jdp-month:hover,jdp-container .jdp-month input:hover,jdp-container .jdp-month select:hover,jdp-container .jdp-year:hover,jdp-container .jdp-year input:hover,jdp-container .jdp-year select:hover{background:rgba(0,0,0,.05)}jdp-container .jdp-month input,jdp-container .jdp-year input{-webkit-appearance:none;-moz-appearance:textfield;cursor:text}jdp-container .jdp-month input::-webkit-inner-spin-button,jdp-container .jdp-month input::-webkit-outer-spin-button,jdp-container .jdp-year input::-webkit-inner-spin-button,jdp-container .jdp-year input::-webkit-outer-spin-button{-webkit-appearance:none}jdp-container .jdp-month select,jdp-container .jdp-year select{-webkit-appearance:menulist;-moz-appearance:menulist;cursor:pointer;position:relative}jdp-container .jdp-days{-ms-flex-pack:justify;display:inline-block;display:-ms-flexbox;display:flex;flex-wrap:wrap;-ms-flex-wrap:wrap;justify-content:space-around;outline:0;padding:.5rem 0 0;text-align:left;width:100%}jdp-container .jdp-day,jdp-container .jdp-day-name{background:none;border:1px solid transparent;color:rgba(0,0,0,.8);display:inline-block;flex-basis:14.2857143%;font-weight:400;height:31px;justify-content:center;line-height:31px;margin:2px 0;position:relative;text-align:center;width:14.2857143%}jdp-container .jdp-day-name.today,jdp-container .jdp-day.today{border-color:rgba(0,0,0,.3)}jdp-container .jdp-day-name.selected,jdp-container .jdp-day.selected{background-color:#569ff7!important;color:#fff!important}jdp-container .jdp-day-name.last-week,jdp-container .jdp-day.last-week{color:#f44336}jdp-container .jdp-day:empty{background:rgba(0,0,0,.05);border-color:#fff}jdp-container .jdp-day:not(:empty){border-radius:4px;cursor:pointer;transition:.1s linear}jdp-container .jdp-day:not(:empty):hover{background:rgba(0,0,0,.1);transform:scale(1.15);z-index:1}jdp-container .jdp-day-name{background-color:rgba(0,0,0,.1);border-radius:0;cursor:default;font-size:90%;font-weight:900}jdp-container .jdp-footer{-ms-flex-pack:justify;display:inline-block;display:-ms-flexbox;display:flex;flex-wrap:nowrap;-ms-flex-wrap:nowrap;justify-content:space-between;outline:0;padding:.5rem .5rem 0;width:100%}jdp-container .jdp-btn-empty,jdp-container .jdp-btn-today{background:#569ff7;border-radius:5px;color:#fff;cursor:pointer;display:inline-block;font-size:90%;font-weight:400;padding:.3em .6em;text-align:center}@-webkit-keyframes jdpOpenAnimation{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes jdpOpenAnimation{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media only screen and (max-width:307.875px){jdp-container{max-width:90%}}#ui-datepicker-div{display:none!important}
assets/css/settings.css ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ background: #fff
3
+ }
4
+
5
+ .notice,
6
+ div.error,
7
+ div.updated {
8
+ position: relative;
9
+ border-radius: 5px;
10
+ box-shadow: 0 0 5px 0 #5a5a5a57;
11
+ border-right-width: 42px
12
+ }
13
+
14
+ .notice:before,
15
+ div.error:before,
16
+ div.updated:before,
17
+ .nav-tab-wrapper > a.nav-tab-active:after,
18
+ .wpp-settings-wrap div.updated:after {
19
+ font-family: dashicons;
20
+ line-height: 1;
21
+ font-weight: 400;
22
+ font-style: normal;
23
+ text-transform: none;
24
+ text-rendering: auto;
25
+ font-size: 30px;
26
+ text-align: center;
27
+ position: absolute;
28
+ right: -37px;
29
+ color: #fff;
30
+ top: 4px
31
+ }
32
+
33
+ div.updated:before {
34
+ content: "\f12a"
35
+ }
36
+
37
+ div.update-nag:before {
38
+ content: "\f534"
39
+ }
40
+
41
+ .wpp-settings-wrap {
42
+ background: #fff;
43
+ border-radius: 8px;
44
+ box-shadow: 0 0 5px 0 #808080b3;
45
+ border: 1px solid #adaaaa;
46
+ overflow: hidden;
47
+ display: flex;
48
+ flex-flow: row wrap
49
+ }
50
+
51
+ .wpp-settings-wrap .notice,
52
+ .wpp-settings-wrap div.error,
53
+ .wpp-settings-wrap div.updated {
54
+ position: fixed;
55
+ z-index: 2;
56
+ left: 20px;
57
+ transform: translateY(-150%);
58
+ border-radius: 5px;
59
+ box-shadow: 0 0 5px 0 #8080808a
60
+ }
61
+
62
+ .wpp-settings-wrap div.updated:after {
63
+ content: '\f153';
64
+ left: 0;
65
+ right: auto;
66
+ color: #d63638;
67
+ top: -19px;
68
+ background: #fff;
69
+ border-radius: 50%;
70
+ cursor: pointer;
71
+ border: 1px solid
72
+ }
73
+
74
+ .wpp-settings-wrap h2:first-child {
75
+ flex: 1 100%;
76
+ padding: 10px 20px;
77
+ background: #1d23270d;
78
+ color: #181818;
79
+ text-align: center;
80
+ border-bottom: 1px solid #adaaaa;
81
+ box-shadow: inset 0px -5px 5px 0 #8080802b
82
+ }
83
+
84
+ .nav-tab-wrapper {
85
+ flex: 1 120px;
86
+ border-width: 0 0 0 1px;
87
+ border-style: solid;
88
+ border-color: #c3c4c7;
89
+ background: #1d23270d;
90
+ padding: 0 !important;
91
+ overflow: hidden
92
+ }
93
+
94
+ .nav-tab-wrapper > a {
95
+ display: block;
96
+ width: 100%;
97
+ margin: 0;
98
+ padding: 15px;
99
+ transition: all ease-in-out .3s;
100
+ border: 0;
101
+ border-bottom: 1px solid #8080804a;
102
+ position: relative
103
+ }
104
+
105
+ .nav-tab-wrapper > a.nav-tab-active:after {
106
+ content: '\f341';
107
+ position: absolute;
108
+ left: 40px;
109
+ right: auto;
110
+ top: 12px;
111
+ color: #797979
112
+ }
113
+
114
+ #tab_container {
115
+ flex: 5;
116
+ padding: 0 15px
117
+ }
118
+
119
+
120
+ input[type=checkbox] {
121
+ opacity: 0;
122
+ position: absolute
123
+ }
124
+
125
+ label.wpp-checkbox-label {
126
+ position: relative;
127
+ display: block;
128
+ background: #f8f8f8;
129
+ border: 1px solid #f0f0f0;
130
+ border-radius: 2em;
131
+ padding: 0.5em 1em 0.5em 5em;
132
+ box-shadow: 0 1px 2px rgba(100, 100, 100, 0.5) inset, 0 0 10px rgba(100, 100, 100, 0.1) inset;
133
+ cursor: pointer;
134
+ text-shadow: 0 2px 2px #fff
135
+ }
136
+
137
+ label.wpp-checkbox-label.empty-label {
138
+ display: inline-block;
139
+ background: #fff0;
140
+ border: none;
141
+ padding: 0.5em 0 0.5em 5em;
142
+ box-shadow: none
143
+ }
144
+
145
+ label.wpp-checkbox-label:before {
146
+ content: "";
147
+ position: absolute;
148
+ top: 50%;
149
+ left: 0.7em;
150
+ width: 3em;
151
+ height: 1.2em;
152
+ border-radius: 0.6em;
153
+ background: #eee;
154
+ transform: translateY(-50%);
155
+ box-shadow: 0 1px 3px rgba(100, 100, 100, 0.5) inset, 0 0 10px rgba(100, 100, 100, 0.2) inset
156
+ }
157
+
158
+ label.wpp-checkbox-label:after {
159
+ content: "";
160
+ position: absolute;
161
+ top: 50%;
162
+ left: 0.5em;
163
+ width: 1.4em;
164
+ height: 1.4em;
165
+ border: 0.25em solid #fafafa;
166
+ border-radius: 50%;
167
+ box-sizing: border-box;
168
+ background-color: #ddd;
169
+ background-image: linear-gradient(to top, #fff 0%, #fff 40%, transparent 100%);
170
+ transform: translateY(-50%);
171
+ box-shadow: 0 3px 3px rgba(0, 0, 0, 0.5)
172
+ }
173
+
174
+ label.wpp-checkbox-label,
175
+ label.wpp-checkbox-label:before,
176
+ label.wpp-checkbox-label:after {
177
+ transition: all 0.2s cubic-bezier(0.165, 0.84, 0.44, 1)
178
+ }
179
+
180
+ label.wpp-checkbox-label:hover,
181
+ input.wpp-checkbox-label:focus + label {
182
+ color: black
183
+ }
184
+
185
+ label.wpp-checkbox-label:hover::after,
186
+ input.wpp-checkbox-label:focus + label::after {
187
+ background-color: #ccc;
188
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5)
189
+ }
190
+
191
+ input[type=checkbox]:checked {
192
+ counter-increment: total
193
+ }
194
+
195
+ input[type=checkbox]:checked + label.wpp-checkbox-label:before {
196
+ background: #2271B1
197
+ }
198
+
199
+ input[type=checkbox]:checked + label.wpp-checkbox-label:after {
200
+ transform: translateX(2em) translateY(-50%)
201
+ }
202
+
203
+ p.submit {
204
+ text-align: left;
205
+ padding: 15px !important;
206
+ margin: 0 -15px 0;
207
+ max-width: none;
208
+ background: #f3f3f4;
209
+ box-shadow: inset 0px 3px 5px 0 #80808040
210
+ }
211
+
212
+ #submit {
213
+ padding: 10px 15px
214
+ }
assets/css/settings.min.css ADDED
@@ -0,0 +1 @@
 
1
+ body{background:#fff}.notice,div.error,div.updated{position:relative;border-radius:5px;box-shadow:0 0 5px 0 #5a5a5a57;border-right-width:42px}.notice:before,div.error:before,div.updated:before,.nav-tab-wrapper>a.nav-tab-active:after,.wpp-settings-wrap div.updated:after{font-family:dashicons;line-height:1;font-weight:400;font-style:normal;text-transform:none;text-rendering:auto;font-size:30px;text-align:center;position:absolute;right:-37px;color:#fff;top:4px}div.updated:before{content:"\f12a"}div.update-nag:before{content:"\f534"}.wpp-settings-wrap{background:#fff;border-radius:8px;box-shadow:0 0 5px 0 #808080b3;border:1px solid #adaaaa;overflow:hidden;display:flex;flex-flow:row wrap}.wpp-settings-wrap .notice,.wpp-settings-wrap div.error,.wpp-settings-wrap div.updated{position:fixed;z-index:2;left:20px;transform:translateY(-150%);border-radius:5px;box-shadow:0 0 5px 0 #8080808a}.wpp-settings-wrap div.updated:after{content:'\f153';left:0;right:auto;color:#d63638;top:-19px;background:#fff;border-radius:50%;cursor:pointer;border:1px solid}.wpp-settings-wrap h2:first-child{flex:1 100%;padding:10px 20px;background:#1d23270d;color:#181818;text-align:center;border-bottom:1px solid #adaaaa;box-shadow:inset 0 -5px 5px 0 #8080802b}.nav-tab-wrapper{flex:1 120px;border-width:0 0 0 1px;border-style:solid;border-color:#c3c4c7;background:#1d23270d;padding:0!important;overflow:hidden}.nav-tab-wrapper>a{display:block;width:100%;margin:0;padding:15px;transition:all ease-in-out .3s;border:0;border-bottom:1px solid #8080804a;position:relative}.nav-tab-wrapper>a.nav-tab-active:after{content:'\f341';position:absolute;left:40px;right:auto;top:12px;color:#797979}#tab_container{flex:5;padding:0 15px}input[type=checkbox]{opacity:0;position:absolute}label.wpp-checkbox-label{position:relative;display:block;background:#f8f8f8;border:1px solid #f0f0f0;border-radius:2em;padding:.5em 1em .5em 5em;box-shadow:0 1px 2px rgba(100,100,100,0.5) inset,0 0 10px rgba(100,100,100,0.1) inset;cursor:pointer;text-shadow:0 2px 2px #fff}label.wpp-checkbox-label.empty-label{display:inline-block;background:#fff0;border:0;padding:.5em 0 .5em 5em;box-shadow:none}label.wpp-checkbox-label:before{content:"";position:absolute;top:50%;left:.7em;width:3em;height:1.2em;border-radius:.6em;background:#eee;transform:translateY(-50%);box-shadow:0 1px 3px rgba(100,100,100,0.5) inset,0 0 10px rgba(100,100,100,0.2) inset}label.wpp-checkbox-label:after{content:"";position:absolute;top:50%;left:.5em;width:1.4em;height:1.4em;border:.25em solid #fafafa;border-radius:50%;box-sizing:border-box;background-color:#ddd;background-image:linear-gradient(to top,#fff 0,#fff 40%,transparent 100%);transform:translateY(-50%);box-shadow:0 3px 3px rgba(0,0,0,0.5)}label.wpp-checkbox-label,label.wpp-checkbox-label:before,label.wpp-checkbox-label:after{transition:all .2s cubic-bezier(0.165,0.84,0.44,1)}label.wpp-checkbox-label:hover,input.wpp-checkbox-label:focus+label{color:black}label.wpp-checkbox-label:hover::after,input.wpp-checkbox-label:focus+label::after{background-color:#ccc;box-shadow:0 1px 2px rgba(0,0,0,0.5)}input[type=checkbox]:checked{counter-increment:total}input[type=checkbox]:checked+label.wpp-checkbox-label:before{background:#2271b1}input[type=checkbox]:checked+label.wpp-checkbox-label:after{transform:translateX(2em) translateY(-50%)}p.submit{text-align:left;padding:15px!important;margin:0 -15px 0;max-width:none;background:#f3f3f4;box-shadow:inset 0 3px 5px 0 #80808040}#submit{padding:10px 15px}
assets/css/timepicki.css ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /*
3
+ Created on: 17 Sep, 2014, 4:29:37 PM
4
+ Author: senthil
5
+ */
6
+
7
+ .ti_tx,
8
+ .mi_tx,
9
+ .mer_tx {
10
+ width: 100%;
11
+ text-align: center;
12
+ margin: 10px 0;
13
+ }
14
+
15
+ .time,
16
+ .mins,
17
+ .meridian {
18
+ width: 60px;
19
+ float: left;
20
+ margin: 0 10px;
21
+ font-size: 20px;
22
+ color: #2d2e2e;
23
+ font-family: arial;
24
+ font-weight: 700;
25
+ }
26
+
27
+ .prev,
28
+ .next {
29
+ cursor: pointer;
30
+ padding: 18px;
31
+ width: 28%;
32
+ border: 1px solid #ccc;
33
+ margin: auto;
34
+ background: url(../images/arrow-down.png) no-repeat;
35
+ border-radius: 5px;
36
+ }
37
+
38
+ .prev:hover,
39
+ .next:hover {
40
+ background-color: #ccc;
41
+ }
42
+
43
+ .next {
44
+ background-position: 50% 150%;
45
+ }
46
+
47
+ .prev {
48
+ background-position: 50% -50%;
49
+ }
50
+
51
+ .time_pick {
52
+ position: relative;
53
+ }
54
+
55
+ .timepicker_wrap {
56
+ padding: 10px;
57
+ border-radius: 5px;
58
+ z-index: 998;
59
+ display: none;
60
+ box-shadow: 2px 2px 5px 0 rgba(50,50,50,0.35);
61
+ background: #f6f6f6;
62
+ border: 1px solid #ccc;
63
+ float: left;
64
+ position: absolute;
65
+ top: 27px;
66
+ left: 0;
67
+ }
68
+
69
+ .arrow_top {
70
+ position: absolute;
71
+ top: -10px;
72
+ left: 20px;
73
+ background: url(../images/arrow-up.png) no-repeat;
74
+ width: 18px;
75
+ height: 10px;
76
+ z-index: 999;
77
+ }
78
+ input.timepicki-input {
79
+ background: none repeat scroll 0 0 #FFFFFF;
80
+ border: 1px solid #CCCCCC;
81
+ border-radius: 5px 5px 5px 5px;
82
+ float: none;
83
+ margin: 0;
84
+ text-align: center;
85
+ width: 70%;
86
+ }
87
+ a.reset_time {
88
+ float: left;
89
+ margin-top: 5px;
90
+ color: #000;
91
+ }
assets/css/timepicki.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .ti_tx,.mi_tx,.mer_tx{width:100%;text-align:center;margin:10px 0}.time,.mins,.meridian{width:60px;float:left;margin:0 10px;font-size:20px;color:#2d2e2e;font-family:arial;font-weight:700}.prev,.next{cursor:pointer;padding:18px;width:28%;border:1px solid #ccc;margin:auto;background:url(../images/arrow-down.png) no-repeat;border-radius:5px}.prev:hover,.next:hover{background-color:#ccc}.next{background-position:50% 150%}.prev{background-position:50% -50%}.time_pick{position:relative}.timepicker_wrap{padding:10px;border-radius:5px;z-index:998;display:none;box-shadow:2px 2px 5px 0 rgba(50,50,50,0.35);background:#f6f6f6;border:1px solid #ccc;float:left;position:absolute;top:27px;left:0}.arrow_top{position:absolute;top:-10px;left:20px;background:url(../images/arrow-up.png) no-repeat;width:18px;height:10px;z-index:999}input.timepicki-input{background:none repeat scroll 0 0 #fff;border:1px solid #ccc;border-radius:5px 5px 5px 5px;float:none;margin:0;text-align:center;width:70%}a.reset_time{float:left;margin-top:5px;color:#000}
assets/css/vazir-font.css ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @font-face {
2
+ font-family: Vazir;
3
+ src: url("../fonts/Vazir-Regular.woff2") format("woff2");
4
+ font-weight: normal;
5
+ font-style: normal;
6
+ font-display: swap
7
+ }
8
+
9
+ @font-face {
10
+ font-family: 'Vazir';
11
+ src: url('../fonts/Vazir-Bold.woff2') format("woff2");
12
+ font-weight: bold;
13
+ font-style: normal;
14
+ font-display: swap
15
+ }
16
+
17
+ body {
18
+ font-family: Vazir, tahoma, arial !important
19
+ }
20
+
21
+ body#tinymce.wp-editor,
22
+ .rtl .editor-styles-wrapper,
23
+ .rtl .edit-post-visual-editor *,
24
+ .rtl .components-notice__content,
25
+ #wpseo_meta *,
26
+ .edit-post-sidebar *,
27
+ #wpbody, .woocommerce-layout *,
28
+ #tinymce,
29
+ .rtl h1,
30
+ .rtl h2,
31
+ .rtl h3,
32
+ .rtl h4,
33
+ .rtl h5,
34
+ .rtl h6,
35
+ .rtl .media-frame,
36
+ .rtl .media-frame .search,
37
+ .rtl .media-frame input[type="email"],
38
+ .rtl .media-frame input[type="number"],
39
+ .rtl .media-frame input[type="password"],
40
+ .rtl .media-frame input[type="search"],
41
+ .rtl .media-frame input[type="tel"],
42
+ .rtl .media-frame input[type="text"],
43
+ .rtl .media-frame input[type="url"],
44
+ .rtl .media-frame select,
45
+ .rtl .media-frame textarea,
46
+ .rtl .media-modal{
47
+ font-family: Vazir, tahoma, arial
48
+ }
49
+
50
+ .edit-post-visual-editor .components-button {
51
+ font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif !important;
52
+ font-size: 13px;
53
+ }
54
+
55
+ .dashicons,
56
+ .dashicons-before:before,
57
+ .wpseo-metabox-menu ul li span.dashicons:before{
58
+ font-family: dashicons !important;
59
+ }
60
+
61
+ .wooocommerce-task-card__header p,
62
+ .woocommerce-summary__item-label p,
63
+ .components-card__header p,
64
+ .rtl .quicktags-toolbar input,
65
+ .rtl .wp-switch-editor{
66
+ font-family: Vazir, tahoma, arial !important
67
+ }
68
+
69
+ #tinymce {
70
+ font-size: 12px;
71
+ }
assets/css/vazir-font.min.css ADDED
@@ -0,0 +1 @@
 
1
+ @font-face{font-family:Vazir;src:url("../fonts/Vazir-Regular.woff2") format("woff2");font-weight:normal;font-style:normal;font-display:swap}@font-face{font-family:'Vazir';src:url('../fonts/Vazir-Bold.woff2') format("woff2");font-weight:bold;font-style:normal;font-display:swap}body{font-family:Vazir,tahoma,arial!important}body#tinymce.wp-editor,.rtl .editor-styles-wrapper,.rtl .edit-post-visual-editor *,.rtl .components-notice__content,#wpseo_meta *,.edit-post-sidebar *,#wpbody,.woocommerce-layout *,.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6,.rtl .media-frame,.rtl .media-frame .search,.rtl .media-frame input[type="email"],.rtl .media-frame input[type="number"],.rtl .media-frame input[type="password"],.rtl .media-frame input[type="search"],.rtl .media-frame input[type="tel"],.rtl .media-frame input[type="text"],.rtl .media-frame input[type="url"],.rtl .media-frame select,.rtl .media-frame textarea,.rtl .media-modal{font-family:Vazir,tahoma,arial}.edit-post-visual-editor .components-button{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif!important;font-size:13px}.dashicons,.dashicons-before:before,.wpseo-metabox-menu ul li span.dashicons:before{font-family:dashicons!important}.wooocommerce-task-card__header p,.woocommerce-summary__item-label p,.components-card__header p,.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Vazir,tahoma,arial!important}
assets/fonts/Vazir-Bold.woff2 ADDED
Binary file
assets/fonts/Vazir-Regular.woff2 ADDED
Binary file
assets/images/arrow-down.png ADDED
Binary file
assets/images/arrow-up.png ADDED
Binary file
assets/js/admin.js CHANGED
@@ -1,161 +1,161 @@
1
  jQuery(document).ready(function () {
2
- var persian_month_names = ['', 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'];
3
-
4
- jQuery('.wp-editor-wrap.html-active #content').css("direction", "ltr");
5
-
6
- function IsLeapYear(year) {
7
- if (((year % 4) === 0 && (year % 100) !== 0) || (year % 400) === 0 && (year % 100) === 0)
8
- return true;
9
- else
10
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  }
12
-
13
- function persian_to_gregorian(jy, jm, jd) {
14
- var j_days_sum_month = [0, 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 365];
15
- var g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
16
- var g_days_leap_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
17
- var gd = j_days_sum_month[parseInt(jm)] + parseInt(jd), gm, gy = parseInt(jy) + 621;
18
- if (gd > 286) gy++;
19
- if (IsLeapYear(gy - 1) && 286 < gd) gd--;
20
- if (gd > 286) gd -= 286; else gd += 79;
21
- if (IsLeapYear(gy)) {
22
- for (gm = 0; gd > g_days_leap_month[gm]; gm++) {
23
- gd -= g_days_leap_month[gm];
24
- }
25
- } else {
26
- for (gm = 0; gd > g_days_in_month[gm]; gm++)gd -= g_days_in_month[gm];
27
- }
28
- gm++;
29
- if (gm < 10) gm = '0' + gm;
30
- return [gy, gm, gd];
 
 
31
  }
32
-
33
- function gregorian_to_persian(gy, gm, gd) {
34
- var j_days_in_month = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29];
35
- var g_days_sum_month = [0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
36
- var day_of_year = g_days_sum_month[parseInt(gm)] + parseInt(gd);
37
- var leab = IsLeapYear(gy);
38
- var leap = IsLeapYear(gy - 1);
39
- var jd, jm, jy, i;
40
- if (day_of_year > 79) {
41
- jd = (leab ? day_of_year - 78 : day_of_year - 79);
42
- jy = gy - 621;
43
- for (i = 0; jd > j_days_in_month[i]; i++)jd -= j_days_in_month[i];
44
- } else {
45
- jd = ((leap || (leab && gm > 2)) ? 287 + day_of_year : 286 + day_of_year);
46
- jy = gy - 622;
47
- if (leap === false && jd === 366)return [jy, 12, 30];
48
- for (i = 0; jd > j_days_in_month[i]; i++)jd -= j_days_in_month[i];
49
- }
50
- jm = ++i;
51
- jm = (jm < 10 ? jm = '0' + jm : jm);
52
- return [jy, jm, jd];
53
  }
54
-
55
- /*
56
- * Edit inline
57
- */
58
- function create_stampdiv(year, mon, day, hour, minu) {
59
- var div = '<div class="timestamp-wrap persian">' +
60
- '<select id="mma" name="mma">';
61
- for (var i = 1; i < 13; i++) {
62
- if (i === parseInt(mon))
63
- div += '<option value="' + i + '" selected="selected">' + persian_month_names[i] + '</option>';
64
- else
65
- div += '<option value="' + i + '">' + persian_month_names[i] + '</option>';
66
- }
67
- div += '</select>' +
68
- '<input type="text" id="jja" name="jja" value="' + day + '" size="2" maxlength="2" autocomplete="off" />,' +
69
- '<input type="text" id="aaa" name="aaa" value="' + year + '" size="4" maxlength="4" autocomplete="off" /> در ' +
70
- '<input type="text" id="hha" name="hha" value="' + hour + '" size="2" maxlength="2" autocomplete="off" /> : ' +
71
- '<input type="text" id="mna" name="mna" value="' + minu + '" size="2" maxlength="2" autocomplete="off" />' +
72
- '</div>';
73
- return div;
 
 
 
 
 
 
 
 
 
74
  }
75
-
76
- jQuery('a.edit-timestamp').on('click', function () {
77
- jQuery('.persian').remove();
78
- var date = gregorian_to_persian(jQuery('#aa').val(), jQuery('#mm').val(), jQuery('#jj').val());
79
- var div = create_stampdiv(date[0], date[1], date[2], jQuery('#hh').val(), jQuery('#mn').val());
80
- jQuery('#timestampdiv').prepend(div);
81
- jQuery('#timestampdiv .timestamp-wrap:eq(1)').hide();
82
- });
83
-
84
- jQuery('#the-list').on('click', '.editinline', function () {
85
- var tr = jQuery(this).closest('td');
86
- var year = tr.find('.aa').html();
87
- if (year > 1400) {
88
- var month = tr.find('.mm').html();
89
- var day = tr.find('.jj').html();
90
- var hour = tr.find('.hh').html();
91
- var minu = tr.find('.mn').html();
92
- var date = gregorian_to_persian(year, month, day);
93
- jQuery('.persian').remove();
94
- jQuery('.inline-edit-date').prepend(create_stampdiv(date[0], date[1], date[2], hour, minu));
95
- jQuery('.inline-edit-date div:eq(1)').hide();
96
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  });
98
-
99
-
100
- jQuery('#timestampdiv,.inline-edit-date').on('keyup', '#hha', function () {
101
- jQuery('input[name=hh]').val(jQuery(this).val());
102
-
103
- }).on('keyup', '#mna', function () {
104
- jQuery('input[name=mn]').val(jQuery(this).val());
105
-
106
- }).on('keyup', '#aaa , #jja', function () {
107
- var year = jQuery('#aaa').val();
108
- var mon = jQuery('#mma').val();
109
- var day = jQuery('#jja').val();
110
- date = persian_to_gregorian(year, mon, day);
111
- jQuery('input[name=aa]').val(date[0]);
112
- jQuery('select[name=mm]').val(date[1]);
113
- jQuery('input[name=jj]').val(date[2]);
114
-
115
- }).on('change', '#mma', function () {
116
- var year = jQuery('#aaa').val();
117
- var mon = jQuery('#mma').val();
118
- var day = jQuery('#jja').val();
119
- date = persian_to_gregorian(year, mon, day);
120
- jQuery('input[name=aa]').val(date[0]);
121
- jQuery('select[name=mm]').val(date[1]);
122
- jQuery('input[name=jj]').val(date[2]);
123
- });
124
-
125
-
126
- /*
127
- * Filter on post screen dates
128
- */
129
- jQuery('select[name=m]').hide()
130
- var timer;
131
-
132
- function change_date() {
133
- var old = jQuery('#timestamp b').text();
134
- var info = jQuery('#mma option:selected').text() + ' ' + jQuery('#jja').val() + ', ' + jQuery('#aaa').val() + ' در ' + jQuery('#hha').val() + ':' + jQuery('#mna').val();
135
- info = info.replace(/\d+/g, function (digit) {
136
- var ret = '';
137
- for (var i = 0, len = digit.length; i < len; i++) {
138
- ret += String.fromCharCode(digit.charCodeAt(i) + 1728);
139
- }
140
- return ret;
141
- });
142
- if (old != info) {
143
- jQuery('#timestamp b').html(info);
144
- clearInterval(timer);
145
- }
146
  }
147
-
148
- jQuery('#timestampdiv').on('keypress', function (e) {
149
- if (e.which == 13)
150
- timer = setInterval(function () {
151
- change_date();
152
- }, 50);
153
- });
154
-
155
- jQuery('.save-timestamp , .cancel-timestamp , #publish').on('click', function () {
156
- if (jQuery('#aaa').length)
157
- timer = setInterval(function () {
158
- change_date();
159
- }, 50);
160
- });
 
161
  });
1
  jQuery(document).ready(function () {
2
+ var persian_month_names = ['', 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'];
3
+
4
+ jQuery('.wp-editor-wrap.html-active #content').css("direction", "ltr");
5
+
6
+ function IsLeapYear(year) {
7
+ if (((year % 4) === 0 && (year % 100) !== 0) || (year % 400) === 0 && (year % 100) === 0)
8
+ return true;
9
+ else
10
+ return false;
11
+ }
12
+
13
+ function persian_to_gregorian(jy, jm, jd) {
14
+ var j_days_sum_month = [0, 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 365];
15
+ var g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
16
+ var g_days_leap_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
17
+ var gd = j_days_sum_month[parseInt(jm)] + parseInt(jd), gm, gy = parseInt(jy) + 621;
18
+ if (gd > 286) gy++;
19
+ if (IsLeapYear(gy - 1) && 286 < gd) gd--;
20
+ if (gd > 286) gd -= 286; else gd += 79;
21
+ if (IsLeapYear(gy)) {
22
+ for (gm = 0; gd > g_days_leap_month[gm]; gm++) {
23
+ gd -= g_days_leap_month[gm];
24
+ }
25
+ } else {
26
+ for (gm = 0; gd > g_days_in_month[gm]; gm++) gd -= g_days_in_month[gm];
27
  }
28
+ gm++;
29
+ if (gm < 10) gm = '0' + gm;
30
+ return [gy, gm, gd];
31
+ }
32
+
33
+ function gregorian_to_persian(gy, gm, gd) {
34
+ var j_days_in_month = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29];
35
+ var g_days_sum_month = [0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
36
+ var day_of_year = g_days_sum_month[parseInt(gm)] + parseInt(gd);
37
+ var leab = IsLeapYear(gy);
38
+ var leap = IsLeapYear(gy - 1);
39
+ var jd, jm, jy, i;
40
+ if (day_of_year > 79) {
41
+ jd = (leab ? day_of_year - 78 : day_of_year - 79);
42
+ jy = gy - 621;
43
+ for (i = 0; jd > j_days_in_month[i]; i++) jd -= j_days_in_month[i];
44
+ } else {
45
+ jd = ((leap || (leab && gm > 2)) ? 287 + day_of_year : 286 + day_of_year);
46
+ jy = gy - 622;
47
+ if (leap === false && jd === 366) return [jy, 12, 30];
48
+ for (i = 0; jd > j_days_in_month[i]; i++) jd -= j_days_in_month[i];
49
  }
50
+ jm = ++i;
51
+ jm = (jm < 10 ? jm = '0' + jm : jm);
52
+ return [jy, jm, jd];
53
+ }
54
+
55
+ /*
56
+ * Edit inline
57
+ */
58
+ function create_stampdiv(year, mon, day, hour, minu) {
59
+ var div = '<div class="timestamp-wrap persian">' +
60
+ '<select id="mma" name="mma">';
61
+ for (var i = 1; i < 13; i++) {
62
+ if (i === parseInt(mon))
63
+ div += '<option value="' + i + '" selected="selected">' + persian_month_names[i] + '</option>';
64
+ else
65
+ div += '<option value="' + i + '">' + persian_month_names[i] + '</option>';
 
 
 
 
 
66
  }
67
+ div += '</select>' +
68
+ '<input type="text" id="jja" name="jja" value="' + day + '" size="2" maxlength="2" autocomplete="off" />,' +
69
+ '<input type="text" id="aaa" name="aaa" value="' + year + '" size="4" maxlength="4" autocomplete="off" /> در ' +
70
+ '<input type="text" id="hha" name="hha" value="' + hour + '" size="2" maxlength="2" autocomplete="off" /> : ' +
71
+ '<input type="text" id="mna" name="mna" value="' + minu + '" size="2" maxlength="2" autocomplete="off" />' +
72
+ '</div>';
73
+ return div;
74
+ }
75
+
76
+ jQuery('a.edit-timestamp').on('click', function () {
77
+ jQuery('.persian').remove();
78
+ var date = gregorian_to_persian(jQuery('#aa').val(), jQuery('#mm').val(), jQuery('#jj').val());
79
+ var div = create_stampdiv(date[0], date[1], date[2], jQuery('#hh').val(), jQuery('#mn').val());
80
+ jQuery('#timestampdiv').prepend(div);
81
+ jQuery('#timestampdiv .timestamp-wrap:eq(1)').hide();
82
+ });
83
+
84
+ jQuery('#the-list').on('click', '.editinline', function () {
85
+ var tr = jQuery(this).closest('td');
86
+ var year = tr.find('.aa').html();
87
+ if (year > 1400) {
88
+ var month = tr.find('.mm').html();
89
+ var day = tr.find('.jj').html();
90
+ var hour = tr.find('.hh').html();
91
+ var minu = tr.find('.mn').html();
92
+ var date = gregorian_to_persian(year, month, day);
93
+ jQuery('.persian').remove();
94
+ jQuery('.inline-edit-date').prepend(create_stampdiv(date[0], date[1], date[2], hour, minu));
95
+ jQuery('.inline-edit-date div:eq(1)').hide();
96
  }
97
+ });
98
+
99
+
100
+ jQuery('#timestampdiv,.inline-edit-date').on('keyup', '#hha', function () {
101
+ jQuery('input[name=hh]').val(jQuery(this).val());
102
+
103
+ }).on('keyup', '#mna', function () {
104
+ jQuery('input[name=mn]').val(jQuery(this).val());
105
+
106
+ }).on('keyup', '#aaa , #jja', function () {
107
+ var year = jQuery('#aaa').val();
108
+ var mon = jQuery('#mma').val();
109
+ var day = jQuery('#jja').val();
110
+ date = persian_to_gregorian(year, mon, day);
111
+ jQuery('input[name=aa]').val(date[0]);
112
+ jQuery('select[name=mm]').val(date[1]);
113
+ jQuery('input[name=jj]').val(date[2]);
114
+
115
+ }).on('change', '#mma', function () {
116
+ var year = jQuery('#aaa').val();
117
+ var mon = jQuery('#mma').val();
118
+ var day = jQuery('#jja').val();
119
+ date = persian_to_gregorian(year, mon, day);
120
+ jQuery('input[name=aa]').val(date[0]);
121
+ jQuery('select[name=mm]').val(date[1]);
122
+ jQuery('input[name=jj]').val(date[2]);
123
+ });
124
+
125
+
126
+ /*
127
+ * Filter on post screen dates
128
+ */
129
+ jQuery('select[name=m]').hide()
130
+ var timer;
131
+
132
+ function change_date() {
133
+ var old = jQuery('#timestamp b').text();
134
+ var info = jQuery('#mma option:selected').text() + ' ' + jQuery('#jja').val() + ', ' + jQuery('#aaa').val() + ' در ' + jQuery('#hha').val() + ':' + jQuery('#mna').val();
135
+ info = info.replace(/\d+/g, function (digit) {
136
+ var ret = '';
137
+ for (var i = 0, len = digit.length; i < len; i++) {
138
+ ret += String.fromCharCode(digit.charCodeAt(i) + 1728);
139
+ }
140
+ return ret;
141
  });
142
+ if (old != info) {
143
+ jQuery('#timestamp b').html(info);
144
+ clearInterval(timer);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  }
146
+ }
147
+
148
+ jQuery('#timestampdiv').on('keypress', function (e) {
149
+ if (e.which == 13)
150
+ timer = setInterval(function () {
151
+ change_date();
152
+ }, 50);
153
+ });
154
+
155
+ jQuery('.save-timestamp , .cancel-timestamp , #publish').on('click', function () {
156
+ if (jQuery('#aaa').length)
157
+ timer = setInterval(function () {
158
+ change_date();
159
+ }, 50);
160
+ });
161
  });
assets/js/admin.min.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function(){function h(a){return 0===a%4&&0!==a%100||0===a%400&&0===a%100?!0:!1}function l(a,b,c){var d=[31,28,31,30,31,30,31,31,30,31,30,31],e=[31,29,31,30,31,30,31,31,30,31,30,31];b=[0,0,31,62,93,124,155,186,216,246,276,306,336,365][parseInt(b)]+parseInt(c);c=parseInt(a)+621;286<b&&c++;h(c-1)&&286<b&&b--;b=286<b?b-286:b+79;if(h(c))for(a=0;b>e[a];a++)b-=e[a];else for(a=0;b>d[a];a++)b-=d[a];a++;10>a&&(a="0"+a);return[c,a,b]}function m(a,b,c){var d=[31,31,31,31,31,31,30,30,30,
2
+ 30,30,29],e=[0,0,31,59,90,120,151,181,212,243,273,304,334,365][parseInt(b)]+parseInt(c),f=h(a);c=h(a-1);if(79<e)b=f?e-78:e-79,a-=621;else if(b=c||f&&2<b?287+e:286+e,a-=622,!1===c&&366===b)return[a,12,30];for(c=0;b>d[c];c++)b-=d[c];d=++c;d=10>d?d="0"+d:d;return[a,d,b]}function n(a,b,c,d,e){for(var f='<div class="timestamp-wrap persian"><select id="mma" name="mma">',g=1;13>g;g++)f=g===parseInt(b)?f+('<option value="'+g+'" selected="selected">'+p[g]+"</option>"):f+('<option value="'+g+'">'+p[g]+"</option>");
3
+ return f+('</select><input type="text" id="jja" name="jja" value="'+c+'" size="2" maxlength="2" autocomplete="off" />,<input type="text" id="aaa" name="aaa" value="'+a+'" size="4" maxlength="4" autocomplete="off" /> \u062f\u0631 <input type="text" id="hha" name="hha" value="'+d+'" size="2" maxlength="2" autocomplete="off" /> : <input type="text" id="mna" name="mna" value="'+e+'" size="2" maxlength="2" autocomplete="off" /></div>')}function q(){var a=jQuery("#timestamp b").text(),b=jQuery("#mma option:selected").text()+
4
+ " "+jQuery("#jja").val()+", "+jQuery("#aaa").val()+" \u062f\u0631 "+jQuery("#hha").val()+":"+jQuery("#mna").val();b=b.replace(/\d+/g,function(c){for(var d="",e=0,f=c.length;e<f;e++)d+=String.fromCharCode(c.charCodeAt(e)+1728);return d});a!=b&&(jQuery("#timestamp b").html(b),clearInterval(k))}var p=" \u0641\u0631\u0648\u0631\u062f\u06cc\u0646 \u0627\u0631\u062f\u06cc\u0628\u0647\u0634\u062a \u062e\u0631\u062f\u0627\u062f \u062a\u06cc\u0631 \u0645\u0631\u062f\u0627\u062f \u0634\u0647\u0631\u06cc\u0648\u0631 \u0645\u0647\u0631 \u0622\u0628\u0627\u0646 \u0622\u0630\u0631 \u062f\u06cc \u0628\u0647\u0645\u0646 \u0627\u0633\u0641\u0646\u062f".split(" ");
5
+ jQuery(".wp-editor-wrap.html-active #content").css("direction","ltr");jQuery("a.edit-timestamp").on("click",function(){jQuery(".persian").remove();var a=m(jQuery("#aa").val(),jQuery("#mm").val(),jQuery("#jj").val());a=n(a[0],a[1],a[2],jQuery("#hh").val(),jQuery("#mn").val());jQuery("#timestampdiv").prepend(a);jQuery("#timestampdiv .timestamp-wrap:eq(1)").hide()});jQuery("#the-list").on("click",".editinline",function(){var a=jQuery(this).closest("td"),b=a.find(".aa").html();if(1400<b){var c=a.find(".mm").html(),
6
+ d=a.find(".jj").html(),e=a.find(".hh").html();a=a.find(".mn").html();b=m(b,c,d);jQuery(".persian").remove();jQuery(".inline-edit-date").prepend(n(b[0],b[1],b[2],e,a));jQuery(".inline-edit-date div:eq(1)").hide()}});jQuery("#timestampdiv,.inline-edit-date").on("keyup","#hha",function(){jQuery("input[name=hh]").val(jQuery(this).val())}).on("keyup","#mna",function(){jQuery("input[name=mn]").val(jQuery(this).val())}).on("keyup","#aaa , #jja",function(){var a=jQuery("#aaa").val(),b=jQuery("#mma").val(),
7
+ c=jQuery("#jja").val();date=l(a,b,c);jQuery("input[name=aa]").val(date[0]);jQuery("select[name=mm]").val(date[1]);jQuery("input[name=jj]").val(date[2])}).on("change","#mma",function(){var a=jQuery("#aaa").val(),b=jQuery("#mma").val(),c=jQuery("#jja").val();date=l(a,b,c);jQuery("input[name=aa]").val(date[0]);jQuery("select[name=mm]").val(date[1]);jQuery("input[name=jj]").val(date[2])});jQuery("select[name=m]").hide();var k;jQuery("#timestampdiv").on("keypress",function(a){13==a.which&&(k=setInterval(function(){q()},
8
+ 50))});jQuery(".save-timestamp , .cancel-timestamp , #publish").on("click",function(){jQuery("#aaa").length&&(k=setInterval(function(){q()},50))})});
assets/js/gutenberg-jalali-calendar.build.js CHANGED
@@ -1 +1 @@
1
- !function(e){function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=9)}([function(e,n){e.exports=wp.i18n},function(e,n,t){function r(e,n){return function(t){return o(e.call(this,t),n)}}function a(e,n){return function(t){return this.localeData().ordinal(e.call(this,t),n)}}function s(e,n){var t;for(t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e}function o(e,n){for(var t=e+"";t.length<n;)t="0"+t;return t}function i(e){return"[object Array]"===Object.prototype.toString.call(e)}function l(e){if(e){var n=e.toLowerCase();e=W[n]||n}return e}function c(e,n,t,r){var a=e._d;e._isUTC?e._d=new Date(Date.UTC(n,t,r,a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds())):e._d=new Date(n,t,r,a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds())}function u(e){function n(){}return n.prototype=e,new n}function _(e){var n,t=e.match(D),r=t.length;for(n=0;n<r;n+=1)B[t[n]]&&(t[n]=B[t[n]]);return function(a){var s="";for(n=0;n<r;n+=1)s+=t[n]instanceof Function?"["+t[n].call(a,e)+"]":t[n];return s}}function p(e,n){switch(e){case"jDDDD":return j;case"jYYYY":return x;case"jYYYYY":return N;case"jDDD":return S;case"jMMM":case"jMMMM":return M;case"jMM":case"jDD":case"jYY":case"jM":case"jD":return w;case"DDDD":return j;case"YYYY":return x;case"YYYYY":return N;case"S":case"SS":case"SSS":case"DDD":return S;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return M;case"a":case"A":return k.localeData(n._l)._meridiemParse;case"X":return F;case"Z":case"ZZ":return L;case"T":return H;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return w;default:return new RegExp(e.replace("\\",""))}}function d(e,n,t){var r,a=t._a;switch(e){case"jM":case"jMM":a[1]=null==n?0:~~n-1;break;case"jMMM":case"jMMMM":r=k.localeData(t._l).jMonthsParse(n),null!=r?a[1]=r:t._isValid=!1;break;case"jD":case"jDD":case"jDDD":case"jDDDD":null!=n&&(a[2]=~~n);break;case"jYY":a[0]=~~n+(~~n>47?1300:1400);break;case"jYYYY":case"jYYYYY":a[0]=~~n}null==n&&(t._isValid=!1)}function m(e){var n,t,r=e._a[0],a=e._a[1],s=e._a[2];return null==r&&null==a&&null==s?[0,0,1]:(r=null!=r?r:0,a=null!=a?a:0,s=null!=s?s:1,(s<1||s>v.jDaysInMonth(r,a)||a<0||a>11)&&(e._isValid=!1),n=E(r,a,s),t=T(n.gy,n.gm,n.gd),e._jDiff=0,~~t.jy!==r&&(e._jDiff+=1),~~t.jm!==a&&(e._jDiff+=1),~~t.jd!==s&&(e._jDiff+=1),[n.gy,n.gm,n.gd])}function h(e){var n,t,r,a=e._f.match(D),s=e._i+"",o=a.length;for(e._a=[],n=0;n<o;n+=1)t=a[n],r=(p(t,e).exec(s)||[])[0],r&&(s=s.slice(s.indexOf(r)+r.length)),B[t]&&d(t,r,e);return s&&(e._il=s),m(e)}function f(e,n){var t,r,a,s,o,i,l=e._f.length;if(0===l)return b(new Date(NaN));for(t=0;t<l;t+=1)r=e._f[t],o=0,a=b(e._i,r,e._l,e._strict,n),a.isValid()&&(o+=a._jDiff,a._il&&(o+=a._il.length),(null==i||o<i)&&(i=o,s=a));return s}function y(e){var n,t,r,a=e._i+"",s="",o="",i=e._f.match(D),l=i.length;for(n=0;n<l;n+=1)t=i[n],r=(p(t,e).exec(a)||[])[0],r&&(a=a.slice(a.indexOf(r)+r.length)),B[t]instanceof Function||(o+=t,r&&(s+=r));e._i=s,e._f=o}function g(e,n,t){var r,a=t-n,s=t-e.day();return s>a&&(s-=7),s<a-7&&(s+=7),r=v(e).add(s,"d"),{week:Math.ceil(r.jDayOfYear()/7),year:r.jYear()}}function b(e,n,t,r,a){"boolean"===typeof t&&(a=r,r=t,t=void 0),n&&"string"===typeof n&&(n=C(n,k));var l,c,_,p={_i:e,_f:n,_l:t,_strict:r,_isUTC:a},d=e,m=n;if(n){if(i(n))return f(p,a);l=h(p),y(p),n="YYYY-MM-DD-"+p._f,e=o(l[0],4)+"-"+o(l[1]+1,2)+"-"+o(l[2],2)+"-"+p._i}return c=a?k.utc(e,n,t,r):k(e,n,t,r),!1===p._isValid&&(c._isValid=!1),c._jDiff=p._jDiff||0,_=u(v.fn),s(_,c),r&&_.isValid()&&(_._isValid=_.format(m)===d),_}function v(e,n,t,r){return b(e,n,t,r,!1)}function C(e,n){for(var t=5,r=function(e){return n.localeData().longDateFormat(e)||e};t>0&&P.test(e);)t-=1,e=e.replace(P,r);return e}function T(e,n,t){var r=A.toJalaali(e,n+1,t);return r.jm-=1,r}function E(e,n,t){var r=A.toGregorian(e,n+1,t);return r.gm-=1,r}function O(e,n){return~~(e/n)}function R(e,n){return e-~~(e/n)*n}e.exports=v;var k=t(16),A=t(17),D=/(\[[^\[]*\])|(\\)?j(Mo|MM?M?M?|Do|DDDo|DD?D?D?|w[o|w]?|YYYYY|YYYY|YY|gg(ggg?)?|)|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,P=/(\[[^\[]*\])|(\\)?(LTS?|LL?L?L?|l{1,4})/g,w=/\d\d?/,S=/\d{1,3}/,j=/\d{3}/,x=/\d{1,4}/,N=/[+\-]?\d{1,6}/,M=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,L=/Z|[\+\-]\d\d:?\d\d/i,H=/T/i,F=/[\+\-]?\d+(\.\d{1,3})?/,I={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},Y={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"},W={jm:"jmonth",jmonths:"jmonth",jy:"jyear",jyears:"jyear"},q={},V="DDD w M D".split(" "),U="M D w".split(" "),B={jM:function(){return this.jMonth()+1},jMMM:function(e){return this.localeData().jMonthsShort(this,e)},jMMMM:function(e){return this.localeData().jMonths(this,e)},jD:function(){return this.jDate()},jDDD:function(){return this.jDayOfYear()},jw:function(){return this.jWeek()},jYY:function(){return o(this.jYear()%100,2)},jYYYY:function(){return o(this.jYear(),4)},jYYYYY:function(){return o(this.jYear(),5)},jgg:function(){return o(this.jWeekYear()%100,2)},jgggg:function(){return this.jWeekYear()},jggggg:function(){return o(this.jWeekYear(),5)}};!function(){for(var e;V.length;)e=V.pop(),B["j"+e+"o"]=a(B["j"+e],e);for(;U.length;)e=U.pop(),B["j"+e+e]=r(B["j"+e],2);B.jDDDD=r(B.jDDD,3)}(),s(function(e){return Object.getPrototypeOf?Object.getPrototypeOf(e):"".__proto__?e.__proto__:e.constructor.prototype}(k.localeData()),{_jMonths:["Farvardin","Ordibehesht","Khordaad","Tir","Amordaad","Shahrivar","Mehr","Aabaan","Aazar","Dey","Bahman","Esfand"],jMonths:function(e){return this._jMonths[e.jMonth()]},_jMonthsShort:["Far","Ord","Kho","Tir","Amo","Sha","Meh","Aab","Aaz","Dey","Bah","Esf"],jMonthsShort:function(e){return this._jMonthsShort[e.jMonth()]},jMonthsParse:function(e){var n,t,r;for(this._jMonthsParse||(this._jMonthsParse=[]),n=0;n<12;n+=1)if(this._jMonthsParse[n]||(t=v([2e3,(2+n)%12,25]),r="^"+this.jMonths(t,"")+"|^"+this.jMonthsShort(t,""),this._jMonthsParse[n]=new RegExp(r.replace(".",""),"i")),this._jMonthsParse[n].test(e))return n}}),s(v,k),v.fn=u(k.fn),v.utc=function(e,n,t,r){return b(e,n,t,r,!0)},v.unix=function(e){return b(1e3*e)},v.fn.format=function(e){return e&&(e=C(e,this),q[e]||(q[e]=_(e)),e=q[e](this)),k.fn.format.call(this,e)},v.fn.jYear=function(e){var n,t,r;return"number"===typeof e?(t=T(this.year(),this.month(),this.date()),n=Math.min(t.jd,v.jDaysInMonth(e,t.jm)),r=E(e,t.jm,n),c(this,r.gy,r.gm,r.gd),k.updateOffset(this),this):T(this.year(),this.month(),this.date()).jy},v.fn.jMonth=function(e){var n,t,r;return null!=e?"string"===typeof e&&"number"!==typeof(e=this.lang().jMonthsParse(e))?this:(t=T(this.year(),this.month(),this.date()),n=Math.min(t.jd,v.jDaysInMonth(t.jy,e)),this.jYear(t.jy+O(e,12)),e=R(e,12),e<0&&(e+=12,this.jYear(this.jYear()-1)),r=E(this.jYear(),e,n),c(this,r.gy,r.gm,r.gd),k.updateOffset(this),this):T(this.year(),this.month(),this.date()).jm},v.fn.jDate=function(e){var n,t;return"number"===typeof e?(n=T(this.year(),this.month(),this.date()),t=E(n.jy,n.jm,e),c(this,t.gy,t.gm,t.gd),k.updateOffset(this),this):T(this.year(),this.month(),this.date()).jd},v.fn.jDayOfYear=function(e){var n=Math.round((v(this).startOf("day")-v(this).startOf("jYear"))/864e5)+1;return null==e?n:this.add(e-n,"d")},v.fn.jWeek=function(e){var n=g(this,this.localeData()._week.dow,this.localeData()._week.doy).week;return null==e?n:this.add(7*(e-n),"d")},v.fn.jWeekYear=function(e){var n=g(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==e?n:this.add(e-n,"y")},v.fn.add=function(e,n){var t;return null===n||isNaN(+n)||(t=e,e=n,n=t),n=l(n),"jyear"===n?this.jYear(this.jYear()+e):"jmonth"===n?this.jMonth(this.jMonth()+e):k.fn.add.call(this,e,n),this},v.fn.subtract=function(e,n){var t;return null===n||isNaN(+n)||(t=e,e=n,n=t),n=l(n),"jyear"===n?this.jYear(this.jYear()-e):"jmonth"===n?this.jMonth(this.jMonth()-e):k.fn.subtract.call(this,e,n),this},v.fn.startOf=function(e){return e=l(e),"jyear"===e||"jmonth"===e?("jyear"===e&&this.jMonth(0),this.jDate(1),this.hours(0),this.minutes(0),this.seconds(0),this.milliseconds(0),this):k.fn.startOf.call(this,e)},v.fn.endOf=function(e){return e=l(e),void 0===e||"milisecond"===e?this:this.startOf(e).add(1,"isoweek"===e?"week":e).subtract(1,"ms")},v.fn.isSame=function(e,n){return n=l(n),"jyear"===n||"jmonth"===n?k.fn.isSame.call(this.startOf(n),e.startOf(n)):k.fn.isSame.call(this,e,n)},v.fn.clone=function(){return v(this)},v.fn.jYears=v.fn.jYear,v.fn.jMonths=v.fn.jMonth,v.fn.jDates=v.fn.jDate,v.fn.jWeeks=v.fn.jWeek,v.jDaysInMonth=function(e,n){return e+=O(n,12),n=R(n,12),n<0&&(n+=12,e-=1),n<6?31:n<11?30:v.jIsLeapYear(e)?30:29},v.jIsLeapYear=A.isLeapJalaaliYear,v.loadPersian=function(e){var n=!(void 0===e||!e.hasOwnProperty("usePersianDigits"))&&e.usePersianDigits,t=void 0!==e&&e.hasOwnProperty("dialect")?e.dialect:"persian";k.locale("fa"),k.updateLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:{persian:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u0622\u062f\u06cc\u0646\u0647_\u0634\u0646\u0628\u0647".split("_"),"persian-modern":"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_")}[t],weekdaysShort:{persian:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u0622\u062f\u06cc\u0646\u0647_\u0634\u0646\u0628\u0647".split("_"),"persian-modern":"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_")}[t],weekdaysMin:{persian:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0622_\u0634".split("_"),"persian-modern":"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_")}[t],longDateFormat:{LT:"HH:mm",L:"jYYYY/jMM/jDD",LL:"jD jMMMM jYYYY",LLL:"jD jMMMM jYYYY LT",LLLL:"dddd\u060c jD jMMMM jYYYY LT"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u06cc \u067e\u06cc\u0634 \u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",m:"1 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"1 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"1 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"1 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"1 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return n?e.replace(/[\u06f0-\u06f9]/g,function(e){return Y[e]}).replace(/\u060c/g,","):e},postformat:function(e){return n?e.replace(/\d/g,function(e){return I[e]}).replace(/,/g,"\u060c"):e},ordinal:"%d\u0645",week:{dow:6,doy:12},meridiem:function(e){return e<12?"\u0642.\u0638":"\u0628.\u0638"},jMonths:{persian:"\u0641\u0631\u0648\u0631\u062f\u06cc\u0646_\u0627\u0631\u062f\u06cc\u0628\u0647\u0634\u062a_\u062e\u0631\u062f\u0627\u062f_\u062a\u06cc\u0631_\u0627\u0645\u0631\u062f\u0627\u062f_\u0634\u0647\u0631\u06cc\u0648\u0631_\u0645\u0647\u0631_\u0622\u0628\u0627\u0646_\u0622\u0630\u0631_\u062f\u06cc_\u0628\u0647\u0645\u0646_\u0627\u0633\u0641\u0646\u062f".split("_"),"persian-modern":"\u0641\u0631\u0648\u0631\u062f\u06cc\u0646_\u0627\u0631\u062f\u06cc\u0628\u0647\u0634\u062a_\u062e\u0631\u062f\u0627\u062f_\u062a\u06cc\u0631_\u0645\u0631\u062f\u0627\u062f_\u0634\u0647\u0631\u06cc\u0648\u0631_\u0645\u0647\u0631_\u0622\u0628\u0627\u0646_\u0622\u0630\u0631_\u062f\u06cc_\u0628\u0647\u0645\u0646_\u0627\u0633\u0641\u0646\u062f".split("_")}[t],jMonthsShort:{persian:"\u0641\u0631\u0648_\u0627\u0631\u062f_\u062e\u0631\u062f_\u062a\u06cc\u0631_\u0627\u0645\u0631_\u0634\u0647\u0631_\u0645\u0647\u0631_\u0622\u0628\u0627_\u0622\u0630\u0631_\u062f\u06cc_\u0628\u0647\u0645_\u0627\u0633\u0641".split("_"),"persian-modern":"\u0641\u0631\u0648_\u0627\u0631\u062f_\u062e\u0631\u062f_\u062a\u06cc\u0631_\u0645\u0631\u062f_\u0634\u0647\u0631_\u0645\u0647\u0631_\u0622\u0628\u0627_\u0622\u0630\u0631_\u062f\u06cc_\u0628\u0647\u0645_\u0627\u0633\u0641".split("_")}[t]})},v.jConvert={toJalaali:T,toGregorian:E}},function(e,n){e.exports=wp.plugins},function(e,n){e.exports=wp.compose},function(e,n){e.exports=wp.element},function(e,n){e.exports=wp.editPost},function(e,n,t){"use strict";function r(e){var n=e.date,t=e.onUpdateDate,r=e.dateFormat;return wp.element.createElement(o.a,{key:"date-time-picker",currentDate:n,onChange:t,dateFormat:r})}var a=t(7),s=(t.n(a),t(3)),o=(t.n(s),t(14));n.a=Object(s.compose)([Object(a.withSelect)(function(e){return{date:e("core/editor").getEditedPostAttribute("date")}}),Object(a.withDispatch)(function(e){return{onUpdateDate:function(n){e("core/editor").editPost({date:n})}}})])(r)},function(e,n){e.exports=wp.data},function(e,n,t){"use strict";function r(e){var n=e.date,t=e.isFloating,r=e.dateFormat;Object(s.__experimentalGetSettings)();return l.a.loadPersian({dialect:"persian-modern"}),n&&!t?u()(l()(n,r).format(_)).englishNumber().toString():Object(a.__)("Immediately")}var a=t(0),s=(t.n(a),t(22)),o=(t.n(s),t(7)),i=(t.n(o),t(1)),l=t.n(i),c=t(23),u=t.n(c),_="jD jMMMM, jYYYY hh:mm a";n.a=Object(o.withSelect)(function(e){return{date:e("core/editor").getEditedPostAttribute("date"),isFloating:e("core/editor").isEditedPostDateFloating()}})(r)},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=(t(10),t(26),t(28));t.n(r)},function(e,n,t){"use strict";var r=t(2),a=(t.n(r),t(11)),s=t(24),o=(t.n(s),t(25));t.n(o);Object(r.registerPlugin)("gutenberg-jalali-calendar-post-schedule",{render:a.a})},function(e,n,t){"use strict";function r(e){var n=e.instanceId;return wp.element.createElement(c.PluginPostStatusInfo,{className:"gutenberg-jalali-calendar-edit-post-post-schedule"},wp.element.createElement(l.PostScheduleCheck,null,wp.element.createElement("label",{htmlFor:"gutenberg-jalali-calendar-edit-post-post-schedule__toggle-"+n,id:"gutenberg-jalali-calendar-edit-post-post-schedule__heading-"+n},Object(a.__)("Publish")),wp.element.createElement(o.Dropdown,{position:"bottom left",contentClassName:"gutenberg-jalali-calendar-edit-post-post-schedule__dialog",renderToggle:function(e){var t=e.onToggle,r=e.isOpen;return wp.element.createElement(i.Fragment,null,wp.element.createElement("label",{className:"gutenberg-jalali-calendar-edit-post-post-schedule__label",htmlFor:"gutenberg-jalali-calendar-edit-post-post-schedule__toggle-"+n},wp.element.createElement(_.a,{dateFormat:p})," ",Object(a.__)("Click to change")),wp.element.createElement(o.Button,{id:"gutenberg-jalali-calendar-edit-post-post-schedule__toggle-"+n,type:"button",className:"gutenberg-jalali-calendar-edit-post-post-schedule__toggle",onClick:t,"aria-expanded":r,"aria-live":"polite",isLink:!0},wp.element.createElement(_.a,{dateFormat:p})))},renderContent:function(){return wp.element.createElement(u.a,{dateFormat:p})}})))}var a=t(0),s=(t.n(a),t(3)),o=(t.n(s),t(12)),i=(t.n(o),t(4)),l=(t.n(i),t(13)),c=(t.n(l),t(5)),u=(t.n(c),t(6)),_=t(8),p="YYYY-MM-DDTHH:mm:ss";n.a=Object(s.withInstanceId)(r)},function(e,n){e.exports=wp.components},function(e,n){e.exports=wp.editor},function(e,n,t){"use strict";function r(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function a(e,n){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!==typeof n&&"function"!==typeof n?e:n}function s(e,n){if("function"!==typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function, not "+typeof n);e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),n&&(Object.setPrototypeOf?Object.setPrototypeOf(e,n):e.__proto__=n)}var o=t(4),i=(t.n(o),t(15)),l=(t.n(i),t(20)),c=(t.n(l),t(1)),u=t.n(c),_=t(21),p=(t.n(_),function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}()),d=function(e){function n(e){r(this,n);var t=a(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));t.handleChange=function(e){var n=t.props,r=n.onChange,a=n.dateFormat;r(e.format(a)),t.setState({moment:e})};var s=t.props.currentDate,o=u()(s);return u.a.locale(),t.state={moment:o},t.handleChange=t.handleChange.bind(t),t}return s(n,e),p(n,[{key:"render",value:function(){this.state.moment,this.props.dateFormat;return wp.element.createElement(i.DatetimePicker,{splitPanel:!1,moment:this.state.moment,onChange:this.handleChange,showTimePicker:!0,isSolar:!0,lang:"fa"})}}]),n}(o.Component);n.a=d},function(module,exports,__webpack_require__){!function(e,n){module.exports=n(__webpack_require__(1),__webpack_require__(18),__webpack_require__(19))}(window,function(__WEBPACK_EXTERNAL_MODULE_moment_jalaali__,__WEBPACK_EXTERNAL_MODULE_react__,__WEBPACK_EXTERNAL_MODULE_react_dom__){return function(e){function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}var t={};return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(n){return e[n]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=0)}({"./node_modules/blacklist/index.js":function(module,exports){eval("module.exports = function blacklist (src) {\n var copy = {}\n var filter = arguments[1]\n\n if (typeof filter === 'string') {\n filter = {}\n for (var i = 1; i < arguments.length; i++) {\n filter[arguments[i]] = true\n }\n }\n\n for (var key in src) {\n // blacklist?\n if (filter[key]) continue\n\n copy[key] = src[key]\n }\n\n return copy\n}\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/blacklist/index.js?")},"./node_modules/classnames/bind.js":function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(this && this[arg] || arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(this, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(this && this[key] || key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}());\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/classnames/bind.js?")},"./node_modules/create-react-class/factory.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar _assign = __webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\");\n\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ \"./node_modules/fbjs/lib/emptyObject.js\");\nvar _invariant = __webpack_require__(/*! fbjs/lib/invariant */ \"./node_modules/fbjs/lib/invariant.js\");\n\nif (true) {\n var warning = __webpack_require__(/*! fbjs/lib/warning */ \"./node_modules/fbjs/lib/warning.js\");\n}\n\nvar MIXINS_KEY = 'mixins';\n\n// Helper function to allow the creation of anonymous functions which do not\n// have .name set to the name of the variable being assigned to.\nfunction identity(fn) {\n return fn;\n}\n\nvar ReactPropTypeLocationNames;\nif (true) {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n} else {}\n\nfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n /**\n * Policies that describe methods in `ReactClassInterface`.\n */\n\n var injectedMixins = [];\n\n /**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return <div>Hello World</div>;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\n var ReactClassInterface = {\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: 'DEFINE_MANY',\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: 'DEFINE_MANY',\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: 'DEFINE_MANY',\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: 'DEFINE_MANY_MERGED',\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: 'DEFINE_MANY_MERGED',\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: 'DEFINE_MANY_MERGED',\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return <div>Hello, {name}!</div>;\n * }\n *\n * @return {ReactComponent}\n * @required\n */\n render: 'DEFINE_ONCE',\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: 'DEFINE_MANY',\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: 'DEFINE_MANY',\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: 'DEFINE_ONCE',\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillMount`.\n *\n * @optional\n */\n UNSAFE_componentWillMount: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillReceiveProps`.\n *\n * @optional\n */\n UNSAFE_componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillUpdate`.\n *\n * @optional\n */\n UNSAFE_componentWillUpdate: 'DEFINE_MANY',\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: 'OVERRIDE_BASE'\n };\n\n /**\n * Similar to ReactClassInterface but for static methods.\n */\n var ReactClassStaticInterface = {\n /**\n * This method is invoked after a component is instantiated and when it\n * receives new props. Return an object to update state in response to\n * prop changes. Return null to indicate no change to state.\n *\n * If an object is returned, its keys will be merged into the existing state.\n *\n * @return {object || null}\n * @optional\n */\n getDerivedStateFromProps: 'DEFINE_MANY_MERGED'\n };\n\n /**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\n var RESERVED_SPEC_KEYS = {\n displayName: function(Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function(Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function(Constructor, childContextTypes) {\n if (true) {\n validateTypeDef(Constructor, childContextTypes, 'childContext');\n }\n Constructor.childContextTypes = _assign(\n {},\n Constructor.childContextTypes,\n childContextTypes\n );\n },\n contextTypes: function(Constructor, contextTypes) {\n if (true) {\n validateTypeDef(Constructor, contextTypes, 'context');\n }\n Constructor.contextTypes = _assign(\n {},\n Constructor.contextTypes,\n contextTypes\n );\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function(Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(\n Constructor.getDefaultProps,\n getDefaultProps\n );\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function(Constructor, propTypes) {\n if (true) {\n validateTypeDef(Constructor, propTypes, 'prop');\n }\n Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n },\n statics: function(Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function() {}\n };\n\n function validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an _invariant so components\n // don't show up in prod but only in __DEV__\n if (true) {\n warning(\n typeof typeDef[propName] === 'function',\n '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n 'React.PropTypes.',\n Constructor.displayName || 'ReactClass',\n ReactPropTypeLocationNames[location],\n propName\n );\n }\n }\n }\n }\n\n function validateMethodOverride(isAlreadyDefined, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name)\n ? ReactClassInterface[name]\n : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n _invariant(\n specPolicy === 'OVERRIDE_BASE',\n 'ReactClassInterface: You are attempting to override ' +\n '`%s` from your class specification. Ensure that your method names ' +\n 'do not overlap with React methods.',\n name\n );\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (isAlreadyDefined) {\n _invariant(\n specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n 'ReactClassInterface: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be due ' +\n 'to a mixin.',\n name\n );\n }\n }\n\n /**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\n function mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n if (true) {\n var typeofSpec = typeof spec;\n var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n if (true) {\n warning(\n isMixinValid,\n \"%s: You're attempting to include a mixin that is either null \" +\n 'or not an object. Check the mixins included by the component, ' +\n 'as well as any mixins they include themselves. ' +\n 'Expected object but got %s.',\n Constructor.displayName || 'ReactClass',\n spec === null ? null : typeofSpec\n );\n }\n }\n\n return;\n }\n\n _invariant(\n typeof spec !== 'function',\n \"ReactClass: You're attempting to \" +\n 'use a component class or function as a mixin. Instead, just use a ' +\n 'regular object.'\n );\n _invariant(\n !isValidElement(spec),\n \"ReactClass: You're attempting to \" +\n 'use a component as a mixin. Instead, just use a regular object.'\n );\n\n var proto = Constructor.prototype;\n var autoBindPairs = proto.__reactAutoBindPairs;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n var isAlreadyDefined = proto.hasOwnProperty(name);\n validateMethodOverride(isAlreadyDefined, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind =\n isFunction &&\n !isReactClassMethod &&\n !isAlreadyDefined &&\n spec.autobind !== false;\n\n if (shouldAutoBind) {\n autoBindPairs.push(name, property);\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n _invariant(\n isReactClassMethod &&\n (specPolicy === 'DEFINE_MANY_MERGED' ||\n specPolicy === 'DEFINE_MANY'),\n 'ReactClass: Unexpected spec policy %s for key %s ' +\n 'when mixing in component specs.',\n specPolicy,\n name\n );\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === 'DEFINE_MANY_MERGED') {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === 'DEFINE_MANY') {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (true) {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n }\n\n function mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = name in RESERVED_SPEC_KEYS;\n _invariant(\n !isReserved,\n 'ReactClass: You are attempting to define a reserved ' +\n 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n 'as an instance property instead; it will still be accessible on the ' +\n 'constructor.',\n name\n );\n\n var isAlreadyDefined = name in Constructor;\n if (isAlreadyDefined) {\n var specPolicy = ReactClassStaticInterface.hasOwnProperty(name)\n ? ReactClassStaticInterface[name]\n : null;\n\n _invariant(\n specPolicy === 'DEFINE_MANY_MERGED',\n 'ReactClass: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be ' +\n 'due to a mixin.',\n name\n );\n\n Constructor[name] = createMergedResultFunction(Constructor[name], property);\n\n return;\n }\n\n Constructor[name] = property;\n }\n }\n\n /**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\n function mergeIntoWithNoDuplicateKeys(one, two) {\n _invariant(\n one && two && typeof one === 'object' && typeof two === 'object',\n 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n );\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n _invariant(\n one[key] === undefined,\n 'mergeIntoWithNoDuplicateKeys(): ' +\n 'Tried to merge two objects with the same key: `%s`. This conflict ' +\n 'may be due to a mixin; in particular, this may be caused by two ' +\n 'getInitialState() or getDefaultProps() methods returning objects ' +\n 'with clashing keys.',\n key\n );\n one[key] = two[key];\n }\n }\n return one;\n }\n\n /**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n }\n\n /**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n }\n\n /**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\n function bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (true) {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n boundMethod.bind = function(newThis) {\n for (\n var _len = arguments.length,\n args = Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n if (true) {\n warning(\n false,\n 'bind(): React component methods may only be bound to the ' +\n 'component instance. See %s',\n componentName\n );\n }\n } else if (!args.length) {\n if (true) {\n warning(\n false,\n 'bind(): You are binding a component method to the component. ' +\n 'React does this for you automatically in a high-performance ' +\n 'way, so you can safely remove this call. See %s',\n componentName\n );\n }\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n };\n }\n return boundMethod;\n }\n\n /**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\n function bindAutoBindMethods(component) {\n var pairs = component.__reactAutoBindPairs;\n for (var i = 0; i < pairs.length; i += 2) {\n var autoBindKey = pairs[i];\n var method = pairs[i + 1];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n }\n\n var IsMountedPreMixin = {\n componentDidMount: function() {\n this.__isMounted = true;\n }\n };\n\n var IsMountedPostMixin = {\n componentWillUnmount: function() {\n this.__isMounted = false;\n }\n };\n\n /**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\n var ReactClassMixin = {\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function(newState, callback) {\n this.updater.enqueueReplaceState(this, newState, callback);\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function() {\n if (true) {\n warning(\n this.__didWarnIsMounted,\n '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n 'subscriptions and pending requests in componentWillUnmount to ' +\n 'prevent memory leaks.',\n (this.constructor && this.constructor.displayName) ||\n this.name ||\n 'Component'\n );\n this.__didWarnIsMounted = true;\n }\n return !!this.__isMounted;\n }\n };\n\n var ReactClassComponent = function() {};\n _assign(\n ReactClassComponent.prototype,\n ReactComponent.prototype,\n ReactClassMixin\n );\n\n /**\n * Creates a composite component class given a class specification.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n function createClass(spec) {\n // To keep our warnings more understandable, we'll use a little hack here to\n // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n // unnecessarily identify a class without displayName as 'Constructor'.\n var Constructor = identity(function(props, context, updater) {\n // This constructor gets overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (true) {\n warning(\n this instanceof Constructor,\n 'Something is calling a React component directly. Use a factory or ' +\n 'JSX instead. See: https://fb.me/react-legacyfactory'\n );\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindPairs.length) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (true) {\n // We allow auto-mocks to proceed as if they're returning null.\n if (\n initialState === undefined &&\n this.getInitialState._isMockFunction\n ) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n _invariant(\n typeof initialState === 'object' && !Array.isArray(initialState),\n '%s.getInitialState(): must return an object or null',\n Constructor.displayName || 'ReactCompositeComponent'\n );\n\n this.state = initialState;\n });\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n Constructor.prototype.__reactAutoBindPairs = [];\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n mixSpecIntoComponent(Constructor, spec);\n mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (true) {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n _invariant(\n Constructor.prototype.render,\n 'createClass(...): Class specification must implement a `render` method.'\n );\n\n if (true) {\n warning(\n !Constructor.prototype.componentShouldUpdate,\n '%s has a method called ' +\n 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n 'The name is phrased as a question because the function is ' +\n 'expected to return a value.',\n spec.displayName || 'A component'\n );\n warning(\n !Constructor.prototype.componentWillRecieveProps,\n '%s has a method called ' +\n 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n spec.displayName || 'A component'\n );\n warning(\n !Constructor.prototype.UNSAFE_componentWillRecieveProps,\n '%s has a method called UNSAFE_componentWillRecieveProps(). ' +\n 'Did you mean UNSAFE_componentWillReceiveProps()?',\n spec.displayName || 'A component'\n );\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n }\n\n return createClass;\n}\n\nmodule.exports = factory;\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/create-react-class/factory.js?")},"./node_modules/create-react-class/index.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar React = __webpack_require__(/*! react */ \"react\");\nvar factory = __webpack_require__(/*! ./factory */ \"./node_modules/create-react-class/factory.js\");\n\nif (typeof React === 'undefined') {\n throw Error(\n 'create-react-class could not find the React object. If you are using script tags, ' +\n 'make sure that React is being loaded before create-react-class.'\n );\n}\n\n// Hack to grab NoopUpdateQueue from isomorphic React\nvar ReactNoopUpdateQueue = new React.Component().updater;\n\nmodule.exports = factory(\n React.Component,\n React.isValidElement,\n ReactNoopUpdateQueue\n);\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/create-react-class/index.js?")},"./node_modules/fbjs/lib/ExecutionEnvironment.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/ExecutionEnvironment.js?")},"./node_modules/fbjs/lib/camelize.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n * > camelize('background-color')\n * < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n return string.replace(_hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n}\n\nmodule.exports = camelize;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/camelize.js?")},"./node_modules/fbjs/lib/camelizeStyleName.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n\n\nvar camelize = __webpack_require__(/*! ./camelize */ \"./node_modules/fbjs/lib/camelize.js\");\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n * > camelizeStyleName('background-color')\n * < \"backgroundColor\"\n * > camelizeStyleName('-moz-transition')\n * < \"MozTransition\"\n * > camelizeStyleName('-ms-transition')\n * < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/camelizeStyleName.js?")},"./node_modules/fbjs/lib/emptyFunction.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/emptyFunction.js?")},"./node_modules/fbjs/lib/emptyObject.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar emptyObject = {};\n\nif (true) {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/emptyObject.js?")},"./node_modules/fbjs/lib/hyphenate.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n * > hyphenate('backgroundColor')\n * < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/hyphenate.js?")},"./node_modules/fbjs/lib/hyphenateStyleName.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n\n\nvar hyphenate = __webpack_require__(/*! ./hyphenate */ \"./node_modules/fbjs/lib/hyphenate.js\");\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/hyphenateStyleName.js?")},"./node_modules/fbjs/lib/invariant.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (true) {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/invariant.js?")},"./node_modules/fbjs/lib/memoizeStringOnly.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @typechecks static-only\n */\n\n\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n */\n\nfunction memoizeStringOnly(callback) {\n var cache = {};\n return function (string) {\n if (!cache.hasOwnProperty(string)) {\n cache[string] = callback.call(this, string);\n }\n return cache[string];\n };\n}\n\nmodule.exports = memoizeStringOnly;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/memoizeStringOnly.js?")},"./node_modules/fbjs/lib/warning.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ \"./node_modules/fbjs/lib/emptyFunction.js\");\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (true) {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/warning.js?")},"./node_modules/object-assign/index.js":function(module,exports,__webpack_require__){"use strict";eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/object-assign/index.js?")},"./node_modules/prop-types/checkPropTypes.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar printWarning = function() {};\n\nif (true) {\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n var loggedTypeFailures = {};\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (true) {\n for (var typeSpecName in typeSpecs) {\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n )\n\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\nmodule.exports = checkPropTypes;\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/prop-types/checkPropTypes.js?")},"./node_modules/prop-types/factoryWithTypeCheckers.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar assign = __webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\");\n\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\nvar checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\n\nvar printWarning = function() {};\n\nif (true) {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message) {\n this.message = message;\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (true) {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (\"development\" !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n true ? printWarning('Invalid argument supplied to oneOf, expected an instance of array.') : undefined;\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : undefined;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from\n // props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/prop-types/factoryWithTypeCheckers.js?")},"./node_modules/prop-types/index.js":function(module,exports,__webpack_require__){eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (true) {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ \"./node_modules/prop-types/factoryWithTypeCheckers.js\")(isValidElement, throwOnDirectAccess);\n} else {}\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/prop-types/index.js?")},"./node_modules/prop-types/lib/ReactPropTypesSecret.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/prop-types/lib/ReactPropTypesSecret.js?")},"./node_modules/react-slider/react-slider.js":function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! react */ \"react\"),__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"),__webpack_require__(/*! create-react-class */ \"./node_modules/create-react-class/index.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(this, function (React, PropTypes, createReactClass) {\n\n /**\n * To prevent text selection while dragging.\n * http://stackoverflow.com/questions/5429827/how-can-i-prevent-text-element-selection-with-cursor-drag\n */\n function pauseEvent(e) {\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n return false;\n }\n\n function stopPropagation(e) {\n if (e.stopPropagation) e.stopPropagation();\n }\n\n /**\n * Spreads `count` values equally between `min` and `max`.\n */\n function linspace(min, max, count) {\n var range = (max - min) / (count - 1);\n var res = [];\n for (var i = 0; i < count; i++) {\n res.push(min + range * i);\n }\n return res;\n }\n\n function ensureArray(x) {\n return x == null ? [] : Array.isArray(x) ? x : [x];\n }\n\n function undoEnsureArray(x) {\n return x != null && x.length === 1 ? x[0] : x;\n }\n\n // undoEnsureArray(ensureArray(x)) === x\n\n var ReactSlider = createReactClass({\n displayName: 'ReactSlider',\n\n propTypes: {\n\n /**\n * The minimum value of the slider.\n */\n min: PropTypes.number,\n\n /**\n * The maximum value of the slider.\n */\n max: PropTypes.number,\n\n /**\n * Value to be added or subtracted on each step the slider makes.\n * Must be greater than zero.\n * `max - min` should be evenly divisible by the step value.\n */\n step: PropTypes.number,\n\n /**\n * The minimal distance between any pair of handles.\n * Must be positive, but zero means they can sit on top of each other.\n */\n minDistance: PropTypes.number,\n\n /**\n * Determines the initial positions of the handles and the number of handles if the component has no children.\n *\n * If a number is passed a slider with one handle will be rendered.\n * If an array is passed each value will determine the position of one handle.\n * The values in the array must be sorted.\n * If the component has children, the length of the array must match the number of children.\n */\n defaultValue: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]),\n\n /**\n * Like `defaultValue` but for [controlled components](http://facebook.github.io/react/docs/forms.html#controlled-components).\n */\n value: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]),\n\n /**\n * Determines whether the slider moves horizontally (from left to right) or vertically (from top to bottom).\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n /**\n * The css class set on the slider node.\n */\n className: PropTypes.string,\n\n /**\n * The css class set on each handle node.\n *\n * In addition each handle will receive a numbered css class of the form `${handleClassName}-${i}`,\n * e.g. `handle-0`, `handle-1`, ...\n */\n handleClassName: PropTypes.string,\n\n /**\n * The css class set on the handle that is currently being moved.\n */\n handleActiveClassName: PropTypes.string,\n\n /**\n * If `true` bars between the handles will be rendered.\n */\n withBars: PropTypes.bool,\n\n /**\n * The css class set on the bars between the handles.\n * In addition bar fragment will receive a numbered css class of the form `${barClassName}-${i}`,\n * e.g. `bar-0`, `bar-1`, ...\n */\n barClassName: PropTypes.string,\n\n /**\n * If `true` the active handle will push other handles\n * within the constraints of `min`, `max`, `step` and `minDistance`.\n */\n pearling: PropTypes.bool,\n\n /**\n * If `true` the handles can't be moved.\n */\n disabled: PropTypes.bool,\n\n /**\n * Disables handle move when clicking the slider bar\n */\n snapDragDisabled: PropTypes.bool,\n\n /**\n * Inverts the slider.\n */\n invert: PropTypes.bool,\n\n /**\n * Callback called before starting to move a handle.\n */\n onBeforeChange: PropTypes.func,\n\n /**\n * Callback called on every value change.\n */\n onChange: PropTypes.func,\n\n /**\n * Callback called only after moving a handle has ended.\n */\n onAfterChange: PropTypes.func,\n\n /**\n * Callback called when the the slider is clicked (handle or bars).\n * Receives the value at the clicked position as argument.\n */\n onSliderClick: PropTypes.func\n },\n\n getDefaultProps: function () {\n return {\n min: 0,\n max: 100,\n step: 1,\n minDistance: 0,\n defaultValue: 0,\n orientation: 'horizontal',\n className: 'slider',\n handleClassName: 'handle',\n handleActiveClassName: 'active',\n barClassName: 'bar',\n withBars: false,\n pearling: false,\n disabled: false,\n snapDragDisabled: false,\n invert: false\n };\n },\n\n getInitialState: function () {\n var value = this._or(ensureArray(this.props.value), ensureArray(this.props.defaultValue));\n\n // reused throughout the component to store results of iterations over `value`\n this.tempArray = value.slice();\n\n // array for storing resize timeouts ids\n this.pendingResizeTimeouts = [];\n\n var zIndices = [];\n for (var i = 0; i < value.length; i++) {\n value[i] = this._trimAlignValue(value[i], this.props);\n zIndices.push(i);\n }\n\n return {\n index: -1,\n upperBound: 0,\n sliderLength: 0,\n value: value,\n zIndices: zIndices\n };\n },\n\n // Keep the internal `value` consistent with an outside `value` if present.\n // This basically allows the slider to be a controlled component.\n componentWillReceiveProps: function (newProps) {\n var value = this._or(ensureArray(newProps.value), this.state.value);\n\n // ensure the array keeps the same size as `value`\n this.tempArray = value.slice();\n\n for (var i = 0; i < value.length; i++) {\n this.state.value[i] = this._trimAlignValue(value[i], newProps);\n }\n if (this.state.value.length > value.length)\n this.state.value.length = value.length;\n\n // If an upperBound has not yet been determined (due to the component being hidden\n // during the mount event, or during the last resize), then calculate it now\n if (this.state.upperBound === 0) {\n this._handleResize();\n }\n },\n\n // Check if the arity of `value` or `defaultValue` matches the number of children (= number of custom handles).\n // If no custom handles are provided, just returns `value` if present and `defaultValue` otherwise.\n // If custom handles are present but neither `value` nor `defaultValue` are applicable the handles are spread out\n // equally.\n // TODO: better name? better solution?\n _or: function (value, defaultValue) {\n var count = React.Children.count(this.props.children);\n switch (count) {\n case 0:\n return value.length > 0 ? value : defaultValue;\n case value.length:\n return value;\n case defaultValue.length:\n return defaultValue;\n default:\n if (value.length !== count || defaultValue.length !== count) {\n console.warn(this.constructor.displayName + \": Number of values does not match number of children.\");\n }\n return linspace(this.props.min, this.props.max, count);\n }\n },\n\n componentDidMount: function () {\n window.addEventListener('resize', this._handleResize);\n this._handleResize();\n },\n\n componentWillUnmount: function () {\n this._clearPendingResizeTimeouts();\n window.removeEventListener('resize', this._handleResize);\n },\n\n getValue: function () {\n return undoEnsureArray(this.state.value);\n },\n\n _handleResize: function () {\n // setTimeout of 0 gives element enough time to have assumed its new size if it is being resized\n var resizeTimeout = window.setTimeout(function() {\n // drop this timeout from pendingResizeTimeouts to reduce memory usage\n this.pendingResizeTimeouts.shift();\n\n var slider = this.refs.slider;\n var handle = this.refs.handle0;\n var rect = slider.getBoundingClientRect();\n\n var size = this._sizeKey();\n\n var sliderMax = rect[this._posMaxKey()];\n var sliderMin = rect[this._posMinKey()];\n\n this.setState({\n upperBound: slider[size] - handle[size],\n sliderLength: Math.abs(sliderMax - sliderMin),\n handleSize: handle[size],\n sliderStart: this.props.invert ? sliderMax : sliderMin\n });\n }.bind(this), 0);\n\n this.pendingResizeTimeouts.push(resizeTimeout);\n },\n\n // clear all pending timeouts to avoid error messages after unmounting\n _clearPendingResizeTimeouts: function() {\n do {\n var nextTimeout = this.pendingResizeTimeouts.shift();\n\n clearTimeout(nextTimeout);\n } while (this.pendingResizeTimeouts.length);\n },\n\n // calculates the offset of a handle in pixels based on its value.\n _calcOffset: function (value) {\n var range = this.props.max - this.props.min;\n if (range === 0) {\n return 0;\n }\n var ratio = (value - this.props.min) / range;\n return ratio * this.state.upperBound;\n },\n\n // calculates the value corresponding to a given pixel offset, i.e. the inverse of `_calcOffset`.\n _calcValue: function (offset) {\n var ratio = offset / this.state.upperBound;\n return ratio * (this.props.max - this.props.min) + this.props.min;\n },\n\n _buildHandleStyle: function (offset, i) {\n var style = {\n position: 'absolute',\n willChange: this.state.index >= 0 ? this._posMinKey() : '',\n zIndex: this.state.zIndices.indexOf(i) + 1\n };\n style[this._posMinKey()] = offset + 'px';\n return style;\n },\n\n _buildBarStyle: function (min, max) {\n var obj = {\n position: 'absolute',\n willChange: this.state.index >= 0 ? this._posMinKey() + ',' + this._posMaxKey() : ''\n };\n obj[this._posMinKey()] = min;\n obj[this._posMaxKey()] = max;\n return obj;\n },\n\n _getClosestIndex: function (pixelOffset) {\n var minDist = Number.MAX_VALUE;\n var closestIndex = -1;\n\n var value = this.state.value;\n var l = value.length;\n\n for (var i = 0; i < l; i++) {\n var offset = this._calcOffset(value[i]);\n var dist = Math.abs(pixelOffset - offset);\n if (dist < minDist) {\n minDist = dist;\n closestIndex = i;\n }\n }\n\n return closestIndex;\n },\n\n _calcOffsetFromPosition: function (position) {\n var pixelOffset = position - this.state.sliderStart;\n if (this.props.invert) pixelOffset = this.state.sliderLength - pixelOffset;\n pixelOffset -= (this.state.handleSize / 2);\n return pixelOffset;\n },\n\n // Snaps the nearest handle to the value corresponding to `position` and calls `callback` with that handle's index.\n _forceValueFromPosition: function (position, callback) {\n var pixelOffset = this._calcOffsetFromPosition(position);\n var closestIndex = this._getClosestIndex(pixelOffset);\n var nextValue = this._trimAlignValue(this._calcValue(pixelOffset));\n\n var value = this.state.value.slice(); // Clone this.state.value since we'll modify it temporarily\n value[closestIndex] = nextValue;\n\n // Prevents the slider from shrinking below `props.minDistance`\n for (var i = 0; i < value.length - 1; i += 1) {\n if (value[i + 1] - value[i] < this.props.minDistance) return;\n }\n\n this.setState({value: value}, callback.bind(this, closestIndex));\n },\n\n _getMousePosition: function (e) {\n return [\n e['page' + this._axisKey()],\n e['page' + this._orthogonalAxisKey()]\n ];\n },\n\n _getTouchPosition: function (e) {\n var touch = e.touches[0];\n return [\n touch['page' + this._axisKey()],\n touch['page' + this._orthogonalAxisKey()]\n ];\n },\n\n _getKeyDownEventMap: function () {\n return {\n 'keydown': this._onKeyDown,\n 'focusout': this._onBlur\n }\n },\n\n _getMouseEventMap: function () {\n return {\n 'mousemove': this._onMouseMove,\n 'mouseup': this._onMouseUp\n }\n },\n\n _getTouchEventMap: function () {\n return {\n 'touchmove': this._onTouchMove,\n 'touchend': this._onTouchEnd\n }\n },\n\n // create the `keydown` handler for the i-th handle\n _createOnKeyDown: function (i) {\n return function (e) {\n if (this.props.disabled) return;\n this._start(i);\n this._addHandlers(this._getKeyDownEventMap());\n pauseEvent(e);\n }.bind(this);\n },\n\n // create the `mousedown` handler for the i-th handle\n _createOnMouseDown: function (i) {\n return function (e) {\n if (this.props.disabled) return;\n var position = this._getMousePosition(e);\n this._start(i, position[0]);\n this._addHandlers(this._getMouseEventMap());\n pauseEvent(e);\n }.bind(this);\n },\n\n // create the `touchstart` handler for the i-th handle\n _createOnTouchStart: function (i) {\n return function (e) {\n if (this.props.disabled || e.touches.length > 1) return;\n var position = this._getTouchPosition(e);\n this.startPosition = position;\n this.isScrolling = undefined; // don't know yet if the user is trying to scroll\n this._start(i, position[0]);\n this._addHandlers(this._getTouchEventMap());\n stopPropagation(e);\n }.bind(this);\n },\n\n _addHandlers: function (eventMap) {\n for (var key in eventMap) {\n document.addEventListener(key, eventMap[key], false);\n }\n },\n\n _removeHandlers: function (eventMap) {\n for (var key in eventMap) {\n document.removeEventListener(key, eventMap[key], false);\n }\n },\n\n _start: function (i, position) {\n var activeEl = document.activeElement;\n var handleRef = this.refs['handle' + i];\n // if activeElement is body window will lost focus in IE9\n if (activeEl && activeEl != document.body && activeEl != handleRef) {\n activeEl.blur && activeEl.blur();\n }\n\n this.hasMoved = false;\n\n this._fireChangeEvent('onBeforeChange');\n\n var zIndices = this.state.zIndices;\n zIndices.splice(zIndices.indexOf(i), 1); // remove wherever the element is\n zIndices.push(i); // add to end\n\n this.setState({\n startValue: this.state.value[i],\n startPosition: position,\n index: i,\n zIndices: zIndices\n });\n },\n\n _onMouseUp: function () {\n this._onEnd(this._getMouseEventMap());\n },\n\n _onTouchEnd: function () {\n this._onEnd(this._getTouchEventMap());\n },\n\n _onBlur: function () {\n this._onEnd(this._getKeyDownEventMap());\n },\n\n _onEnd: function (eventMap) {\n this._removeHandlers(eventMap);\n this.setState({index: -1}, this._fireChangeEvent.bind(this, 'onAfterChange'));\n },\n\n _onMouseMove: function (e) {\n var position = this._getMousePosition(e);\n var diffPosition = this._getDiffPosition(position[0]);\n var newValue = this._getValueFromPosition(diffPosition);\n this._move(newValue);\n },\n\n _onTouchMove: function (e) {\n if (e.touches.length > 1) return;\n\n var position = this._getTouchPosition(e);\n\n if (typeof this.isScrolling === 'undefined') {\n var diffMainDir = position[0] - this.startPosition[0];\n var diffScrollDir = position[1] - this.startPosition[1];\n this.isScrolling = Math.abs(diffScrollDir) > Math.abs(diffMainDir);\n }\n\n if (this.isScrolling) {\n this.setState({index: -1});\n return;\n }\n\n pauseEvent(e);\n\n var diffPosition = this._getDiffPosition(position[0]);\n var newValue = this._getValueFromPosition(diffPosition);\n\n this._move(newValue);\n },\n\n _onKeyDown: function (e) {\n if (e.ctrlKey || e.shiftKey || e.altKey) return;\n switch (e.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n return this._moveDownOneStep();\n case \"ArrowRight\":\n case \"ArrowDown\":\n return this._moveUpOneStep();\n case \"Home\":\n return this._move(this.props.min);\n case \"End\":\n return this._move(this.props.max);\n default:\n return;\n }\n },\n\n _moveUpOneStep: function () {\n var oldValue = this.state.value[this.state.index];\n var newValue = oldValue + this.props.step;\n this._move(Math.min(newValue, this.props.max));\n },\n\n _moveDownOneStep: function () {\n var oldValue = this.state.value[this.state.index];\n var newValue = oldValue - this.props.step;\n this._move(Math.max(newValue, this.props.min));\n },\n\n _getValueFromPosition: function (position) {\n var diffValue = position / (this.state.sliderLength - this.state.handleSize) * (this.props.max - this.props.min);\n return this._trimAlignValue(this.state.startValue + diffValue);\n },\n\n _getDiffPosition: function (position) {\n var diffPosition = position - this.state.startPosition;\n if (this.props.invert) diffPosition *= -1;\n return diffPosition;\n },\n\n _move: function (newValue) {\n this.hasMoved = true;\n\n var props = this.props;\n var state = this.state;\n var index = state.index;\n\n var value = state.value;\n var length = value.length;\n var oldValue = value[index];\n\n var minDistance = props.minDistance;\n\n // if \"pearling\" (= handles pushing each other) is disabled,\n // prevent the handle from getting closer than `minDistance` to the previous or next handle.\n if (!props.pearling) {\n if (index > 0) {\n var valueBefore = value[index - 1];\n if (newValue < valueBefore + minDistance) {\n newValue = valueBefore + minDistance;\n }\n }\n\n if (index < length - 1) {\n var valueAfter = value[index + 1];\n if (newValue > valueAfter - minDistance) {\n newValue = valueAfter - minDistance;\n }\n }\n }\n\n value[index] = newValue;\n\n // if \"pearling\" is enabled, let the current handle push the pre- and succeeding handles.\n if (props.pearling && length > 1) {\n if (newValue > oldValue) {\n this._pushSucceeding(value, minDistance, index);\n this._trimSucceeding(length, value, minDistance, props.max);\n }\n else if (newValue < oldValue) {\n this._pushPreceding(value, minDistance, index);\n this._trimPreceding(length, value, minDistance, props.min);\n }\n }\n\n // Normally you would use `shouldComponentUpdate`, but since the slider is a low-level component,\n // the extra complexity might be worth the extra performance.\n if (newValue !== oldValue) {\n this.setState({value: value}, this._fireChangeEvent.bind(this, 'onChange'));\n }\n },\n\n _pushSucceeding: function (value, minDistance, index) {\n var i, padding;\n for (i = index, padding = value[i] + minDistance;\n value[i + 1] != null && padding > value[i + 1];\n i++, padding = value[i] + minDistance) {\n value[i + 1] = this._alignValue(padding);\n }\n },\n\n _trimSucceeding: function (length, nextValue, minDistance, max) {\n for (var i = 0; i < length; i++) {\n var padding = max - i * minDistance;\n if (nextValue[length - 1 - i] > padding) {\n nextValue[length - 1 - i] = padding;\n }\n }\n },\n\n _pushPreceding: function (value, minDistance, index) {\n var i, padding;\n for (i = index, padding = value[i] - minDistance;\n value[i - 1] != null && padding < value[i - 1];\n i--, padding = value[i] - minDistance) {\n value[i - 1] = this._alignValue(padding);\n }\n },\n\n _trimPreceding: function (length, nextValue, minDistance, min) {\n for (var i = 0; i < length; i++) {\n var padding = min + i * minDistance;\n if (nextValue[i] < padding) {\n nextValue[i] = padding;\n }\n }\n },\n\n _axisKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return 'X';\n if (orientation === 'vertical') return 'Y';\n },\n\n _orthogonalAxisKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return 'Y';\n if (orientation === 'vertical') return 'X';\n },\n\n _posMinKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return this.props.invert ? 'right' : 'left';\n if (orientation === 'vertical') return this.props.invert ? 'bottom' : 'top';\n },\n\n _posMaxKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return this.props.invert ? 'left' : 'right';\n if (orientation === 'vertical') return this.props.invert ? 'top' : 'bottom';\n },\n\n _sizeKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return 'clientWidth';\n if (orientation === 'vertical') return 'clientHeight';\n },\n\n _trimAlignValue: function (val, props) {\n return this._alignValue(this._trimValue(val, props), props);\n },\n\n _trimValue: function (val, props) {\n props = props || this.props;\n\n if (val <= props.min) val = props.min;\n if (val >= props.max) val = props.max;\n\n return val;\n },\n\n _alignValue: function (val, props) {\n props = props || this.props;\n\n var valModStep = (val - props.min) % props.step;\n var alignValue = val - valModStep;\n\n if (Math.abs(valModStep) * 2 >= props.step) {\n alignValue += (valModStep > 0) ? props.step : (-props.step);\n }\n\n return parseFloat(alignValue.toFixed(5));\n },\n\n _renderHandle: function (style, child, i) {\n var className = this.props.handleClassName + ' ' +\n (this.props.handleClassName + '-' + i) + ' ' +\n (this.state.index === i ? this.props.handleActiveClassName : '');\n\n return (\n React.createElement('div', {\n ref: 'handle' + i,\n key: 'handle' + i,\n className: className,\n style: style,\n onMouseDown: this._createOnMouseDown(i),\n onTouchStart: this._createOnTouchStart(i),\n onFocus: this._createOnKeyDown(i),\n tabIndex: 0,\n role: \"slider\",\n \"aria-valuenow\": this.state.value[i],\n \"aria-valuemin\": this.props.min,\n \"aria-valuemax\": this.props.max,\n },\n child\n )\n );\n },\n\n _renderHandles: function (offset) {\n var length = offset.length;\n\n var styles = this.tempArray;\n for (var i = 0; i < length; i++) {\n styles[i] = this._buildHandleStyle(offset[i], i);\n }\n\n var res = this.tempArray;\n var renderHandle = this._renderHandle;\n if (React.Children.count(this.props.children) > 0) {\n React.Children.forEach(this.props.children, function (child, i) {\n res[i] = renderHandle(styles[i], child, i);\n });\n } else {\n for (i = 0; i < length; i++) {\n res[i] = renderHandle(styles[i], null, i);\n }\n }\n return res;\n },\n\n _renderBar: function (i, offsetFrom, offsetTo) {\n return (\n React.createElement('div', {\n key: 'bar' + i,\n ref: 'bar' + i,\n className: this.props.barClassName + ' ' + this.props.barClassName + '-' + i,\n style: this._buildBarStyle(offsetFrom, this.state.upperBound - offsetTo)\n })\n );\n },\n\n _renderBars: function (offset) {\n var bars = [];\n var lastIndex = offset.length - 1;\n\n bars.push(this._renderBar(0, 0, offset[0]));\n\n for (var i = 0; i < lastIndex; i++) {\n bars.push(this._renderBar(i + 1, offset[i], offset[i + 1]));\n }\n\n bars.push(this._renderBar(lastIndex + 1, offset[lastIndex], this.state.upperBound));\n\n return bars;\n },\n\n _onSliderMouseDown: function (e) {\n if (this.props.disabled) return;\n this.hasMoved = false;\n if (!this.props.snapDragDisabled) {\n var position = this._getMousePosition(e);\n this._forceValueFromPosition(position[0], function (i) {\n this._fireChangeEvent('onChange');\n this._start(i, position[0]);\n this._addHandlers(this._getMouseEventMap());\n }.bind(this));\n }\n\n pauseEvent(e);\n },\n\n _onSliderClick: function (e) {\n if (this.props.disabled) return;\n\n if (this.props.onSliderClick && !this.hasMoved) {\n var position = this._getMousePosition(e);\n var valueAtPos = this._trimAlignValue(this._calcValue(this._calcOffsetFromPosition(position[0])));\n this.props.onSliderClick(valueAtPos);\n }\n },\n\n _fireChangeEvent: function (event) {\n if (this.props[event]) {\n this.props[event](undoEnsureArray(this.state.value));\n }\n },\n\n render: function () {\n var state = this.state;\n var props = this.props;\n\n var offset = this.tempArray;\n var value = state.value;\n var l = value.length;\n for (var i = 0; i < l; i++) {\n offset[i] = this._calcOffset(value[i], i);\n }\n\n var bars = props.withBars ? this._renderBars(offset) : null;\n var handles = this._renderHandles(offset);\n\n return (\n React.createElement('div', {\n ref: 'slider',\n style: {position: 'relative'},\n className: props.className + (props.disabled ? ' disabled' : ''),\n onMouseDown: this._onSliderMouseDown,\n onClick: this._onSliderClick\n },\n bars,\n handles\n )\n );\n }\n });\n\n return ReactSlider;\n}));\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/react-slider/react-slider.js?")},"./src/CSSPropertyOperations/CSSProperty.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridColumn: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n background: {\n backgroundAttachment: true,\n backgroundColor: true,\n backgroundImage: true,\n backgroundPositionX: true,\n backgroundPositionY: true,\n backgroundRepeat: true\n },\n backgroundPosition: {\n backgroundPositionX: true,\n backgroundPositionY: true\n },\n border: {\n borderWidth: true,\n borderStyle: true,\n borderColor: true\n },\n borderBottom: {\n borderBottomWidth: true,\n borderBottomStyle: true,\n borderBottomColor: true\n },\n borderLeft: {\n borderLeftWidth: true,\n borderLeftStyle: true,\n borderLeftColor: true\n },\n borderRight: {\n borderRightWidth: true,\n borderRightStyle: true,\n borderRightColor: true\n },\n borderTop: {\n borderTopWidth: true,\n borderTopStyle: true,\n borderTopColor: true\n },\n font: {\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n fontSize: true,\n lineHeight: true,\n fontFamily: true\n },\n outline: {\n outlineWidth: true,\n outlineStyle: true,\n outlineColor: true\n }\n};\n\nvar CSSProperty = {\n isUnitlessNumber: isUnitlessNumber,\n shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nvar _default = CSSProperty;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(isUnitlessNumber, 'isUnitlessNumber', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(prefixKey, 'prefixKey', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(prefixes, 'prefixes', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(shorthandPropertyExpansions, 'shorthandPropertyExpansions', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(CSSProperty, 'CSSProperty', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(_default, 'default', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/CSSPropertyOperations/CSSProperty.js?")},"./src/CSSPropertyOperations/dangerousStyleValue.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n\n\n// var CSSProperty = require('./CSSProperty');\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _CSSProperty = __webpack_require__(/*! ./CSSProperty.js */ \"./src/CSSPropertyOperations/CSSProperty.js\");\n\nvar _CSSProperty2 = _interopRequireDefault(_CSSProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ \"./node_modules/fbjs/lib/warning.js\");\n\nvar isUnitlessNumber = _CSSProperty2.default.isUnitlessNumber;\nvar styleWarnings = {};\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @param {ReactDOMComponent} component\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, component) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n if (isEmpty) {\n return '';\n }\n\n var isNonNumeric = isNaN(value);\n if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n return '' + value; // cast to string\n }\n\n if (typeof value === 'string') {\n if (true) {\n // Allow '0' to pass through without warning. 0 is already special and\n // doesn't require units, so we don't need to warn about it.\n if (component && value !== '0') {\n var owner = component._currentElement._owner;\n var ownerName = owner ? owner.getName() : null;\n if (ownerName && !styleWarnings[ownerName]) {\n styleWarnings[ownerName] = {};\n }\n var warned = false;\n if (ownerName) {\n var warnings = styleWarnings[ownerName];\n warned = warnings[name];\n if (!warned) {\n warnings[name] = true;\n }\n }\n if (!warned) {\n true ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : undefined;\n }\n }\n }\n value = value.trim();\n }\n return value + 'px';\n}\n\nvar _default = dangerousStyleValue;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(isUnitlessNumber, 'isUnitlessNumber', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/dangerousStyleValue.js');\n\n __REACT_HOT_LOADER__.register(styleWarnings, 'styleWarnings', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/dangerousStyleValue.js');\n\n __REACT_HOT_LOADER__.register(dangerousStyleValue, 'dangerousStyleValue', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/dangerousStyleValue.js');\n\n __REACT_HOT_LOADER__.register(_default, 'default', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/dangerousStyleValue.js');\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/CSSPropertyOperations/dangerousStyleValue.js?")},"./src/CSSPropertyOperations/index.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _CSSProperty = __webpack_require__(/*! ./CSSProperty.js */ \"./src/CSSPropertyOperations/CSSProperty.js\");\n\nvar _CSSProperty2 = _interopRequireDefault(_CSSProperty);\n\nvar _dangerousStyleValue = __webpack_require__(/*! ./dangerousStyleValue.js */ \"./src/CSSPropertyOperations/dangerousStyleValue.js\");\n\nvar _dangerousStyleValue2 = _interopRequireDefault(_dangerousStyleValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// var CSSProperty = require('./CSSProperty.js');\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ \"./node_modules/fbjs/lib/ExecutionEnvironment.js\");\n\nvar camelizeStyleName = __webpack_require__(/*! fbjs/lib/camelizeStyleName */ \"./node_modules/fbjs/lib/camelizeStyleName.js\");\n// var dangerousStyleValue = require('./dangerousStyleValue.js');\nvar hyphenateStyleName = __webpack_require__(/*! fbjs/lib/hyphenateStyleName */ \"./node_modules/fbjs/lib/hyphenateStyleName.js\");\nvar memoizeStringOnly = __webpack_require__(/*! fbjs/lib/memoizeStringOnly */ \"./node_modules/fbjs/lib/memoizeStringOnly.js\");\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ \"./node_modules/fbjs/lib/warning.js\");\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n var tempStyle = document.createElement('div').style;\n try {\n // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n tempStyle.font = '';\n } catch (e) {\n hasShorthandPropertyBug = true;\n }\n // IE8 only supports accessing cssFloat (standard) as styleFloat\n if (document.documentElement.style.cssFloat === undefined) {\n styleFloatAccessor = 'styleFloat';\n }\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n /**\n * Serializes a mapping of style properties for use as inline styles:\n *\n * > createMarkupForStyles({width: '200px', height: 0})\n * \"width:200px;height:0;\"\n *\n * Undefined values are ignored so that declarative programming is easier.\n * The result should be HTML-escaped before insertion into the DOM.\n *\n * @param {object} styles\n * @param {ReactDOMComponent} component\n * @return {?string}\n */\n createMarkupForStyles: function createMarkupForStyles(styles, component) {\n var serialized = '';\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var styleValue = styles[styleName];\n if (styleValue != null) {\n serialized += processStyleName(styleName) + ':';\n serialized += (0, _dangerousStyleValue2.default)(styleName, styleValue, component) + ';';\n }\n }\n return serialized || null;\n },\n\n /**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n * @param {ReactDOMComponent} component\n */\n setValueForStyles: function setValueForStyles(node, styles, component) {\n var style = node.style;\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var styleValue = (0, _dangerousStyleValue2.default)(styleName, styles[styleName], component);\n if (styleName === 'float' || styleName === 'cssFloat') {\n styleName = styleFloatAccessor;\n }\n if (styleValue) {\n style[styleName] = styleValue;\n } else {\n var expansion = hasShorthandPropertyBug && _CSSProperty2.default.shorthandPropertyExpansions[styleName];\n if (expansion) {\n // Shorthand property that IE8 won't like unsetting, so unset each\n // component to placate it\n for (var individualStyleName in expansion) {\n style[individualStyleName] = '';\n }\n } else {\n style[styleName] = '';\n }\n }\n }\n }\n\n};\n\nvar _default = CSSPropertyOperations;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(processStyleName, 'processStyleName', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(hasShorthandPropertyBug, 'hasShorthandPropertyBug', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(styleFloatAccessor, 'styleFloatAccessor', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(tempStyle, 'tempStyle', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(CSSPropertyOperations, 'CSSPropertyOperations', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(_default, 'default', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/CSSPropertyOperations/index.js?")},"./src/Picker.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _blacklist = __webpack_require__(/*! blacklist */ "./node_modules/blacklist/index.js");\n\nvar _blacklist2 = _interopRequireDefault(_blacklist);\n\nvar _Calendar = __webpack_require__(/*! ./panels/Calendar.jsx */ "./src/panels/Calendar.jsx");\n\nvar _Calendar2 = _interopRequireDefault(_Calendar);\n\nvar _Time = __webpack_require__(/*! ./panels/Time.jsx */ "./src/panels/Time.jsx");\n\nvar _Time2 = _interopRequireDefault(_Time);\n\nvar _Shortcuts = __webpack_require__(/*! ./panels/Shortcuts.jsx */ "./src/panels/Shortcuts.jsx");\n\nvar _Shortcuts2 = _interopRequireDefault(_Shortcuts);\n\nvar _sass = __webpack_require__(/*! ./sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Picker = function (_Component) {\n _inherits(Picker, _Component);\n\n function Picker() {\n _classCallCheck(this, Picker);\n\n var _this = _possibleConstructorReturn(this, (Picker.__proto__ || Object.getPrototypeOf(Picker)).call(this));\n\n _this.changePanel = function () {\n return _this.__changePanel__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n panel: "calendar"\n };\n return _this;\n }\n\n _createClass(Picker, [{\n key: "__changePanel__REACT_HOT_LOADER__",\n value: function __changePanel__REACT_HOT_LOADER__() {\n return this.__changePanel__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__changePanel__REACT_HOT_LOADER__",\n value: function __changePanel__REACT_HOT_LOADER__(panel) {\n this.setState({\n panel: panel\n });\n }\n }, {\n key: "render",\n value: function render() {\n var _props = this.props,\n _props$isOpen = _props.isOpen,\n isOpen = _props$isOpen === undefined ? true : _props$isOpen,\n shortcuts = _props.shortcuts,\n splitPanel = _props.splitPanel,\n _props$showTimePicker = _props.showTimePicker,\n showTimePicker = _props$showTimePicker === undefined ? true : _props$showTimePicker,\n _props$showCalendarPi = _props.showCalendarPicker,\n showCalendarPicker = _props$showCalendarPi === undefined ? true : _props$showCalendarPi;\n var panel = this.state.panel;\n\n var isTimePanel = panel === "time";\n var isCalendarPanel = panel === "calendar";\n var className = (0, _bind2.default)(_sass2.default["datetime-picker"], this.props.className, {\n split: splitPanel\n });\n var props = (0, _blacklist2.default)(this.props, "className", "splitPanel", "isOpen");\n\n return _react2.default.createElement(\n "div",\n {\n className: className,\n style: { display: isOpen ? "block" : "none" },\n onClick: function onClick(evt) {\n return evt.stopPropagation();\n }\n },\n shortcuts ? _react2.default.createElement(_Shortcuts2.default, props) : undefined,\n splitPanel ? _react2.default.createElement(\n "div",\n { className: "panel-nav" },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n onClick: this.changePanel.bind(this, "calendar"),\n className: isCalendarPanel ? "active" : ""\n },\n _react2.default.createElement("i", {\n className: _sass2.default["icon"] + " " + _sass2.default["icon-calendar-empty"]\n }),\n "Date"\n ),\n _react2.default.createElement(\n "button",\n {\n type: "button",\n onClick: this.changePanel.bind(this, "time"),\n className: isTimePanel ? "active" : ""\n },\n _react2.default.createElement("i", { className: _sass2.default["icon"] + " " + _sass2.default["icon-clock"] }),\n "Time"\n )\n ) : undefined,\n showCalendarPicker ? _react2.default.createElement(_Calendar2.default, _extends({}, props, {\n isOpen: isOpen,\n style: {\n display: isCalendarPanel || !splitPanel ? "block" : "none"\n }\n })) : undefined,\n showTimePicker ? _react2.default.createElement(_Time2.default, _extends({}, props, {\n style: { display: isTimePanel || !splitPanel ? "block" : "none" }\n })) : undefined\n );\n }\n }]);\n\n return Picker;\n}(_react.Component);\n\nvar _default = Picker;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Picker, "Picker", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Picker.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Picker.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/Picker.jsx?')},"./src/Portal.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _index = __webpack_require__(/*! ./CSSPropertyOperations/index.js */ "./src/CSSPropertyOperations/index.js");\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactDom = __webpack_require__(/*! react-dom */ "react-dom");\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Portal = function (_Component) {\n _inherits(Portal, _Component);\n\n function Portal() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Portal);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Portal.__proto__ || Object.getPrototypeOf(Portal)).call.apply(_ref, [this].concat(args))), _this), _this.applyClassNameAndStyle = function () {\n var _this2;\n\n return (_this2 = _this).__applyClassNameAndStyle__REACT_HOT_LOADER__.apply(_this2, arguments);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Portal, [{\n key: "__applyClassNameAndStyle__REACT_HOT_LOADER__",\n value: function __applyClassNameAndStyle__REACT_HOT_LOADER__() {\n return this.__applyClassNameAndStyle__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n this.renderPortal(this.props);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n this.renderPortal(props);\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (this.node) {\n _reactDom2.default.unmountComponentAtNode(this.node);\n document.body.removeChild(this.node);\n }\n\n this.portal = null;\n this.node = null;\n }\n }, {\n key: "__applyClassNameAndStyle__REACT_HOT_LOADER__",\n value: function __applyClassNameAndStyle__REACT_HOT_LOADER__(props) {\n if (props.className) {\n this.node.className = props.className;\n }\n\n if (props.style) {\n _index2.default.setValueForStyles(this.node, props.style, this._reactInternalInstance);\n }\n }\n }, {\n key: "renderPortal",\n value: function renderPortal(props) {\n if (!this.node) {\n this.node = document.createElement("div");\n this.applyClassNameAndStyle(props);\n\n document.body.appendChild(this.node);\n } else {\n this.applyClassNameAndStyle(props);\n }\n\n var children = props.children;\n\n\n this.portal = _reactDom2.default.unstable_renderSubtreeIntoContainer(this, children, this.node);\n }\n }, {\n key: "render",\n value: function render() {\n return null;\n }\n }]);\n\n return Portal;\n}(_react.Component);\n\nvar _default = Portal;\nexports.default = _default;\n;\n\nvar _temp2 = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Portal, "Portal", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Portal.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Portal.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/Portal.jsx?')},"./src/Range.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _blacklist = __webpack_require__(/*! blacklist */ "./node_modules/blacklist/index.js");\n\nvar _blacklist2 = _interopRequireDefault(_blacklist);\n\nvar _Picker = __webpack_require__(/*! ./Picker.jsx */ "./src/Picker.jsx");\n\nvar _Picker2 = _interopRequireDefault(_Picker);\n\nvar _Shortcuts = __webpack_require__(/*! ./panels/Shortcuts.jsx */ "./src/panels/Shortcuts.jsx");\n\nvar _Shortcuts2 = _interopRequireDefault(_Shortcuts);\n\nvar _constants = __webpack_require__(/*! ./constants.js */ "./src/constants.js");\n\nvar _sass = __webpack_require__(/*! ./sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Range = function (_Component) {\n _inherits(Range, _Component);\n\n function Range(props) {\n _classCallCheck(this, Range);\n\n var _this = _possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).call(this, props));\n\n _this.handleChange = function () {\n return _this.__handleChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleShortcutChange = function () {\n return _this.__handleShortcutChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.onConfirm = function () {\n return _this.__onConfirm__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n moment: props.moment\n };\n return _this;\n }\n\n _createClass(Range, [{\n key: "__onConfirm__REACT_HOT_LOADER__",\n value: function __onConfirm__REACT_HOT_LOADER__() {\n return this.__onConfirm__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleShortcutChange__REACT_HOT_LOADER__",\n value: function __handleShortcutChange__REACT_HOT_LOADER__() {\n return this.__handleShortcutChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__() {\n return this.__handleChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n this.setState({\n moment: props.moment\n });\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__(moment) {\n this.setState({\n moment: moment\n });\n }\n }, {\n key: "__handleShortcutChange__REACT_HOT_LOADER__",\n value: function __handleShortcutChange__REACT_HOT_LOADER__(moment, isCustom) {\n var onChange = this.props.onChange;\n\n\n if (isCustom) {\n this.setState({\n moment: moment\n });\n } else {\n onChange && onChange(moment);\n }\n }\n }, {\n key: "__onConfirm__REACT_HOT_LOADER__",\n value: function __onConfirm__REACT_HOT_LOADER__() {\n var moment = this.state.moment;\n var onChange = this.props.onChange;\n\n\n onChange && onChange(moment);\n }\n }, {\n key: "render",\n value: function render() {\n var moment = this.state.moment;\n var _props = this.props,\n format = _props.format,\n _props$showTimePicker = _props.showTimePicker,\n showTimePicker = _props$showTimePicker === undefined ? false : _props$showTimePicker,\n _props$isOpen = _props.isOpen,\n isOpen = _props$isOpen === undefined ? true : _props$isOpen,\n shortcuts = _props.shortcuts,\n _props$confirmButtonT = _props.confirmButtonText,\n confirmButtonText = _props$confirmButtonT === undefined ? _constants.CONFIRM_BUTTON_TEXT : _props$confirmButtonT,\n _props$startDateText = _props.startDateText,\n startDateText = _props$startDateText === undefined ? _constants.START_DATE_TEXT : _props$startDateText,\n _props$endDateText = _props.endDateText,\n endDateText = _props$endDateText === undefined ? _constants.END_DATE_TEXT : _props$endDateText,\n isSolar = _props.isSolar;\n\n var formatStyle = format || (showTimePicker ? isSolar ? "jYYYY/jMM/jDD HH:mm" : "YYYY/MM/DD HH:mm" : isSolar ? "jYYYY/jMM/jDD" : "YYYY/MM/DD");\n var className = (0, _bind2.default)(_sass2.default["datetime-range-picker"], this.props.className);\n var props = (0, _blacklist2.default)(this.props, "className", "isOpen", "format", "moment", "showTimePicker", "shortcuts", "onChange");\n\n return _react2.default.createElement(\n "div",\n { className: className, style: { display: isOpen ? "block" : "none" } },\n _react2.default.createElement(\n "div",\n { className: "tools-bar" },\n shortcuts ? _react2.default.createElement(_Shortcuts2.default, _extends({}, props, {\n moment: moment || {},\n range: true,\n shortcuts: shortcuts,\n onChange: this.handleShortcutChange\n })) : undefined,\n _react2.default.createElement(\n "div",\n { className: "buttons" },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: _sass2.default["btn"],\n onClick: this.onConfirm\n },\n confirmButtonText\n )\n )\n ),\n _react2.default.createElement(\n "div",\n { className: "datetime-range-picker-panel" },\n _react2.default.createElement(\n "table",\n null,\n _react2.default.createElement(\n "tbody",\n null,\n _react2.default.createElement(\n "tr",\n null,\n _react2.default.createElement(\n "td",\n { className: "datetime-text" },\n _react2.default.createElement(\n "span",\n { className: "text-label" },\n startDateText\n ),\n _react2.default.createElement(\n "span",\n { className: "text-value" },\n moment && moment.start ? moment.start.format(formatStyle) : undefined\n )\n ),\n _react2.default.createElement(\n "td",\n { className: "datetime-text" },\n _react2.default.createElement(\n "span",\n { className: "text-label" },\n endDateText\n ),\n _react2.default.createElement(\n "span",\n { className: "text-value" },\n moment && moment.end ? moment.end.format(formatStyle) : undefined\n )\n )\n ),\n _react2.default.createElement(\n "tr",\n null,\n _react2.default.createElement(\n "td",\n null,\n _react2.default.createElement(_Picker2.default, _extends({}, props, {\n isOpen: isOpen,\n className: "range-start-picker",\n showTimePicker: showTimePicker,\n moment: moment,\n range: true,\n rangeAt: "start",\n onChange: this.handleChange\n }))\n ),\n _react2.default.createElement(\n "td",\n null,\n _react2.default.createElement(_Picker2.default, _extends({}, props, {\n isOpen: isOpen,\n className: "range-end-picker",\n showTimePicker: showTimePicker,\n moment: moment,\n range: true,\n rangeAt: "end",\n onChange: this.handleChange\n }))\n )\n )\n )\n )\n )\n );\n }\n }]);\n\n return Range;\n}(_react.Component);\n\nvar _default = Range;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Range, "Range", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Range.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Range.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/Range.jsx?')},"./src/RangeTrigger.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(/*! react-dom */ "react-dom");\n\nvar _blacklist = __webpack_require__(/*! blacklist */ "./node_modules/blacklist/index.js");\n\nvar _blacklist2 = _interopRequireDefault(_blacklist);\n\nvar _Range = __webpack_require__(/*! ./Range.jsx */ "./src/Range.jsx");\n\nvar _Range2 = _interopRequireDefault(_Range);\n\nvar _Portal = __webpack_require__(/*! ./Portal.jsx */ "./src/Portal.jsx");\n\nvar _Portal2 = _interopRequireDefault(_Portal);\n\nvar _sass = __webpack_require__(/*! ./sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RangeTrigger = function (_Component) {\n _inherits(RangeTrigger, _Component);\n\n function RangeTrigger() {\n _classCallCheck(this, RangeTrigger);\n\n var _this = _possibleConstructorReturn(this, (RangeTrigger.__proto__ || Object.getPrototypeOf(RangeTrigger)).call(this));\n\n _this.handleDocumentClick = function () {\n return _this.__handleDocumentClick__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handlePortalPosition = function () {\n return _this.__handlePortalPosition__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleChange = function () {\n return _this.__handleChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.togglePicker = function () {\n return _this.__togglePicker__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.getPosition = function () {\n return _this.__getPosition__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderPortal = function () {\n return _this.___renderPortal__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderPicker = function () {\n return _this.___renderPicker__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n isOpen: false,\n pos: {}\n };\n return _this;\n }\n\n _createClass(RangeTrigger, [{\n key: "___renderPicker__REACT_HOT_LOADER__",\n value: function ___renderPicker__REACT_HOT_LOADER__() {\n return this.___renderPicker__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "___renderPortal__REACT_HOT_LOADER__",\n value: function ___renderPortal__REACT_HOT_LOADER__() {\n return this.___renderPortal__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__getPosition__REACT_HOT_LOADER__",\n value: function __getPosition__REACT_HOT_LOADER__() {\n return this.__getPosition__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__togglePicker__REACT_HOT_LOADER__",\n value: function __togglePicker__REACT_HOT_LOADER__() {\n return this.__togglePicker__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__() {\n return this.__handleChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handlePortalPosition__REACT_HOT_LOADER__",\n value: function __handlePortalPosition__REACT_HOT_LOADER__() {\n return this.__handlePortalPosition__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleDocumentClick__REACT_HOT_LOADER__",\n value: function __handleDocumentClick__REACT_HOT_LOADER__() {\n return this.__handleDocumentClick__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n window.addEventListener("click", this.handleDocumentClick, false);\n\n if (this.props.appendToBody) {\n window.addEventListener("scroll", this.handlePortalPosition, false);\n window.addEventListener("resize", this.handlePortalPosition, false);\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n window.removeEventListener("click", this.handleDocumentClick, false);\n\n if (this.props.appendToBody) {\n window.removeEventListener("scroll", this.handlePortalPosition, false);\n window.removeEventListener("resize", this.handlePortalPosition, false);\n }\n }\n }, {\n key: "__handleDocumentClick__REACT_HOT_LOADER__",\n value: function __handleDocumentClick__REACT_HOT_LOADER__(evt) {\n if (!(0, _reactDom.findDOMNode)(this).contains(evt.target)) {\n this.togglePicker(false);\n }\n }\n }, {\n key: "__handlePortalPosition__REACT_HOT_LOADER__",\n value: function __handlePortalPosition__REACT_HOT_LOADER__() {\n if (this.state.isOpen) {\n this.setState({\n pos: this.getPosition()\n });\n }\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__(moment) {\n var onChange = this.props.onChange;\n\n\n this.setState({\n isOpen: false\n });\n onChange && onChange(moment);\n }\n }, {\n key: "__togglePicker__REACT_HOT_LOADER__",\n value: function __togglePicker__REACT_HOT_LOADER__(isOpen) {\n var disabled = this.props.disabled;\n\n\n if (disabled) return;\n\n this.setState({\n isOpen: isOpen,\n pos: this.getPosition()\n });\n }\n }, {\n key: "__getPosition__REACT_HOT_LOADER__",\n value: function __getPosition__REACT_HOT_LOADER__() {\n var elem = this.refs.trigger;\n var elemBCR = elem.getBoundingClientRect();\n\n return {\n top: Math.round(elemBCR.top + elemBCR.height),\n left: Math.round(elemBCR.left)\n };\n }\n }, {\n key: "___renderPortal__REACT_HOT_LOADER__",\n value: function ___renderPortal__REACT_HOT_LOADER__() {\n var _state = this.state,\n pos = _state.pos,\n isOpen = _state.isOpen;\n\n var style = {\n display: isOpen ? "block" : "none",\n position: "fixed",\n top: pos.top + "px",\n left: pos.left + "px"\n };\n\n return _react2.default.createElement(\n _Portal2.default,\n { style: style },\n this._renderPicker(true)\n );\n }\n }, {\n key: "___renderPicker__REACT_HOT_LOADER__",\n value: function ___renderPicker__REACT_HOT_LOADER__(isOpen) {\n var props = (0, _blacklist2.default)(this.props, "className", "appendToBody", "children", "onChange");\n var position = props.position;\n\n\n return _react2.default.createElement(_Range2.default, _extends({}, props, {\n className: _sass2.default["datetime-range-picker-popup"] + " " + (String(position).toLowerCase() === "top" ? _sass2.default["pos-top"] : _sass2.default["pos-bottom"]),\n isOpen: isOpen,\n onChange: this.handleChange\n }));\n }\n }, {\n key: "render",\n value: function render() {\n var _props = this.props,\n children = _props.children,\n appendToBody = _props.appendToBody,\n className = _props.className;\n var isOpen = this.state.isOpen;\n\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["datetime-range-trigger"] + " " + className },\n _react2.default.createElement(\n "div",\n { onClick: this.togglePicker.bind(this, !isOpen), ref: "trigger" },\n children\n ),\n appendToBody ? this._renderPortal() : this._renderPicker(isOpen)\n );\n }\n }]);\n\n return RangeTrigger;\n}(_react.Component);\n\nvar _default = RangeTrigger;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(RangeTrigger, "RangeTrigger", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/RangeTrigger.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/RangeTrigger.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/RangeTrigger.jsx?')},"./src/Trigger.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(/*! react-dom */ "react-dom");\n\nvar _blacklist = __webpack_require__(/*! blacklist */ "./node_modules/blacklist/index.js");\n\nvar _blacklist2 = _interopRequireDefault(_blacklist);\n\nvar _Picker = __webpack_require__(/*! ./Picker.jsx */ "./src/Picker.jsx");\n\nvar _Picker2 = _interopRequireDefault(_Picker);\n\nvar _Portal = __webpack_require__(/*! ./Portal.jsx */ "./src/Portal.jsx");\n\nvar _Portal2 = _interopRequireDefault(_Portal);\n\nvar _sass = __webpack_require__(/*! ./sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Trigger = function (_Component) {\n _inherits(Trigger, _Component);\n\n function Trigger() {\n _classCallCheck(this, Trigger);\n\n var _this = _possibleConstructorReturn(this, (Trigger.__proto__ || Object.getPrototypeOf(Trigger)).call(this));\n\n _this.handleDocumentClick = function () {\n return _this.__handleDocumentClick__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handlePortalPosition = function () {\n return _this.__handlePortalPosition__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleChange = function () {\n return _this.__handleChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.togglePicker = function () {\n return _this.__togglePicker__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.getPosition = function () {\n return _this.__getPosition__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderPortal = function () {\n return _this.___renderPortal__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderPicker = function () {\n return _this.___renderPicker__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n isOpen: false,\n pos: {}\n };\n return _this;\n }\n\n _createClass(Trigger, [{\n key: "___renderPicker__REACT_HOT_LOADER__",\n value: function ___renderPicker__REACT_HOT_LOADER__() {\n return this.___renderPicker__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "___renderPortal__REACT_HOT_LOADER__",\n value: function ___renderPortal__REACT_HOT_LOADER__() {\n return this.___renderPortal__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__getPosition__REACT_HOT_LOADER__",\n value: function __getPosition__REACT_HOT_LOADER__() {\n return this.__getPosition__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__togglePicker__REACT_HOT_LOADER__",\n value: function __togglePicker__REACT_HOT_LOADER__() {\n return this.__togglePicker__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__() {\n return this.__handleChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handlePortalPosition__REACT_HOT_LOADER__",\n value: function __handlePortalPosition__REACT_HOT_LOADER__() {\n return this.__handlePortalPosition__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleDocumentClick__REACT_HOT_LOADER__",\n value: function __handleDocumentClick__REACT_HOT_LOADER__() {\n return this.__handleDocumentClick__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n window.addEventListener("click", this.handleDocumentClick, false);\n\n if (this.props.appendToBody) {\n window.addEventListener("scroll", this.handlePortalPosition, false);\n window.addEventListener("resize", this.handlePortalPosition, false);\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n window.removeEventListener("click", this.handleDocumentClick, false);\n\n if (this.props.appendToBody) {\n window.removeEventListener("scroll", this.handlePortalPosition, false);\n window.removeEventListener("resize", this.handlePortalPosition, false);\n }\n }\n }, {\n key: "__handleDocumentClick__REACT_HOT_LOADER__",\n value: function __handleDocumentClick__REACT_HOT_LOADER__(evt) {\n if (!(0, _reactDom.findDOMNode)(this).contains(evt.target)) {\n this.togglePicker(false);\n }\n }\n }, {\n key: "__handlePortalPosition__REACT_HOT_LOADER__",\n value: function __handlePortalPosition__REACT_HOT_LOADER__() {\n if (this.state.isOpen) {\n this.setState({\n pos: this.getPosition()\n });\n }\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__(moment, currentPanel) {\n var _props = this.props,\n closeOnSelectDay = _props.closeOnSelectDay,\n onChange = _props.onChange;\n\n\n if (currentPanel === "day" && closeOnSelectDay) {\n this.setState({\n isOpen: false\n });\n }\n\n onChange && onChange(moment);\n }\n }, {\n key: "__togglePicker__REACT_HOT_LOADER__",\n value: function __togglePicker__REACT_HOT_LOADER__(isOpen) {\n var disabled = this.props.disabled;\n\n\n if (disabled) return;\n\n this.setState({\n isOpen: isOpen,\n pos: this.getPosition()\n });\n }\n }, {\n key: "__getPosition__REACT_HOT_LOADER__",\n value: function __getPosition__REACT_HOT_LOADER__() {\n var elem = this.refs.trigger;\n var elemBCR = elem.getBoundingClientRect();\n\n return {\n top: Math.round(elemBCR.top + elemBCR.height),\n left: Math.round(elemBCR.left)\n };\n }\n }, {\n key: "___renderPortal__REACT_HOT_LOADER__",\n value: function ___renderPortal__REACT_HOT_LOADER__() {\n var _state = this.state,\n pos = _state.pos,\n isOpen = _state.isOpen;\n\n var style = {\n display: isOpen ? "block" : "none",\n position: "fixed",\n top: pos.top + "px",\n left: pos.left + "px"\n };\n\n return _react2.default.createElement(\n _Portal2.default,\n { style: style },\n this._renderPicker(true)\n );\n }\n }, {\n key: "___renderPicker__REACT_HOT_LOADER__",\n value: function ___renderPicker__REACT_HOT_LOADER__(isOpen) {\n var props = (0, _blacklist2.default)(this.props, "className", "appendToBody", "children", "onChange");\n var position = props.position;\n\n\n return _react2.default.createElement(_Picker2.default, _extends({}, props, {\n className: _sass2.default["datetime-picker-popup"] + " " + (String(position).toLowerCase() === "top" ? _sass2.default["pos-top"] : _sass2.default["pos-bottom"]),\n isOpen: isOpen,\n onChange: this.handleChange\n }));\n }\n }, {\n key: "render",\n value: function render() {\n var _props2 = this.props,\n children = _props2.children,\n appendToBody = _props2.appendToBody,\n className = _props2.className;\n var isOpen = this.state.isOpen;\n\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["datetime-trigger"] + " " + className },\n _react2.default.createElement(\n "div",\n { onClick: this.togglePicker.bind(this, !isOpen), ref: "trigger" },\n children\n ),\n appendToBody ? this._renderPortal() : this._renderPicker(isOpen)\n );\n }\n }]);\n\n return Trigger;\n}(_react.Component);\n\nvar _default = Trigger;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Trigger, "Trigger", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Trigger.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Trigger.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/Trigger.jsx?')},"./src/constants.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nvar WEEKS = exports.WEEKS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];\nvar WEEKS_FA = exports.WEEKS_FA = ["\u0634", "\u06cc", "\u062f", "\u0633", "\u0686", "\u067e", "\u062c"];\n\nvar MONTHS = exports.MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];\nvar MONTHS_FA = exports.MONTHS_FA = ["\u0698\u0627\u0646\u0648\u06cc\u0647", "\u0641\u0648\u0631\u06cc\u0647", "\u0645\u0627\u0631\u0633", "\u0622\u0648\u0631\u06cc\u0644", "\u0645\u0647", "\u0698\u0648\u0626\u0646", "\u0698\u0648\u0626\u06cc\u0647", "\u0627\u0648\u062a", "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0628\u0631", "\u0646\u0648\u0627\u0645\u0628\u0631", "\u062f\u0633\u0627\u0645\u0628\u0631"];\n\nvar MONTHS_SOLAR = exports.MONTHS_SOLAR = ["Farvardin", "Ordibehesht", "Khordaad", "Tir", "Amordaad", "Shahrivar", "Mehr", "Aabaan", "Aazar", "Dey", "Bahman", "Esfand"];\nvar MONTHS_SOLAR_FA = exports.MONTHS_SOLAR_FA = ["\u0641\u0631\u0648\u0631\u062f\u06cc\u0646", "\u0627\u0631\u062f\u06cc\u0628\u0647\u0634\u062a", "\u062e\u0631\u062f\u0627\u062f", "\u062a\u06cc\u0631", "\u0645\u0631\u062f\u0627\u062f", "\u0634\u0647\u0631\u06cc\u0648\u0631", "\u0645\u0647\u0631", "\u0622\u0628\u0627\u0646", "\u0622\u0630\u0631", "\u062f\u06cc", "\u0628\u0647\u0645\u0646", "\u0627\u0633\u0641\u0646\u062f"];\n\nvar DAY_FORMAT = exports.DAY_FORMAT = "MMMM, YYYY";\nvar DAY_FORMAT_SOLAR = exports.DAY_FORMAT_SOLAR = "jMMMM, jYYYY";\n\nvar CONFIRM_BUTTON_TEXT = exports.CONFIRM_BUTTON_TEXT = "Confirm";\nvar CONFIRM_BUTTON_TEXT_FA = exports.CONFIRM_BUTTON_TEXT_FA = "\u062a\u0627\u06cc\u06cc\u062f";\n\nvar START_DATE_TEXT = exports.START_DATE_TEXT = "Start Date:";\nvar START_DATE_TEXT_FA = exports.START_DATE_TEXT_FA = "\u062a\u0627\u0631\u06cc\u062e \u0634\u0631\u0648\u0639:";\n\nvar END_DATE_TEXT = exports.END_DATE_TEXT = "End Date:";\nvar END_DATE_TEXT_FA = exports.END_DATE_TEXT_FA = "\u062a\u0627\u0631\u06cc\u062e \u067e\u0627\u06cc\u0627\u0646:";\n\nvar CUSTOM_BUTTON_TEXT = exports.CUSTOM_BUTTON_TEXT = "Custom";\nvar CUSTOM_BUTTON_TEXT_FA = exports.CUSTOM_BUTTON_TEXT_FA = "\u0627\u0646\u062a\u062e\u0627\u0628\u06cc";\n\nvar PERSIAN_NUMBERS = exports.PERSIAN_NUMBERS = ["\u06f0", "\u06f1", "\u06f2", "\u06f3", "\u06f4", "\u06f5", "\u06f6", "\u06f7", "\u06f8", "\u06f9"];\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(WEEKS, "WEEKS", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(WEEKS_FA, "WEEKS_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(MONTHS, "MONTHS", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(MONTHS_FA, "MONTHS_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(MONTHS_SOLAR, "MONTHS_SOLAR", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(MONTHS_SOLAR_FA, "MONTHS_SOLAR_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(DAY_FORMAT, "DAY_FORMAT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(DAY_FORMAT_SOLAR, "DAY_FORMAT_SOLAR", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(CONFIRM_BUTTON_TEXT, "CONFIRM_BUTTON_TEXT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(CONFIRM_BUTTON_TEXT_FA, "CONFIRM_BUTTON_TEXT_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(START_DATE_TEXT, "START_DATE_TEXT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(START_DATE_TEXT_FA, "START_DATE_TEXT_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(END_DATE_TEXT, "END_DATE_TEXT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(END_DATE_TEXT_FA, "END_DATE_TEXT_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(CUSTOM_BUTTON_TEXT, "CUSTOM_BUTTON_TEXT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(CUSTOM_BUTTON_TEXT_FA, "CUSTOM_BUTTON_TEXT_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(PERSIAN_NUMBERS, "PERSIAN_NUMBERS", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/constants.js?')},"./src/index.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Picker = __webpack_require__(/*! ./Picker.jsx */ \"./src/Picker.jsx\");\n\nObject.defineProperty(exports, 'DatetimePicker', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Picker).default;\n }\n});\n\nvar _Range = __webpack_require__(/*! ./Range.jsx */ \"./src/Range.jsx\");\n\nObject.defineProperty(exports, 'DatetimeRangePicker', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Range).default;\n }\n});\n\nvar _Trigger = __webpack_require__(/*! ./Trigger.jsx */ \"./src/Trigger.jsx\");\n\nObject.defineProperty(exports, 'DatetimePickerTrigger', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Trigger).default;\n }\n});\n\nvar _RangeTrigger = __webpack_require__(/*! ./RangeTrigger.jsx */ \"./src/RangeTrigger.jsx\");\n\nObject.defineProperty(exports, 'DatetimeRangePickerTrigger', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_RangeTrigger).default;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/index.js?")},"./src/panels/Calendar.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Day = __webpack_require__(/*! ./Day.jsx */ "./src/panels/Day.jsx");\n\nvar _Day2 = _interopRequireDefault(_Day);\n\nvar _Month = __webpack_require__(/*! ./Month.jsx */ "./src/panels/Month.jsx");\n\nvar _Month2 = _interopRequireDefault(_Month);\n\nvar _Year = __webpack_require__(/*! ./Year.jsx */ "./src/panels/Year.jsx");\n\nvar _Year2 = _interopRequireDefault(_Year);\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Calendar = function (_Component) {\n _inherits(Calendar, _Component);\n\n function Calendar(props) {\n _classCallCheck(this, Calendar);\n\n var _this = _possibleConstructorReturn(this, (Calendar.__proto__ || Object.getPrototypeOf(Calendar)).call(this, props));\n\n _this.getCurrentMoment = function () {\n return _this.__getCurrentMoment__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleSelect = function () {\n return _this.__handleSelect__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.changePanel = function () {\n return _this.__changePanel__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n moment: _this.getCurrentMoment(props),\n panel: props.minPanel || "day"\n };\n return _this;\n }\n\n _createClass(Calendar, [{\n key: "__changePanel__REACT_HOT_LOADER__",\n value: function __changePanel__REACT_HOT_LOADER__() {\n return this.__changePanel__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleSelect__REACT_HOT_LOADER__",\n value: function __handleSelect__REACT_HOT_LOADER__() {\n return this.__handleSelect__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__getCurrentMoment__REACT_HOT_LOADER__",\n value: function __getCurrentMoment__REACT_HOT_LOADER__() {\n return this.__getCurrentMoment__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n this.setState({\n moment: this.getCurrentMoment(props)\n });\n\n if (!props.isOpen) {\n this.setState({\n panel: props.minPanel || "day"\n });\n }\n }\n }, {\n key: "__getCurrentMoment__REACT_HOT_LOADER__",\n value: function __getCurrentMoment__REACT_HOT_LOADER__(props) {\n var range = props.range,\n rangeAt = props.rangeAt;\n\n var now = this.state ? this.state.moment || moment() : moment();\n var result = props.moment;\n\n if (result) {\n if (range) {\n result = result[rangeAt] || now;\n }\n } else {\n result = now;\n }\n\n return result;\n }\n }, {\n key: "__handleSelect__REACT_HOT_LOADER__",\n value: function __handleSelect__REACT_HOT_LOADER__(selected) {\n var panel = this.state.panel;\n var _props = this.props,\n onChange = _props.onChange,\n range = _props.range,\n rangeAt = _props.rangeAt,\n minPanel = _props.minPanel;\n\n var nextPanel = (panel === "year" ? "month" : "day") === "month" ? minPanel === "year" ? "year" : "month" : minPanel === "month" ? "month" : "day";\n var _selected = this.props.moment;\n var shouldChange = panel === minPanel;\n\n if (_selected && !shouldChange) {\n if (range) {\n shouldChange = rangeAt === "start" ? _selected.start : _selected.end;\n } else {\n shouldChange = true;\n }\n }\n\n if (range) {\n var copyed = _selected ? _extends({}, _selected) : {};\n\n copyed[rangeAt] = selected;\n _selected = copyed;\n } else {\n _selected = selected;\n }\n\n this.changePanel(nextPanel, selected);\n\n if (shouldChange) {\n onChange && onChange(_selected, panel);\n }\n }\n }, {\n key: "__changePanel__REACT_HOT_LOADER__",\n value: function __changePanel__REACT_HOT_LOADER__(panel) {\n var moment = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state.moment;\n\n this.setState({\n moment: moment,\n panel: panel\n });\n }\n }, {\n key: "render",\n value: function render() {\n var _props2 = this.props,\n weeks = _props2.weeks,\n months = _props2.months,\n dayFormat = _props2.dayFormat,\n style = _props2.style,\n maxDate = _props2.maxDate,\n minDate = _props2.minDate,\n dateLimit = _props2.dateLimit,\n range = _props2.range,\n rangeAt = _props2.rangeAt,\n lang = _props2.lang,\n isSolar = _props2.isSolar;\n\n var props = {\n moment: this.state.moment,\n selected: this.props.moment,\n onSelect: this.handleSelect,\n changePanel: this.changePanel,\n weeks: weeks,\n months: months,\n dayFormat: dayFormat,\n maxDate: maxDate,\n minDate: minDate,\n dateLimit: dateLimit,\n range: range,\n rangeAt: rangeAt,\n lang: lang,\n isSolar: isSolar\n };\n var panel = this.state.panel;\n\n var isDayPanel = panel === "day";\n var isMonthPanel = panel === "month";\n var isYearPanel = panel === "year";\n\n return _react2.default.createElement(\n "div",\n { style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar"] },\n function () {\n if (isDayPanel) return _react2.default.createElement(_Day2.default, props);\n if (isMonthPanel) return _react2.default.createElement(_Month2.default, props);\n if (isYearPanel) return _react2.default.createElement(_Year2.default, props);\n }()\n )\n );\n }\n }]);\n\n return Calendar;\n}(_react.Component);\n\nvar _default = Calendar;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Calendar, "Calendar", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Calendar.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Calendar.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Calendar.jsx?')},"./src/panels/Day.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _constants = __webpack_require__(/*! ../constants */ "./src/constants.js");\n\nvar _utils = __webpack_require__(/*! ../utils */ "./src/utils.js");\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Day = function (_Component) {\n _inherits(Day, _Component);\n\n function Day(props) {\n _classCallCheck(this, Day);\n\n var _this = _possibleConstructorReturn(this, (Day.__proto__ || Object.getPrototypeOf(Day)).call(this, props));\n\n _this.changeMonth = function () {\n return _this.__changeMonth__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.select = function () {\n return _this.__select__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderWeek = function () {\n return _this.___renderWeek__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderDay = function () {\n return _this.___renderDay__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n var isSolar = props.isSolar;\n\n\n _this.state = {\n moment: props.moment,\n dateStr: isSolar ? "jDate" : "date",\n monthStr: isSolar ? "jMonth" : "month"\n };\n return _this;\n }\n\n _createClass(Day, [{\n key: "___renderDay__REACT_HOT_LOADER__",\n value: function ___renderDay__REACT_HOT_LOADER__() {\n return this.___renderDay__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "___renderWeek__REACT_HOT_LOADER__",\n value: function ___renderWeek__REACT_HOT_LOADER__() {\n return this.___renderWeek__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__() {\n return this.__select__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__changeMonth__REACT_HOT_LOADER__",\n value: function __changeMonth__REACT_HOT_LOADER__() {\n return this.__changeMonth__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n var isSolar = props.isSolar;\n\n\n this.setState({\n moment: props.moment,\n dateStr: isSolar ? "jDate" : "date",\n monthStr: isSolar ? "jMonth" : "month"\n });\n }\n }, {\n key: "__changeMonth__REACT_HOT_LOADER__",\n value: function __changeMonth__REACT_HOT_LOADER__(dir) {\n var _moment = this.state.moment.clone();\n var monthStr = this.state.monthStr;\n\n\n this.setState({\n moment: _moment[dir === "prev" ? "subtract" : "add"](1, monthStr)\n });\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__(day, isSelected, isDisabled, isPrevMonth, isNextMonth) {\n if (isDisabled) return;\n var _props = this.props,\n range = _props.range,\n onSelect = _props.onSelect;\n\n var _moment = this.state.moment.clone();\n var _state = this.state,\n monthStr = _state.monthStr,\n dateStr = _state.dateStr;\n\n\n if (isPrevMonth) _moment.subtract(1, monthStr);\n if (isNextMonth) _moment.add(1, monthStr);\n\n _moment[dateStr](day);\n\n this.setState({\n moment: range ? this.state.moment : _moment\n });\n onSelect(_moment);\n }\n }, {\n key: "___renderWeek__REACT_HOT_LOADER__",\n value: function ___renderWeek__REACT_HOT_LOADER__(week) {\n return _react2.default.createElement(\n "th",\n { key: week },\n week\n );\n }\n }, {\n key: "___renderDay__REACT_HOT_LOADER__",\n value: function ___renderDay__REACT_HOT_LOADER__(week, day) {\n var _classNames;\n\n var _props2 = this.props,\n maxDate = _props2.maxDate,\n minDate = _props2.minDate,\n range = _props2.range,\n rangeAt = _props2.rangeAt,\n selected = _props2.selected,\n dateLimit = _props2.dateLimit,\n lang = _props2.lang;\n\n var now = moment();\n var _moment = this.state.moment;\n var _state2 = this.state,\n monthStr = _state2.monthStr,\n dateStr = _state2.dateStr;\n\n var isPrevMonth = week === 0 && day > 7;\n var isNextMonth = week >= 4 && day <= 14;\n var month = isNextMonth ? _moment.clone().add(1, monthStr) : isPrevMonth ? _moment.clone().subtract(1, monthStr) : _moment.clone();\n var currentDay = month.clone()[dateStr](day);\n var start = selected && range ? selected.start ? currentDay.isSame(selected.start, "day") : false : false;\n var end = selected && range ? selected.end ? currentDay.isSame(selected.end, "day") : false : false;\n var between = selected && range ? selected.start && selected.end ? currentDay.isBetween(selected.start, selected.end, "day") : false : false;\n var isSelected = selected ? range ? rangeAt === "start" && start || rangeAt === "end" && end : currentDay.isSame(selected, "day") : false;\n var disabledMax = maxDate ? currentDay.isAfter(maxDate, "day") : false;\n var disabledMin = minDate ? currentDay.isBefore(minDate, "day") : false;\n var disabled = false;\n var limited = false;\n\n if (range) {\n if (rangeAt === "start" && selected && selected.end) {\n disabled = currentDay.isAfter(selected.end, "day");\n } else if (rangeAt === "end" && selected && selected.start) {\n disabled = currentDay.isBefore(selected.start, "day");\n }\n }\n\n if (dateLimit && range) {\n var limitKey = Object.keys(dateLimit)[0];\n var limitValue = dateLimit[limitKey];\n var minLimitedDate = void 0,\n maxLimitedDate = void 0;\n\n if (selected) {\n if (rangeAt === "start" && selected.end) {\n maxLimitedDate = selected.end.clone();\n minLimitedDate = maxLimitedDate.clone().subtract(limitValue, limitKey);\n } else if (rangeAt === "end" && selected.start) {\n minLimitedDate = selected.start.clone();\n maxLimitedDate = minLimitedDate.clone().add(limitValue, limitKey);\n }\n\n if (minLimitedDate && maxLimitedDate) {\n limited = !currentDay.isBetween(minLimitedDate, maxLimitedDate, "day", rangeAt === "start" ? "(]" : "[)");\n }\n }\n }\n\n var isDisabled = disabledMax || disabledMin || disabled || limited;\n var className = (0, _bind2.default)((_classNames = {}, _defineProperty(_classNames, _sass2.default["prev"], isPrevMonth), _defineProperty(_classNames, _sass2.default["next"], isNextMonth), _defineProperty(_classNames, _sass2.default["selected"], isSelected), _defineProperty(_classNames, _sass2.default["now"], now.isSame(currentDay, "day")), _defineProperty(_classNames, _sass2.default["disabled"], isDisabled), _defineProperty(_classNames, _sass2.default["start"], start), _defineProperty(_classNames, _sass2.default["end"], end), _defineProperty(_classNames, _sass2.default["between"], between), _classNames));\n\n return _react2.default.createElement(\n "td",\n {\n key: day,\n className: className,\n onClick: this.select.bind(this, day, isSelected, isDisabled, isPrevMonth, isNextMonth)\n },\n lang == "fa" ? (0, _utils.convertNumToPersian)(day) : day\n );\n }\n }, {\n key: "render",\n value: function render() {\n var _this2 = this;\n\n var _props3 = this.props,\n isSolar = _props3.isSolar,\n lang = _props3.lang,\n _props3$weeks = _props3.weeks,\n weeks = _props3$weeks === undefined ? lang == "fa" ? _constants.WEEKS_FA : _constants.WEEKS : _props3$weeks,\n _props3$dayFormat = _props3.dayFormat,\n dayFormat = _props3$dayFormat === undefined ? isSolar ? _constants.DAY_FORMAT_SOLAR : _constants.DAY_FORMAT : _props3$dayFormat,\n style = _props3.style,\n changePanel = _props3.changePanel;\n\n var _moment = this.state.moment;\n var _state3 = this.state,\n monthStr = _state3.monthStr,\n dateStr = _state3.dateStr;\n\n var firstDay = _moment.clone()[dateStr](1).day();\n if (lang == "fa") firstDay = (0, _utils.enWeekToFaWeek)(firstDay);\n var endOfThisMonth = _moment.clone().endOf(monthStr)[dateStr]();\n var endOfLastMonth = _moment.clone().subtract(1, monthStr).endOf(monthStr)[dateStr]();\n var days = [].concat((0, _utils.range)(endOfLastMonth - firstDay + 1, endOfLastMonth + 1), (0, _utils.range)(1, endOfThisMonth + 1), (0, _utils.range)(1, 42 - endOfThisMonth - firstDay + 1));\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-days"], style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-nav"] },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "prev-month",\n onClick: this.changeMonth.bind(this, "prev")\n },\n _react2.default.createElement("i", { className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-left"] })\n ),\n _react2.default.createElement(\n "span",\n {\n className: _sass2.default["current-date"],\n onClick: changePanel.bind(this, "month", _moment)\n },\n _moment.format(dayFormat)\n ),\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "next-month",\n onClick: this.changeMonth.bind(this, "next")\n },\n _react2.default.createElement("i", {\n className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-right"]\n })\n )\n ),\n _react2.default.createElement(\n "table",\n null,\n _react2.default.createElement(\n "thead",\n null,\n _react2.default.createElement(\n "tr",\n null,\n weeks.map(function (week) {\n return _this2._renderWeek(week);\n })\n )\n ),\n _react2.default.createElement(\n "tbody",\n null,\n (0, _utils.chunk)(days, 7).map(function (week, idx) {\n return _react2.default.createElement(\n "tr",\n { key: idx },\n week.map(_this2._renderDay.bind(_this2, idx))\n );\n })\n )\n )\n );\n }\n }]);\n\n return Day;\n}(_react.Component);\n\nvar _default = Day;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Day, "Day", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Day.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Day.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Day.jsx?')},"./src/panels/Month.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _constants = __webpack_require__(/*! ../constants */ "./src/constants.js");\n\nvar _utils = __webpack_require__(/*! ../utils */ "./src/utils.js");\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Month = function (_Component) {\n _inherits(Month, _Component);\n\n function Month(props) {\n _classCallCheck(this, Month);\n\n var _this = _possibleConstructorReturn(this, (Month.__proto__ || Object.getPrototypeOf(Month)).call(this, props));\n\n _this.changeYear = function () {\n return _this.__changeYear__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.select = function () {\n return _this.__select__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderMonth = function () {\n return _this.___renderMonth__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n var isSolar = props.isSolar,\n lang = props.lang;\n\n\n _this.state = {\n moment: props.moment,\n yearStr: isSolar ? "jYear" : "year",\n monthStr: isSolar ? "jMonth" : "month",\n dateStr: isSolar ? "jDate" : "date",\n months: isSolar ? lang == "fa" ? _constants.MONTHS_SOLAR_FA : _constants.MONTHS_SOLAR : lang == "fa" ? _constants.MONTHS_FA : _constants.MONTHS\n };\n return _this;\n }\n\n _createClass(Month, [{\n key: "___renderMonth__REACT_HOT_LOADER__",\n value: function ___renderMonth__REACT_HOT_LOADER__() {\n return this.___renderMonth__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__() {\n return this.__select__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__changeYear__REACT_HOT_LOADER__",\n value: function __changeYear__REACT_HOT_LOADER__() {\n return this.__changeYear__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n var isSolar = props.isSolar,\n lang = props.lang;\n\n\n this.setState({\n moment: props.moment,\n yearStr: isSolar ? "jYear" : "year",\n monthStr: isSolar ? "jMonth" : "month",\n dateStr: isSolar ? "jDate" : "date",\n months: isSolar ? lang == "fa" ? _constants.MONTHS_SOLAR_FA : _constants.MONTHS_SOLAR : lang == "fa" ? _constants.MONTHS_FA : _constants.MONTHS\n });\n }\n }, {\n key: "__changeYear__REACT_HOT_LOADER__",\n value: function __changeYear__REACT_HOT_LOADER__(dir) {\n var _moment = this.state.moment.clone();\n var yearStr = this.state.yearStr;\n\n\n this.setState({\n moment: _moment[dir === "prev" ? "subtract" : "add"](1, yearStr)\n });\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__(month, isDisabled) {\n if (isDisabled) return;\n var onSelect = this.props.onSelect;\n\n var _moment = this.state.moment.clone();\n var monthStr = this.state.monthStr;\n\n\n _moment[monthStr](month);\n\n this.setState({\n moment: _moment\n });\n onSelect(_moment);\n }\n }, {\n key: "___renderMonth__REACT_HOT_LOADER__",\n value: function ___renderMonth__REACT_HOT_LOADER__(row, month, idx) {\n var _classNames;\n\n var now = moment();\n var _moment = this.state.moment;\n var monthStr = this.state.monthStr;\n var _props = this.props,\n maxDate = _props.maxDate,\n minDate = _props.minDate,\n months = _props.months,\n selected = _props.selected,\n range = _props.range,\n rangeAt = _props.rangeAt,\n dateLimit = _props.dateLimit,\n isSolar = _props.isSolar;\n\n var currentMonth = _moment.clone()[monthStr](month);\n var start = selected && range ? selected.start ? currentMonth.isSame(selected.start, monthStr) : false : false;\n var end = selected && range ? selected.end ? currentMonth.isSame(selected.end, monthStr) : false : false;\n var between = selected && range ? selected.start && selected.end ? currentMonth.isBetween(selected.start, selected.end, monthStr) : false : false;\n var isSelected = selected ? range ? selected[rangeAt] ? currentMonth.isSame(selected[rangeAt], monthStr) : false : currentMonth.isSame(selected, "day") : false;\n\n var disabledMax1 = false;\n var disabledMin1 = false;\n // for testing in solar mode\n var disabledMax2 = false;\n var disabledMin2 = false;\n\n if (isSolar) {\n // Solar test\n currentMonth.jDate(1);\n disabledMax1 = maxDate ? currentMonth.isAfter(maxDate, monthStr) : false;\n disabledMin1 = minDate ? currentMonth.isBefore(minDate, monthStr) : false;\n currentMonth.jDate(30);\n disabledMax2 = maxDate ? currentMonth.isAfter(maxDate, monthStr) : false;\n disabledMin2 = minDate ? currentMonth.isBefore(minDate, monthStr) : false;\n } else {\n // Gregorian test\n disabledMax1 = maxDate ? currentMonth.isAfter(maxDate, monthStr) : false;\n disabledMin1 = minDate ? currentMonth.isBefore(minDate, monthStr) : false;\n }\n\n var disabled = false;\n var limited = false;\n\n if (range) {\n if (rangeAt === "start" && selected && selected.end) {\n disabled = selected.end && currentMonth.isAfter(selected.end, "day");\n } else if (rangeAt === "end" && selected && selected.start) {\n disabled = selected.start && currentMonth.isBefore(selected.start, "day");\n }\n }\n\n if (dateLimit && range) {\n var limitKey = Object.keys(dateLimit)[0];\n var limitValue = dateLimit[limitKey];\n var minLimitedDate = void 0,\n maxLimitedDate = void 0;\n\n if (selected) {\n if (rangeAt === "start" && selected.start && selected.end) {\n maxLimitedDate = selected.end.clone();\n minLimitedDate = maxLimitedDate.clone().subtract(limitValue, limitKey);\n } else if (rangeAt === "end" && selected.start && selected.end) {\n minLimitedDate = selected.start.clone();\n maxLimitedDate = minLimitedDate.clone().add(limitValue, limitKey);\n }\n\n if (minLimitedDate && maxLimitedDate) {\n limited = !currentMonth.isBetween(minLimitedDate, maxLimitedDate, "day", rangeAt === "start" ? "(]" : "[)");\n }\n }\n }\n\n var isDisabled = (isSolar ? disabledMax1 && disabledMax2 || disabledMin1 && disabledMin2 : disabledMax1 || disabledMin1) || disabled || limited;\n\n var className = (0, _bind2.default)((_classNames = {}, _defineProperty(_classNames, _sass2.default["selected"], isSelected), _defineProperty(_classNames, _sass2.default["now"], now.isSame(currentMonth, monthStr)), _defineProperty(_classNames, _sass2.default["disabled"], isDisabled), _defineProperty(_classNames, _sass2.default["start"], start), _defineProperty(_classNames, _sass2.default["end"], end), _defineProperty(_classNames, _sass2.default["between"], between), _classNames));\n\n return _react2.default.createElement(\n "td",\n {\n key: month,\n className: className,\n onClick: this.select.bind(this, month, isDisabled)\n },\n months ? months[idx + row * 3] : month\n );\n }\n }, {\n key: "render",\n value: function render() {\n var _this2 = this;\n\n var _moment = this.state.moment;\n var months = this.state.months;\n var _props2 = this.props,\n changePanel = _props2.changePanel,\n style = _props2.style,\n isSolar = _props2.isSolar;\n\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-months"], style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-nav"] },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "prev-month",\n onClick: this.changeYear.bind(this, "prev")\n },\n _react2.default.createElement("i", { className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-left"] })\n ),\n _react2.default.createElement(\n "span",\n {\n className: _sass2.default["current-date"],\n onClick: changePanel.bind(this, "year", _moment)\n },\n _moment.format(isSolar ? "jYYYY" : "YYYY")\n ),\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "next-month",\n onClick: this.changeYear.bind(this, "next")\n },\n _react2.default.createElement("i", {\n className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-right"]\n })\n )\n ),\n _react2.default.createElement(\n "table",\n null,\n _react2.default.createElement(\n "tbody",\n null,\n (0, _utils.chunk)(months, 3).map(function (_months, idx) {\n return _react2.default.createElement(\n "tr",\n { key: idx },\n _months.map(_this2._renderMonth.bind(_this2, idx))\n );\n })\n )\n )\n );\n }\n }]);\n\n return Month;\n}(_react.Component);\n\nvar _default = Month;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Month, "Month", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Month.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Month.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Month.jsx?')},"./src/panels/Shortcuts.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _constants = __webpack_require__(/*! ../constants */ "./src/constants.js");\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\n\nvar isSameRange = function isSameRange(current, value) {\n return current.start && current.end && current.start.isSame(value.start, "day") && current.end.isSame(value.end, "day");\n};\n\nvar Shortcuts = function (_Component) {\n _inherits(Shortcuts, _Component);\n\n function Shortcuts() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Shortcuts);\n\n for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Shortcuts.__proto__ || Object.getPrototypeOf(Shortcuts)).call.apply(_ref, [this].concat(args))), _this), _this.handleClick = function () {\n var _this2;\n\n return (_this2 = _this).__handleClick__REACT_HOT_LOADER__.apply(_this2, arguments);\n }, _this._renderShortcut = function () {\n var _this3;\n\n return (_this3 = _this).___renderShortcut__REACT_HOT_LOADER__.apply(_this3, arguments);\n }, _this._renderShortcuts = function () {\n var _this4;\n\n return (_this4 = _this).___renderShortcuts__REACT_HOT_LOADER__.apply(_this4, arguments);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Shortcuts, [{\n key: "___renderShortcuts__REACT_HOT_LOADER__",\n value: function ___renderShortcuts__REACT_HOT_LOADER__() {\n return this.___renderShortcuts__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "___renderShortcut__REACT_HOT_LOADER__",\n value: function ___renderShortcut__REACT_HOT_LOADER__() {\n return this.___renderShortcut__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleClick__REACT_HOT_LOADER__",\n value: function __handleClick__REACT_HOT_LOADER__() {\n return this.__handleClick__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleClick__REACT_HOT_LOADER__",\n value: function __handleClick__REACT_HOT_LOADER__(value, isCustom) {\n var _props = this.props,\n onChange = _props.onChange,\n range = _props.range;\n\n\n if (range) {\n onChange && onChange(value, isCustom);\n } else {\n onChange && onChange(value, "day");\n }\n }\n }, {\n key: "___renderShortcut__REACT_HOT_LOADER__",\n value: function ___renderShortcut__REACT_HOT_LOADER__(key, value) {\n var _props2 = this.props,\n range = _props2.range,\n shortcuts = _props2.shortcuts,\n _props2$customButtonT = _props2.customButtonText,\n customButtonText = _props2$customButtonT === undefined ? _constants.CUSTOM_BUTTON_TEXT : _props2$customButtonT;\n\n var current = this.props.moment;\n var selected = range ? key !== "custom" && isSameRange(current, value) : false;\n var isCustomSelected = range ? !Object.keys(shortcuts).some(function (_key) {\n return isSameRange(current, shortcuts[_key]);\n }) && key === "custom" : false;\n var className = (0, _bind2.default)(_sass2.default["btn"], {\n selected: selected || isCustomSelected\n });\n\n return _react2.default.createElement(\n "button",\n {\n className: className,\n key: key,\n type: "button",\n onClick: this.handleClick.bind(this, value, key === "custom")\n },\n key === "custom" ? customButtonText : key\n );\n }\n }, {\n key: "___renderShortcuts__REACT_HOT_LOADER__",\n value: function ___renderShortcuts__REACT_HOT_LOADER__() {\n var _this5 = this;\n\n var _props3 = this.props,\n shortcuts = _props3.shortcuts,\n showCustomButton = _props3.showCustomButton,\n customRange = _props3.customRange,\n isSolar = _props3.isSolar;\n\n var renderShortcuts = showCustomButton ? _extends({}, shortcuts, {\n custom: customRange || {\n start: moment().subtract(29, isSolar ? "jDays" : "days"),\n end: moment().endOf(isSolar ? "jDay" : "day")\n }\n }) : shortcuts;\n\n return Object.keys(renderShortcuts).map(function (key) {\n return _this5._renderShortcut(key, renderShortcuts[key]);\n });\n }\n }, {\n key: "render",\n value: function render() {\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["shortcuts-bar"] },\n this._renderShortcuts()\n );\n }\n }]);\n\n return Shortcuts;\n}(_react.Component);\n\nvar _default = Shortcuts;\nexports.default = _default;\n;\n\nvar _temp2 = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(isSameRange, "isSameRange", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Shortcuts.jsx");\n\n __REACT_HOT_LOADER__.register(Shortcuts, "Shortcuts", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Shortcuts.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Shortcuts.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Shortcuts.jsx?')},"./src/panels/Time.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactSlider = __webpack_require__(/*! react-slider */ "./node_modules/react-slider/react-slider.js");\n\nvar _reactSlider2 = _interopRequireDefault(_reactSlider);\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Time = function (_Component) {\n _inherits(Time, _Component);\n\n function Time(props) {\n _classCallCheck(this, Time);\n\n var _this = _possibleConstructorReturn(this, (Time.__proto__ || Object.getPrototypeOf(Time)).call(this, props));\n\n _this.updateMoment = function () {\n return _this.__updateMoment__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.getCurrentMoment = function () {\n return _this.__getCurrentMoment__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleChange = function () {\n return _this.__handleChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n moment: _this.getCurrentMoment(props)\n };\n return _this;\n }\n\n _createClass(Time, [{\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__() {\n return this.__handleChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__getCurrentMoment__REACT_HOT_LOADER__",\n value: function __getCurrentMoment__REACT_HOT_LOADER__() {\n return this.__getCurrentMoment__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__updateMoment__REACT_HOT_LOADER__",\n value: function __updateMoment__REACT_HOT_LOADER__() {\n return this.__updateMoment__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n this.updateMoment(props);\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n this.updateMoment(this.props);\n }\n }, {\n key: "__updateMoment__REACT_HOT_LOADER__",\n value: function __updateMoment__REACT_HOT_LOADER__(props) {\n this.setState({\n moment: this.getCurrentMoment(props)\n });\n }\n }, {\n key: "__getCurrentMoment__REACT_HOT_LOADER__",\n value: function __getCurrentMoment__REACT_HOT_LOADER__(props) {\n var range = props.range,\n rangeAt = props.rangeAt;\n\n var result = props.moment;\n\n if (result) {\n if (range) {\n result = result[rangeAt] || moment().hours(0).minutes(0);\n }\n } else {\n result = moment().hours(0).minutes(0);\n }\n\n return result;\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__(type, value) {\n var _props = this.props,\n onChange = _props.onChange,\n range = _props.range,\n rangeAt = _props.rangeAt;\n\n var _moment = this.state.moment.clone();\n var selected = this.props.moment;\n\n _moment[type](value);\n\n if (range) {\n var copyed = selected ? Object.assign(selected, {}) : {};\n\n copyed[rangeAt] = _moment;\n } else {\n selected = _moment;\n }\n\n this.setState({\n moment: _moment\n });\n onChange && onChange(selected);\n }\n }, {\n key: "render",\n value: function render() {\n var _moment = this.state.moment;\n var style = this.props.style;\n\n var defaultHourValue = _moment.hour();\n var defaultMinuteValue = _moment.minute();\n\n return _react2.default.createElement(\n "div",\n { style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["time"] },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["show-time"] },\n _react2.default.createElement(\n "span",\n { className: _sass2.default["text"] },\n _moment.format("HH")\n ),\n _react2.default.createElement(\n "span",\n { className: _sass2.default["separater"] },\n ":"\n ),\n _react2.default.createElement(\n "span",\n { className: _sass2.default["text"] },\n _moment.format("mm")\n )\n ),\n _react2.default.createElement(\n "div",\n { className: _sass2.default["sliders"] },\n _react2.default.createElement(\n "span",\n { className: _sass2.default["slider-text"] },\n "Hours:"\n ),\n _react2.default.createElement(\n _reactSlider2.default,\n {\n min: 0,\n max: 23,\n value: defaultHourValue,\n defaultValue: defaultHourValue,\n onChange: this.handleChange.bind(this, "hours"),\n className: _sass2.default["slider"],\n withBars: true\n },\n _react2.default.createElement("div", { className: _sass2.default["handle"] })\n ),\n _react2.default.createElement(\n "span",\n { className: _sass2.default["slider-text"] },\n "Minutes:"\n ),\n _react2.default.createElement(\n _reactSlider2.default,\n {\n min: 0,\n max: 59,\n value: defaultMinuteValue,\n defaultValue: defaultMinuteValue,\n onChange: this.handleChange.bind(this, "minutes"),\n className: _sass2.default["slider"],\n withBars: true\n },\n _react2.default.createElement("div", { className: _sass2.default["handle"] })\n )\n )\n )\n );\n }\n }]);\n\n return Time;\n}(_react.Component);\n\nvar _default = Time;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Time, "Time", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Time.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Time.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Time.jsx?')},"./src/panels/Year.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _utils = __webpack_require__(/*! ../utils */ "./src/utils.js");\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Year = function (_Component) {\n _inherits(Year, _Component);\n\n function Year(props) {\n _classCallCheck(this, Year);\n\n var _this = _possibleConstructorReturn(this, (Year.__proto__ || Object.getPrototypeOf(Year)).call(this, props));\n\n _this.changePeriod = function () {\n return _this.__changePeriod__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.select = function () {\n return _this.__select__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderYear = function () {\n return _this.___renderYear__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n var isSolar = props.isSolar;\n\n\n _this.state = {\n moment: props.moment,\n yearStr: isSolar ? "jYear" : "year"\n };\n return _this;\n }\n\n _createClass(Year, [{\n key: "___renderYear__REACT_HOT_LOADER__",\n value: function ___renderYear__REACT_HOT_LOADER__() {\n return this.___renderYear__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__() {\n return this.__select__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__changePeriod__REACT_HOT_LOADER__",\n value: function __changePeriod__REACT_HOT_LOADER__() {\n return this.__changePeriod__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n var isSolar = props.isSolar;\n\n\n this.setState({\n moment: props.moment,\n yearStr: isSolar ? "jYear" : "year"\n });\n }\n }, {\n key: "__changePeriod__REACT_HOT_LOADER__",\n value: function __changePeriod__REACT_HOT_LOADER__(dir) {\n var _moment = this.state.moment.clone();\n var yearStr = this.state.yearStr;\n\n\n this.setState({\n moment: _moment[dir === "prev" ? "subtract" : "add"](10, yearStr)\n });\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__(year, isDisabled) {\n if (isDisabled) return;\n var _moment = this.state.moment.clone();\n var yearStr = this.state.yearStr;\n\n\n _moment[yearStr](year);\n\n this.setState({\n moment: _moment,\n selected: _moment\n });\n this.props.onSelect(_moment);\n }\n }, {\n key: "___renderYear__REACT_HOT_LOADER__",\n value: function ___renderYear__REACT_HOT_LOADER__(year) {\n var _classNames;\n\n var now = moment();\n var _moment = this.state.moment;\n var yearStr = this.state.yearStr;\n\n var firstYear = Math.floor(_moment[yearStr]() / 10) * 10;\n var _props = this.props,\n maxDate = _props.maxDate,\n minDate = _props.minDate,\n selected = _props.selected,\n range = _props.range,\n rangeAt = _props.rangeAt,\n dateLimit = _props.dateLimit,\n lang = _props.lang;\n\n var currentYear = _moment.clone()[yearStr](year);\n var start = selected && range ? selected.start ? currentYear.isSame(selected.start, yearStr) : false : false;\n var end = selected && range ? selected.end ? currentYear.isSame(selected.end, yearStr) : false : false;\n var between = selected && range ? selected.start && selected.end ? currentYear.isBetween(selected.start, selected.end, yearStr) : false : false;\n var isSelected = selected ? range ? selected[rangeAt] ? selected[rangeAt][yearStr]() === year : false : selected[yearStr]() === year : false;\n var disabledMax = maxDate ? year > maxDate[yearStr]() : false;\n var disabledMin = minDate ? year < minDate[yearStr]() : false;\n var disabled = false;\n var limited = false;\n\n if (range) {\n if (rangeAt === "start" && selected && selected.end) {\n disabled = selected.end && currentYear.isAfter(selected.end, "day");\n } else if (rangeAt === "end" && selected && selected.start) {\n disabled = selected.start && currentYear.isBefore(selected.start, "day");\n }\n }\n\n if (dateLimit && range) {\n var limitKey = Object.keys(dateLimit)[0];\n var limitValue = dateLimit[limitKey];\n var minLimitedDate = void 0,\n maxLimitedDate = void 0;\n\n if (selected) {\n if (rangeAt === "start" && selected.start && selected.end) {\n maxLimitedDate = selected.end.clone();\n minLimitedDate = maxLimitedDate.clone().subtract(limitValue, limitKey);\n } else if (rangeAt === "end" && selected.start && selected.end) {\n minLimitedDate = selected.start.clone();\n maxLimitedDate = minLimitedDate.clone().add(limitValue, limitKey);\n }\n\n if (minLimitedDate && maxLimitedDate) {\n limited = !currentYear.isBetween(minLimitedDate, maxLimitedDate, "day", rangeAt === "start" ? "(]" : "[)");\n }\n }\n }\n\n var isDisabled = disabledMax || disabledMin || disabled || limited;\n var className = (0, _bind2.default)((_classNames = {}, _defineProperty(_classNames, _sass2.default["selected"], isSelected), _defineProperty(_classNames, _sass2.default["now"], now[yearStr]() === year), _defineProperty(_classNames, _sass2.default["prev"], firstYear - 1 === year), _defineProperty(_classNames, _sass2.default["next"], firstYear + 10 === year), _defineProperty(_classNames, _sass2.default["disabled"], isDisabled), _defineProperty(_classNames, _sass2.default["start"], start), _defineProperty(_classNames, _sass2.default["end"], end), _defineProperty(_classNames, _sass2.default["between"], between), _classNames));\n\n return _react2.default.createElement(\n "td",\n {\n key: year,\n className: className,\n onClick: this.select.bind(this, year, isDisabled)\n },\n lang == "fa" ? (0, _utils.convertNumToPersian)(year) : year\n );\n }\n }, {\n key: "render",\n value: function render() {\n var _this2 = this;\n\n var _moment = this.state.moment;\n var yearStr = this.state.yearStr;\n var _props2 = this.props,\n style = _props2.style,\n lang = _props2.lang;\n\n var firstYear = Math.floor(_moment[yearStr]() / 10) * 10;\n var years = (0, _utils.range)(firstYear - 1, firstYear + 11);\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-years"], style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-nav"] },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "prev-month",\n onClick: this.changePeriod.bind(this, "prev")\n },\n _react2.default.createElement("i", { className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-left"] })\n ),\n _react2.default.createElement(\n "span",\n { className: _sass2.default["current-date"] + " " + _sass2.default["disabled"] },\n lang == "fa" ? (0, _utils.convertNumToPersian)(firstYear) + " - " + (0, _utils.convertNumToPersian)(firstYear + 9) : firstYear + " - " + (firstYear + 9)\n ),\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "next-month",\n onClick: this.changePeriod.bind(this, "next")\n },\n _react2.default.createElement("i", {\n className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-right"]\n })\n )\n ),\n _react2.default.createElement(\n "table",\n null,\n _react2.default.createElement(\n "tbody",\n null,\n (0, _utils.chunk)(years, 4).map(function (_years, idx) {\n return _react2.default.createElement(\n "tr",\n { key: idx },\n _years.map(_this2._renderYear)\n );\n })\n )\n )\n );\n }\n }]);\n\n return Year;\n}(_react.Component);\n\nvar _default = Year;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Year, "Year", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Year.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Year.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Year.jsx?')},"./src/sass/imrc-datetime-picker.scss":function(module,exports,__webpack_require__){eval('// extracted by mini-css-extract-plugin\nmodule.exports = {"datetime-picker":"_2Nt60bozBhLm4MJ7-Uml9R","calendar":"_1u8Ymm6dfTneTUifGRca6q","calendar-nav":"BSgloy8E0JKBPRuztPOYl","icon":"_31yknu257p3Ou6dbT1b3Di","current-date":"_2cuOdfZsLrFMahkfb9gso9","disabled":"C3TbhSBxXf2-WF8BbIP5A","prev":"_3Oh_LVHPrg2fTS0GUfyGBn","next":"_2ce0Aveox11GP8BDjQ7fok","now":"_2CQ5vWlIzMzWrunFH0Ghn9","selected":"_1PHXZRv9_4KmFMrk8q46oq","start":"_19nbqfrRyHiAZUV405M5my","end":"_1v7KWfKvYWVa2llB4MyKPm","between":"_3iY_jxM8n5A3KG0sTbPdHZ","calendar-days":"TcAXTV-SXrx_DyfJGoes7","calendar-months":"_2irOQQhT8T9IxDA3blr0fN","calendar-years":"_2xmXB-t1Q90HL5MiI6sq6a","time":"_1JaO_FJHcmfKde4ZCWwBlU","show-time":"_34W-nM6rMmdvVWJFM7_zku","separater":"msh9zMKRZxG5ctBsrSk64","text":"_3a1fn8jzj7Xe2_suG_OgQ7","sliders":"_3sFbZBjSoeDWQsUJOnFWEd","slider-text":"_1ofaB4Rfw0lmTor4fnLYN9","slider":"_2zulVA87E0xqXaIBz8I3Xt","handle":"_1cQ30voN6IVrl0w42vvSrx","shortcuts-bar":"_1UAAjQuv8prSHEXMWsK8cX","btn":"_2HSrqNmbpFOLNXPPG1ft4c","datetime-range-picker":"_2Y3XnEaYUW73xAHuGREkw4","datetime-trigger":"pY2VsceibmbrgqkDkHtL","pos-top":"_22tXEUZ3nd-1Acj9d2Vdll","datetime-picker-popup":"NdKRjDSE-TWLZsxGyHoqy","pos-bottom":"_2Kef-m1BLkSJ9Q9uL896XW","datetime-range-trigger":"_33slfCSXq-F7Cpv-fyPYaE","datetime-range-picker-popup":"Ze2SAIFKCldxDbOSdZ_kK","icon-clock":"wqPOH6Eyz6Cy3RZuNGubb","icon-angle-left":"_3CBWV-2-d2pBOJ-6eQ6-7O","icon-angle-right":"p7Dmn6axTCShVU12AGokf","icon-calendar-empty":"qv5FEUGYqGe1pZ36gQl8q"};\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/sass/imrc-datetime-picker.scss?')},"./src/sass/index.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(/*! ./imrc-datetime-picker.scss */ \"./src/sass/imrc-datetime-picker.scss\");\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/sass/index.js?")},"./src/utils.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.chunk = exports.range = exports.enWeekToFaWeek = exports.convertNumToPersian = undefined;\n\nvar _constants = __webpack_require__(/*! ./constants */ "./src/constants.js");\n\nvar convertNumToPersian = exports.convertNumToPersian = function convertNumToPersian(num) {\n num = num.toString();\n var persianNum = "";\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = num[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var ch = _step.value;\n\n persianNum += _constants.PERSIAN_NUMBERS[ch];\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return persianNum;\n};\n\nvar enWeekToFaWeek = exports.enWeekToFaWeek = function enWeekToFaWeek(dayOfWeek) {\n return dayOfWeek == 6 ? 0 : dayOfWeek + 1;\n};\n\nvar range = exports.range = function range(start, end) {\n var length = Math.max(end - start, 0);\n var result = [];\n\n while (length--) {\n result[length] = start + length;\n }\n\n return result;\n};\n\nvar chunk = exports.chunk = function chunk(array, size) {\n var length = array.length;\n var index = 0;\n var resIndex = -1;\n var result = [];\n\n while (index < length) {\n result[++resIndex] = array.slice(index, index += size);\n }\n\n return result;\n};\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(convertNumToPersian, "convertNumToPersian", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/utils.js");\n\n __REACT_HOT_LOADER__.register(enWeekToFaWeek, "enWeekToFaWeek", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/utils.js");\n\n __REACT_HOT_LOADER__.register(range, "range", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/utils.js");\n\n __REACT_HOT_LOADER__.register(chunk, "chunk", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/utils.js");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/utils.js?')},0:function(module,exports,__webpack_require__){eval('module.exports = __webpack_require__(/*! ./src/index.js */"./src/index.js");\n\n\n//# sourceURL=webpack://imrc-datetime-picker/multi_./src/index.js?')},"moment-jalaali":function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_moment_jalaali__;\n\n//# sourceURL=webpack://imrc-datetime-picker/external_%22moment-jalaali%22?")},react:function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_react__;\n\n//# sourceURL=webpack://imrc-datetime-picker/external_%22react%22?")},"react-dom":function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_react_dom__;\n\n//# sourceURL=webpack://imrc-datetime-picker/external_%22react-dom%22?")}})})},function(e,n){e.exports=moment},function(e,n){function t(e,n,t){return"[object Date]"===Object.prototype.toString.call(e)&&(t=e.getDate(),n=e.getMonth()+1,e=e.getFullYear()),c(u(e,n,t))}function r(e,n,t){return _(l(e,n,t))}function a(e,n,t){return e>=-61&&e<=3177&&n>=1&&n<=12&&t>=1&&t<=o(e,n)}function s(e){return 0===i(e).leap}function o(e,n){return n<=6?31:n<=11?30:s(e)?30:29}function i(e){var n,t,r,a,s,o,i,l=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],c=l.length,u=e+621,_=-14,m=l[0];if(e<m||e>=l[c-1])throw new Error("Invalid Jalaali year "+e);for(i=1;i<c&&(n=l[i],t=n-m,!(e<n));i+=1)_=_+8*p(t,33)+p(d(t,33),4),m=n;return o=e-m,_=_+8*p(o,33)+p(d(o,33)+3,4),4===d(t,33)&&t-o===4&&(_+=1),a=p(u,4)-p(3*(p(u,100)+1),4)-150,s=20+_-a,t-o<6&&(o=o-t+33*p(t+4,33)),r=d(d(o+1,33)-1,4),-1===r&&(r=4),{leap:r,gy:u,march:s}}function l(e,n,t){var r=i(e);return u(r.gy,3,r.march)+31*(n-1)-p(n,7)*(n-7)+t-1}function c(e){var n,t,r,a=_(e).gy,s=a-621,o=i(s),l=u(a,3,o.march);if((r=e-l)>=0){if(r<=185)return t=1+p(r,31),n=d(r,31)+1,{jy:s,jm:t,jd:n};r-=186}else s-=1,r+=179,1===o.leap&&(r+=1);return t=7+p(r,30),n=d(r,30)+1,{jy:s,jm:t,jd:n}}function u(e,n,t){var r=p(1461*(e+p(n-8,6)+100100),4)+p(153*d(n+9,12)+2,5)+t-34840408;return r=r-p(3*p(e+100100+p(n-8,6),100),4)+752}function _(e){var n,t,r,a,s;return n=4*e+139361631,n=n+4*p(3*p(4*e+183187720,146097),4)-3908,t=5*p(d(n,1461),4)+308,r=p(d(t,153),5)+1,a=d(p(t,153),12)+1,s=p(n,1461)-100100+p(8-a,6),{gy:s,gm:a,gd:r}}function p(e,n){return~~(e/n)}function d(e,n){return e-~~(e/n)*n}e.exports={toJalaali:t,toGregorian:r,isValidJalaaliDate:a,isLeapJalaaliYear:s,jalaaliMonthLength:o,jalCal:i,j2d:l,d2j:c,g2d:u,d2g:_}},function(e,n){e.exports=React},function(e,n){e.exports=ReactDOM},function(e,n){},function(e,n){},function(e,n){e.exports=wp.date},function(e,n,t){var r,a;!function(){function t(e){this._str=e}function s(e){if(e){for(var n=["\u064a","\u0643","\u200d","\u062f\u0650","\u0628\u0650","\u0632\u0650","\u0630\u0650","\u0650\u0634\u0650","\u0650\u0633\u0650","\u0649"],t=["\u06cc","\u06a9","","\u062f","\u0628","\u0632","\u0630","\u0634","\u0633","\u06cc"],r=0,a=n.length;r<a;r++)e=e.replace(new RegExp(n[r],"g"),t[r]);return this._str=e,this}}function o(e){if(e){for(var n=0,t=y.length;n<t;n++)e=e.replace(new RegExp(f[n],"g"),y[n]);return this._str=e,this}}function i(e){if(e){e=e.toString();for(var n=0,t=h.length;n<t;n++)e=e.replace(new RegExp(h[n],"g"),f[n]);return this._str=e,this}}function l(e){if(e){e=e.toString();for(var n=["1","2","3","4","5","6","7","8","9","0"],t=["\u06f1","\u06f2","\u06f3","\u06f4","\u06f5","\u06f6","\u06f7","\u06f8","\u06f9","\u06f0"],r=0,a=n.length;r<a;r++)e=e.replace(new RegExp(n[r],"g"),t[r]);return this._str=e,this}}function c(e){if(e){for(var n=0,t=y.length;n<t;n++)e=e.replace(new RegExp(f[n],"g"),y[n]).replace(new RegExp(h[n],"g"),y[n]);return this._str=e,this}}function u(e){if(e){for(var n="";n!=e;)n=e,e=e.replace(/(http\S+?)\%20/g,"$1\u200c\u200c\u200c_\u200c\u200c\u200c");return e=e.replace(/(http\S+)/g,function(e,n){return decodeURI(n)}),e=e.replace(/\u200c\u200c\u200c_\u200c\u200c\u200c/g,"%20"),this._str=e,this}}function _(e){if(e){for(var n=["\u0636","\u0635","\u062b","\u0642","\u0641","\u063a","\u0639","\u0647","\u062e","\u062d","\u062c","\u0686","\u0634","\u0633","\u06cc","\u0628","\u0644","\u0627","\u062a","\u0646","\u0645","\u06a9","\u06af","\u0638","\u0637","\u0632","\u0631","\u0630","\u062f","\u067e","\u0648","\u061f"],t=["q","w","e","r","t","y","u","i","o","p","[","]","a","s","d","f","g","h","j","k","l",";","'","z","x","c","v","b","n","m",",","?"],r=0,a=n.length;r<a;r++)e=e.replace(new RegExp(n[r],"g"),t[r]);return this._str=e,this}}function p(e){var n,t,r,a,s,o,i,l,c;return isFinite(e)?("string"!==typeof e&&(e=e.toString()),o=["","\u0647\u0632\u0627\u0631","\u0645\u06cc\u0644\u06cc\u0648\u0646","\u0645\u06cc\u0644\u06cc\u0627\u0631\u062f","\u062a\u0631\u06cc\u0644\u06cc\u0648\u0646","\u06a9\u0648\u0627\u062f\u0631\u06cc\u0644\u06cc\u0648\u0646","\u06a9\u0648\u06cc\u06cc\u0646\u062a\u06cc\u0644\u06cc\u0648\u0646","\u0633\u06a9\u0633\u062a\u06cc\u0644\u06cc\u0648\u0646"],s={0:["","\u0635\u062f","\u062f\u0648\u06cc\u0635\u062a","\u0633\u06cc\u0635\u062f","\u0686\u0647\u0627\u0631\u0635\u062f","\u067e\u0627\u0646\u0635\u062f","\u0634\u0634\u0635\u062f","\u0647\u0641\u062a\u0635\u062f","\u0647\u0634\u062a\u0635\u062f","\u0646\u0647\u0635\u062f"],1:["","\u062f\u0647","\u0628\u06cc\u0633\u062a","\u0633\u06cc","\u0686\u0647\u0644","\u067e\u0646\u062c\u0627\u0647","\u0634\u0635\u062a","\u0647\u0641\u062a\u0627\u062f","\u0647\u0634\u062a\u0627\u062f","\u0646\u0648\u062f"],2:["","\u06cc\u06a9","\u062f\u0648","\u0633\u0647","\u0686\u0647\u0627\u0631","\u067e\u0646\u062c","\u0634\u0634","\u0647\u0641\u062a","\u0647\u0634\u062a","\u0646\u0647"],two:["\u062f\u0647","\u06cc\u0627\u0632\u062f\u0647","\u062f\u0648\u0627\u0632\u062f\u0647","\u0633\u06cc\u0632\u062f\u0647","\u0686\u0647\u0627\u0631\u062f\u0647","\u067e\u0627\u0646\u0632\u062f\u0647","\u0634\u0627\u0646\u0632\u062f\u0647","\u0647\u0641\u062f\u0647","\u0647\u062c\u062f\u0647","\u0646\u0648\u0632\u062f\u0647"],zero:"\u0635\u0641\u0631"},n=" \u0648 ",valueParts=e.split("").reverse().join("").replace(/\d{3}(?=\d)/g,"$&,").split("").reverse().join("").split(",").map(function(e){return Array(4-e.length).join("0")+e}),i=function(){var e;e=[];for(a in valueParts)c=valueParts[a],l=function(){var e,n,a;for(a=[],r=e=0,n=c.length;e<n;r=++e)if(t=c[r],1===r&&"1"===t)a.push(s.two[c[2]]);else{if(2===r&&"1"===c[1]||""===s[r][t])continue;a.push(s[r][t])}return a}(),l=l.join(n),e.push(l+" "+o[valueParts.length-a-1]);return e}(),i=i.filter(function(e){return""!==e.trim()}),i=i.join(n).trim(),""===i&&(i=s.zero),this._str=i,this):""}function d(e){if(e){var n;return n=/((\s\u0645\u06CC)+( )+([\u0600-\u06EF]{1,}){1,})/g,e=e.replace(new RegExp(n),"$2\u200c$4"),n=/(([\u0600-\u06EF]{1,})+( )+(\u0627\u06cc|\u0627\u06cc\u06cc|\u0627\u0646\u062f|\u0627\u06cc\u0645|\u0627\u06cc\u062f|\u0627\u0645){1})/g,e=e.replace(new RegExp(n),"$2\u200c$4"),this._str=e,this}}var m="undefined"!==typeof e&&e.exports,h=["\u0661","\u0662","\u0663","\u0664","\u0665","\u0666","\u0667","\u0668","\u0669","\u0660"],f=["\u06f1","\u06f2","\u06f3","\u06f4","\u06f5","\u06f6","\u06f7","\u06f8","\u06f9","\u06f0"],y=["1","2","3","4","5","6","7","8","9","0"],g=function(e){if(!e||""===e)throw new Error("Input is null or empty.");return new t(e)};g.version="0.4.0",g.fn=t.prototype={clone:function(){return g(this)},value:function(){return this._str},toString:function(){return this._str.toString()},set:function(e){return this._str=String(e),this},arabicChar:function(){return s.call(this,this._str)},persianNumber:function(){return o.call(this,this._str)},arabicNumber:function(){return i.call(this,this._str)},englishNumber:function(){return l.call(this,this._str)},toEnglishNumber:function(){return c.call(this,this._str)},fixURL:function(){return u.call(this,this._str)},decodeURL:function(){return u.call(this,this._str)},switchKey:function(){return _.call(this,this._str)},digitsToWords:function(){return p.call(this,this._str)},halfSpace:function(){return d.call(this,this._str)}},m&&(e.exports=g),"undefined"===typeof ender&&(this.persianJs=g),r=[],void 0!==(a=function(){return g}.apply(n,r))&&(e.exports=a)}()},function(e,n){},function(e,n){},function(e,n,t){"use strict";var r=t(2),a=(t.n(r),t(27));Object(r.registerPlugin)("gutenberg-jalali-calendar-pre-publish-post-schedule",{render:a.a})},function(e,n,t){"use strict";function r(){return wp.element.createElement(s.PluginPrePublishPanel,{initialOpen:!1,title:[Object(a.__)("Publish:"),wp.element.createElement("span",{className:"editor-post-publish-panel__link",key:"label"},wp.element.createElement(i.a,null))],className:"gutenberg-jalali-calendar-edit-post-pre-publish-post-schedule"},wp.element.createElement(o.a,null))}var a=t(0),s=(t.n(a),t(5)),o=(t.n(s),t(6)),i=t(8);n.a=r},function(e,n){var t=!1;jQuery(document).ready(function(){setInterval(function(){var e=$(".gutenberg-jalali-calendar-edit-post-pre-publish-post-schedule").prev().prev();e.length>0&&(t=!0,e.css("display","none"))},300)})}]);
1
+ !function(e){function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=9)}([function(e,n){e.exports=wp.i18n},function(e,n,t){function r(e,n){return function(t){return o(e.call(this,t),n)}}function a(e,n){return function(t){return this.localeData().ordinal(e.call(this,t),n)}}function s(e,n){var t;for(t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e}function o(e,n){for(var t=e+"";t.length<n;)t="0"+t;return t}function i(e){return"[object Array]"===Object.prototype.toString.call(e)}function l(e){if(e){var n=e.toLowerCase();e=W[n]||n}return e}function c(e,n,t,r){var a=e._d;e._isUTC?e._d=new Date(Date.UTC(n,t,r,a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds())):e._d=new Date(n,t,r,a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds())}function u(e){function n(){}return n.prototype=e,new n}function _(e){var n,t=e.match(D),r=t.length;for(n=0;n<r;n+=1)B[t[n]]&&(t[n]=B[t[n]]);return function(a){var s="";for(n=0;n<r;n+=1)s+=t[n]instanceof Function?"["+t[n].call(a,e)+"]":t[n];return s}}function p(e,n){switch(e){case"jDDDD":return j;case"jYYYY":return x;case"jYYYYY":return N;case"jDDD":return S;case"jMMM":case"jMMMM":return M;case"jMM":case"jDD":case"jYY":case"jM":case"jD":return w;case"DDDD":return j;case"YYYY":return x;case"YYYYY":return N;case"S":case"SS":case"SSS":case"DDD":return S;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return M;case"a":case"A":return k.localeData(n._l)._meridiemParse;case"X":return F;case"Z":case"ZZ":return L;case"T":return H;case"MM":case"DD":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return w;default:return new RegExp(e.replace("\\",""))}}function d(e,n,t){var r,a=t._a;switch(e){case"jM":case"jMM":a[1]=null==n?0:~~n-1;break;case"jMMM":case"jMMMM":r=k.localeData(t._l).jMonthsParse(n),null!=r?a[1]=r:t._isValid=!1;break;case"jD":case"jDD":case"jDDD":case"jDDDD":null!=n&&(a[2]=~~n);break;case"jYY":a[0]=~~n+(~~n>47?1300:1400);break;case"jYYYY":case"jYYYYY":a[0]=~~n}null==n&&(t._isValid=!1)}function m(e){var n,t,r=e._a[0],a=e._a[1],s=e._a[2];return null==r&&null==a&&null==s?[0,0,1]:(r=null!=r?r:0,a=null!=a?a:0,s=null!=s?s:1,(s<1||s>v.jDaysInMonth(r,a)||a<0||a>11)&&(e._isValid=!1),n=E(r,a,s),t=T(n.gy,n.gm,n.gd),e._jDiff=0,~~t.jy!==r&&(e._jDiff+=1),~~t.jm!==a&&(e._jDiff+=1),~~t.jd!==s&&(e._jDiff+=1),[n.gy,n.gm,n.gd])}function h(e){var n,t,r,a=e._f.match(D),s=e._i+"",o=a.length;for(e._a=[],n=0;n<o;n+=1)t=a[n],r=(p(t,e).exec(s)||[])[0],r&&(s=s.slice(s.indexOf(r)+r.length)),B[t]&&d(t,r,e);return s&&(e._il=s),m(e)}function f(e,n){var t,r,a,s,o,i,l=e._f.length;if(0===l)return b(new Date(NaN));for(t=0;t<l;t+=1)r=e._f[t],o=0,a=b(e._i,r,e._l,e._strict,n),a.isValid()&&(o+=a._jDiff,a._il&&(o+=a._il.length),(null==i||o<i)&&(i=o,s=a));return s}function y(e){var n,t,r,a=e._i+"",s="",o="",i=e._f.match(D),l=i.length;for(n=0;n<l;n+=1)t=i[n],r=(p(t,e).exec(a)||[])[0],r&&(a=a.slice(a.indexOf(r)+r.length)),B[t]instanceof Function||(o+=t,r&&(s+=r));e._i=s,e._f=o}function g(e,n,t){var r,a=t-n,s=t-e.day();return s>a&&(s-=7),s<a-7&&(s+=7),r=v(e).add(s,"d"),{week:Math.ceil(r.jDayOfYear()/7),year:r.jYear()}}function b(e,n,t,r,a){"boolean"===typeof t&&(a=r,r=t,t=void 0),n&&"string"===typeof n&&(n=C(n,k));var l,c,_,p={_i:e,_f:n,_l:t,_strict:r,_isUTC:a},d=e,m=n;if(n){if(i(n))return f(p,a);l=h(p),y(p),n="YYYY-MM-DD-"+p._f,e=o(l[0],4)+"-"+o(l[1]+1,2)+"-"+o(l[2],2)+"-"+p._i}return c=a?k.utc(e,n,t,r):k(e,n,t,r),!1===p._isValid&&(c._isValid=!1),c._jDiff=p._jDiff||0,_=u(v.fn),s(_,c),r&&_.isValid()&&(_._isValid=_.format(m)===d),_}function v(e,n,t,r){return b(e,n,t,r,!1)}function C(e,n){for(var t=5,r=function(e){return n.localeData().longDateFormat(e)||e};t>0&&P.test(e);)t-=1,e=e.replace(P,r);return e}function T(e,n,t){var r=A.toJalaali(e,n+1,t);return r.jm-=1,r}function E(e,n,t){var r=A.toGregorian(e,n+1,t);return r.gm-=1,r}function O(e,n){return~~(e/n)}function R(e,n){return e-~~(e/n)*n}e.exports=v;var k=t(16),A=t(17),D=/(\[[^\[]*\])|(\\)?j(Mo|MM?M?M?|Do|DDDo|DD?D?D?|w[o|w]?|YYYYY|YYYY|YY|gg(ggg?)?|)|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,P=/(\[[^\[]*\])|(\\)?(LTS?|LL?L?L?|l{1,4})/g,w=/\d\d?/,S=/\d{1,3}/,j=/\d{3}/,x=/\d{1,4}/,N=/[+\-]?\d{1,6}/,M=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,L=/Z|[\+\-]\d\d:?\d\d/i,H=/T/i,F=/[\+\-]?\d+(\.\d{1,3})?/,I={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},Y={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"},W={jm:"jmonth",jmonths:"jmonth",jy:"jyear",jyears:"jyear"},q={},V="DDD w M D".split(" "),U="M D w".split(" "),B={jM:function(){return this.jMonth()+1},jMMM:function(e){return this.localeData().jMonthsShort(this,e)},jMMMM:function(e){return this.localeData().jMonths(this,e)},jD:function(){return this.jDate()},jDDD:function(){return this.jDayOfYear()},jw:function(){return this.jWeek()},jYY:function(){return o(this.jYear()%100,2)},jYYYY:function(){return o(this.jYear(),4)},jYYYYY:function(){return o(this.jYear(),5)},jgg:function(){return o(this.jWeekYear()%100,2)},jgggg:function(){return this.jWeekYear()},jggggg:function(){return o(this.jWeekYear(),5)}};!function(){for(var e;V.length;)e=V.pop(),B["j"+e+"o"]=a(B["j"+e],e);for(;U.length;)e=U.pop(),B["j"+e+e]=r(B["j"+e],2);B.jDDDD=r(B.jDDD,3)}(),s(function(e){return Object.getPrototypeOf?Object.getPrototypeOf(e):"".__proto__?e.__proto__:e.constructor.prototype}(k.localeData()),{_jMonths:["Farvardin","Ordibehesht","Khordaad","Tir","Amordaad","Shahrivar","Mehr","Aabaan","Aazar","Dey","Bahman","Esfand"],jMonths:function(e){return this._jMonths[e.jMonth()]},_jMonthsShort:["Far","Ord","Kho","Tir","Amo","Sha","Meh","Aab","Aaz","Dey","Bah","Esf"],jMonthsShort:function(e){return this._jMonthsShort[e.jMonth()]},jMonthsParse:function(e){var n,t,r;for(this._jMonthsParse||(this._jMonthsParse=[]),n=0;n<12;n+=1)if(this._jMonthsParse[n]||(t=v([2e3,(2+n)%12,25]),r="^"+this.jMonths(t,"")+"|^"+this.jMonthsShort(t,""),this._jMonthsParse[n]=new RegExp(r.replace(".",""),"i")),this._jMonthsParse[n].test(e))return n}}),s(v,k),v.fn=u(k.fn),v.utc=function(e,n,t,r){return b(e,n,t,r,!0)},v.unix=function(e){return b(1e3*e)},v.fn.format=function(e){return e&&(e=C(e,this),q[e]||(q[e]=_(e)),e=q[e](this)),k.fn.format.call(this,e)},v.fn.jYear=function(e){var n,t,r;return"number"===typeof e?(t=T(this.year(),this.month(),this.date()),n=Math.min(t.jd,v.jDaysInMonth(e,t.jm)),r=E(e,t.jm,n),c(this,r.gy,r.gm,r.gd),k.updateOffset(this),this):T(this.year(),this.month(),this.date()).jy},v.fn.jMonth=function(e){var n,t,r;return null!=e?"string"===typeof e&&"number"!==typeof(e=this.lang().jMonthsParse(e))?this:(t=T(this.year(),this.month(),this.date()),n=Math.min(t.jd,v.jDaysInMonth(t.jy,e)),this.jYear(t.jy+O(e,12)),e=R(e,12),e<0&&(e+=12,this.jYear(this.jYear()-1)),r=E(this.jYear(),e,n),c(this,r.gy,r.gm,r.gd),k.updateOffset(this),this):T(this.year(),this.month(),this.date()).jm},v.fn.jDate=function(e){var n,t;return"number"===typeof e?(n=T(this.year(),this.month(),this.date()),t=E(n.jy,n.jm,e),c(this,t.gy,t.gm,t.gd),k.updateOffset(this),this):T(this.year(),this.month(),this.date()).jd},v.fn.jDayOfYear=function(e){var n=Math.round((v(this).startOf("day")-v(this).startOf("jYear"))/864e5)+1;return null==e?n:this.add(e-n,"d")},v.fn.jWeek=function(e){var n=g(this,this.localeData()._week.dow,this.localeData()._week.doy).week;return null==e?n:this.add(7*(e-n),"d")},v.fn.jWeekYear=function(e){var n=g(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==e?n:this.add(e-n,"y")},v.fn.add=function(e,n){var t;return null===n||isNaN(+n)||(t=e,e=n,n=t),n=l(n),"jyear"===n?this.jYear(this.jYear()+e):"jmonth"===n?this.jMonth(this.jMonth()+e):k.fn.add.call(this,e,n),this},v.fn.subtract=function(e,n){var t;return null===n||isNaN(+n)||(t=e,e=n,n=t),n=l(n),"jyear"===n?this.jYear(this.jYear()-e):"jmonth"===n?this.jMonth(this.jMonth()-e):k.fn.subtract.call(this,e,n),this},v.fn.startOf=function(e){return e=l(e),"jyear"===e||"jmonth"===e?("jyear"===e&&this.jMonth(0),this.jDate(1),this.hours(0),this.minutes(0),this.seconds(0),this.milliseconds(0),this):k.fn.startOf.call(this,e)},v.fn.endOf=function(e){return e=l(e),void 0===e||"milisecond"===e?this:this.startOf(e).add(1,"isoweek"===e?"week":e).subtract(1,"ms")},v.fn.isSame=function(e,n){return n=l(n),"jyear"===n||"jmonth"===n?k.fn.isSame.call(this.startOf(n),e.startOf(n)):k.fn.isSame.call(this,e,n)},v.fn.clone=function(){return v(this)},v.fn.jYears=v.fn.jYear,v.fn.jMonths=v.fn.jMonth,v.fn.jDates=v.fn.jDate,v.fn.jWeeks=v.fn.jWeek,v.jDaysInMonth=function(e,n){return e+=O(n,12),n=R(n,12),n<0&&(n+=12,e-=1),n<6?31:n<11?30:v.jIsLeapYear(e)?30:29},v.jIsLeapYear=A.isLeapJalaaliYear,v.loadPersian=function(e){var n=!(void 0===e||!e.hasOwnProperty("usePersianDigits"))&&e.usePersianDigits,t=void 0!==e&&e.hasOwnProperty("dialect")?e.dialect:"persian";k.locale("fa"),k.updateLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:{persian:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u0622\u062f\u06cc\u0646\u0647_\u0634\u0646\u0628\u0647".split("_"),"persian-modern":"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_")}[t],weekdaysShort:{persian:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u0622\u062f\u06cc\u0646\u0647_\u0634\u0646\u0628\u0647".split("_"),"persian-modern":"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_")}[t],weekdaysMin:{persian:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0622_\u0634".split("_"),"persian-modern":"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_")}[t],longDateFormat:{LT:"HH:mm",L:"jYYYY/jMM/jDD",LL:"jD jMMMM jYYYY",LLL:"jD jMMMM jYYYY LT",LLLL:"dddd\u060c jD jMMMM jYYYY LT"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u06cc \u067e\u06cc\u0634 \u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",m:"1 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"1 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"1 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"1 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"1 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return n?e.replace(/[\u06f0-\u06f9]/g,function(e){return Y[e]}).replace(/\u060c/g,","):e},postformat:function(e){return n?e.replace(/\d/g,function(e){return I[e]}).replace(/,/g,"\u060c"):e},ordinal:"%d\u0645",week:{dow:6,doy:12},meridiem:function(e){return e<12?"\u0642.\u0638":"\u0628.\u0638"},jMonths:{persian:"\u0641\u0631\u0648\u0631\u062f\u06cc\u0646_\u0627\u0631\u062f\u06cc\u0628\u0647\u0634\u062a_\u062e\u0631\u062f\u0627\u062f_\u062a\u06cc\u0631_\u0627\u0645\u0631\u062f\u0627\u062f_\u0634\u0647\u0631\u06cc\u0648\u0631_\u0645\u0647\u0631_\u0622\u0628\u0627\u0646_\u0622\u0630\u0631_\u062f\u06cc_\u0628\u0647\u0645\u0646_\u0627\u0633\u0641\u0646\u062f".split("_"),"persian-modern":"\u0641\u0631\u0648\u0631\u062f\u06cc\u0646_\u0627\u0631\u062f\u06cc\u0628\u0647\u0634\u062a_\u062e\u0631\u062f\u0627\u062f_\u062a\u06cc\u0631_\u0645\u0631\u062f\u0627\u062f_\u0634\u0647\u0631\u06cc\u0648\u0631_\u0645\u0647\u0631_\u0622\u0628\u0627\u0646_\u0622\u0630\u0631_\u062f\u06cc_\u0628\u0647\u0645\u0646_\u0627\u0633\u0641\u0646\u062f".split("_")}[t],jMonthsShort:{persian:"\u0641\u0631\u0648_\u0627\u0631\u062f_\u062e\u0631\u062f_\u062a\u06cc\u0631_\u0627\u0645\u0631_\u0634\u0647\u0631_\u0645\u0647\u0631_\u0622\u0628\u0627_\u0622\u0630\u0631_\u062f\u06cc_\u0628\u0647\u0645_\u0627\u0633\u0641".split("_"),"persian-modern":"\u0641\u0631\u0648_\u0627\u0631\u062f_\u062e\u0631\u062f_\u062a\u06cc\u0631_\u0645\u0631\u062f_\u0634\u0647\u0631_\u0645\u0647\u0631_\u0622\u0628\u0627_\u0622\u0630\u0631_\u062f\u06cc_\u0628\u0647\u0645_\u0627\u0633\u0641".split("_")}[t]})},v.jConvert={toJalaali:T,toGregorian:E}},function(e,n){e.exports=wp.plugins},function(e,n){e.exports=wp.compose},function(e,n){e.exports=wp.element},function(e,n){e.exports=wp.editPost},function(e,n,t){"use strict";function r(e){var n=e.date,t=e.onUpdateDate,r=e.dateFormat;return wp.element.createElement(o.a,{key:"date-time-picker",currentDate:n,onChange:t,dateFormat:r})}var a=t(7),s=(t.n(a),t(3)),o=(t.n(s),t(14));n.a=Object(s.compose)([Object(a.withSelect)(function(e){return{date:e("core/editor").getEditedPostAttribute("date")}}),Object(a.withDispatch)(function(e){return{onUpdateDate:function(n){e("core/editor").editPost({date:n})}}})])(r)},function(e,n){e.exports=wp.data},function(e,n,t){"use strict";function r(e){var n=e.date,t=e.isFloating,r=e.dateFormat;Object(s.__experimentalGetSettings)();return l.a.loadPersian({dialect:"persian-modern"}),n&&!t?u()(l()(n,r).format(_)).englishNumber().toString():Object(a.__)("Immediately")}var a=t(0),s=(t.n(a),t(22)),o=(t.n(s),t(7)),i=(t.n(o),t(1)),l=t.n(i),c=t(23),u=t.n(c),_="jD jMMMM, jYYYY hh:mm a";n.a=Object(o.withSelect)(function(e){return{date:e("core/editor").getEditedPostAttribute("date"),isFloating:e("core/editor").isEditedPostDateFloating()}})(r)},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=(t(10),t(26),t(28));t.n(r)},function(e,n,t){"use strict";var r=t(2),a=(t.n(r),t(11)),s=t(24),o=(t.n(s),t(25));t.n(o);Object(r.registerPlugin)("gutenberg-jalali-calendar-post-schedule",{render:a.a})},function(e,n,t){"use strict";function r(e){var n=e.instanceId;return wp.element.createElement(c.PluginPostStatusInfo,{className:"gutenberg-jalali-calendar-edit-post-post-schedule"},wp.element.createElement(l.PostScheduleCheck,null,wp.element.createElement("label",{htmlFor:"gutenberg-jalali-calendar-edit-post-post-schedule__toggle-"+n,id:"gutenberg-jalali-calendar-edit-post-post-schedule__heading-"+n},Object(a.__)("Publish")),wp.element.createElement(o.Dropdown,{position:"bottom left",contentClassName:"gutenberg-jalali-calendar-edit-post-post-schedule__dialog",renderToggle:function(e){var t=e.onToggle,r=e.isOpen;return wp.element.createElement(i.Fragment,null,wp.element.createElement("label",{className:"gutenberg-jalali-calendar-edit-post-post-schedule__label",htmlFor:"gutenberg-jalali-calendar-edit-post-post-schedule__toggle-"+n},wp.element.createElement(_.a,{dateFormat:p})," ",Object(a.__)("Click to change")),wp.element.createElement(o.Button,{id:"gutenberg-jalali-calendar-edit-post-post-schedule__toggle-"+n,type:"button",className:"gutenberg-jalali-calendar-edit-post-post-schedule__toggle",onClick:t,"aria-expanded":r,"aria-live":"polite",isLink:!0},wp.element.createElement(_.a,{dateFormat:p})))},renderContent:function(){return wp.element.createElement(u.a,{dateFormat:p})}})))}var a=t(0),s=(t.n(a),t(3)),o=(t.n(s),t(12)),i=(t.n(o),t(4)),l=(t.n(i),t(13)),c=(t.n(l),t(5)),u=(t.n(c),t(6)),_=t(8),p="YYYY-MM-DDTHH:mm:ss";n.a=Object(s.withInstanceId)(r)},function(e,n){e.exports=wp.components},function(e,n){e.exports=wp.editor},function(e,n,t){"use strict";function r(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function a(e,n){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!==typeof n&&"function"!==typeof n?e:n}function s(e,n){if("function"!==typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function, not "+typeof n);e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),n&&(Object.setPrototypeOf?Object.setPrototypeOf(e,n):e.__proto__=n)}var o=t(4),i=(t.n(o),t(15)),l=(t.n(i),t(20)),c=(t.n(l),t(1)),u=t.n(c),_=t(21),p=(t.n(_),function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}()),d=function(e){function n(e){r(this,n);var t=a(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));t.handleChange=function(e){var n=t.props,r=n.onChange,a=n.dateFormat;r(e.format(a)),t.setState({moment:e})};var s=t.props.currentDate,o=u()(s);return u.a.locale(),t.state={moment:o},t.handleChange=t.handleChange.bind(t),t}return s(n,e),p(n,[{key:"render",value:function(){this.state.moment,this.props.dateFormat;return wp.element.createElement(i.DatetimePicker,{splitPanel:!1,moment:this.state.moment,onChange:this.handleChange,showTimePicker:!0,isSolar:!0,lang:"fa"})}}]),n}(o.Component);n.a=d},function(module,exports,__webpack_require__){!function(e,n){module.exports=n(__webpack_require__(1),__webpack_require__(18),__webpack_require__(19))}(window,function(__WEBPACK_EXTERNAL_MODULE_moment_jalaali__,__WEBPACK_EXTERNAL_MODULE_react__,__WEBPACK_EXTERNAL_MODULE_react_dom__){return function(e){function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}var t={};return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(n){return e[n]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=0)}({"./node_modules/blacklist/index.js":function(module,exports){eval("module.exports = function blacklist (src) {\n var copy = {}\n var filter = arguments[1]\n\n if (typeof filter === 'string') {\n filter = {}\n for (var i = 1; i < arguments.length; i++) {\n filter[arguments[i]] = true\n }\n }\n\n for (var key in src) {\n // blacklist?\n if (filter[key]) continue\n\n copy[key] = src[key]\n }\n\n return copy\n}\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/blacklist/index.js?")},"./node_modules/classnames/bind.js":function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(this && this[arg] || arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(this, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(this && this[key] || key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}());\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/classnames/bind.js?")},"./node_modules/create-react-class/factory.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar _assign = __webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\");\n\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ \"./node_modules/fbjs/lib/emptyObject.js\");\nvar _invariant = __webpack_require__(/*! fbjs/lib/invariant */ \"./node_modules/fbjs/lib/invariant.js\");\n\nif (true) {\n var warning = __webpack_require__(/*! fbjs/lib/warning */ \"./node_modules/fbjs/lib/warning.js\");\n}\n\nvar MIXINS_KEY = 'mixins';\n\n// Helper function to allow the creation of anonymous functions which do not\n// have .name set to the name of the variable being assigned to.\nfunction identity(fn) {\n return fn;\n}\n\nvar ReactPropTypeLocationNames;\nif (true) {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n} else {}\n\nfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n /**\n * Policies that describe methods in `ReactClassInterface`.\n */\n\n var injectedMixins = [];\n\n /**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return <div>Hello World</div>;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\n var ReactClassInterface = {\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: 'DEFINE_MANY',\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: 'DEFINE_MANY',\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: 'DEFINE_MANY',\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: 'DEFINE_MANY_MERGED',\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: 'DEFINE_MANY_MERGED',\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: 'DEFINE_MANY_MERGED',\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return <div>Hello, {name}!</div>;\n * }\n *\n * @return {ReactComponent}\n * @required\n */\n render: 'DEFINE_ONCE',\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: 'DEFINE_MANY',\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: 'DEFINE_MANY',\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: 'DEFINE_ONCE',\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillMount`.\n *\n * @optional\n */\n UNSAFE_componentWillMount: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillReceiveProps`.\n *\n * @optional\n */\n UNSAFE_componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Replacement for (deprecated) `componentWillUpdate`.\n *\n * @optional\n */\n UNSAFE_componentWillUpdate: 'DEFINE_MANY',\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: 'OVERRIDE_BASE'\n };\n\n /**\n * Similar to ReactClassInterface but for static methods.\n */\n var ReactClassStaticInterface = {\n /**\n * This method is invoked after a component is instantiated and when it\n * receives new props. Return an object to update state in response to\n * prop changes. Return null to indicate no change to state.\n *\n * If an object is returned, its keys will be merged into the existing state.\n *\n * @return {object || null}\n * @optional\n */\n getDerivedStateFromProps: 'DEFINE_MANY_MERGED'\n };\n\n /**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\n var RESERVED_SPEC_KEYS = {\n displayName: function(Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function(Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function(Constructor, childContextTypes) {\n if (true) {\n validateTypeDef(Constructor, childContextTypes, 'childContext');\n }\n Constructor.childContextTypes = _assign(\n {},\n Constructor.childContextTypes,\n childContextTypes\n );\n },\n contextTypes: function(Constructor, contextTypes) {\n if (true) {\n validateTypeDef(Constructor, contextTypes, 'context');\n }\n Constructor.contextTypes = _assign(\n {},\n Constructor.contextTypes,\n contextTypes\n );\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function(Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(\n Constructor.getDefaultProps,\n getDefaultProps\n );\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function(Constructor, propTypes) {\n if (true) {\n validateTypeDef(Constructor, propTypes, 'prop');\n }\n Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n },\n statics: function(Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function() {}\n };\n\n function validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an _invariant so components\n // don't show up in prod but only in __DEV__\n if (true) {\n warning(\n typeof typeDef[propName] === 'function',\n '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n 'React.PropTypes.',\n Constructor.displayName || 'ReactClass',\n ReactPropTypeLocationNames[location],\n propName\n );\n }\n }\n }\n }\n\n function validateMethodOverride(isAlreadyDefined, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name)\n ? ReactClassInterface[name]\n : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n _invariant(\n specPolicy === 'OVERRIDE_BASE',\n 'ReactClassInterface: You are attempting to override ' +\n '`%s` from your class specification. Ensure that your method names ' +\n 'do not overlap with React methods.',\n name\n );\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (isAlreadyDefined) {\n _invariant(\n specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n 'ReactClassInterface: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be due ' +\n 'to a mixin.',\n name\n );\n }\n }\n\n /**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\n function mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n if (true) {\n var typeofSpec = typeof spec;\n var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n if (true) {\n warning(\n isMixinValid,\n \"%s: You're attempting to include a mixin that is either null \" +\n 'or not an object. Check the mixins included by the component, ' +\n 'as well as any mixins they include themselves. ' +\n 'Expected object but got %s.',\n Constructor.displayName || 'ReactClass',\n spec === null ? null : typeofSpec\n );\n }\n }\n\n return;\n }\n\n _invariant(\n typeof spec !== 'function',\n \"ReactClass: You're attempting to \" +\n 'use a component class or function as a mixin. Instead, just use a ' +\n 'regular object.'\n );\n _invariant(\n !isValidElement(spec),\n \"ReactClass: You're attempting to \" +\n 'use a component as a mixin. Instead, just use a regular object.'\n );\n\n var proto = Constructor.prototype;\n var autoBindPairs = proto.__reactAutoBindPairs;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n var isAlreadyDefined = proto.hasOwnProperty(name);\n validateMethodOverride(isAlreadyDefined, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind =\n isFunction &&\n !isReactClassMethod &&\n !isAlreadyDefined &&\n spec.autobind !== false;\n\n if (shouldAutoBind) {\n autoBindPairs.push(name, property);\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n _invariant(\n isReactClassMethod &&\n (specPolicy === 'DEFINE_MANY_MERGED' ||\n specPolicy === 'DEFINE_MANY'),\n 'ReactClass: Unexpected spec policy %s for key %s ' +\n 'when mixing in component specs.',\n specPolicy,\n name\n );\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === 'DEFINE_MANY_MERGED') {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === 'DEFINE_MANY') {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (true) {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n }\n\n function mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = name in RESERVED_SPEC_KEYS;\n _invariant(\n !isReserved,\n 'ReactClass: You are attempting to define a reserved ' +\n 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n 'as an instance property instead; it will still be accessible on the ' +\n 'constructor.',\n name\n );\n\n var isAlreadyDefined = name in Constructor;\n if (isAlreadyDefined) {\n var specPolicy = ReactClassStaticInterface.hasOwnProperty(name)\n ? ReactClassStaticInterface[name]\n : null;\n\n _invariant(\n specPolicy === 'DEFINE_MANY_MERGED',\n 'ReactClass: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be ' +\n 'due to a mixin.',\n name\n );\n\n Constructor[name] = createMergedResultFunction(Constructor[name], property);\n\n return;\n }\n\n Constructor[name] = property;\n }\n }\n\n /**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\n function mergeIntoWithNoDuplicateKeys(one, two) {\n _invariant(\n one && two && typeof one === 'object' && typeof two === 'object',\n 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n );\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n _invariant(\n one[key] === undefined,\n 'mergeIntoWithNoDuplicateKeys(): ' +\n 'Tried to merge two objects with the same key: `%s`. This conflict ' +\n 'may be due to a mixin; in particular, this may be caused by two ' +\n 'getInitialState() or getDefaultProps() methods returning objects ' +\n 'with clashing keys.',\n key\n );\n one[key] = two[key];\n }\n }\n return one;\n }\n\n /**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n }\n\n /**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n }\n\n /**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\n function bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (true) {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n boundMethod.bind = function(newThis) {\n for (\n var _len = arguments.length,\n args = Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n if (true) {\n warning(\n false,\n 'bind(): React component methods may only be bound to the ' +\n 'component instance. See %s',\n componentName\n );\n }\n } else if (!args.length) {\n if (true) {\n warning(\n false,\n 'bind(): You are binding a component method to the component. ' +\n 'React does this for you automatically in a high-performance ' +\n 'way, so you can safely remove this call. See %s',\n componentName\n );\n }\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n };\n }\n return boundMethod;\n }\n\n /**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\n function bindAutoBindMethods(component) {\n var pairs = component.__reactAutoBindPairs;\n for (var i = 0; i < pairs.length; i += 2) {\n var autoBindKey = pairs[i];\n var method = pairs[i + 1];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n }\n\n var IsMountedPreMixin = {\n componentDidMount: function() {\n this.__isMounted = true;\n }\n };\n\n var IsMountedPostMixin = {\n componentWillUnmount: function() {\n this.__isMounted = false;\n }\n };\n\n /**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\n var ReactClassMixin = {\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function(newState, callback) {\n this.updater.enqueueReplaceState(this, newState, callback);\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function() {\n if (true) {\n warning(\n this.__didWarnIsMounted,\n '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n 'subscriptions and pending requests in componentWillUnmount to ' +\n 'prevent memory leaks.',\n (this.constructor && this.constructor.displayName) ||\n this.name ||\n 'Component'\n );\n this.__didWarnIsMounted = true;\n }\n return !!this.__isMounted;\n }\n };\n\n var ReactClassComponent = function() {};\n _assign(\n ReactClassComponent.prototype,\n ReactComponent.prototype,\n ReactClassMixin\n );\n\n /**\n * Creates a composite component class given a class specification.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n function createClass(spec) {\n // To keep our warnings more understandable, we'll use a little hack here to\n // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n // unnecessarily identify a class without displayName as 'Constructor'.\n var Constructor = identity(function(props, context, updater) {\n // This constructor gets overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (true) {\n warning(\n this instanceof Constructor,\n 'Something is calling a React component directly. Use a factory or ' +\n 'JSX instead. See: https://fb.me/react-legacyfactory'\n );\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindPairs.length) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (true) {\n // We allow auto-mocks to proceed as if they're returning null.\n if (\n initialState === undefined &&\n this.getInitialState._isMockFunction\n ) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n _invariant(\n typeof initialState === 'object' && !Array.isArray(initialState),\n '%s.getInitialState(): must return an object or null',\n Constructor.displayName || 'ReactCompositeComponent'\n );\n\n this.state = initialState;\n });\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n Constructor.prototype.__reactAutoBindPairs = [];\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n mixSpecIntoComponent(Constructor, spec);\n mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (true) {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n _invariant(\n Constructor.prototype.render,\n 'createClass(...): Class specification must implement a `render` method.'\n );\n\n if (true) {\n warning(\n !Constructor.prototype.componentShouldUpdate,\n '%s has a method called ' +\n 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n 'The name is phrased as a question because the function is ' +\n 'expected to return a value.',\n spec.displayName || 'A component'\n );\n warning(\n !Constructor.prototype.componentWillRecieveProps,\n '%s has a method called ' +\n 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n spec.displayName || 'A component'\n );\n warning(\n !Constructor.prototype.UNSAFE_componentWillRecieveProps,\n '%s has a method called UNSAFE_componentWillRecieveProps(). ' +\n 'Did you mean UNSAFE_componentWillReceiveProps()?',\n spec.displayName || 'A component'\n );\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n }\n\n return createClass;\n}\n\nmodule.exports = factory;\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/create-react-class/factory.js?")},"./node_modules/create-react-class/index.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar React = __webpack_require__(/*! react */ \"react\");\nvar factory = __webpack_require__(/*! ./factory */ \"./node_modules/create-react-class/factory.js\");\n\nif (typeof React === 'undefined') {\n throw Error(\n 'create-react-class could not find the React object. If you are using script tags, ' +\n 'make sure that React is being loaded before create-react-class.'\n );\n}\n\n// Hack to grab NoopUpdateQueue from isomorphic React\nvar ReactNoopUpdateQueue = new React.Component().updater;\n\nmodule.exports = factory(\n React.Component,\n React.isValidElement,\n ReactNoopUpdateQueue\n);\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/create-react-class/index.js?")},"./node_modules/fbjs/lib/ExecutionEnvironment.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/ExecutionEnvironment.js?")},"./node_modules/fbjs/lib/camelize.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n * > camelize('background-color')\n * < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n return string.replace(_hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n}\n\nmodule.exports = camelize;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/camelize.js?")},"./node_modules/fbjs/lib/camelizeStyleName.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n\n\nvar camelize = __webpack_require__(/*! ./camelize */ \"./node_modules/fbjs/lib/camelize.js\");\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n * > camelizeStyleName('background-color')\n * < \"backgroundColor\"\n * > camelizeStyleName('-moz-transition')\n * < \"MozTransition\"\n * > camelizeStyleName('-ms-transition')\n * < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/camelizeStyleName.js?")},"./node_modules/fbjs/lib/emptyFunction.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/emptyFunction.js?")},"./node_modules/fbjs/lib/emptyObject.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar emptyObject = {};\n\nif (true) {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/emptyObject.js?")},"./node_modules/fbjs/lib/hyphenate.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n * > hyphenate('backgroundColor')\n * < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/hyphenate.js?")},"./node_modules/fbjs/lib/hyphenateStyleName.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n\n\nvar hyphenate = __webpack_require__(/*! ./hyphenate */ \"./node_modules/fbjs/lib/hyphenate.js\");\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/hyphenateStyleName.js?")},"./node_modules/fbjs/lib/invariant.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (true) {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/invariant.js?")},"./node_modules/fbjs/lib/memoizeStringOnly.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @typechecks static-only\n */\n\n\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n */\n\nfunction memoizeStringOnly(callback) {\n var cache = {};\n return function (string) {\n if (!cache.hasOwnProperty(string)) {\n cache[string] = callback.call(this, string);\n }\n return cache[string];\n };\n}\n\nmodule.exports = memoizeStringOnly;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/memoizeStringOnly.js?")},"./node_modules/fbjs/lib/warning.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ \"./node_modules/fbjs/lib/emptyFunction.js\");\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (true) {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/fbjs/lib/warning.js?")},"./node_modules/object-assign/index.js":function(module,exports,__webpack_require__){"use strict";eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/object-assign/index.js?")},"./node_modules/prop-types/checkPropTypes.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar printWarning = function() {};\n\nif (true) {\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n var loggedTypeFailures = {};\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (true) {\n for (var typeSpecName in typeSpecs) {\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n )\n\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\nmodule.exports = checkPropTypes;\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/prop-types/checkPropTypes.js?")},"./node_modules/prop-types/factoryWithTypeCheckers.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar assign = __webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\");\n\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\nvar checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\n\nvar printWarning = function() {};\n\nif (true) {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message) {\n this.message = message;\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (true) {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (\"development\" !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n true ? printWarning('Invalid argument supplied to oneOf, expected an instance of array.') : undefined;\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : undefined;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from\n // props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/prop-types/factoryWithTypeCheckers.js?")},"./node_modules/prop-types/index.js":function(module,exports,__webpack_require__){eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (true) {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ \"./node_modules/prop-types/factoryWithTypeCheckers.js\")(isValidElement, throwOnDirectAccess);\n} else {}\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/prop-types/index.js?")},"./node_modules/prop-types/lib/ReactPropTypesSecret.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/prop-types/lib/ReactPropTypesSecret.js?")},"./node_modules/react-slider/react-slider.js":function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! react */ \"react\"),__webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\"),__webpack_require__(/*! create-react-class */ \"./node_modules/create-react-class/index.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(this, function (React, PropTypes, createReactClass) {\n\n /**\n * To prevent text selection while dragging.\n * http://stackoverflow.com/questions/5429827/how-can-i-prevent-text-element-selection-with-cursor-drag\n */\n function pauseEvent(e) {\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n return false;\n }\n\n function stopPropagation(e) {\n if (e.stopPropagation) e.stopPropagation();\n }\n\n /**\n * Spreads `count` values equally between `min` and `max`.\n */\n function linspace(min, max, count) {\n var range = (max - min) / (count - 1);\n var res = [];\n for (var i = 0; i < count; i++) {\n res.push(min + range * i);\n }\n return res;\n }\n\n function ensureArray(x) {\n return x == null ? [] : Array.isArray(x) ? x : [x];\n }\n\n function undoEnsureArray(x) {\n return x != null && x.length === 1 ? x[0] : x;\n }\n\n // undoEnsureArray(ensureArray(x)) === x\n\n var ReactSlider = createReactClass({\n displayName: 'ReactSlider',\n\n propTypes: {\n\n /**\n * The minimum value of the slider.\n */\n min: PropTypes.number,\n\n /**\n * The maximum value of the slider.\n */\n max: PropTypes.number,\n\n /**\n * Value to be added or subtracted on each step the slider makes.\n * Must be greater than zero.\n * `max - min` should be evenly divisible by the step value.\n */\n step: PropTypes.number,\n\n /**\n * The minimal distance between any pair of handles.\n * Must be positive, but zero means they can sit on top of each other.\n */\n minDistance: PropTypes.number,\n\n /**\n * Determines the initial positions of the handles and the number of handles if the component has no children.\n *\n * If a number is passed a slider with one handle will be rendered.\n * If an array is passed each value will determine the position of one handle.\n * The values in the array must be sorted.\n * If the component has children, the length of the array must match the number of children.\n */\n defaultValue: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]),\n\n /**\n * Like `defaultValue` but for [controlled components](http://facebook.github.io/react/docs/forms.html#controlled-components).\n */\n value: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]),\n\n /**\n * Determines whether the slider moves horizontally (from left to right) or vertically (from top to bottom).\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n /**\n * The css class set on the slider node.\n */\n className: PropTypes.string,\n\n /**\n * The css class set on each handle node.\n *\n * In addition each handle will receive a numbered css class of the form `${handleClassName}-${i}`,\n * e.g. `handle-0`, `handle-1`, ...\n */\n handleClassName: PropTypes.string,\n\n /**\n * The css class set on the handle that is currently being moved.\n */\n handleActiveClassName: PropTypes.string,\n\n /**\n * If `true` bars between the handles will be rendered.\n */\n withBars: PropTypes.bool,\n\n /**\n * The css class set on the bars between the handles.\n * In addition bar fragment will receive a numbered css class of the form `${barClassName}-${i}`,\n * e.g. `bar-0`, `bar-1`, ...\n */\n barClassName: PropTypes.string,\n\n /**\n * If `true` the active handle will push other handles\n * within the constraints of `min`, `max`, `step` and `minDistance`.\n */\n pearling: PropTypes.bool,\n\n /**\n * If `true` the handles can't be moved.\n */\n disabled: PropTypes.bool,\n\n /**\n * Disables handle move when clicking the slider bar\n */\n snapDragDisabled: PropTypes.bool,\n\n /**\n * Inverts the slider.\n */\n invert: PropTypes.bool,\n\n /**\n * Callback called before starting to move a handle.\n */\n onBeforeChange: PropTypes.func,\n\n /**\n * Callback called on every value change.\n */\n onChange: PropTypes.func,\n\n /**\n * Callback called only after moving a handle has ended.\n */\n onAfterChange: PropTypes.func,\n\n /**\n * Callback called when the the slider is clicked (handle or bars).\n * Receives the value at the clicked position as argument.\n */\n onSliderClick: PropTypes.func\n },\n\n getDefaultProps: function () {\n return {\n min: 0,\n max: 100,\n step: 1,\n minDistance: 0,\n defaultValue: 0,\n orientation: 'horizontal',\n className: 'slider',\n handleClassName: 'handle',\n handleActiveClassName: 'active',\n barClassName: 'bar',\n withBars: false,\n pearling: false,\n disabled: false,\n snapDragDisabled: false,\n invert: false\n };\n },\n\n getInitialState: function () {\n var value = this._or(ensureArray(this.props.value), ensureArray(this.props.defaultValue));\n\n // reused throughout the component to store results of iterations over `value`\n this.tempArray = value.slice();\n\n // array for storing resize timeouts ids\n this.pendingResizeTimeouts = [];\n\n var zIndices = [];\n for (var i = 0; i < value.length; i++) {\n value[i] = this._trimAlignValue(value[i], this.props);\n zIndices.push(i);\n }\n\n return {\n index: -1,\n upperBound: 0,\n sliderLength: 0,\n value: value,\n zIndices: zIndices\n };\n },\n\n // Keep the internal `value` consistent with an outside `value` if present.\n // This basically allows the slider to be a controlled component.\n componentWillReceiveProps: function (newProps) {\n var value = this._or(ensureArray(newProps.value), this.state.value);\n\n // ensure the array keeps the same size as `value`\n this.tempArray = value.slice();\n\n for (var i = 0; i < value.length; i++) {\n this.state.value[i] = this._trimAlignValue(value[i], newProps);\n }\n if (this.state.value.length > value.length)\n this.state.value.length = value.length;\n\n // If an upperBound has not yet been determined (due to the component being hidden\n // during the mount event, or during the last resize), then calculate it now\n if (this.state.upperBound === 0) {\n this._handleResize();\n }\n },\n\n // Check if the arity of `value` or `defaultValue` matches the number of children (= number of custom handles).\n // If no custom handles are provided, just returns `value` if present and `defaultValue` otherwise.\n // If custom handles are present but neither `value` nor `defaultValue` are applicable the handles are spread out\n // equally.\n // TODO: better name? better solution?\n _or: function (value, defaultValue) {\n var count = React.Children.count(this.props.children);\n switch (count) {\n case 0:\n return value.length > 0 ? value : defaultValue;\n case value.length:\n return value;\n case defaultValue.length:\n return defaultValue;\n default:\n if (value.length !== count || defaultValue.length !== count) {\n console.warn(this.constructor.displayName + \": Number of values does not match number of children.\");\n }\n return linspace(this.props.min, this.props.max, count);\n }\n },\n\n componentDidMount: function () {\n window.addEventListener('resize', this._handleResize);\n this._handleResize();\n },\n\n componentWillUnmount: function () {\n this._clearPendingResizeTimeouts();\n window.removeEventListener('resize', this._handleResize);\n },\n\n getValue: function () {\n return undoEnsureArray(this.state.value);\n },\n\n _handleResize: function () {\n // setTimeout of 0 gives element enough time to have assumed its new size if it is being resized\n var resizeTimeout = window.setTimeout(function() {\n // drop this timeout from pendingResizeTimeouts to reduce memory usage\n this.pendingResizeTimeouts.shift();\n\n var slider = this.refs.slider;\n var handle = this.refs.handle0;\n var rect = slider.getBoundingClientRect();\n\n var size = this._sizeKey();\n\n var sliderMax = rect[this._posMaxKey()];\n var sliderMin = rect[this._posMinKey()];\n\n this.setState({\n upperBound: slider[size] - handle[size],\n sliderLength: Math.abs(sliderMax - sliderMin),\n handleSize: handle[size],\n sliderStart: this.props.invert ? sliderMax : sliderMin\n });\n }.bind(this), 0);\n\n this.pendingResizeTimeouts.push(resizeTimeout);\n },\n\n // clear all pending timeouts to avoid error messages after unmounting\n _clearPendingResizeTimeouts: function() {\n do {\n var nextTimeout = this.pendingResizeTimeouts.shift();\n\n clearTimeout(nextTimeout);\n } while (this.pendingResizeTimeouts.length);\n },\n\n // calculates the offset of a handle in pixels based on its value.\n _calcOffset: function (value) {\n var range = this.props.max - this.props.min;\n if (range === 0) {\n return 0;\n }\n var ratio = (value - this.props.min) / range;\n return ratio * this.state.upperBound;\n },\n\n // calculates the value corresponding to a given pixel offset, i.e. the inverse of `_calcOffset`.\n _calcValue: function (offset) {\n var ratio = offset / this.state.upperBound;\n return ratio * (this.props.max - this.props.min) + this.props.min;\n },\n\n _buildHandleStyle: function (offset, i) {\n var style = {\n position: 'absolute',\n willChange: this.state.index >= 0 ? this._posMinKey() : '',\n zIndex: this.state.zIndices.indexOf(i) + 1\n };\n style[this._posMinKey()] = offset + 'px';\n return style;\n },\n\n _buildBarStyle: function (min, max) {\n var obj = {\n position: 'absolute',\n willChange: this.state.index >= 0 ? this._posMinKey() + ',' + this._posMaxKey() : ''\n };\n obj[this._posMinKey()] = min;\n obj[this._posMaxKey()] = max;\n return obj;\n },\n\n _getClosestIndex: function (pixelOffset) {\n var minDist = Number.MAX_VALUE;\n var closestIndex = -1;\n\n var value = this.state.value;\n var l = value.length;\n\n for (var i = 0; i < l; i++) {\n var offset = this._calcOffset(value[i]);\n var dist = Math.abs(pixelOffset - offset);\n if (dist < minDist) {\n minDist = dist;\n closestIndex = i;\n }\n }\n\n return closestIndex;\n },\n\n _calcOffsetFromPosition: function (position) {\n var pixelOffset = position - this.state.sliderStart;\n if (this.props.invert) pixelOffset = this.state.sliderLength - pixelOffset;\n pixelOffset -= (this.state.handleSize / 2);\n return pixelOffset;\n },\n\n // Snaps the nearest handle to the value corresponding to `position` and calls `callback` with that handle's index.\n _forceValueFromPosition: function (position, callback) {\n var pixelOffset = this._calcOffsetFromPosition(position);\n var closestIndex = this._getClosestIndex(pixelOffset);\n var nextValue = this._trimAlignValue(this._calcValue(pixelOffset));\n\n var value = this.state.value.slice(); // Clone this.state.value since we'll modify it temporarily\n value[closestIndex] = nextValue;\n\n // Prevents the slider from shrinking below `props.minDistance`\n for (var i = 0; i < value.length - 1; i += 1) {\n if (value[i + 1] - value[i] < this.props.minDistance) return;\n }\n\n this.setState({value: value}, callback.bind(this, closestIndex));\n },\n\n _getMousePosition: function (e) {\n return [\n e['page' + this._axisKey()],\n e['page' + this._orthogonalAxisKey()]\n ];\n },\n\n _getTouchPosition: function (e) {\n var touch = e.touches[0];\n return [\n touch['page' + this._axisKey()],\n touch['page' + this._orthogonalAxisKey()]\n ];\n },\n\n _getKeyDownEventMap: function () {\n return {\n 'keydown': this._onKeyDown,\n 'focusout': this._onBlur\n }\n },\n\n _getMouseEventMap: function () {\n return {\n 'mousemove': this._onMouseMove,\n 'mouseup': this._onMouseUp\n }\n },\n\n _getTouchEventMap: function () {\n return {\n 'touchmove': this._onTouchMove,\n 'touchend': this._onTouchEnd\n }\n },\n\n // create the `keydown` handler for the i-th handle\n _createOnKeyDown: function (i) {\n return function (e) {\n if (this.props.disabled) return;\n this._start(i);\n this._addHandlers(this._getKeyDownEventMap());\n pauseEvent(e);\n }.bind(this);\n },\n\n // create the `mousedown` handler for the i-th handle\n _createOnMouseDown: function (i) {\n return function (e) {\n if (this.props.disabled) return;\n var position = this._getMousePosition(e);\n this._start(i, position[0]);\n this._addHandlers(this._getMouseEventMap());\n pauseEvent(e);\n }.bind(this);\n },\n\n // create the `touchstart` handler for the i-th handle\n _createOnTouchStart: function (i) {\n return function (e) {\n if (this.props.disabled || e.touches.length > 1) return;\n var position = this._getTouchPosition(e);\n this.startPosition = position;\n this.isScrolling = undefined; // don't know yet if the user is trying to scroll\n this._start(i, position[0]);\n this._addHandlers(this._getTouchEventMap());\n stopPropagation(e);\n }.bind(this);\n },\n\n _addHandlers: function (eventMap) {\n for (var key in eventMap) {\n document.addEventListener(key, eventMap[key], false);\n }\n },\n\n _removeHandlers: function (eventMap) {\n for (var key in eventMap) {\n document.removeEventListener(key, eventMap[key], false);\n }\n },\n\n _start: function (i, position) {\n var activeEl = document.activeElement;\n var handleRef = this.refs['handle' + i];\n // if activeElement is body window will lost focus in IE9\n if (activeEl && activeEl != document.body && activeEl != handleRef) {\n activeEl.blur && activeEl.blur();\n }\n\n this.hasMoved = false;\n\n this._fireChangeEvent('onBeforeChange');\n\n var zIndices = this.state.zIndices;\n zIndices.splice(zIndices.indexOf(i), 1); // remove wherever the element is\n zIndices.push(i); // add to end\n\n this.setState({\n startValue: this.state.value[i],\n startPosition: position,\n index: i,\n zIndices: zIndices\n });\n },\n\n _onMouseUp: function () {\n this._onEnd(this._getMouseEventMap());\n },\n\n _onTouchEnd: function () {\n this._onEnd(this._getTouchEventMap());\n },\n\n _onBlur: function () {\n this._onEnd(this._getKeyDownEventMap());\n },\n\n _onEnd: function (eventMap) {\n this._removeHandlers(eventMap);\n this.setState({index: -1}, this._fireChangeEvent.bind(this, 'onAfterChange'));\n },\n\n _onMouseMove: function (e) {\n var position = this._getMousePosition(e);\n var diffPosition = this._getDiffPosition(position[0]);\n var newValue = this._getValueFromPosition(diffPosition);\n this._move(newValue);\n },\n\n _onTouchMove: function (e) {\n if (e.touches.length > 1) return;\n\n var position = this._getTouchPosition(e);\n\n if (typeof this.isScrolling === 'undefined') {\n var diffMainDir = position[0] - this.startPosition[0];\n var diffScrollDir = position[1] - this.startPosition[1];\n this.isScrolling = Math.abs(diffScrollDir) > Math.abs(diffMainDir);\n }\n\n if (this.isScrolling) {\n this.setState({index: -1});\n return;\n }\n\n pauseEvent(e);\n\n var diffPosition = this._getDiffPosition(position[0]);\n var newValue = this._getValueFromPosition(diffPosition);\n\n this._move(newValue);\n },\n\n _onKeyDown: function (e) {\n if (e.ctrlKey || e.shiftKey || e.altKey) return;\n switch (e.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n return this._moveDownOneStep();\n case \"ArrowRight\":\n case \"ArrowDown\":\n return this._moveUpOneStep();\n case \"Home\":\n return this._move(this.props.min);\n case \"End\":\n return this._move(this.props.max);\n default:\n return;\n }\n },\n\n _moveUpOneStep: function () {\n var oldValue = this.state.value[this.state.index];\n var newValue = oldValue + this.props.step;\n this._move(Math.min(newValue, this.props.max));\n },\n\n _moveDownOneStep: function () {\n var oldValue = this.state.value[this.state.index];\n var newValue = oldValue - this.props.step;\n this._move(Math.max(newValue, this.props.min));\n },\n\n _getValueFromPosition: function (position) {\n var diffValue = position / (this.state.sliderLength - this.state.handleSize) * (this.props.max - this.props.min);\n return this._trimAlignValue(this.state.startValue + diffValue);\n },\n\n _getDiffPosition: function (position) {\n var diffPosition = position - this.state.startPosition;\n if (this.props.invert) diffPosition *= -1;\n return diffPosition;\n },\n\n _move: function (newValue) {\n this.hasMoved = true;\n\n var props = this.props;\n var state = this.state;\n var index = state.index;\n\n var value = state.value;\n var length = value.length;\n var oldValue = value[index];\n\n var minDistance = props.minDistance;\n\n // if \"pearling\" (= handles pushing each other) is disabled,\n // prevent the handle from getting closer than `minDistance` to the previous or next handle.\n if (!props.pearling) {\n if (index > 0) {\n var valueBefore = value[index - 1];\n if (newValue < valueBefore + minDistance) {\n newValue = valueBefore + minDistance;\n }\n }\n\n if (index < length - 1) {\n var valueAfter = value[index + 1];\n if (newValue > valueAfter - minDistance) {\n newValue = valueAfter - minDistance;\n }\n }\n }\n\n value[index] = newValue;\n\n // if \"pearling\" is enabled, let the current handle push the pre- and succeeding handles.\n if (props.pearling && length > 1) {\n if (newValue > oldValue) {\n this._pushSucceeding(value, minDistance, index);\n this._trimSucceeding(length, value, minDistance, props.max);\n }\n else if (newValue < oldValue) {\n this._pushPreceding(value, minDistance, index);\n this._trimPreceding(length, value, minDistance, props.min);\n }\n }\n\n // Normally you would use `shouldComponentUpdate`, but since the slider is a low-level component,\n // the extra complexity might be worth the extra performance.\n if (newValue !== oldValue) {\n this.setState({value: value}, this._fireChangeEvent.bind(this, 'onChange'));\n }\n },\n\n _pushSucceeding: function (value, minDistance, index) {\n var i, padding;\n for (i = index, padding = value[i] + minDistance;\n value[i + 1] != null && padding > value[i + 1];\n i++, padding = value[i] + minDistance) {\n value[i + 1] = this._alignValue(padding);\n }\n },\n\n _trimSucceeding: function (length, nextValue, minDistance, max) {\n for (var i = 0; i < length; i++) {\n var padding = max - i * minDistance;\n if (nextValue[length - 1 - i] > padding) {\n nextValue[length - 1 - i] = padding;\n }\n }\n },\n\n _pushPreceding: function (value, minDistance, index) {\n var i, padding;\n for (i = index, padding = value[i] - minDistance;\n value[i - 1] != null && padding < value[i - 1];\n i--, padding = value[i] - minDistance) {\n value[i - 1] = this._alignValue(padding);\n }\n },\n\n _trimPreceding: function (length, nextValue, minDistance, min) {\n for (var i = 0; i < length; i++) {\n var padding = min + i * minDistance;\n if (nextValue[i] < padding) {\n nextValue[i] = padding;\n }\n }\n },\n\n _axisKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return 'X';\n if (orientation === 'vertical') return 'Y';\n },\n\n _orthogonalAxisKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return 'Y';\n if (orientation === 'vertical') return 'X';\n },\n\n _posMinKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return this.props.invert ? 'right' : 'left';\n if (orientation === 'vertical') return this.props.invert ? 'bottom' : 'top';\n },\n\n _posMaxKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return this.props.invert ? 'left' : 'right';\n if (orientation === 'vertical') return this.props.invert ? 'top' : 'bottom';\n },\n\n _sizeKey: function () {\n var orientation = this.props.orientation;\n if (orientation === 'horizontal') return 'clientWidth';\n if (orientation === 'vertical') return 'clientHeight';\n },\n\n _trimAlignValue: function (val, props) {\n return this._alignValue(this._trimValue(val, props), props);\n },\n\n _trimValue: function (val, props) {\n props = props || this.props;\n\n if (val <= props.min) val = props.min;\n if (val >= props.max) val = props.max;\n\n return val;\n },\n\n _alignValue: function (val, props) {\n props = props || this.props;\n\n var valModStep = (val - props.min) % props.step;\n var alignValue = val - valModStep;\n\n if (Math.abs(valModStep) * 2 >= props.step) {\n alignValue += (valModStep > 0) ? props.step : (-props.step);\n }\n\n return parseFloat(alignValue.toFixed(5));\n },\n\n _renderHandle: function (style, child, i) {\n var className = this.props.handleClassName + ' ' +\n (this.props.handleClassName + '-' + i) + ' ' +\n (this.state.index === i ? this.props.handleActiveClassName : '');\n\n return (\n React.createElement('div', {\n ref: 'handle' + i,\n key: 'handle' + i,\n className: className,\n style: style,\n onMouseDown: this._createOnMouseDown(i),\n onTouchStart: this._createOnTouchStart(i),\n onFocus: this._createOnKeyDown(i),\n tabIndex: 0,\n role: \"slider\",\n \"aria-valuenow\": this.state.value[i],\n \"aria-valuemin\": this.props.min,\n \"aria-valuemax\": this.props.max,\n },\n child\n )\n );\n },\n\n _renderHandles: function (offset) {\n var length = offset.length;\n\n var styles = this.tempArray;\n for (var i = 0; i < length; i++) {\n styles[i] = this._buildHandleStyle(offset[i], i);\n }\n\n var res = this.tempArray;\n var renderHandle = this._renderHandle;\n if (React.Children.count(this.props.children) > 0) {\n React.Children.forEach(this.props.children, function (child, i) {\n res[i] = renderHandle(styles[i], child, i);\n });\n } else {\n for (i = 0; i < length; i++) {\n res[i] = renderHandle(styles[i], null, i);\n }\n }\n return res;\n },\n\n _renderBar: function (i, offsetFrom, offsetTo) {\n return (\n React.createElement('div', {\n key: 'bar' + i,\n ref: 'bar' + i,\n className: this.props.barClassName + ' ' + this.props.barClassName + '-' + i,\n style: this._buildBarStyle(offsetFrom, this.state.upperBound - offsetTo)\n })\n );\n },\n\n _renderBars: function (offset) {\n var bars = [];\n var lastIndex = offset.length - 1;\n\n bars.push(this._renderBar(0, 0, offset[0]));\n\n for (var i = 0; i < lastIndex; i++) {\n bars.push(this._renderBar(i + 1, offset[i], offset[i + 1]));\n }\n\n bars.push(this._renderBar(lastIndex + 1, offset[lastIndex], this.state.upperBound));\n\n return bars;\n },\n\n _onSliderMouseDown: function (e) {\n if (this.props.disabled) return;\n this.hasMoved = false;\n if (!this.props.snapDragDisabled) {\n var position = this._getMousePosition(e);\n this._forceValueFromPosition(position[0], function (i) {\n this._fireChangeEvent('onChange');\n this._start(i, position[0]);\n this._addHandlers(this._getMouseEventMap());\n }.bind(this));\n }\n\n pauseEvent(e);\n },\n\n _onSliderClick: function (e) {\n if (this.props.disabled) return;\n\n if (this.props.onSliderClick && !this.hasMoved) {\n var position = this._getMousePosition(e);\n var valueAtPos = this._trimAlignValue(this._calcValue(this._calcOffsetFromPosition(position[0])));\n this.props.onSliderClick(valueAtPos);\n }\n },\n\n _fireChangeEvent: function (event) {\n if (this.props[event]) {\n this.props[event](undoEnsureArray(this.state.value));\n }\n },\n\n render: function () {\n var state = this.state;\n var props = this.props;\n\n var offset = this.tempArray;\n var value = state.value;\n var l = value.length;\n for (var i = 0; i < l; i++) {\n offset[i] = this._calcOffset(value[i], i);\n }\n\n var bars = props.withBars ? this._renderBars(offset) : null;\n var handles = this._renderHandles(offset);\n\n return (\n React.createElement('div', {\n ref: 'slider',\n style: {position: 'relative'},\n className: props.className + (props.disabled ? ' disabled' : ''),\n onMouseDown: this._onSliderMouseDown,\n onClick: this._onSliderClick\n },\n bars,\n handles\n )\n );\n }\n });\n\n return ReactSlider;\n}));\n\n\n//# sourceURL=webpack://imrc-datetime-picker/./node_modules/react-slider/react-slider.js?")},"./src/CSSPropertyOperations/CSSProperty.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridColumn: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n background: {\n backgroundAttachment: true,\n backgroundColor: true,\n backgroundImage: true,\n backgroundPositionX: true,\n backgroundPositionY: true,\n backgroundRepeat: true\n },\n backgroundPosition: {\n backgroundPositionX: true,\n backgroundPositionY: true\n },\n border: {\n borderWidth: true,\n borderStyle: true,\n borderColor: true\n },\n borderBottom: {\n borderBottomWidth: true,\n borderBottomStyle: true,\n borderBottomColor: true\n },\n borderLeft: {\n borderLeftWidth: true,\n borderLeftStyle: true,\n borderLeftColor: true\n },\n borderRight: {\n borderRightWidth: true,\n borderRightStyle: true,\n borderRightColor: true\n },\n borderTop: {\n borderTopWidth: true,\n borderTopStyle: true,\n borderTopColor: true\n },\n font: {\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n fontSize: true,\n lineHeight: true,\n fontFamily: true\n },\n outline: {\n outlineWidth: true,\n outlineStyle: true,\n outlineColor: true\n }\n};\n\nvar CSSProperty = {\n isUnitlessNumber: isUnitlessNumber,\n shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nvar _default = CSSProperty;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(isUnitlessNumber, 'isUnitlessNumber', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(prefixKey, 'prefixKey', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(prefixes, 'prefixes', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(shorthandPropertyExpansions, 'shorthandPropertyExpansions', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(CSSProperty, 'CSSProperty', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n\n __REACT_HOT_LOADER__.register(_default, 'default', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/CSSProperty.js');\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/CSSPropertyOperations/CSSProperty.js?")},"./src/CSSPropertyOperations/dangerousStyleValue.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n\n\n// var CSSProperty = require('./CSSProperty');\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _CSSProperty = __webpack_require__(/*! ./CSSProperty.js */ \"./src/CSSPropertyOperations/CSSProperty.js\");\n\nvar _CSSProperty2 = _interopRequireDefault(_CSSProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ \"./node_modules/fbjs/lib/warning.js\");\n\nvar isUnitlessNumber = _CSSProperty2.default.isUnitlessNumber;\nvar styleWarnings = {};\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @param {ReactDOMComponent} component\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, component) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n if (isEmpty) {\n return '';\n }\n\n var isNonNumeric = isNaN(value);\n if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n return '' + value; // cast to string\n }\n\n if (typeof value === 'string') {\n if (true) {\n // Allow '0' to pass through without warning. 0 is already special and\n // doesn't require units, so we don't need to warn about it.\n if (component && value !== '0') {\n var owner = component._currentElement._owner;\n var ownerName = owner ? owner.getName() : null;\n if (ownerName && !styleWarnings[ownerName]) {\n styleWarnings[ownerName] = {};\n }\n var warned = false;\n if (ownerName) {\n var warnings = styleWarnings[ownerName];\n warned = warnings[name];\n if (!warned) {\n warnings[name] = true;\n }\n }\n if (!warned) {\n true ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : undefined;\n }\n }\n }\n value = value.trim();\n }\n return value + 'px';\n}\n\nvar _default = dangerousStyleValue;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(isUnitlessNumber, 'isUnitlessNumber', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/dangerousStyleValue.js');\n\n __REACT_HOT_LOADER__.register(styleWarnings, 'styleWarnings', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/dangerousStyleValue.js');\n\n __REACT_HOT_LOADER__.register(dangerousStyleValue, 'dangerousStyleValue', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/dangerousStyleValue.js');\n\n __REACT_HOT_LOADER__.register(_default, 'default', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/dangerousStyleValue.js');\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/CSSPropertyOperations/dangerousStyleValue.js?")},"./src/CSSPropertyOperations/index.js":function(module,exports,__webpack_require__){"use strict";eval("/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _CSSProperty = __webpack_require__(/*! ./CSSProperty.js */ \"./src/CSSPropertyOperations/CSSProperty.js\");\n\nvar _CSSProperty2 = _interopRequireDefault(_CSSProperty);\n\nvar _dangerousStyleValue = __webpack_require__(/*! ./dangerousStyleValue.js */ \"./src/CSSPropertyOperations/dangerousStyleValue.js\");\n\nvar _dangerousStyleValue2 = _interopRequireDefault(_dangerousStyleValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// var CSSProperty = require('./CSSProperty.js');\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ \"./node_modules/fbjs/lib/ExecutionEnvironment.js\");\n\nvar camelizeStyleName = __webpack_require__(/*! fbjs/lib/camelizeStyleName */ \"./node_modules/fbjs/lib/camelizeStyleName.js\");\n// var dangerousStyleValue = require('./dangerousStyleValue.js');\nvar hyphenateStyleName = __webpack_require__(/*! fbjs/lib/hyphenateStyleName */ \"./node_modules/fbjs/lib/hyphenateStyleName.js\");\nvar memoizeStringOnly = __webpack_require__(/*! fbjs/lib/memoizeStringOnly */ \"./node_modules/fbjs/lib/memoizeStringOnly.js\");\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ \"./node_modules/fbjs/lib/warning.js\");\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n var tempStyle = document.createElement('div').style;\n try {\n // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n tempStyle.font = '';\n } catch (e) {\n hasShorthandPropertyBug = true;\n }\n // IE8 only supports accessing cssFloat (standard) as styleFloat\n if (document.documentElement.style.cssFloat === undefined) {\n styleFloatAccessor = 'styleFloat';\n }\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n /**\n * Serializes a mapping of style properties for use as inline styles:\n *\n * > createMarkupForStyles({width: '200px', height: 0})\n * \"width:200px;height:0;\"\n *\n * Undefined values are ignored so that declarative programming is easier.\n * The result should be HTML-escaped before insertion into the DOM.\n *\n * @param {object} styles\n * @param {ReactDOMComponent} component\n * @return {?string}\n */\n createMarkupForStyles: function createMarkupForStyles(styles, component) {\n var serialized = '';\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var styleValue = styles[styleName];\n if (styleValue != null) {\n serialized += processStyleName(styleName) + ':';\n serialized += (0, _dangerousStyleValue2.default)(styleName, styleValue, component) + ';';\n }\n }\n return serialized || null;\n },\n\n /**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n * @param {ReactDOMComponent} component\n */\n setValueForStyles: function setValueForStyles(node, styles, component) {\n var style = node.style;\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var styleValue = (0, _dangerousStyleValue2.default)(styleName, styles[styleName], component);\n if (styleName === 'float' || styleName === 'cssFloat') {\n styleName = styleFloatAccessor;\n }\n if (styleValue) {\n style[styleName] = styleValue;\n } else {\n var expansion = hasShorthandPropertyBug && _CSSProperty2.default.shorthandPropertyExpansions[styleName];\n if (expansion) {\n // Shorthand property that IE8 won't like unsetting, so unset each\n // component to placate it\n for (var individualStyleName in expansion) {\n style[individualStyleName] = '';\n }\n } else {\n style[styleName] = '';\n }\n }\n }\n }\n\n};\n\nvar _default = CSSPropertyOperations;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(processStyleName, 'processStyleName', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(hasShorthandPropertyBug, 'hasShorthandPropertyBug', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(styleFloatAccessor, 'styleFloatAccessor', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(tempStyle, 'tempStyle', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(CSSPropertyOperations, 'CSSPropertyOperations', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n\n __REACT_HOT_LOADER__.register(_default, 'default', '/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/CSSPropertyOperations/index.js');\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/CSSPropertyOperations/index.js?")},"./src/Picker.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _blacklist = __webpack_require__(/*! blacklist */ "./node_modules/blacklist/index.js");\n\nvar _blacklist2 = _interopRequireDefault(_blacklist);\n\nvar _Calendar = __webpack_require__(/*! ./panels/Calendar.jsx */ "./src/panels/Calendar.jsx");\n\nvar _Calendar2 = _interopRequireDefault(_Calendar);\n\nvar _Time = __webpack_require__(/*! ./panels/Time.jsx */ "./src/panels/Time.jsx");\n\nvar _Time2 = _interopRequireDefault(_Time);\n\nvar _Shortcuts = __webpack_require__(/*! ./panels/Shortcuts.jsx */ "./src/panels/Shortcuts.jsx");\n\nvar _Shortcuts2 = _interopRequireDefault(_Shortcuts);\n\nvar _sass = __webpack_require__(/*! ./sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Picker = function (_Component) {\n _inherits(Picker, _Component);\n\n function Picker() {\n _classCallCheck(this, Picker);\n\n var _this = _possibleConstructorReturn(this, (Picker.__proto__ || Object.getPrototypeOf(Picker)).call(this));\n\n _this.changePanel = function () {\n return _this.__changePanel__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n panel: "calendar"\n };\n return _this;\n }\n\n _createClass(Picker, [{\n key: "__changePanel__REACT_HOT_LOADER__",\n value: function __changePanel__REACT_HOT_LOADER__() {\n return this.__changePanel__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__changePanel__REACT_HOT_LOADER__",\n value: function __changePanel__REACT_HOT_LOADER__(panel) {\n this.setState({\n panel: panel\n });\n }\n }, {\n key: "render",\n value: function render() {\n var _props = this.props,\n _props$isOpen = _props.isOpen,\n isOpen = _props$isOpen === undefined ? true : _props$isOpen,\n shortcuts = _props.shortcuts,\n splitPanel = _props.splitPanel,\n _props$showTimePicker = _props.showTimePicker,\n showTimePicker = _props$showTimePicker === undefined ? true : _props$showTimePicker,\n _props$showCalendarPi = _props.showCalendarPicker,\n showCalendarPicker = _props$showCalendarPi === undefined ? true : _props$showCalendarPi;\n var panel = this.state.panel;\n\n var isTimePanel = panel === "time";\n var isCalendarPanel = panel === "calendar";\n var className = (0, _bind2.default)(_sass2.default["datetime-picker"], this.props.className, {\n split: splitPanel\n });\n var props = (0, _blacklist2.default)(this.props, "className", "splitPanel", "isOpen");\n\n return _react2.default.createElement(\n "div",\n {\n className: className,\n style: { display: isOpen ? "block" : "none" },\n onClick: function onClick(evt) {\n return evt.stopPropagation();\n }\n },\n shortcuts ? _react2.default.createElement(_Shortcuts2.default, props) : undefined,\n splitPanel ? _react2.default.createElement(\n "div",\n { className: "panel-nav" },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n onClick: this.changePanel.bind(this, "calendar"),\n className: isCalendarPanel ? "active" : ""\n },\n _react2.default.createElement("i", {\n className: _sass2.default["icon"] + " " + _sass2.default["icon-calendar-empty"]\n }),\n "Date"\n ),\n _react2.default.createElement(\n "button",\n {\n type: "button",\n onClick: this.changePanel.bind(this, "time"),\n className: isTimePanel ? "active" : ""\n },\n _react2.default.createElement("i", { className: _sass2.default["icon"] + " " + _sass2.default["icon-clock"] }),\n "Time"\n )\n ) : undefined,\n showCalendarPicker ? _react2.default.createElement(_Calendar2.default, _extends({}, props, {\n isOpen: isOpen,\n style: {\n display: isCalendarPanel || !splitPanel ? "block" : "none"\n }\n })) : undefined,\n showTimePicker ? _react2.default.createElement(_Time2.default, _extends({}, props, {\n style: { display: isTimePanel || !splitPanel ? "block" : "none" }\n })) : undefined\n );\n }\n }]);\n\n return Picker;\n}(_react.Component);\n\nvar _default = Picker;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Picker, "Picker", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Picker.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Picker.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/Picker.jsx?')},"./src/Portal.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _index = __webpack_require__(/*! ./CSSPropertyOperations/index.js */ "./src/CSSPropertyOperations/index.js");\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactDom = __webpack_require__(/*! react-dom */ "react-dom");\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Portal = function (_Component) {\n _inherits(Portal, _Component);\n\n function Portal() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Portal);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Portal.__proto__ || Object.getPrototypeOf(Portal)).call.apply(_ref, [this].concat(args))), _this), _this.applyClassNameAndStyle = function () {\n var _this2;\n\n return (_this2 = _this).__applyClassNameAndStyle__REACT_HOT_LOADER__.apply(_this2, arguments);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Portal, [{\n key: "__applyClassNameAndStyle__REACT_HOT_LOADER__",\n value: function __applyClassNameAndStyle__REACT_HOT_LOADER__() {\n return this.__applyClassNameAndStyle__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n this.renderPortal(this.props);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n this.renderPortal(props);\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (this.node) {\n _reactDom2.default.unmountComponentAtNode(this.node);\n document.body.removeChild(this.node);\n }\n\n this.portal = null;\n this.node = null;\n }\n }, {\n key: "__applyClassNameAndStyle__REACT_HOT_LOADER__",\n value: function __applyClassNameAndStyle__REACT_HOT_LOADER__(props) {\n if (props.className) {\n this.node.className = props.className;\n }\n\n if (props.style) {\n _index2.default.setValueForStyles(this.node, props.style, this._reactInternalInstance);\n }\n }\n }, {\n key: "renderPortal",\n value: function renderPortal(props) {\n if (!this.node) {\n this.node = document.createElement("div");\n this.applyClassNameAndStyle(props);\n\n document.body.appendChild(this.node);\n } else {\n this.applyClassNameAndStyle(props);\n }\n\n var children = props.children;\n\n\n this.portal = _reactDom2.default.unstable_renderSubtreeIntoContainer(this, children, this.node);\n }\n }, {\n key: "render",\n value: function render() {\n return null;\n }\n }]);\n\n return Portal;\n}(_react.Component);\n\nvar _default = Portal;\nexports.default = _default;\n;\n\nvar _temp2 = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Portal, "Portal", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Portal.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Portal.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/Portal.jsx?')},"./src/Range.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _blacklist = __webpack_require__(/*! blacklist */ "./node_modules/blacklist/index.js");\n\nvar _blacklist2 = _interopRequireDefault(_blacklist);\n\nvar _Picker = __webpack_require__(/*! ./Picker.jsx */ "./src/Picker.jsx");\n\nvar _Picker2 = _interopRequireDefault(_Picker);\n\nvar _Shortcuts = __webpack_require__(/*! ./panels/Shortcuts.jsx */ "./src/panels/Shortcuts.jsx");\n\nvar _Shortcuts2 = _interopRequireDefault(_Shortcuts);\n\nvar _constants = __webpack_require__(/*! ./constants.js */ "./src/constants.js");\n\nvar _sass = __webpack_require__(/*! ./sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Range = function (_Component) {\n _inherits(Range, _Component);\n\n function Range(props) {\n _classCallCheck(this, Range);\n\n var _this = _possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).call(this, props));\n\n _this.handleChange = function () {\n return _this.__handleChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleShortcutChange = function () {\n return _this.__handleShortcutChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.onConfirm = function () {\n return _this.__onConfirm__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n moment: props.moment\n };\n return _this;\n }\n\n _createClass(Range, [{\n key: "__onConfirm__REACT_HOT_LOADER__",\n value: function __onConfirm__REACT_HOT_LOADER__() {\n return this.__onConfirm__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleShortcutChange__REACT_HOT_LOADER__",\n value: function __handleShortcutChange__REACT_HOT_LOADER__() {\n return this.__handleShortcutChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__() {\n return this.__handleChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n this.setState({\n moment: props.moment\n });\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__(moment) {\n this.setState({\n moment: moment\n });\n }\n }, {\n key: "__handleShortcutChange__REACT_HOT_LOADER__",\n value: function __handleShortcutChange__REACT_HOT_LOADER__(moment, isCustom) {\n var onChange = this.props.onChange;\n\n\n if (isCustom) {\n this.setState({\n moment: moment\n });\n } else {\n onChange && onChange(moment);\n }\n }\n }, {\n key: "__onConfirm__REACT_HOT_LOADER__",\n value: function __onConfirm__REACT_HOT_LOADER__() {\n var moment = this.state.moment;\n var onChange = this.props.onChange;\n\n\n onChange && onChange(moment);\n }\n }, {\n key: "render",\n value: function render() {\n var moment = this.state.moment;\n var _props = this.props,\n format = _props.format,\n _props$showTimePicker = _props.showTimePicker,\n showTimePicker = _props$showTimePicker === undefined ? false : _props$showTimePicker,\n _props$isOpen = _props.isOpen,\n isOpen = _props$isOpen === undefined ? true : _props$isOpen,\n shortcuts = _props.shortcuts,\n _props$confirmButtonT = _props.confirmButtonText,\n confirmButtonText = _props$confirmButtonT === undefined ? _constants.CONFIRM_BUTTON_TEXT : _props$confirmButtonT,\n _props$startDateText = _props.startDateText,\n startDateText = _props$startDateText === undefined ? _constants.START_DATE_TEXT : _props$startDateText,\n _props$endDateText = _props.endDateText,\n endDateText = _props$endDateText === undefined ? _constants.END_DATE_TEXT : _props$endDateText,\n isSolar = _props.isSolar;\n\n var formatStyle = format || (showTimePicker ? isSolar ? "jYYYY/jMM/jDD HH:mm" : "YYYY/MM/DD HH:mm" : isSolar ? "jYYYY/jMM/jDD" : "YYYY/MM/DD");\n var className = (0, _bind2.default)(_sass2.default["datetime-range-picker"], this.props.className);\n var props = (0, _blacklist2.default)(this.props, "className", "isOpen", "format", "moment", "showTimePicker", "shortcuts", "onChange");\n\n return _react2.default.createElement(\n "div",\n { className: className, style: { display: isOpen ? "block" : "none" } },\n _react2.default.createElement(\n "div",\n { className: "tools-bar" },\n shortcuts ? _react2.default.createElement(_Shortcuts2.default, _extends({}, props, {\n moment: moment || {},\n range: true,\n shortcuts: shortcuts,\n onChange: this.handleShortcutChange\n })) : undefined,\n _react2.default.createElement(\n "div",\n { className: "buttons" },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: _sass2.default["btn"],\n onClick: this.onConfirm\n },\n confirmButtonText\n )\n )\n ),\n _react2.default.createElement(\n "div",\n { className: "datetime-range-picker-panel" },\n _react2.default.createElement(\n "table",\n null,\n _react2.default.createElement(\n "tbody",\n null,\n _react2.default.createElement(\n "tr",\n null,\n _react2.default.createElement(\n "td",\n { className: "datetime-text" },\n _react2.default.createElement(\n "span",\n { className: "text-label" },\n startDateText\n ),\n _react2.default.createElement(\n "span",\n { className: "text-value" },\n moment && moment.start ? moment.start.format(formatStyle) : undefined\n )\n ),\n _react2.default.createElement(\n "td",\n { className: "datetime-text" },\n _react2.default.createElement(\n "span",\n { className: "text-label" },\n endDateText\n ),\n _react2.default.createElement(\n "span",\n { className: "text-value" },\n moment && moment.end ? moment.end.format(formatStyle) : undefined\n )\n )\n ),\n _react2.default.createElement(\n "tr",\n null,\n _react2.default.createElement(\n "td",\n null,\n _react2.default.createElement(_Picker2.default, _extends({}, props, {\n isOpen: isOpen,\n className: "range-start-picker",\n showTimePicker: showTimePicker,\n moment: moment,\n range: true,\n rangeAt: "start",\n onChange: this.handleChange\n }))\n ),\n _react2.default.createElement(\n "td",\n null,\n _react2.default.createElement(_Picker2.default, _extends({}, props, {\n isOpen: isOpen,\n className: "range-end-picker",\n showTimePicker: showTimePicker,\n moment: moment,\n range: true,\n rangeAt: "end",\n onChange: this.handleChange\n }))\n )\n )\n )\n )\n )\n );\n }\n }]);\n\n return Range;\n}(_react.Component);\n\nvar _default = Range;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Range, "Range", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Range.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Range.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/Range.jsx?')},"./src/RangeTrigger.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(/*! react-dom */ "react-dom");\n\nvar _blacklist = __webpack_require__(/*! blacklist */ "./node_modules/blacklist/index.js");\n\nvar _blacklist2 = _interopRequireDefault(_blacklist);\n\nvar _Range = __webpack_require__(/*! ./Range.jsx */ "./src/Range.jsx");\n\nvar _Range2 = _interopRequireDefault(_Range);\n\nvar _Portal = __webpack_require__(/*! ./Portal.jsx */ "./src/Portal.jsx");\n\nvar _Portal2 = _interopRequireDefault(_Portal);\n\nvar _sass = __webpack_require__(/*! ./sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RangeTrigger = function (_Component) {\n _inherits(RangeTrigger, _Component);\n\n function RangeTrigger() {\n _classCallCheck(this, RangeTrigger);\n\n var _this = _possibleConstructorReturn(this, (RangeTrigger.__proto__ || Object.getPrototypeOf(RangeTrigger)).call(this));\n\n _this.handleDocumentClick = function () {\n return _this.__handleDocumentClick__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handlePortalPosition = function () {\n return _this.__handlePortalPosition__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleChange = function () {\n return _this.__handleChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.togglePicker = function () {\n return _this.__togglePicker__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.getPosition = function () {\n return _this.__getPosition__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderPortal = function () {\n return _this.___renderPortal__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderPicker = function () {\n return _this.___renderPicker__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n isOpen: false,\n pos: {}\n };\n return _this;\n }\n\n _createClass(RangeTrigger, [{\n key: "___renderPicker__REACT_HOT_LOADER__",\n value: function ___renderPicker__REACT_HOT_LOADER__() {\n return this.___renderPicker__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "___renderPortal__REACT_HOT_LOADER__",\n value: function ___renderPortal__REACT_HOT_LOADER__() {\n return this.___renderPortal__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__getPosition__REACT_HOT_LOADER__",\n value: function __getPosition__REACT_HOT_LOADER__() {\n return this.__getPosition__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__togglePicker__REACT_HOT_LOADER__",\n value: function __togglePicker__REACT_HOT_LOADER__() {\n return this.__togglePicker__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__() {\n return this.__handleChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handlePortalPosition__REACT_HOT_LOADER__",\n value: function __handlePortalPosition__REACT_HOT_LOADER__() {\n return this.__handlePortalPosition__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleDocumentClick__REACT_HOT_LOADER__",\n value: function __handleDocumentClick__REACT_HOT_LOADER__() {\n return this.__handleDocumentClick__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n window.addEventListener("click", this.handleDocumentClick, false);\n\n if (this.props.appendToBody) {\n window.addEventListener("scroll", this.handlePortalPosition, false);\n window.addEventListener("resize", this.handlePortalPosition, false);\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n window.removeEventListener("click", this.handleDocumentClick, false);\n\n if (this.props.appendToBody) {\n window.removeEventListener("scroll", this.handlePortalPosition, false);\n window.removeEventListener("resize", this.handlePortalPosition, false);\n }\n }\n }, {\n key: "__handleDocumentClick__REACT_HOT_LOADER__",\n value: function __handleDocumentClick__REACT_HOT_LOADER__(evt) {\n if (!(0, _reactDom.findDOMNode)(this).contains(evt.target)) {\n this.togglePicker(false);\n }\n }\n }, {\n key: "__handlePortalPosition__REACT_HOT_LOADER__",\n value: function __handlePortalPosition__REACT_HOT_LOADER__() {\n if (this.state.isOpen) {\n this.setState({\n pos: this.getPosition()\n });\n }\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__(moment) {\n var onChange = this.props.onChange;\n\n\n this.setState({\n isOpen: false\n });\n onChange && onChange(moment);\n }\n }, {\n key: "__togglePicker__REACT_HOT_LOADER__",\n value: function __togglePicker__REACT_HOT_LOADER__(isOpen) {\n var disabled = this.props.disabled;\n\n\n if (disabled) return;\n\n this.setState({\n isOpen: isOpen,\n pos: this.getPosition()\n });\n }\n }, {\n key: "__getPosition__REACT_HOT_LOADER__",\n value: function __getPosition__REACT_HOT_LOADER__() {\n var elem = this.refs.trigger;\n var elemBCR = elem.getBoundingClientRect();\n\n return {\n top: Math.round(elemBCR.top + elemBCR.height),\n left: Math.round(elemBCR.left)\n };\n }\n }, {\n key: "___renderPortal__REACT_HOT_LOADER__",\n value: function ___renderPortal__REACT_HOT_LOADER__() {\n var _state = this.state,\n pos = _state.pos,\n isOpen = _state.isOpen;\n\n var style = {\n display: isOpen ? "block" : "none",\n position: "fixed",\n top: pos.top + "px",\n left: pos.left + "px"\n };\n\n return _react2.default.createElement(\n _Portal2.default,\n { style: style },\n this._renderPicker(true)\n );\n }\n }, {\n key: "___renderPicker__REACT_HOT_LOADER__",\n value: function ___renderPicker__REACT_HOT_LOADER__(isOpen) {\n var props = (0, _blacklist2.default)(this.props, "className", "appendToBody", "children", "onChange");\n var position = props.position;\n\n\n return _react2.default.createElement(_Range2.default, _extends({}, props, {\n className: _sass2.default["datetime-range-picker-popup"] + " " + (String(position).toLowerCase() === "top" ? _sass2.default["pos-top"] : _sass2.default["pos-bottom"]),\n isOpen: isOpen,\n onChange: this.handleChange\n }));\n }\n }, {\n key: "render",\n value: function render() {\n var _props = this.props,\n children = _props.children,\n appendToBody = _props.appendToBody,\n className = _props.className;\n var isOpen = this.state.isOpen;\n\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["datetime-range-trigger"] + " " + className },\n _react2.default.createElement(\n "div",\n { onClick: this.togglePicker.bind(this, !isOpen), ref: "trigger" },\n children\n ),\n appendToBody ? this._renderPortal() : this._renderPicker(isOpen)\n );\n }\n }]);\n\n return RangeTrigger;\n}(_react.Component);\n\nvar _default = RangeTrigger;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(RangeTrigger, "RangeTrigger", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/RangeTrigger.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/RangeTrigger.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/RangeTrigger.jsx?')},"./src/Trigger.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(/*! react-dom */ "react-dom");\n\nvar _blacklist = __webpack_require__(/*! blacklist */ "./node_modules/blacklist/index.js");\n\nvar _blacklist2 = _interopRequireDefault(_blacklist);\n\nvar _Picker = __webpack_require__(/*! ./Picker.jsx */ "./src/Picker.jsx");\n\nvar _Picker2 = _interopRequireDefault(_Picker);\n\nvar _Portal = __webpack_require__(/*! ./Portal.jsx */ "./src/Portal.jsx");\n\nvar _Portal2 = _interopRequireDefault(_Portal);\n\nvar _sass = __webpack_require__(/*! ./sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Trigger = function (_Component) {\n _inherits(Trigger, _Component);\n\n function Trigger() {\n _classCallCheck(this, Trigger);\n\n var _this = _possibleConstructorReturn(this, (Trigger.__proto__ || Object.getPrototypeOf(Trigger)).call(this));\n\n _this.handleDocumentClick = function () {\n return _this.__handleDocumentClick__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handlePortalPosition = function () {\n return _this.__handlePortalPosition__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleChange = function () {\n return _this.__handleChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.togglePicker = function () {\n return _this.__togglePicker__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.getPosition = function () {\n return _this.__getPosition__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderPortal = function () {\n return _this.___renderPortal__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderPicker = function () {\n return _this.___renderPicker__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n isOpen: false,\n pos: {}\n };\n return _this;\n }\n\n _createClass(Trigger, [{\n key: "___renderPicker__REACT_HOT_LOADER__",\n value: function ___renderPicker__REACT_HOT_LOADER__() {\n return this.___renderPicker__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "___renderPortal__REACT_HOT_LOADER__",\n value: function ___renderPortal__REACT_HOT_LOADER__() {\n return this.___renderPortal__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__getPosition__REACT_HOT_LOADER__",\n value: function __getPosition__REACT_HOT_LOADER__() {\n return this.__getPosition__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__togglePicker__REACT_HOT_LOADER__",\n value: function __togglePicker__REACT_HOT_LOADER__() {\n return this.__togglePicker__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__() {\n return this.__handleChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handlePortalPosition__REACT_HOT_LOADER__",\n value: function __handlePortalPosition__REACT_HOT_LOADER__() {\n return this.__handlePortalPosition__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleDocumentClick__REACT_HOT_LOADER__",\n value: function __handleDocumentClick__REACT_HOT_LOADER__() {\n return this.__handleDocumentClick__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n window.addEventListener("click", this.handleDocumentClick, false);\n\n if (this.props.appendToBody) {\n window.addEventListener("scroll", this.handlePortalPosition, false);\n window.addEventListener("resize", this.handlePortalPosition, false);\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n window.removeEventListener("click", this.handleDocumentClick, false);\n\n if (this.props.appendToBody) {\n window.removeEventListener("scroll", this.handlePortalPosition, false);\n window.removeEventListener("resize", this.handlePortalPosition, false);\n }\n }\n }, {\n key: "__handleDocumentClick__REACT_HOT_LOADER__",\n value: function __handleDocumentClick__REACT_HOT_LOADER__(evt) {\n if (!(0, _reactDom.findDOMNode)(this).contains(evt.target)) {\n this.togglePicker(false);\n }\n }\n }, {\n key: "__handlePortalPosition__REACT_HOT_LOADER__",\n value: function __handlePortalPosition__REACT_HOT_LOADER__() {\n if (this.state.isOpen) {\n this.setState({\n pos: this.getPosition()\n });\n }\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__(moment, currentPanel) {\n var _props = this.props,\n closeOnSelectDay = _props.closeOnSelectDay,\n onChange = _props.onChange;\n\n\n if (currentPanel === "day" && closeOnSelectDay) {\n this.setState({\n isOpen: false\n });\n }\n\n onChange && onChange(moment);\n }\n }, {\n key: "__togglePicker__REACT_HOT_LOADER__",\n value: function __togglePicker__REACT_HOT_LOADER__(isOpen) {\n var disabled = this.props.disabled;\n\n\n if (disabled) return;\n\n this.setState({\n isOpen: isOpen,\n pos: this.getPosition()\n });\n }\n }, {\n key: "__getPosition__REACT_HOT_LOADER__",\n value: function __getPosition__REACT_HOT_LOADER__() {\n var elem = this.refs.trigger;\n var elemBCR = elem.getBoundingClientRect();\n\n return {\n top: Math.round(elemBCR.top + elemBCR.height),\n left: Math.round(elemBCR.left)\n };\n }\n }, {\n key: "___renderPortal__REACT_HOT_LOADER__",\n value: function ___renderPortal__REACT_HOT_LOADER__() {\n var _state = this.state,\n pos = _state.pos,\n isOpen = _state.isOpen;\n\n var style = {\n display: isOpen ? "block" : "none",\n position: "fixed",\n top: pos.top + "px",\n left: pos.left + "px"\n };\n\n return _react2.default.createElement(\n _Portal2.default,\n { style: style },\n this._renderPicker(true)\n );\n }\n }, {\n key: "___renderPicker__REACT_HOT_LOADER__",\n value: function ___renderPicker__REACT_HOT_LOADER__(isOpen) {\n var props = (0, _blacklist2.default)(this.props, "className", "appendToBody", "children", "onChange");\n var position = props.position;\n\n\n return _react2.default.createElement(_Picker2.default, _extends({}, props, {\n className: _sass2.default["datetime-picker-popup"] + " " + (String(position).toLowerCase() === "top" ? _sass2.default["pos-top"] : _sass2.default["pos-bottom"]),\n isOpen: isOpen,\n onChange: this.handleChange\n }));\n }\n }, {\n key: "render",\n value: function render() {\n var _props2 = this.props,\n children = _props2.children,\n appendToBody = _props2.appendToBody,\n className = _props2.className;\n var isOpen = this.state.isOpen;\n\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["datetime-trigger"] + " " + className },\n _react2.default.createElement(\n "div",\n { onClick: this.togglePicker.bind(this, !isOpen), ref: "trigger" },\n children\n ),\n appendToBody ? this._renderPortal() : this._renderPicker(isOpen)\n );\n }\n }]);\n\n return Trigger;\n}(_react.Component);\n\nvar _default = Trigger;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Trigger, "Trigger", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Trigger.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/Trigger.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/Trigger.jsx?')},"./src/constants.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nvar WEEKS = exports.WEEKS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];\nvar WEEKS_FA = exports.WEEKS_FA = ["\u0634", "\u06cc", "\u062f", "\u0633", "\u0686", "\u067e", "\u062c"];\n\nvar MONTHS = exports.MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];\nvar MONTHS_FA = exports.MONTHS_FA = ["\u0698\u0627\u0646\u0648\u06cc\u0647", "\u0641\u0648\u0631\u06cc\u0647", "\u0645\u0627\u0631\u0633", "\u0622\u0648\u0631\u06cc\u0644", "\u0645\u0647", "\u0698\u0648\u0626\u0646", "\u0698\u0648\u0626\u06cc\u0647", "\u0627\u0648\u062a", "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0628\u0631", "\u0646\u0648\u0627\u0645\u0628\u0631", "\u062f\u0633\u0627\u0645\u0628\u0631"];\n\nvar MONTHS_SOLAR = exports.MONTHS_SOLAR = ["Farvardin", "Ordibehesht", "Khordaad", "Tir", "Amordaad", "Shahrivar", "Mehr", "Aabaan", "Aazar", "Dey", "Bahman", "Esfand"];\nvar MONTHS_SOLAR_FA = exports.MONTHS_SOLAR_FA = ["\u0641\u0631\u0648\u0631\u062f\u06cc\u0646", "\u0627\u0631\u062f\u06cc\u0628\u0647\u0634\u062a", "\u062e\u0631\u062f\u0627\u062f", "\u062a\u06cc\u0631", "\u0645\u0631\u062f\u0627\u062f", "\u0634\u0647\u0631\u06cc\u0648\u0631", "\u0645\u0647\u0631", "\u0622\u0628\u0627\u0646", "\u0622\u0630\u0631", "\u062f\u06cc", "\u0628\u0647\u0645\u0646", "\u0627\u0633\u0641\u0646\u062f"];\n\nvar DAY_FORMAT = exports.DAY_FORMAT = "MMMM, YYYY";\nvar DAY_FORMAT_SOLAR = exports.DAY_FORMAT_SOLAR = "jMMMM, jYYYY";\n\nvar CONFIRM_BUTTON_TEXT = exports.CONFIRM_BUTTON_TEXT = "Confirm";\nvar CONFIRM_BUTTON_TEXT_FA = exports.CONFIRM_BUTTON_TEXT_FA = "\u062a\u0627\u06cc\u06cc\u062f";\n\nvar START_DATE_TEXT = exports.START_DATE_TEXT = "Start Date:";\nvar START_DATE_TEXT_FA = exports.START_DATE_TEXT_FA = "\u062a\u0627\u0631\u06cc\u062e \u0634\u0631\u0648\u0639:";\n\nvar END_DATE_TEXT = exports.END_DATE_TEXT = "End Date:";\nvar END_DATE_TEXT_FA = exports.END_DATE_TEXT_FA = "\u062a\u0627\u0631\u06cc\u062e \u067e\u0627\u06cc\u0627\u0646:";\n\nvar CUSTOM_BUTTON_TEXT = exports.CUSTOM_BUTTON_TEXT = "Custom";\nvar CUSTOM_BUTTON_TEXT_FA = exports.CUSTOM_BUTTON_TEXT_FA = "\u0627\u0646\u062a\u062e\u0627\u0628\u06cc";\n\nvar PERSIAN_NUMBERS = exports.PERSIAN_NUMBERS = ["\u06f0", "\u06f1", "\u06f2", "\u06f3", "\u06f4", "\u06f5", "\u06f6", "\u06f7", "\u06f8", "\u06f9"];\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(WEEKS, "WEEKS", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(WEEKS_FA, "WEEKS_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(MONTHS, "MONTHS", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(MONTHS_FA, "MONTHS_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(MONTHS_SOLAR, "MONTHS_SOLAR", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(MONTHS_SOLAR_FA, "MONTHS_SOLAR_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(DAY_FORMAT, "DAY_FORMAT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(DAY_FORMAT_SOLAR, "DAY_FORMAT_SOLAR", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(CONFIRM_BUTTON_TEXT, "CONFIRM_BUTTON_TEXT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(CONFIRM_BUTTON_TEXT_FA, "CONFIRM_BUTTON_TEXT_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(START_DATE_TEXT, "START_DATE_TEXT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(START_DATE_TEXT_FA, "START_DATE_TEXT_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(END_DATE_TEXT, "END_DATE_TEXT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(END_DATE_TEXT_FA, "END_DATE_TEXT_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(CUSTOM_BUTTON_TEXT, "CUSTOM_BUTTON_TEXT", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(CUSTOM_BUTTON_TEXT_FA, "CUSTOM_BUTTON_TEXT_FA", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n\n __REACT_HOT_LOADER__.register(PERSIAN_NUMBERS, "PERSIAN_NUMBERS", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/constants.js");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/constants.js?')},"./src/index.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Picker = __webpack_require__(/*! ./Picker.jsx */ \"./src/Picker.jsx\");\n\nObject.defineProperty(exports, 'DatetimePicker', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Picker).default;\n }\n});\n\nvar _Range = __webpack_require__(/*! ./Range.jsx */ \"./src/Range.jsx\");\n\nObject.defineProperty(exports, 'DatetimeRangePicker', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Range).default;\n }\n});\n\nvar _Trigger = __webpack_require__(/*! ./Trigger.jsx */ \"./src/Trigger.jsx\");\n\nObject.defineProperty(exports, 'DatetimePickerTrigger', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Trigger).default;\n }\n});\n\nvar _RangeTrigger = __webpack_require__(/*! ./RangeTrigger.jsx */ \"./src/RangeTrigger.jsx\");\n\nObject.defineProperty(exports, 'DatetimeRangePickerTrigger', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_RangeTrigger).default;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/index.js?")},"./src/panels/Calendar.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Day = __webpack_require__(/*! ./Day.jsx */ "./src/panels/Day.jsx");\n\nvar _Day2 = _interopRequireDefault(_Day);\n\nvar _Month = __webpack_require__(/*! ./Month.jsx */ "./src/panels/Month.jsx");\n\nvar _Month2 = _interopRequireDefault(_Month);\n\nvar _Year = __webpack_require__(/*! ./Year.jsx */ "./src/panels/Year.jsx");\n\nvar _Year2 = _interopRequireDefault(_Year);\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Calendar = function (_Component) {\n _inherits(Calendar, _Component);\n\n function Calendar(props) {\n _classCallCheck(this, Calendar);\n\n var _this = _possibleConstructorReturn(this, (Calendar.__proto__ || Object.getPrototypeOf(Calendar)).call(this, props));\n\n _this.getCurrentMoment = function () {\n return _this.__getCurrentMoment__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleSelect = function () {\n return _this.__handleSelect__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.changePanel = function () {\n return _this.__changePanel__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n moment: _this.getCurrentMoment(props),\n panel: props.minPanel || "day"\n };\n return _this;\n }\n\n _createClass(Calendar, [{\n key: "__changePanel__REACT_HOT_LOADER__",\n value: function __changePanel__REACT_HOT_LOADER__() {\n return this.__changePanel__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleSelect__REACT_HOT_LOADER__",\n value: function __handleSelect__REACT_HOT_LOADER__() {\n return this.__handleSelect__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__getCurrentMoment__REACT_HOT_LOADER__",\n value: function __getCurrentMoment__REACT_HOT_LOADER__() {\n return this.__getCurrentMoment__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n this.setState({\n moment: this.getCurrentMoment(props)\n });\n\n if (!props.isOpen) {\n this.setState({\n panel: props.minPanel || "day"\n });\n }\n }\n }, {\n key: "__getCurrentMoment__REACT_HOT_LOADER__",\n value: function __getCurrentMoment__REACT_HOT_LOADER__(props) {\n var range = props.range,\n rangeAt = props.rangeAt;\n\n var now = this.state ? this.state.moment || moment() : moment();\n var result = props.moment;\n\n if (result) {\n if (range) {\n result = result[rangeAt] || now;\n }\n } else {\n result = now;\n }\n\n return result;\n }\n }, {\n key: "__handleSelect__REACT_HOT_LOADER__",\n value: function __handleSelect__REACT_HOT_LOADER__(selected) {\n var panel = this.state.panel;\n var _props = this.props,\n onChange = _props.onChange,\n range = _props.range,\n rangeAt = _props.rangeAt,\n minPanel = _props.minPanel;\n\n var nextPanel = (panel === "year" ? "month" : "day") === "month" ? minPanel === "year" ? "year" : "month" : minPanel === "month" ? "month" : "day";\n var _selected = this.props.moment;\n var shouldChange = panel === minPanel;\n\n if (_selected && !shouldChange) {\n if (range) {\n shouldChange = rangeAt === "start" ? _selected.start : _selected.end;\n } else {\n shouldChange = true;\n }\n }\n\n if (range) {\n var copyed = _selected ? _extends({}, _selected) : {};\n\n copyed[rangeAt] = selected;\n _selected = copyed;\n } else {\n _selected = selected;\n }\n\n this.changePanel(nextPanel, selected);\n\n if (shouldChange) {\n onChange && onChange(_selected, panel);\n }\n }\n }, {\n key: "__changePanel__REACT_HOT_LOADER__",\n value: function __changePanel__REACT_HOT_LOADER__(panel) {\n var moment = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state.moment;\n\n this.setState({\n moment: moment,\n panel: panel\n });\n }\n }, {\n key: "render",\n value: function render() {\n var _props2 = this.props,\n weeks = _props2.weeks,\n months = _props2.months,\n dayFormat = _props2.dayFormat,\n style = _props2.style,\n maxDate = _props2.maxDate,\n minDate = _props2.minDate,\n dateLimit = _props2.dateLimit,\n range = _props2.range,\n rangeAt = _props2.rangeAt,\n lang = _props2.lang,\n isSolar = _props2.isSolar;\n\n var props = {\n moment: this.state.moment,\n selected: this.props.moment,\n onSelect: this.handleSelect,\n changePanel: this.changePanel,\n weeks: weeks,\n months: months,\n dayFormat: dayFormat,\n maxDate: maxDate,\n minDate: minDate,\n dateLimit: dateLimit,\n range: range,\n rangeAt: rangeAt,\n lang: lang,\n isSolar: isSolar\n };\n var panel = this.state.panel;\n\n var isDayPanel = panel === "day";\n var isMonthPanel = panel === "month";\n var isYearPanel = panel === "year";\n\n return _react2.default.createElement(\n "div",\n { style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar"] },\n function () {\n if (isDayPanel) return _react2.default.createElement(_Day2.default, props);\n if (isMonthPanel) return _react2.default.createElement(_Month2.default, props);\n if (isYearPanel) return _react2.default.createElement(_Year2.default, props);\n }()\n )\n );\n }\n }]);\n\n return Calendar;\n}(_react.Component);\n\nvar _default = Calendar;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Calendar, "Calendar", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Calendar.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Calendar.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Calendar.jsx?')},"./src/panels/Day.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _constants = __webpack_require__(/*! ../constants */ "./src/constants.js");\n\nvar _utils = __webpack_require__(/*! ../utils */ "./src/utils.js");\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Day = function (_Component) {\n _inherits(Day, _Component);\n\n function Day(props) {\n _classCallCheck(this, Day);\n\n var _this = _possibleConstructorReturn(this, (Day.__proto__ || Object.getPrototypeOf(Day)).call(this, props));\n\n _this.changeMonth = function () {\n return _this.__changeMonth__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.select = function () {\n return _this.__select__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderWeek = function () {\n return _this.___renderWeek__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderDay = function () {\n return _this.___renderDay__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n var isSolar = props.isSolar;\n\n\n _this.state = {\n moment: props.moment,\n dateStr: isSolar ? "jDate" : "date",\n monthStr: isSolar ? "jMonth" : "month"\n };\n return _this;\n }\n\n _createClass(Day, [{\n key: "___renderDay__REACT_HOT_LOADER__",\n value: function ___renderDay__REACT_HOT_LOADER__() {\n return this.___renderDay__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "___renderWeek__REACT_HOT_LOADER__",\n value: function ___renderWeek__REACT_HOT_LOADER__() {\n return this.___renderWeek__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__() {\n return this.__select__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__changeMonth__REACT_HOT_LOADER__",\n value: function __changeMonth__REACT_HOT_LOADER__() {\n return this.__changeMonth__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n var isSolar = props.isSolar;\n\n\n this.setState({\n moment: props.moment,\n dateStr: isSolar ? "jDate" : "date",\n monthStr: isSolar ? "jMonth" : "month"\n });\n }\n }, {\n key: "__changeMonth__REACT_HOT_LOADER__",\n value: function __changeMonth__REACT_HOT_LOADER__(dir) {\n var _moment = this.state.moment.clone();\n var monthStr = this.state.monthStr;\n\n\n this.setState({\n moment: _moment[dir === "prev" ? "subtract" : "add"](1, monthStr)\n });\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__(day, isSelected, isDisabled, isPrevMonth, isNextMonth) {\n if (isDisabled) return;\n var _props = this.props,\n range = _props.range,\n onSelect = _props.onSelect;\n\n var _moment = this.state.moment.clone();\n var _state = this.state,\n monthStr = _state.monthStr,\n dateStr = _state.dateStr;\n\n\n if (isPrevMonth) _moment.subtract(1, monthStr);\n if (isNextMonth) _moment.add(1, monthStr);\n\n _moment[dateStr](day);\n\n this.setState({\n moment: range ? this.state.moment : _moment\n });\n onSelect(_moment);\n }\n }, {\n key: "___renderWeek__REACT_HOT_LOADER__",\n value: function ___renderWeek__REACT_HOT_LOADER__(week) {\n return _react2.default.createElement(\n "th",\n { key: week },\n week\n );\n }\n }, {\n key: "___renderDay__REACT_HOT_LOADER__",\n value: function ___renderDay__REACT_HOT_LOADER__(week, day) {\n var _classNames;\n\n var _props2 = this.props,\n maxDate = _props2.maxDate,\n minDate = _props2.minDate,\n range = _props2.range,\n rangeAt = _props2.rangeAt,\n selected = _props2.selected,\n dateLimit = _props2.dateLimit,\n lang = _props2.lang;\n\n var now = moment();\n var _moment = this.state.moment;\n var _state2 = this.state,\n monthStr = _state2.monthStr,\n dateStr = _state2.dateStr;\n\n var isPrevMonth = week === 0 && day > 7;\n var isNextMonth = week >= 4 && day <= 14;\n var month = isNextMonth ? _moment.clone().add(1, monthStr) : isPrevMonth ? _moment.clone().subtract(1, monthStr) : _moment.clone();\n var currentDay = month.clone()[dateStr](day);\n var start = selected && range ? selected.start ? currentDay.isSame(selected.start, "day") : false : false;\n var end = selected && range ? selected.end ? currentDay.isSame(selected.end, "day") : false : false;\n var between = selected && range ? selected.start && selected.end ? currentDay.isBetween(selected.start, selected.end, "day") : false : false;\n var isSelected = selected ? range ? rangeAt === "start" && start || rangeAt === "end" && end : currentDay.isSame(selected, "day") : false;\n var disabledMax = maxDate ? currentDay.isAfter(maxDate, "day") : false;\n var disabledMin = minDate ? currentDay.isBefore(minDate, "day") : false;\n var disabled = false;\n var limited = false;\n\n if (range) {\n if (rangeAt === "start" && selected && selected.end) {\n disabled = currentDay.isAfter(selected.end, "day");\n } else if (rangeAt === "end" && selected && selected.start) {\n disabled = currentDay.isBefore(selected.start, "day");\n }\n }\n\n if (dateLimit && range) {\n var limitKey = Object.keys(dateLimit)[0];\n var limitValue = dateLimit[limitKey];\n var minLimitedDate = void 0,\n maxLimitedDate = void 0;\n\n if (selected) {\n if (rangeAt === "start" && selected.end) {\n maxLimitedDate = selected.end.clone();\n minLimitedDate = maxLimitedDate.clone().subtract(limitValue, limitKey);\n } else if (rangeAt === "end" && selected.start) {\n minLimitedDate = selected.start.clone();\n maxLimitedDate = minLimitedDate.clone().add(limitValue, limitKey);\n }\n\n if (minLimitedDate && maxLimitedDate) {\n limited = !currentDay.isBetween(minLimitedDate, maxLimitedDate, "day", rangeAt === "start" ? "(]" : "[)");\n }\n }\n }\n\n var isDisabled = disabledMax || disabledMin || disabled || limited;\n var className = (0, _bind2.default)((_classNames = {}, _defineProperty(_classNames, _sass2.default["prev"], isPrevMonth), _defineProperty(_classNames, _sass2.default["next"], isNextMonth), _defineProperty(_classNames, _sass2.default["selected"], isSelected), _defineProperty(_classNames, _sass2.default["now"], now.isSame(currentDay, "day")), _defineProperty(_classNames, _sass2.default["disabled"], isDisabled), _defineProperty(_classNames, _sass2.default["start"], start), _defineProperty(_classNames, _sass2.default["end"], end), _defineProperty(_classNames, _sass2.default["between"], between), _classNames));\n\n return _react2.default.createElement(\n "td",\n {\n key: day,\n className: className,\n onClick: this.select.bind(this, day, isSelected, isDisabled, isPrevMonth, isNextMonth)\n },\n lang == "fa" ? (0, _utils.convertNumToPersian)(day) : day\n );\n }\n }, {\n key: "render",\n value: function render() {\n var _this2 = this;\n\n var _props3 = this.props,\n isSolar = _props3.isSolar,\n lang = _props3.lang,\n _props3$weeks = _props3.weeks,\n weeks = _props3$weeks === undefined ? lang == "fa" ? _constants.WEEKS_FA : _constants.WEEKS : _props3$weeks,\n _props3$dayFormat = _props3.dayFormat,\n dayFormat = _props3$dayFormat === undefined ? isSolar ? _constants.DAY_FORMAT_SOLAR : _constants.DAY_FORMAT : _props3$dayFormat,\n style = _props3.style,\n changePanel = _props3.changePanel;\n\n var _moment = this.state.moment;\n var _state3 = this.state,\n monthStr = _state3.monthStr,\n dateStr = _state3.dateStr;\n\n var firstDay = _moment.clone()[dateStr](1).day();\n if (lang == "fa") firstDay = (0, _utils.enWeekToFaWeek)(firstDay);\n var endOfThisMonth = _moment.clone().endOf(monthStr)[dateStr]();\n var endOfLastMonth = _moment.clone().subtract(1, monthStr).endOf(monthStr)[dateStr]();\n var days = [].concat((0, _utils.range)(endOfLastMonth - firstDay + 1, endOfLastMonth + 1), (0, _utils.range)(1, endOfThisMonth + 1), (0, _utils.range)(1, 42 - endOfThisMonth - firstDay + 1));\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-days"], style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-nav"] },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "prev-month",\n onClick: this.changeMonth.bind(this, "prev")\n },\n _react2.default.createElement("i", { className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-left"] })\n ),\n _react2.default.createElement(\n "span",\n {\n className: _sass2.default["current-date"],\n onClick: changePanel.bind(this, "month", _moment)\n },\n _moment.format(dayFormat)\n ),\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "next-month",\n onClick: this.changeMonth.bind(this, "next")\n },\n _react2.default.createElement("i", {\n className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-right"]\n })\n )\n ),\n _react2.default.createElement(\n "table",\n null,\n _react2.default.createElement(\n "thead",\n null,\n _react2.default.createElement(\n "tr",\n null,\n weeks.map(function (week) {\n return _this2._renderWeek(week);\n })\n )\n ),\n _react2.default.createElement(\n "tbody",\n null,\n (0, _utils.chunk)(days, 7).map(function (week, idx) {\n return _react2.default.createElement(\n "tr",\n { key: idx },\n week.map(_this2._renderDay.bind(_this2, idx))\n );\n })\n )\n )\n );\n }\n }]);\n\n return Day;\n}(_react.Component);\n\nvar _default = Day;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Day, "Day", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Day.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Day.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Day.jsx?')},"./src/panels/Month.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _constants = __webpack_require__(/*! ../constants */ "./src/constants.js");\n\nvar _utils = __webpack_require__(/*! ../utils */ "./src/utils.js");\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Month = function (_Component) {\n _inherits(Month, _Component);\n\n function Month(props) {\n _classCallCheck(this, Month);\n\n var _this = _possibleConstructorReturn(this, (Month.__proto__ || Object.getPrototypeOf(Month)).call(this, props));\n\n _this.changeYear = function () {\n return _this.__changeYear__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.select = function () {\n return _this.__select__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderMonth = function () {\n return _this.___renderMonth__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n var isSolar = props.isSolar,\n lang = props.lang;\n\n\n _this.state = {\n moment: props.moment,\n yearStr: isSolar ? "jYear" : "year",\n monthStr: isSolar ? "jMonth" : "month",\n dateStr: isSolar ? "jDate" : "date",\n months: isSolar ? lang == "fa" ? _constants.MONTHS_SOLAR_FA : _constants.MONTHS_SOLAR : lang == "fa" ? _constants.MONTHS_FA : _constants.MONTHS\n };\n return _this;\n }\n\n _createClass(Month, [{\n key: "___renderMonth__REACT_HOT_LOADER__",\n value: function ___renderMonth__REACT_HOT_LOADER__() {\n return this.___renderMonth__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__() {\n return this.__select__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__changeYear__REACT_HOT_LOADER__",\n value: function __changeYear__REACT_HOT_LOADER__() {\n return this.__changeYear__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n var isSolar = props.isSolar,\n lang = props.lang;\n\n\n this.setState({\n moment: props.moment,\n yearStr: isSolar ? "jYear" : "year",\n monthStr: isSolar ? "jMonth" : "month",\n dateStr: isSolar ? "jDate" : "date",\n months: isSolar ? lang == "fa" ? _constants.MONTHS_SOLAR_FA : _constants.MONTHS_SOLAR : lang == "fa" ? _constants.MONTHS_FA : _constants.MONTHS\n });\n }\n }, {\n key: "__changeYear__REACT_HOT_LOADER__",\n value: function __changeYear__REACT_HOT_LOADER__(dir) {\n var _moment = this.state.moment.clone();\n var yearStr = this.state.yearStr;\n\n\n this.setState({\n moment: _moment[dir === "prev" ? "subtract" : "add"](1, yearStr)\n });\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__(month, isDisabled) {\n if (isDisabled) return;\n var onSelect = this.props.onSelect;\n\n var _moment = this.state.moment.clone();\n var monthStr = this.state.monthStr;\n\n\n _moment[monthStr](month);\n\n this.setState({\n moment: _moment\n });\n onSelect(_moment);\n }\n }, {\n key: "___renderMonth__REACT_HOT_LOADER__",\n value: function ___renderMonth__REACT_HOT_LOADER__(row, month, idx) {\n var _classNames;\n\n var now = moment();\n var _moment = this.state.moment;\n var monthStr = this.state.monthStr;\n var _props = this.props,\n maxDate = _props.maxDate,\n minDate = _props.minDate,\n months = _props.months,\n selected = _props.selected,\n range = _props.range,\n rangeAt = _props.rangeAt,\n dateLimit = _props.dateLimit,\n isSolar = _props.isSolar;\n\n var currentMonth = _moment.clone()[monthStr](month);\n var start = selected && range ? selected.start ? currentMonth.isSame(selected.start, monthStr) : false : false;\n var end = selected && range ? selected.end ? currentMonth.isSame(selected.end, monthStr) : false : false;\n var between = selected && range ? selected.start && selected.end ? currentMonth.isBetween(selected.start, selected.end, monthStr) : false : false;\n var isSelected = selected ? range ? selected[rangeAt] ? currentMonth.isSame(selected[rangeAt], monthStr) : false : currentMonth.isSame(selected, "day") : false;\n\n var disabledMax1 = false;\n var disabledMin1 = false;\n // for testing in solar mode\n var disabledMax2 = false;\n var disabledMin2 = false;\n\n if (isSolar) {\n // Solar test\n currentMonth.jDate(1);\n disabledMax1 = maxDate ? currentMonth.isAfter(maxDate, monthStr) : false;\n disabledMin1 = minDate ? currentMonth.isBefore(minDate, monthStr) : false;\n currentMonth.jDate(30);\n disabledMax2 = maxDate ? currentMonth.isAfter(maxDate, monthStr) : false;\n disabledMin2 = minDate ? currentMonth.isBefore(minDate, monthStr) : false;\n } else {\n // Gregorian test\n disabledMax1 = maxDate ? currentMonth.isAfter(maxDate, monthStr) : false;\n disabledMin1 = minDate ? currentMonth.isBefore(minDate, monthStr) : false;\n }\n\n var disabled = false;\n var limited = false;\n\n if (range) {\n if (rangeAt === "start" && selected && selected.end) {\n disabled = selected.end && currentMonth.isAfter(selected.end, "day");\n } else if (rangeAt === "end" && selected && selected.start) {\n disabled = selected.start && currentMonth.isBefore(selected.start, "day");\n }\n }\n\n if (dateLimit && range) {\n var limitKey = Object.keys(dateLimit)[0];\n var limitValue = dateLimit[limitKey];\n var minLimitedDate = void 0,\n maxLimitedDate = void 0;\n\n if (selected) {\n if (rangeAt === "start" && selected.start && selected.end) {\n maxLimitedDate = selected.end.clone();\n minLimitedDate = maxLimitedDate.clone().subtract(limitValue, limitKey);\n } else if (rangeAt === "end" && selected.start && selected.end) {\n minLimitedDate = selected.start.clone();\n maxLimitedDate = minLimitedDate.clone().add(limitValue, limitKey);\n }\n\n if (minLimitedDate && maxLimitedDate) {\n limited = !currentMonth.isBetween(minLimitedDate, maxLimitedDate, "day", rangeAt === "start" ? "(]" : "[)");\n }\n }\n }\n\n var isDisabled = (isSolar ? disabledMax1 && disabledMax2 || disabledMin1 && disabledMin2 : disabledMax1 || disabledMin1) || disabled || limited;\n\n var className = (0, _bind2.default)((_classNames = {}, _defineProperty(_classNames, _sass2.default["selected"], isSelected), _defineProperty(_classNames, _sass2.default["now"], now.isSame(currentMonth, monthStr)), _defineProperty(_classNames, _sass2.default["disabled"], isDisabled), _defineProperty(_classNames, _sass2.default["start"], start), _defineProperty(_classNames, _sass2.default["end"], end), _defineProperty(_classNames, _sass2.default["between"], between), _classNames));\n\n return _react2.default.createElement(\n "td",\n {\n key: month,\n className: className,\n onClick: this.select.bind(this, month, isDisabled)\n },\n months ? months[idx + row * 3] : month\n );\n }\n }, {\n key: "render",\n value: function render() {\n var _this2 = this;\n\n var _moment = this.state.moment;\n var months = this.state.months;\n var _props2 = this.props,\n changePanel = _props2.changePanel,\n style = _props2.style,\n isSolar = _props2.isSolar;\n\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-months"], style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-nav"] },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "prev-month",\n onClick: this.changeYear.bind(this, "prev")\n },\n _react2.default.createElement("i", { className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-left"] })\n ),\n _react2.default.createElement(\n "span",\n {\n className: _sass2.default["current-date"],\n onClick: changePanel.bind(this, "year", _moment)\n },\n _moment.format(isSolar ? "jYYYY" : "YYYY")\n ),\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "next-month",\n onClick: this.changeYear.bind(this, "next")\n },\n _react2.default.createElement("i", {\n className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-right"]\n })\n )\n ),\n _react2.default.createElement(\n "table",\n null,\n _react2.default.createElement(\n "tbody",\n null,\n (0, _utils.chunk)(months, 3).map(function (_months, idx) {\n return _react2.default.createElement(\n "tr",\n { key: idx },\n _months.map(_this2._renderMonth.bind(_this2, idx))\n );\n })\n )\n )\n );\n }\n }]);\n\n return Month;\n}(_react.Component);\n\nvar _default = Month;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Month, "Month", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Month.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Month.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Month.jsx?')},"./src/panels/Shortcuts.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _constants = __webpack_require__(/*! ../constants */ "./src/constants.js");\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\n\nvar isSameRange = function isSameRange(current, value) {\n return current.start && current.end && current.start.isSame(value.start, "day") && current.end.isSame(value.end, "day");\n};\n\nvar Shortcuts = function (_Component) {\n _inherits(Shortcuts, _Component);\n\n function Shortcuts() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Shortcuts);\n\n for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Shortcuts.__proto__ || Object.getPrototypeOf(Shortcuts)).call.apply(_ref, [this].concat(args))), _this), _this.handleClick = function () {\n var _this2;\n\n return (_this2 = _this).__handleClick__REACT_HOT_LOADER__.apply(_this2, arguments);\n }, _this._renderShortcut = function () {\n var _this3;\n\n return (_this3 = _this).___renderShortcut__REACT_HOT_LOADER__.apply(_this3, arguments);\n }, _this._renderShortcuts = function () {\n var _this4;\n\n return (_this4 = _this).___renderShortcuts__REACT_HOT_LOADER__.apply(_this4, arguments);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Shortcuts, [{\n key: "___renderShortcuts__REACT_HOT_LOADER__",\n value: function ___renderShortcuts__REACT_HOT_LOADER__() {\n return this.___renderShortcuts__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "___renderShortcut__REACT_HOT_LOADER__",\n value: function ___renderShortcut__REACT_HOT_LOADER__() {\n return this.___renderShortcut__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleClick__REACT_HOT_LOADER__",\n value: function __handleClick__REACT_HOT_LOADER__() {\n return this.__handleClick__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__handleClick__REACT_HOT_LOADER__",\n value: function __handleClick__REACT_HOT_LOADER__(value, isCustom) {\n var _props = this.props,\n onChange = _props.onChange,\n range = _props.range;\n\n\n if (range) {\n onChange && onChange(value, isCustom);\n } else {\n onChange && onChange(value, "day");\n }\n }\n }, {\n key: "___renderShortcut__REACT_HOT_LOADER__",\n value: function ___renderShortcut__REACT_HOT_LOADER__(key, value) {\n var _props2 = this.props,\n range = _props2.range,\n shortcuts = _props2.shortcuts,\n _props2$customButtonT = _props2.customButtonText,\n customButtonText = _props2$customButtonT === undefined ? _constants.CUSTOM_BUTTON_TEXT : _props2$customButtonT;\n\n var current = this.props.moment;\n var selected = range ? key !== "custom" && isSameRange(current, value) : false;\n var isCustomSelected = range ? !Object.keys(shortcuts).some(function (_key) {\n return isSameRange(current, shortcuts[_key]);\n }) && key === "custom" : false;\n var className = (0, _bind2.default)(_sass2.default["btn"], {\n selected: selected || isCustomSelected\n });\n\n return _react2.default.createElement(\n "button",\n {\n className: className,\n key: key,\n type: "button",\n onClick: this.handleClick.bind(this, value, key === "custom")\n },\n key === "custom" ? customButtonText : key\n );\n }\n }, {\n key: "___renderShortcuts__REACT_HOT_LOADER__",\n value: function ___renderShortcuts__REACT_HOT_LOADER__() {\n var _this5 = this;\n\n var _props3 = this.props,\n shortcuts = _props3.shortcuts,\n showCustomButton = _props3.showCustomButton,\n customRange = _props3.customRange,\n isSolar = _props3.isSolar;\n\n var renderShortcuts = showCustomButton ? _extends({}, shortcuts, {\n custom: customRange || {\n start: moment().subtract(29, isSolar ? "jDays" : "days"),\n end: moment().endOf(isSolar ? "jDay" : "day")\n }\n }) : shortcuts;\n\n return Object.keys(renderShortcuts).map(function (key) {\n return _this5._renderShortcut(key, renderShortcuts[key]);\n });\n }\n }, {\n key: "render",\n value: function render() {\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["shortcuts-bar"] },\n this._renderShortcuts()\n );\n }\n }]);\n\n return Shortcuts;\n}(_react.Component);\n\nvar _default = Shortcuts;\nexports.default = _default;\n;\n\nvar _temp2 = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(isSameRange, "isSameRange", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Shortcuts.jsx");\n\n __REACT_HOT_LOADER__.register(Shortcuts, "Shortcuts", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Shortcuts.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Shortcuts.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Shortcuts.jsx?')},"./src/panels/Time.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactSlider = __webpack_require__(/*! react-slider */ "./node_modules/react-slider/react-slider.js");\n\nvar _reactSlider2 = _interopRequireDefault(_reactSlider);\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Time = function (_Component) {\n _inherits(Time, _Component);\n\n function Time(props) {\n _classCallCheck(this, Time);\n\n var _this = _possibleConstructorReturn(this, (Time.__proto__ || Object.getPrototypeOf(Time)).call(this, props));\n\n _this.updateMoment = function () {\n return _this.__updateMoment__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.getCurrentMoment = function () {\n return _this.__getCurrentMoment__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.handleChange = function () {\n return _this.__handleChange__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.state = {\n moment: _this.getCurrentMoment(props)\n };\n return _this;\n }\n\n _createClass(Time, [{\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__() {\n return this.__handleChange__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__getCurrentMoment__REACT_HOT_LOADER__",\n value: function __getCurrentMoment__REACT_HOT_LOADER__() {\n return this.__getCurrentMoment__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__updateMoment__REACT_HOT_LOADER__",\n value: function __updateMoment__REACT_HOT_LOADER__() {\n return this.__updateMoment__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n this.updateMoment(props);\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n this.updateMoment(this.props);\n }\n }, {\n key: "__updateMoment__REACT_HOT_LOADER__",\n value: function __updateMoment__REACT_HOT_LOADER__(props) {\n this.setState({\n moment: this.getCurrentMoment(props)\n });\n }\n }, {\n key: "__getCurrentMoment__REACT_HOT_LOADER__",\n value: function __getCurrentMoment__REACT_HOT_LOADER__(props) {\n var range = props.range,\n rangeAt = props.rangeAt;\n\n var result = props.moment;\n\n if (result) {\n if (range) {\n result = result[rangeAt] || moment().hours(0).minutes(0);\n }\n } else {\n result = moment().hours(0).minutes(0);\n }\n\n return result;\n }\n }, {\n key: "__handleChange__REACT_HOT_LOADER__",\n value: function __handleChange__REACT_HOT_LOADER__(type, value) {\n var _props = this.props,\n onChange = _props.onChange,\n range = _props.range,\n rangeAt = _props.rangeAt;\n\n var _moment = this.state.moment.clone();\n var selected = this.props.moment;\n\n _moment[type](value);\n\n if (range) {\n var copyed = selected ? Object.assign(selected, {}) : {};\n\n copyed[rangeAt] = _moment;\n } else {\n selected = _moment;\n }\n\n this.setState({\n moment: _moment\n });\n onChange && onChange(selected);\n }\n }, {\n key: "render",\n value: function render() {\n var _moment = this.state.moment;\n var style = this.props.style;\n\n var defaultHourValue = _moment.hour();\n var defaultMinuteValue = _moment.minute();\n\n return _react2.default.createElement(\n "div",\n { style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["time"] },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["show-time"] },\n _react2.default.createElement(\n "span",\n { className: _sass2.default["text"] },\n _moment.format("HH")\n ),\n _react2.default.createElement(\n "span",\n { className: _sass2.default["separater"] },\n ":"\n ),\n _react2.default.createElement(\n "span",\n { className: _sass2.default["text"] },\n _moment.format("mm")\n )\n ),\n _react2.default.createElement(\n "div",\n { className: _sass2.default["sliders"] },\n _react2.default.createElement(\n "span",\n { className: _sass2.default["slider-text"] },\n "Hours:"\n ),\n _react2.default.createElement(\n _reactSlider2.default,\n {\n min: 0,\n max: 23,\n value: defaultHourValue,\n defaultValue: defaultHourValue,\n onChange: this.handleChange.bind(this, "hours"),\n className: _sass2.default["slider"],\n withBars: true\n },\n _react2.default.createElement("div", { className: _sass2.default["handle"] })\n ),\n _react2.default.createElement(\n "span",\n { className: _sass2.default["slider-text"] },\n "Minutes:"\n ),\n _react2.default.createElement(\n _reactSlider2.default,\n {\n min: 0,\n max: 59,\n value: defaultMinuteValue,\n defaultValue: defaultMinuteValue,\n onChange: this.handleChange.bind(this, "minutes"),\n className: _sass2.default["slider"],\n withBars: true\n },\n _react2.default.createElement("div", { className: _sass2.default["handle"] })\n )\n )\n )\n );\n }\n }]);\n\n return Time;\n}(_react.Component);\n\nvar _default = Time;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Time, "Time", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Time.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Time.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Time.jsx?')},"./src/panels/Year.jsx":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ "react");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _bind = __webpack_require__(/*! classnames/bind */ "./node_modules/classnames/bind.js");\n\nvar _bind2 = _interopRequireDefault(_bind);\n\nvar _utils = __webpack_require__(/*! ../utils */ "./src/utils.js");\n\nvar _sass = __webpack_require__(/*! ../sass */ "./src/sass/index.js");\n\nvar _sass2 = _interopRequireDefault(_sass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar moment = __webpack_require__(/*! moment-jalaali */ "moment-jalaali");\n\nvar Year = function (_Component) {\n _inherits(Year, _Component);\n\n function Year(props) {\n _classCallCheck(this, Year);\n\n var _this = _possibleConstructorReturn(this, (Year.__proto__ || Object.getPrototypeOf(Year)).call(this, props));\n\n _this.changePeriod = function () {\n return _this.__changePeriod__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this.select = function () {\n return _this.__select__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n _this._renderYear = function () {\n return _this.___renderYear__REACT_HOT_LOADER__.apply(_this, arguments);\n };\n\n var isSolar = props.isSolar;\n\n\n _this.state = {\n moment: props.moment,\n yearStr: isSolar ? "jYear" : "year"\n };\n return _this;\n }\n\n _createClass(Year, [{\n key: "___renderYear__REACT_HOT_LOADER__",\n value: function ___renderYear__REACT_HOT_LOADER__() {\n return this.___renderYear__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__() {\n return this.__select__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "__changePeriod__REACT_HOT_LOADER__",\n value: function __changePeriod__REACT_HOT_LOADER__() {\n return this.__changePeriod__REACT_HOT_LOADER__.apply(this, arguments);\n }\n }, {\n key: "componentWillReceiveProps",\n value: function componentWillReceiveProps(props) {\n var isSolar = props.isSolar;\n\n\n this.setState({\n moment: props.moment,\n yearStr: isSolar ? "jYear" : "year"\n });\n }\n }, {\n key: "__changePeriod__REACT_HOT_LOADER__",\n value: function __changePeriod__REACT_HOT_LOADER__(dir) {\n var _moment = this.state.moment.clone();\n var yearStr = this.state.yearStr;\n\n\n this.setState({\n moment: _moment[dir === "prev" ? "subtract" : "add"](10, yearStr)\n });\n }\n }, {\n key: "__select__REACT_HOT_LOADER__",\n value: function __select__REACT_HOT_LOADER__(year, isDisabled) {\n if (isDisabled) return;\n var _moment = this.state.moment.clone();\n var yearStr = this.state.yearStr;\n\n\n _moment[yearStr](year);\n\n this.setState({\n moment: _moment,\n selected: _moment\n });\n this.props.onSelect(_moment);\n }\n }, {\n key: "___renderYear__REACT_HOT_LOADER__",\n value: function ___renderYear__REACT_HOT_LOADER__(year) {\n var _classNames;\n\n var now = moment();\n var _moment = this.state.moment;\n var yearStr = this.state.yearStr;\n\n var firstYear = Math.floor(_moment[yearStr]() / 10) * 10;\n var _props = this.props,\n maxDate = _props.maxDate,\n minDate = _props.minDate,\n selected = _props.selected,\n range = _props.range,\n rangeAt = _props.rangeAt,\n dateLimit = _props.dateLimit,\n lang = _props.lang;\n\n var currentYear = _moment.clone()[yearStr](year);\n var start = selected && range ? selected.start ? currentYear.isSame(selected.start, yearStr) : false : false;\n var end = selected && range ? selected.end ? currentYear.isSame(selected.end, yearStr) : false : false;\n var between = selected && range ? selected.start && selected.end ? currentYear.isBetween(selected.start, selected.end, yearStr) : false : false;\n var isSelected = selected ? range ? selected[rangeAt] ? selected[rangeAt][yearStr]() === year : false : selected[yearStr]() === year : false;\n var disabledMax = maxDate ? year > maxDate[yearStr]() : false;\n var disabledMin = minDate ? year < minDate[yearStr]() : false;\n var disabled = false;\n var limited = false;\n\n if (range) {\n if (rangeAt === "start" && selected && selected.end) {\n disabled = selected.end && currentYear.isAfter(selected.end, "day");\n } else if (rangeAt === "end" && selected && selected.start) {\n disabled = selected.start && currentYear.isBefore(selected.start, "day");\n }\n }\n\n if (dateLimit && range) {\n var limitKey = Object.keys(dateLimit)[0];\n var limitValue = dateLimit[limitKey];\n var minLimitedDate = void 0,\n maxLimitedDate = void 0;\n\n if (selected) {\n if (rangeAt === "start" && selected.start && selected.end) {\n maxLimitedDate = selected.end.clone();\n minLimitedDate = maxLimitedDate.clone().subtract(limitValue, limitKey);\n } else if (rangeAt === "end" && selected.start && selected.end) {\n minLimitedDate = selected.start.clone();\n maxLimitedDate = minLimitedDate.clone().add(limitValue, limitKey);\n }\n\n if (minLimitedDate && maxLimitedDate) {\n limited = !currentYear.isBetween(minLimitedDate, maxLimitedDate, "day", rangeAt === "start" ? "(]" : "[)");\n }\n }\n }\n\n var isDisabled = disabledMax || disabledMin || disabled || limited;\n var className = (0, _bind2.default)((_classNames = {}, _defineProperty(_classNames, _sass2.default["selected"], isSelected), _defineProperty(_classNames, _sass2.default["now"], now[yearStr]() === year), _defineProperty(_classNames, _sass2.default["prev"], firstYear - 1 === year), _defineProperty(_classNames, _sass2.default["next"], firstYear + 10 === year), _defineProperty(_classNames, _sass2.default["disabled"], isDisabled), _defineProperty(_classNames, _sass2.default["start"], start), _defineProperty(_classNames, _sass2.default["end"], end), _defineProperty(_classNames, _sass2.default["between"], between), _classNames));\n\n return _react2.default.createElement(\n "td",\n {\n key: year,\n className: className,\n onClick: this.select.bind(this, year, isDisabled)\n },\n lang == "fa" ? (0, _utils.convertNumToPersian)(year) : year\n );\n }\n }, {\n key: "render",\n value: function render() {\n var _this2 = this;\n\n var _moment = this.state.moment;\n var yearStr = this.state.yearStr;\n var _props2 = this.props,\n style = _props2.style,\n lang = _props2.lang;\n\n var firstYear = Math.floor(_moment[yearStr]() / 10) * 10;\n var years = (0, _utils.range)(firstYear - 1, firstYear + 11);\n\n return _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-years"], style: style },\n _react2.default.createElement(\n "div",\n { className: _sass2.default["calendar-nav"] },\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "prev-month",\n onClick: this.changePeriod.bind(this, "prev")\n },\n _react2.default.createElement("i", { className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-left"] })\n ),\n _react2.default.createElement(\n "span",\n { className: _sass2.default["current-date"] + " " + _sass2.default["disabled"] },\n lang == "fa" ? (0, _utils.convertNumToPersian)(firstYear) + " - " + (0, _utils.convertNumToPersian)(firstYear + 9) : firstYear + " - " + (firstYear + 9)\n ),\n _react2.default.createElement(\n "button",\n {\n type: "button",\n className: "next-month",\n onClick: this.changePeriod.bind(this, "next")\n },\n _react2.default.createElement("i", {\n className: _sass2.default["icon"] + " " + _sass2.default["icon-angle-right"]\n })\n )\n ),\n _react2.default.createElement(\n "table",\n null,\n _react2.default.createElement(\n "tbody",\n null,\n (0, _utils.chunk)(years, 4).map(function (_years, idx) {\n return _react2.default.createElement(\n "tr",\n { key: idx },\n _years.map(_this2._renderYear)\n );\n })\n )\n )\n );\n }\n }]);\n\n return Year;\n}(_react.Component);\n\nvar _default = Year;\nexports.default = _default;\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(Year, "Year", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Year.jsx");\n\n __REACT_HOT_LOADER__.register(_default, "default", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/panels/Year.jsx");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/panels/Year.jsx?')},"./src/sass/imrc-datetime-picker.scss":function(module,exports,__webpack_require__){eval('// extracted by mini-css-extract-plugin\nmodule.exports = {"datetime-picker":"_2Nt60bozBhLm4MJ7-Uml9R","calendar":"_1u8Ymm6dfTneTUifGRca6q","calendar-nav":"BSgloy8E0JKBPRuztPOYl","icon":"_31yknu257p3Ou6dbT1b3Di","current-date":"_2cuOdfZsLrFMahkfb9gso9","disabled":"C3TbhSBxXf2-WF8BbIP5A","prev":"_3Oh_LVHPrg2fTS0GUfyGBn","next":"_2ce0Aveox11GP8BDjQ7fok","now":"_2CQ5vWlIzMzWrunFH0Ghn9","selected":"_1PHXZRv9_4KmFMrk8q46oq","start":"_19nbqfrRyHiAZUV405M5my","end":"_1v7KWfKvYWVa2llB4MyKPm","between":"_3iY_jxM8n5A3KG0sTbPdHZ","calendar-days":"TcAXTV-SXrx_DyfJGoes7","calendar-months":"_2irOQQhT8T9IxDA3blr0fN","calendar-years":"_2xmXB-t1Q90HL5MiI6sq6a","time":"_1JaO_FJHcmfKde4ZCWwBlU","show-time":"_34W-nM6rMmdvVWJFM7_zku","separater":"msh9zMKRZxG5ctBsrSk64","text":"_3a1fn8jzj7Xe2_suG_OgQ7","sliders":"_3sFbZBjSoeDWQsUJOnFWEd","slider-text":"_1ofaB4Rfw0lmTor4fnLYN9","slider":"_2zulVA87E0xqXaIBz8I3Xt","handle":"_1cQ30voN6IVrl0w42vvSrx","shortcuts-bar":"_1UAAjQuv8prSHEXMWsK8cX","btn":"_2HSrqNmbpFOLNXPPG1ft4c","datetime-range-picker":"_2Y3XnEaYUW73xAHuGREkw4","datetime-trigger":"pY2VsceibmbrgqkDkHtL","pos-top":"_22tXEUZ3nd-1Acj9d2Vdll","datetime-picker-popup":"NdKRjDSE-TWLZsxGyHoqy","pos-bottom":"_2Kef-m1BLkSJ9Q9uL896XW","datetime-range-trigger":"_33slfCSXq-F7Cpv-fyPYaE","datetime-range-picker-popup":"Ze2SAIFKCldxDbOSdZ_kK","icon-clock":"wqPOH6Eyz6Cy3RZuNGubb","icon-angle-left":"_3CBWV-2-d2pBOJ-6eQ6-7O","icon-angle-right":"p7Dmn6axTCShVU12AGokf","icon-calendar-empty":"qv5FEUGYqGe1pZ36gQl8q"};\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/sass/imrc-datetime-picker.scss?')},"./src/sass/index.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(/*! ./imrc-datetime-picker.scss */ \"./src/sass/imrc-datetime-picker.scss\");\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === 'undefined') {\n return;\n }\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/sass/index.js?")},"./src/utils.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.chunk = exports.range = exports.enWeekToFaWeek = exports.convertNumToPersian = undefined;\n\nvar _constants = __webpack_require__(/*! ./constants */ "./src/constants.js");\n\nvar convertNumToPersian = exports.convertNumToPersian = function convertNumToPersian(num) {\n num = num.toString();\n var persianNum = "";\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = num[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var ch = _step.value;\n\n persianNum += _constants.PERSIAN_NUMBERS[ch];\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return persianNum;\n};\n\nvar enWeekToFaWeek = exports.enWeekToFaWeek = function enWeekToFaWeek(dayOfWeek) {\n return dayOfWeek == 6 ? 0 : dayOfWeek + 1;\n};\n\nvar range = exports.range = function range(start, end) {\n var length = Math.max(end - start, 0);\n var result = [];\n\n while (length--) {\n result[length] = start + length;\n }\n\n return result;\n};\n\nvar chunk = exports.chunk = function chunk(array, size) {\n var length = array.length;\n var index = 0;\n var resIndex = -1;\n var result = [];\n\n while (index < length) {\n result[++resIndex] = array.slice(index, index += size);\n }\n\n return result;\n};\n;\n\nvar _temp = function () {\n if (typeof __REACT_HOT_LOADER__ === \'undefined\') {\n return;\n }\n\n __REACT_HOT_LOADER__.register(convertNumToPersian, "convertNumToPersian", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/utils.js");\n\n __REACT_HOT_LOADER__.register(enWeekToFaWeek, "enWeekToFaWeek", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/utils.js");\n\n __REACT_HOT_LOADER__.register(range, "range", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/utils.js");\n\n __REACT_HOT_LOADER__.register(chunk, "chunk", "/home/smrsan/src/Contributions/Web/imrc-datetime-picker/src/utils.js");\n}();\n\n;\n\n//# sourceURL=webpack://imrc-datetime-picker/./src/utils.js?')},0:function(module,exports,__webpack_require__){eval('module.exports = __webpack_require__(/*! ./src/index.js */"./src/index.js");\n\n\n//# sourceURL=webpack://imrc-datetime-picker/multi_./src/index.js?')},"moment-jalaali":function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_moment_jalaali__;\n\n//# sourceURL=webpack://imrc-datetime-picker/external_%22moment-jalaali%22?")},react:function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_react__;\n\n//# sourceURL=webpack://imrc-datetime-picker/external_%22react%22?")},"react-dom":function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_react_dom__;\n\n//# sourceURL=webpack://imrc-datetime-picker/external_%22react-dom%22?")}})})},function(e,n){e.exports=moment},function(e,n){function t(e,n,t){return"[object Date]"===Object.prototype.toString.call(e)&&(t=e.getDate(),n=e.getMonth()+1,e=e.getFullYear()),c(u(e,n,t))}function r(e,n,t){return _(l(e,n,t))}function a(e,n,t){return e>=-61&&e<=3177&&n>=1&&n<=12&&t>=1&&t<=o(e,n)}function s(e){return 0===i(e).leap}function o(e,n){return n<=6?31:n<=11?30:s(e)?30:29}function i(e){var n,t,r,a,s,o,i,l=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],c=l.length,u=e+621,_=-14,m=l[0];if(e<m||e>=l[c-1])throw new Error("Invalid Jalaali year "+e);for(i=1;i<c&&(n=l[i],t=n-m,!(e<n));i+=1)_=_+8*p(t,33)+p(d(t,33),4),m=n;return o=e-m,_=_+8*p(o,33)+p(d(o,33)+3,4),4===d(t,33)&&t-o===4&&(_+=1),a=p(u,4)-p(3*(p(u,100)+1),4)-150,s=20+_-a,t-o<6&&(o=o-t+33*p(t+4,33)),r=d(d(o+1,33)-1,4),-1===r&&(r=4),{leap:r,gy:u,march:s}}function l(e,n,t){var r=i(e);return u(r.gy,3,r.march)+31*(n-1)-p(n,7)*(n-7)+t-1}function c(e){var n,t,r,a=_(e).gy,s=a-621,o=i(s),l=u(a,3,o.march);if((r=e-l)>=0){if(r<=185)return t=1+p(r,31),n=d(r,31)+1,{jy:s,jm:t,jd:n};r-=186}else s-=1,r+=179,1===o.leap&&(r+=1);return t=7+p(r,30),n=d(r,30)+1,{jy:s,jm:t,jd:n}}function u(e,n,t){var r=p(1461*(e+p(n-8,6)+100100),4)+p(153*d(n+9,12)+2,5)+t-34840408;return r=r-p(3*p(e+100100+p(n-8,6),100),4)+752}function _(e){var n,t,r,a,s;return n=4*e+139361631,n=n+4*p(3*p(4*e+183187720,146097),4)-3908,t=5*p(d(n,1461),4)+308,r=p(d(t,153),5)+1,a=d(p(t,153),12)+1,s=p(n,1461)-100100+p(8-a,6),{gy:s,gm:a,gd:r}}function p(e,n){return~~(e/n)}function d(e,n){return e-~~(e/n)*n}e.exports={toJalaali:t,toGregorian:r,isValidJalaaliDate:a,isLeapJalaaliYear:s,jalaaliMonthLength:o,jalCal:i,j2d:l,d2j:c,g2d:u,d2g:_}},function(e,n){e.exports=React},function(e,n){e.exports=ReactDOM},function(e,n){},function(e,n){},function(e,n){e.exports=wp.date},function(e,n,t){var r,a;!function(){function t(e){this._str=e}function s(e){if(e){for(var n=["\u064a","\u0643","\u200d","\u062f\u0650","\u0628\u0650","\u0632\u0650","\u0630\u0650","\u0650\u0634\u0650","\u0650\u0633\u0650","\u0649"],t=["\u06cc","\u06a9","","\u062f","\u0628","\u0632","\u0630","\u0634","\u0633","\u06cc"],r=0,a=n.length;r<a;r++)e=e.replace(new RegExp(n[r],"g"),t[r]);return this._str=e,this}}function o(e){if(e){for(var n=0,t=y.length;n<t;n++)e=e.replace(new RegExp(f[n],"g"),y[n]);return this._str=e,this}}function i(e){if(e){e=e.toString();for(var n=0,t=h.length;n<t;n++)e=e.replace(new RegExp(h[n],"g"),f[n]);return this._str=e,this}}function l(e){if(e){e=e.toString();for(var n=["1","2","3","4","5","6","7","8","9","0"],t=["\u06f1","\u06f2","\u06f3","\u06f4","\u06f5","\u06f6","\u06f7","\u06f8","\u06f9","\u06f0"],r=0,a=n.length;r<a;r++)e=e.replace(new RegExp(n[r],"g"),t[r]);return this._str=e,this}}function c(e){if(e){for(var n=0,t=y.length;n<t;n++)e=e.replace(new RegExp(f[n],"g"),y[n]).replace(new RegExp(h[n],"g"),y[n]);return this._str=e,this}}function u(e){if(e){for(var n="";n!=e;)n=e,e=e.replace(/(http\S+?)\%20/g,"$1\u200c\u200c\u200c_\u200c\u200c\u200c");return e=e.replace(/(http\S+)/g,function(e,n){return decodeURI(n)}),e=e.replace(/\u200c\u200c\u200c_\u200c\u200c\u200c/g,"%20"),this._str=e,this}}function _(e){if(e){for(var n=["\u0636","\u0635","\u062b","\u0642","\u0641","\u063a","\u0639","\u0647","\u062e","\u062d","\u062c","\u0686","\u0634","\u0633","\u06cc","\u0628","\u0644","\u0627","\u062a","\u0646","\u0645","\u06a9","\u06af","\u0638","\u0637","\u0632","\u0631","\u0630","\u062f","\u067e","\u0648","\u061f"],t=["q","w","e","r","t","y","u","i","o","p","[","]","a","s","d","f","g","h","j","k","l",";","'","z","x","c","v","b","n","m",",","?"],r=0,a=n.length;r<a;r++)e=e.replace(new RegExp(n[r],"g"),t[r]);return this._str=e,this}}function p(e){var n,t,r,a,s,o,i,l,c;return isFinite(e)?("string"!==typeof e&&(e=e.toString()),o=["","\u0647\u0632\u0627\u0631","\u0645\u06cc\u0644\u06cc\u0648\u0646","\u0645\u06cc\u0644\u06cc\u0627\u0631\u062f","\u062a\u0631\u06cc\u0644\u06cc\u0648\u0646","\u06a9\u0648\u0627\u062f\u0631\u06cc\u0644\u06cc\u0648\u0646","\u06a9\u0648\u06cc\u06cc\u0646\u062a\u06cc\u0644\u06cc\u0648\u0646","\u0633\u06a9\u0633\u062a\u06cc\u0644\u06cc\u0648\u0646"],s={0:["","\u0635\u062f","\u062f\u0648\u06cc\u0635\u062a","\u0633\u06cc\u0635\u062f","\u0686\u0647\u0627\u0631\u0635\u062f","\u067e\u0627\u0646\u0635\u062f","\u0634\u0634\u0635\u062f","\u0647\u0641\u062a\u0635\u062f","\u0647\u0634\u062a\u0635\u062f","\u0646\u0647\u0635\u062f"],1:["","\u062f\u0647","\u0628\u06cc\u0633\u062a","\u0633\u06cc","\u0686\u0647\u0644","\u067e\u0646\u062c\u0627\u0647","\u0634\u0635\u062a","\u0647\u0641\u062a\u0627\u062f","\u0647\u0634\u062a\u0627\u062f","\u0646\u0648\u062f"],2:["","\u06cc\u06a9","\u062f\u0648","\u0633\u0647","\u0686\u0647\u0627\u0631","\u067e\u0646\u062c","\u0634\u0634","\u0647\u0641\u062a","\u0647\u0634\u062a","\u0646\u0647"],two:["\u062f\u0647","\u06cc\u0627\u0632\u062f\u0647","\u062f\u0648\u0627\u0632\u062f\u0647","\u0633\u06cc\u0632\u062f\u0647","\u0686\u0647\u0627\u0631\u062f\u0647","\u067e\u0627\u0646\u0632\u062f\u0647","\u0634\u0627\u0646\u0632\u062f\u0647","\u0647\u0641\u062f\u0647","\u0647\u062c\u062f\u0647","\u0646\u0648\u0632\u062f\u0647"],zero:"\u0635\u0641\u0631"},n=" \u0648 ",valueParts=e.split("").reverse().join("").replace(/\d{3}(?=\d)/g,"$&,").split("").reverse().join("").split(",").map(function(e){return Array(4-e.length).join("0")+e}),i=function(){var e;e=[];for(a in valueParts)c=valueParts[a],l=function(){var e,n,a;for(a=[],r=e=0,n=c.length;e<n;r=++e)if(t=c[r],1===r&&"1"===t)a.push(s.two[c[2]]);else{if(2===r&&"1"===c[1]||""===s[r][t])continue;a.push(s[r][t])}return a}(),l=l.join(n),e.push(l+" "+o[valueParts.length-a-1]);return e}(),i=i.filter(function(e){return""!==e.trim()}),i=i.join(n).trim(),""===i&&(i=s.zero),this._str=i,this):""}function d(e){if(e){var n;return n=/((\s\u0645\u06CC)+( )+([\u0600-\u06EF]{1,}){1,})/g,e=e.replace(new RegExp(n),"$2\u200c$4"),n=/(([\u0600-\u06EF]{1,})+( )+(\u0627\u06cc|\u0627\u06cc\u06cc|\u0627\u0646\u062f|\u0627\u06cc\u0645|\u0627\u06cc\u062f|\u0627\u0645){1})/g,e=e.replace(new RegExp(n),"$2\u200c$4"),this._str=e,this}}var m="undefined"!==typeof e&&e.exports,h=["\u0661","\u0662","\u0663","\u0664","\u0665","\u0666","\u0667","\u0668","\u0669","\u0660"],f=["\u06f1","\u06f2","\u06f3","\u06f4","\u06f5","\u06f6","\u06f7","\u06f8","\u06f9","\u06f0"],y=["1","2","3","4","5","6","7","8","9","0"],g=function(e){if(!e||""===e)throw new Error("Input is null or empty.");return new t(e)};g.version="0.4.0",g.fn=t.prototype={clone:function(){return g(this)},value:function(){return this._str},toString:function(){return this._str.toString()},set:function(e){return this._str=String(e),this},arabicChar:function(){return s.call(this,this._str)},persianNumber:function(){return o.call(this,this._str)},arabicNumber:function(){return i.call(this,this._str)},englishNumber:function(){return l.call(this,this._str)},toEnglishNumber:function(){return c.call(this,this._str)},fixURL:function(){return u.call(this,this._str)},decodeURL:function(){return u.call(this,this._str)},switchKey:function(){return _.call(this,this._str)},digitsToWords:function(){return p.call(this,this._str)},halfSpace:function(){return d.call(this,this._str)}},m&&(e.exports=g),"undefined"===typeof ender&&(this.persianJs=g),r=[],void 0!==(a=function(){return g}.apply(n,r))&&(e.exports=a)}()},function(e,n){},function(e,n){},function(e,n,t){"use strict";var r=t(2),a=(t.n(r),t(27));Object(r.registerPlugin)("gutenberg-jalali-calendar-pre-publish-post-schedule",{render:a.a})},function(e,n,t){"use strict";function r(){return wp.element.createElement(s.PluginPrePublishPanel,{initialOpen:!1,title:[Object(a.__)("Publish:"),wp.element.createElement("span",{className:"editor-post-publish-panel__link",key:"label"},wp.element.createElement(i.a,null))],className:"gutenberg-jalali-calendar-edit-post-pre-publish-post-schedule"},wp.element.createElement(o.a,null))}var a=t(0),s=(t.n(a),t(5)),o=(t.n(s),t(6)),i=t(8);n.a=r},function(e,n){var t=!1;jQuery(document).ready(function($){setInterval(function(){var e=$(".gutenberg-jalali-calendar-edit-post-pre-publish-post-schedule").prev().prev();e.length>0&&(t=!0,e.css("display","none"))},300)})}]);
assets/js/jalalidatepicker.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(){"use strict";!function(){var t="jdp",n="".concat(t,"-container"),e="div.".concat(t,"-years"),i="div.".concat(t,"-year"),a="div.".concat(t,"-months"),o="div.".concat(t,"-month"),r="div.".concat(t,"-days"),s="div.".concat(t,"-day"),h="div.".concat(t,"-day-name"),c="div.".concat(t,"-icon-plus"),u="div.".concat(t,"-icon-minus"),d="div.".concat(t,"-footer"),p="div.".concat(t,"-btn-today"),y="div.".concat(t,"-btn-empty"),l="not-in-range",f="".concat(t,":change"),m="click",v="focusin",D="today",g="attr",w=("data-".concat(t),"visible"),_=void 0;function C(t){return(C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var b=Number.isNaN||window.isNaN,x=function(t){return void 0===t},I=function(t){return"function"==typeof t},M=function(t){return"string"==typeof t},E=function(t){return JSON.parse(JSON.stringify(t))},S=function(t){return 682*((t-474)%2820+512)%2816<682},O=function(t,n){return t<8?31*(t-1)+n:186+30*(t-7)+n},H=function(t,n,e){return i=function(t,n,e,i,a,o){for(var r=O(a,o)-O(n,e),s=t<i?i:t,h=t<i?t:i;h<s;h++)S(h)?r+=t<i?366:-366:r+=t<i?365:-365;return r}(1392,3,25,t,n,e),a=7,window.Math.abs(i-a*window.Math.floor(i/a));var i,a},N=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,e=String(Math.abs(t)),i=e.length,a="";for(t<0&&(a+="-");i<n;)i+=1,a+="0";return a+e},j=function(t){if(!t||!t.constructor||t.nodeType)return!1;try{return"{}"===JSON.stringify(t)}catch(t){return!0}},P=function t(){for(var n,e,i,a,o,r=arguments.length,s=new Array(r),h=0;h<r;h++)s[h]=arguments[h];var c=s[0]||{},u=1,d=s.length,p=!1;for("boolean"==typeof c&&(p=c,c=s[u]||{},u+=1),"object"!==C(c)&&I(c)&&(c={}),u===d&&(c=_,u-=1);u<d;u++)if(n=s[u],!x(n)&&null!==n)for(var y=0;y<window.Object.keys(n).length;y++){var l=window.Object.keys(n)[y];if(Object.prototype.hasOwnProperty.call(n,l)){if(i=n[l],"__proto__"===l||c===i)return!0;a=Array.isArray(i),p&&i&&(j(i)||a)?(e=c[l],o=a&&!Array.isArray(e)?[]:a||j(e)?e:{},c[l]=t(p,o,i)):x(i)||(c[l]=i)}}return c},Y=function(t,n,e,i,a){var o=t.split(".");t=o.shift()||"div";var r=o,s=window.document.createElement(t);return M(n)?window.document.querySelector(n).appendChild(s):n.appendChild(s),r.length&&(s.className=r.join(" ")),e&&i&&k(s,e,i),x(a)||L(s,a),s},k=function(t,n,e){for(var i=n.split(" "),a=0,o=i.length;a<o;a++)t.addEventListener(i[a],e,!1)},L=function(t,n){t.innerHTML=n},z=function(t,n,e,i,a,o){return b(t)||t<1e3||t>1999?t=i.year:t<a.year?t=a.year:t>o.year&&(t=o.year),b(n)||n<1||n>12?n=i.month:t<=a.year&&n<a.month?n=a.month:t>=o.year&&n>o.month&&(n=o.month),b(e)||e<1?e=i.day:n<=a.month&&e<a.day?e=a.day:n>=o.month&&e>o.day&&(e=o.day),{year:parseInt(t),month:parseInt(n),day:parseInt(e)}},B=function(t,n){if(!t)return!1;var e=t.split(n);return 3===e.length&&4===e[0].length&&2===e[1].length&&2===e[2].length},T=function(t,n){var e=t.split(n);return{year:parseInt(e[0]),month:parseInt(e[1]),day:parseInt(e[2])}},A=function t(n){if(["html","body","#document"].indexOf((n.nodeName||"").toLowerCase())>=0)return window;if(n instanceof HTMLElement){var e=window.getComputedStyle(n),i=e.overflow,a=e.overflowX,o=e.overflowY;if(/auto|scroll|overlay/.test(i+o+a))return n}return t(n.parentNode)},R=function(t){var n=document.createEvent("Event");return n.initEvent(t,!0,!0),n},V=function(t){return 6===t?".".concat("last-week"):""},W=function(t,n){Y(c+(n?K.options.maxDate.year===K.initDate.year?".".concat(l):"":K.options.maxDate.year===K.initDate.year&&K.options.maxDate.month===K.initDate.month?".".concat(l):""),t,m,n?function(){K.increaseYear()}:function(){K.increaseMonth()},K.options.plusHtml)},J=function(t,n){Y(u+(n?K.options.minDate.year===K.initDate.year?".".concat(l):"":K.options.minDate.year===K.initDate.year&&K.options.minDate.month===K.initDate.month?".".concat(l):""),t,m,n?function(){K.decreaseYear()}:function(){K.decreaseMonth()},K.options.minusHtml)},q=function(){var t=Y(e,K.dpContainer);W(t,!0);var n=Y(i,t);J(t,!0);var a=Y("input",n,"keyup change",(function(t){K.yearChange(t.target.value)}));a.tabIndex=-1,a.value=K.initDate.year,a.type="number"},F=function(){var t=Y(a,K.dpContainer);W(t,!1);var n=Y(o,t);J(t,!1);var e=Y("select",n,"change",(function(t){K.monthChange(t.target.value)}));e.tabIndex=-1;for(var i=function(t,n,e){var i=[],a=1,o=12;t.year===n.year?(a=n.month,t.year===e.year&&(o=e.month)):t.year===e.year&&(a=1,o=e.month);for(var r=a;r<=o;r++)i.push(r);return i}(K.initDate,K.options.minDate,K.options.maxDate),r=K.options.months,s=0;s<i.length;s++){var h=Y("option",e);h.value=i[s],h.text=r[i[s]-1],h.selected=i[s]===K.initDate.month}},X=function(){for(var t=Y(r,K.dpContainer),n=0;n<7;n++)Y(h+V(n),t,null,null,K.options.days[n]);for(var e,i,a=(e=K.initDate.year,i=K.initDate.month,[0,31,31,31,31,31,31,30,30,30,30,30,S(e)?30:29][i]),o=H(K.initDate.year,K.initDate.month,1),c=7*Math.ceil((o+a)/7)-1,u=1,d=function(n){var e,i,o,r,h=H(K.initDate.year,K.initDate.month,u),c=(e=K.initDate,i=u,o=K.options.minDate,r=K.options.maxDate,!(!j(o)||!j(r))||(o.year===r.year&&o.month===r.month?i>=o.day&&i<=r.day:e.year===o.year&&e.month===o.month?i>=o.day:e.year!==r.year||e.month!==r.month||i<=r.day));if(u<=h&&n<h||u>a)return Y(s,t),"continue";if(!c)return Y(s,t),u+=1,"continue";var d=V(h);K.valueDate.day===u&&K.valueDate.year===K.initDate.year&&K.valueDate.month===K.initDate.month&&(d+=".".concat("selected")),K.today.day===u&&K.today.year===K.initDate.year&&K.today.month===K.initDate.month&&(d+=".".concat("today"));var p=Y(s+d,t,null,null,u);p.day=u,p.addEventListener(m,(function(){K.setValue(K.initDate.year,K.initDate.month,p.day)})),u+=1},p=0;p<=c;p++)d(p)},G=function(){var t=Y(d,K.dpContainer);K.options.showTodayBtn&&Y(p,t,m,(function(){K.setValue(K.today.year,K.today.month,K.today.day)}),"امروز"),K.options.showEmptyBtn&&Y(y,t,m,(function(){K.setValue()}),"خالی")},K=null;var Q={days:["ش","ی","د","س","چ","پ","ج"],months:["فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"],initDate:null,minDate:{},maxDate:{},separatorChar:"/",zIndex:1e3,container:"body",dpContainer:null,selector:"input.date-picker",autoShow:!0,autoHide:!0,plusHtml:'<svg viewBox="0 0 1024 1024"><g><path d="M810 554h-256v256h-84v-256h-256v-84h256v-256h84v256h256v84z"></path></g></svg>',minusHtml:'<svg viewBox="0 0 1024 1024"><g><path d="M810 554h-596v-84h596v84z"></path></g></svg>',changeMonthRotateYear:!1,showTodayBtn:!0,showEmptyBtn:!0,autoReadOnlyInput:window.innerWidth<=800&&window.innerHeight<=600},U={init:function(t){var n;this.options=P(Q,t),this.options=$(this.options),window.onresize=nt,this.options.autoHide&&(document.body.onclick=tt),this.options.autoShow&&(n=this.options.selector,Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector,document.body.addEventListener(v,(function(t){t.target&&t.target.matches(n)&&U.show(t.target)})))},options:Q,input:null,get dpContainer(){return this._dpContainer=this._dpContainer||Y(n,this.options.container),this._dpContainer},get today(){return this._today=this._today||function(){var t,n,e=new Date,i=parseInt(e.getFullYear()),a=parseInt(e.getMonth())+1,o=parseInt(e.getDate());i>1600?(t=979,i-=1600):(t=0,i-=621);var r=a>2?i+1:i;return n=365*i+parseInt((r+3)/4)-parseInt((r+99)/100)+parseInt((r+399)/400)-80+o+[0,31,59,90,120,151,181,212,243,273,304,334][a-1],t+=33*parseInt(n/12053),n%=12053,t+=4*parseInt(n/1461),(n%=1461)>365&&(t+=parseInt((n-1)/365),n=(n-1)%365),{year:t,month:n<186?1+parseInt(n/31):7+parseInt((n-186)/30),day:1+(n<186?n%31:(n-186)%30)}}(),this._today},get valueDate(){return this._valueDate=E(this.input.value),M(this._valueDate)&&(B(this._valueDate,this.options.separatorChar)?this._valueDate=T(this._valueDate,this.options.separatorChar):this._valueDate={}),this._valueDate},get initDate(){return this._initDate=this._initDate||E(this.valueDate),j(this._initDate)&&(this._initDate=this.options.initDate||E(this.today)),M(this._initDate)&&B(this._initDate,this.options.separatorChar)&&(this._initDate=T(this._initDate,this.options.separatorChar)),z(this._initDate.year,this._initDate.month,this._initDate.day,this._initDate,this.options.minDate,this.options.maxDate)},_draw:function(){L((K=this).dpContainer,""),q(),F(),X(),G()},show:function(t){this._initDate=null,this._valueDate=null,this.input=t,this._draw(),this.dpContainer.style.visibility=w,this.dpContainer.style.display="block",this.dpContainer.style.zIndex=this.options.zIndex,this.setPosition(),function(t){A(t).addEventListener("scroll",(function(){U.setPosition()}),{passive:!0})}(t),function(t,n){n.autoReadOnlyInput&&!t.readOnly&&(t.readOnly=!0)}(t,this.options)},hide:function(){this.dpContainer.style.visibility="hidden",this.dpContainer.style.display="none"},setPosition:function(){if(this.dpContainer.style.visibility===w){var t=this.input.getBoundingClientRect(),n=t.left,e=t.top,i=t.height,a=window.document.body.offsetWidth,o=this.dpContainer.offsetWidth,r=this.dpContainer.offsetHeight;n+o>=a&&(n-=n+o-(a+10)),e>=r&&e+r>=window.innerHeight&&(e-=r+i),this.dpContainer.style.position="fixed",this.dpContainer.style.left=n+"px",this.dpContainer.style.top=e+this.input.offsetHeight+"px"}},setValue:function(t,n,e){var i,a,o,r,s,h;this._valueDate.year=t,this._valueDate.month=n,this._valueDate.day=e,this.hide(),isNaN(t+n+e)?this.input.value="":this.input.value=(i=t,a=n,o=e,r=this.options.separatorChar,i+r+N(a)+r+N(o)),s=this.input,h=f,s&&(s.dispatchEvent(R(h)),h===f&&(s.dispatchEvent(R("change")),s.dispatchEvent(R("input"))))},increaseMonth:function(){var t=12===this._initDate.month;this.options.changeMonthRotateYear&&t&&this.increaseYear(),this.monthChange(t?1:this._initDate.month+1)},decreaseMonth:function(){var t=1===this._initDate.month;this.options.changeMonthRotateYear&&t&&this.decreaseYear(),this.monthChange(t?12:this._initDate.month-1)},monthChange:function(t){this._initDate=z(this._initDate.year,t,this._initDate.day,this._initDate,this.options.minDate,this.options.maxDate),this._draw()},increaseYear:function(){this.yearChange(this._initDate.year+1)},decreaseYear:function(){this.yearChange(this._initDate.year-1)},yearChange:function(t){this._initDate=z(t,this._initDate.month,this._initDate.day,this._initDate,this.options.minDate,this.options.maxDate),this._draw()}},Z=function(t,n){var e=U.input.getAttribute(t);return e=e===D?E(U.today):M(e)&&B(e,n)?T(e,n):{}},$=function(t){return t.minDate===D&&(t.minDate=E(U.today)),t.maxDate===D&&(t.maxDate=E(U.today)),t.minDate===g&&(delete t.minDate,window.Object.defineProperty(t,"minDate",{get:function(){return Z("data-jdp-min-date",t.separatorChar)}})),t.maxDate===g&&(delete t.maxDate,window.Object.defineProperty(t,"maxDate",{get:function(){return Z("data-jdp-max-date",t.separatorChar)}})),t};function tt(t){var n,e,i;U.dpContainer.style.visibility!==w||(n=U.dpContainer,(i=(e=t).path||e.composedPath&&e.composedPath()||!1)?-1!==i.indexOf(n):n.outerHTML.indexOf(e.target.outerHTML)>-1)||function(t){try{return I(t.composedPath)?t.composedPath()[0]:t.target}catch(n){return t.target}}(t)===U.input||U.hide()}function nt(){U.setPosition()}window.jalaliDatepicker={startWatch:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};U.init(t)},show:function(t){U.show(t)},hide:function(){U.hide()}}}()}();document.addEventListener("DOMContentLoaded",function(){initWPPJalaliDatePicker()});function initWPPJalaliDatePicker(){jalaliDatepicker.startWatch({selector:'.date-picker,input.hasDatepicker,input.sale_price_dates_to',separatorChar: "-",zIndex: 999999999})}jQuery( document.body ).on('woocommerce_variations_added',function(){initWPPJalaliDatePicker()})
assets/js/timepicki.js ADDED
@@ -0,0 +1,545 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Author: @senthil2rajan
3
+ * plugin: timepicker
4
+ * website: senthilraj.github.io/Timepicki
5
+ */
6
+ (function($) {
7
+
8
+ $.fn.timepicki = function(options) {
9
+
10
+ var defaults = {
11
+ format_output: function(tim, mini, meri) {
12
+ if (settings.show_meridian) {
13
+ // limit hours between 1 and 12 - inculsive.
14
+ tim = Math.min(Math.max(parseInt(tim), 1), 12);
15
+ if (tim < 10)
16
+ tim = "0" + tim;
17
+
18
+
19
+ mini = Math.min(Math.max(parseInt(mini), 0), 59);
20
+ if (mini < 10)
21
+ mini = "0" + mini;
22
+
23
+ return tim + ":" + mini + " " + meri;
24
+ } else {
25
+
26
+ // limit hours between 0 and 23 - inculsive.
27
+ tim = Math.min(Math.max(parseInt(tim), 0), 23);
28
+
29
+ if (tim < 10)
30
+ tim = "0" + tim;
31
+
32
+
33
+ mini = Math.min(Math.max(parseInt(mini), 0), 59);
34
+ if (mini < 10)
35
+ mini = "0" + mini;
36
+
37
+ //mini = Math.min(Math.max(parseInt(mini), 0), 59);
38
+
39
+ return tim + ":" + mini;
40
+ }
41
+ },
42
+ increase_direction: 'up',
43
+ custom_classes: '',
44
+ min_hour_value: 1,
45
+ max_hour_value: 12,
46
+ show_meridian: true,
47
+ step_size_hours: '1',
48
+ step_size_minutes: '1',
49
+ overflow_minutes: false,
50
+ disable_keyboard_mobile: false,
51
+ reset: false,
52
+ on_change: null,
53
+ input_writable: false
54
+ };
55
+
56
+ var settings = $.extend({}, defaults, options);
57
+
58
+ return this.each(function() {
59
+
60
+ var ele = $(this);
61
+ var ele_hei = ele.outerHeight();
62
+ ele_hei += 10;
63
+ $(ele).wrap("<div class='time_pick'>");
64
+ var ele_par = $(this).parents(".time_pick");
65
+
66
+ // developer can specify which arrow makes the numbers go up or down
67
+ var top_arrow_button = "<div class='prev action-next'></div>";
68
+ var bottom_arrow_button = "<div class='next action-prev'></div>";
69
+
70
+ var new_ele = $(
71
+ "<div class='timepicker_wrap " + settings.custom_classes + "'>" +
72
+ "<div class='arrow_top'></div>" +
73
+ "<div class='time'>" +
74
+ top_arrow_button +
75
+ "<div class='ti_tx'><input type='text' class='timepicki-input'" + (settings.disable_keyboard_mobile ? "readonly" : "") + "></div>" +
76
+ bottom_arrow_button +
77
+ "</div>" +
78
+ "<div class='mins'>" +
79
+ top_arrow_button +
80
+ "<div class='mi_tx'><input type='text' class='timepicki-input'" + (settings.disable_keyboard_mobile ? "readonly" : "") + "></div>" +
81
+ bottom_arrow_button +
82
+ "</div>");
83
+ if(settings.show_meridian){
84
+ new_ele.append(
85
+ "<div class='meridian'>" +
86
+ top_arrow_button +
87
+ "<div class='mer_tx'><input type='text' class='timepicki-input' readonly></div>" +
88
+ bottom_arrow_button +
89
+ "</div>");
90
+ }
91
+ ele_par.append(new_ele);
92
+ var ele_next = $(this).next(".timepicker_wrap");
93
+ var ele_next_all_child = ele_next.find("div");
94
+ var inputs = ele_par.find('input');
95
+
96
+ $('.reset_time').on("click", function(event) {
97
+ ele.val("");
98
+ close_timepicki();
99
+ });
100
+
101
+ $(".timepicki-input").keydown(function (keyevent) {
102
+ // our goal here is very simple.
103
+ // no matter what the user presses
104
+ // we must ensure that the values in our
105
+ // timepicki inputs are valid, and that pressing
106
+ // enter does not submit the form if the
107
+ // input field on which timepicki is applied is a part of a form.
108
+
109
+
110
+ // With that in mind. We proceed like this:
111
+ // 1) If enter is pressed:
112
+ // i) Prevent default operations - form submission.
113
+ // ii) close_timepicki().
114
+ // iii) return.
115
+ //
116
+ // 2) For any other key presses:
117
+ // i) realize that we cannot check what the user has typed
118
+ // just yet, because this function is a handler
119
+ // that runs before any text is rendered in the input
120
+ // box.
121
+ // ii) So, register a function validate() that will execute right
122
+ // after the keypress character is rendered. All validation
123
+ // is done inside validate().
124
+ //-----------------------------------------------------------------------------------
125
+ // NOTE:.change() event does not work here, as it is called when input looses focus|
126
+ //-----------------------------------------------------------------------------------
127
+
128
+ // (1)
129
+ // prevent potential form submission, if enter is pressed.
130
+ if (keyevent.keyCode == 13) {
131
+
132
+ keyevent.preventDefault();
133
+
134
+ set_value();
135
+ close_timepicki();
136
+ // nothing to do here.
137
+ return;
138
+ }
139
+
140
+
141
+
142
+ // the grand father div specifies the type of
143
+ // input that we are dealing with. if the grandFatherDiv
144
+ // has a class "time", then its a time input, if it has a class
145
+ // "mins", then its a minutes input, and if it has a class "meridian"
146
+ // then its a meridian input.
147
+ var grandfatherDiv = $(this).parent().parent();
148
+
149
+ // aliasing for readability
150
+ var input = $(this);
151
+
152
+ // pick the value from the field,
153
+ // because before change the field always has a
154
+ // valid value.
155
+ var lastValue = input.val();
156
+
157
+ // (2)
158
+ // validate() function validates the
159
+ // user input.
160
+ function validate() {
161
+
162
+ var isValidNumber = /^\d+$/.test(input.val());
163
+ var isEmpty = input.val() === "";
164
+
165
+
166
+ if (grandfatherDiv.hasClass("time")) { /// HOUR
167
+
168
+
169
+ // if its a valid number.
170
+ // clip it and assign it.
171
+ if (isValidNumber) {
172
+
173
+ // clip number.
174
+ var hours = (settings.show_meridian) ?
175
+ Math.min(Math.max(parseInt(input.val()), 1), 12) : // for 12 hour date picker.
176
+ Math.min(Math.max(parseInt(input.val()), 0), 23); // for 24 hours date picker.
177
+
178
+ // assign number.
179
+ input.val(hours);
180
+
181
+ } else if(!isEmpty) {
182
+ // else if the number is invalid and not empty
183
+ // assign the lastValue
184
+ input.val(lastValue);
185
+
186
+ }
187
+
188
+
189
+
190
+ } else if (grandfatherDiv.hasClass("mins")) { /// MINUTE
191
+
192
+
193
+ // if its a valid number.
194
+ // clip it and assign it.
195
+ if (isValidNumber) {
196
+
197
+ // clip number.
198
+ var minutes = Math.min(Math.max(parseInt(input.val()), 0), 59);
199
+
200
+ // assign number.
201
+ input.val(minutes);
202
+
203
+ } else if (!isEmpty) {
204
+ // else if the number is invalid and not empty
205
+ // assign the lastValue
206
+ input.val(lastValue);
207
+
208
+ }
209
+
210
+
211
+ } else if (grandfatherDiv.hasClass("meridian")) { /// MERIDIAN
212
+ // key presses should not affect
213
+ // meridian - except up and down
214
+ // which are handled else where
215
+ // and will still work.
216
+ keyevent.preventDefault();
217
+ } else {
218
+ // alert("This should not happen.");
219
+ }
220
+
221
+ }
222
+
223
+ // wrapValidate() ensures that validate()
224
+ // is not called more than once. 'done'
225
+ // is a flag used to ensure this.
226
+ done = false;
227
+ function wrapValidate() {
228
+ if (!done) {
229
+
230
+
231
+ validate();
232
+
233
+ done = true;
234
+ }
235
+ }
236
+ // enqueue wrapValidate function before any thing
237
+ // else takes place. For this we use setTimeout()
238
+ // with 0
239
+ setTimeout(wrapValidate, 0);
240
+ });
241
+
242
+ $(document).on('touchstart', function (event) {
243
+ if (!is_element_in_timepicki($(event.target))) {
244
+ close_timepicki();
245
+ }
246
+ });
247
+
248
+ // open or close time picker when clicking
249
+ $(document).on("click", function(event) {
250
+ if (!$(event.target).is(ele_next) && ele_next.css("display")=="block" && !$(event.target).is($('.reset_time'))) {
251
+ if (!$(event.target).is(ele)) {
252
+ set_value(event, !is_element_in_timepicki($(event.target)));
253
+ } else {
254
+ var ele_lef = 0;
255
+
256
+ ele_next.css({
257
+ "top": ele_hei + "px",
258
+ "left": ele_lef + "px"
259
+ });
260
+ open_timepicki();
261
+ }
262
+ }
263
+ });
264
+
265
+ // open the modal when the user focuses on the input
266
+ ele.on('focus', open_timepicki);
267
+
268
+ // select all text in input when user focuses on it
269
+ inputs.on('focus', function() {
270
+ var input = $(this);
271
+ if (!input.is(ele)) {
272
+ input.select();
273
+ }
274
+ });
275
+
276
+ // allow user to increase and decrease numbers using arrow keys
277
+ inputs.on('keydown', function(e) {
278
+ var direction, input = $(this);
279
+
280
+ // UP
281
+ if (e.which === 38) {
282
+ direction = 'next';
283
+ // DOWN
284
+ } else if (e.which === 40) {
285
+ direction = 'prev';
286
+ }
287
+
288
+ if (input.closest('.timepicker_wrap .time').length) {
289
+ change_time(null, direction);
290
+ } else if (input.closest('.timepicker_wrap .mins').length) {
291
+ change_mins(null, direction);
292
+ } else if (input.closest('.timepicker_wrap .meridian').length && settings.show_meridian) {
293
+ change_meri(null, direction);
294
+ }
295
+ });
296
+
297
+ // close the modal when the time picker loses keyboard focus
298
+ inputs.on('blur', function() {
299
+ setTimeout(function() {
300
+ var focused_element = $(document.activeElement);
301
+ if (focused_element.is(':input') && !is_element_in_timepicki(focused_element)) {
302
+ set_value();
303
+ close_timepicki();
304
+ }
305
+ }, 0);
306
+ });
307
+
308
+ function is_element_in_timepicki(jquery_element) {
309
+ return $.contains(ele_par[0], jquery_element[0]) || ele_par.is(jquery_element);
310
+ }
311
+
312
+ function set_value(event, close) {
313
+ // use input values to set the time
314
+ var tim = ele_next.find(".ti_tx input").val();
315
+ var mini = ele_next.find(".mi_tx input").val();
316
+ var meri = "";
317
+ if(settings.show_meridian){
318
+ meri = ele_next.find(".mer_tx input").val();
319
+ }
320
+
321
+ if (tim.length !== 0 && mini.length !== 0 && (!settings.show_meridian || meri.length !== 0)) {
322
+ // store the value so we can set the initial value
323
+ // next time the picker is opened
324
+ ele.attr('data-timepicki-tim', tim);
325
+ ele.attr('data-timepicki-mini', mini);
326
+
327
+ if(settings.show_meridian){
328
+ ele.attr('data-timepicki-meri', meri);
329
+ // set the formatted value
330
+ ele.val(settings.format_output(tim, mini, meri));
331
+ }else{
332
+ ele.val(settings.format_output(tim, mini));
333
+ }
334
+ }
335
+
336
+ //Call user on_change callback function if set
337
+ if (settings.on_change !== null) {
338
+ settings.on_change(ele[0]);
339
+ }
340
+
341
+ if (close) {
342
+ close_timepicki();
343
+ }
344
+ }
345
+
346
+ function open_timepicki() {
347
+ set_date(settings.start_time);
348
+ ele_next.fadeIn();
349
+ if(!settings.input_writable) {
350
+ // focus on the first input and select its contents
351
+ var first_input = ele_next.find('input:visible').first();
352
+ first_input.focus();
353
+ }
354
+ // if the user presses shift+tab while on the first input,
355
+ // they mean to exit the time picker and go to the previous field
356
+ var first_input_exit_handler = function(e) {
357
+ if (e.which === 9 && e.shiftKey) {
358
+ first_input.off('keydown', first_input_exit_handler);
359
+ var all_form_elements = $(':input:visible:not(.timepicki-input)');
360
+ var index_of_timepicki_input = all_form_elements.index(ele);
361
+ var previous_form_element = all_form_elements.get(index_of_timepicki_input-1);
362
+ previous_form_element.focus();
363
+ }
364
+ };
365
+ first_input.on('keydown', first_input_exit_handler);
366
+ }
367
+
368
+ function close_timepicki() {
369
+ ele_next.fadeOut('fast');
370
+ }
371
+
372
+ function set_date(start_time) {
373
+ var d, ti, mi, mer;
374
+
375
+ // if a value was already picked we will remember that value
376
+ if (ele.is('[data-timepicki-tim]')) {
377
+ ti = Number(ele.attr('data-timepicki-tim'));
378
+ mi = Number(ele.attr('data-timepicki-mini'));
379
+ if(settings.show_meridian){
380
+ mer = ele.attr('data-timepicki-meri');
381
+ }
382
+ // developer can specify a custom starting value
383
+ } else if (typeof start_time === 'object') {
384
+ ti = Number(start_time[0]);
385
+ mi = Number(start_time[1]);
386
+ if(settings.show_meridian){
387
+ mer = start_time[2];
388
+ }
389
+ // default is we will use the current time
390
+ } else {
391
+ d = new Date();
392
+ ti = d.getHours();
393
+ mi = d.getMinutes();
394
+ mer = "ق.ظ";
395
+ if (settings.show_meridian){
396
+ if (ti == 0) { // midnight
397
+ ti = 12;
398
+ } else if (ti == 12) { // noon
399
+ mer = "ب.ظ";
400
+ } else if (ti > 12) {
401
+ ti -= 12;
402
+ mer = "ب.ظ";
403
+ }
404
+ }
405
+ }
406
+
407
+ if (ti < 10) {
408
+ ele_next.find(".ti_tx input").val("0" + ti);
409
+ } else {
410
+ ele_next.find(".ti_tx input").val(ti);
411
+ }
412
+ if (mi < 10) {
413
+ ele_next.find(".mi_tx input").val("0" + mi);
414
+ } else {
415
+ ele_next.find(".mi_tx input").val(mi);
416
+ }
417
+ if(settings.show_meridian){
418
+ if (mer < 10) {
419
+ ele_next.find(".mer_tx input").val("0" + mer);
420
+ } else {
421
+ ele_next.find(".mer_tx input").val(mer);
422
+ }
423
+ }
424
+ }
425
+
426
+ function change_time(cur_ele, direction) {
427
+ var cur_cli = "time";
428
+ var cur_time = Number(ele_next.find("." + cur_cli + " .ti_tx input").val());
429
+ var ele_st = Number(settings.min_hour_value);
430
+ var ele_en = Number(settings.max_hour_value);
431
+ var step_size = Number(settings.step_size_hours);
432
+ if ((cur_ele && cur_ele.hasClass('action-next')) || direction === 'next') {
433
+ if (cur_time + step_size > ele_en) {
434
+ var min_value = ele_st;
435
+ if (min_value < 10) {
436
+ min_value = '0' + min_value;
437
+ } else {
438
+ min_value = String(min_value);
439
+ }
440
+ ele_next.find("." + cur_cli + " .ti_tx input").val(min_value);
441
+ } else {
442
+ cur_time = cur_time + step_size;
443
+ if (cur_time < 10) {
444
+ cur_time = "0" + cur_time;
445
+ }
446
+ ele_next.find("." + cur_cli + " .ti_tx input").val(cur_time);
447
+ }
448
+ } else if ((cur_ele && cur_ele.hasClass('action-prev')) || direction === 'prev') {
449
+ var minValue = Number(settings.min_hour_value)
450
+ if (cur_time - step_size < minValue) {
451
+ var max_value = ele_en;
452
+ if (max_value < 10) {
453
+ max_value = '0' + max_value;
454
+ } else {
455
+ max_value = String(max_value);
456
+ }
457
+ ele_next.find("." + cur_cli + " .ti_tx input").val(max_value);
458
+ } else {
459
+ cur_time = cur_time - step_size;
460
+ if (cur_time < 10) {
461
+ cur_time = "0" + cur_time;
462
+ }
463
+ ele_next.find("." + cur_cli + " .ti_tx input").val(cur_time);
464
+ }
465
+ }
466
+ }
467
+
468
+ function change_mins(cur_ele, direction) {
469
+ var cur_cli = "mins";
470
+ var cur_mins = Number(ele_next.find("." + cur_cli + " .mi_tx input").val());
471
+ var ele_st = 0;
472
+ var ele_en = 59;
473
+ var step_size = Number(settings.step_size_minutes);
474
+ if ((cur_ele && cur_ele.hasClass('action-next')) || direction === 'next') {
475
+ if (cur_mins + step_size > ele_en) {
476
+ ele_next.find("." + cur_cli + " .mi_tx input").val("00");
477
+ if(settings.overflow_minutes){
478
+ change_time(null, 'next');
479
+ }
480
+ } else {
481
+ cur_mins = cur_mins + step_size;
482
+ if (cur_mins < 10) {
483
+ ele_next.find("." + cur_cli + " .mi_tx input").val("0" + cur_mins);
484
+ } else {
485
+ ele_next.find("." + cur_cli + " .mi_tx input").val(cur_mins);
486
+ }
487
+ }
488
+ } else if ((cur_ele && cur_ele.hasClass('action-prev')) || direction === 'prev') {
489
+ if (cur_mins - step_size <= -1) {
490
+ ele_next.find("." + cur_cli + " .mi_tx input").val(ele_en + 1 - step_size);
491
+ if(settings.overflow_minutes){
492
+ change_time(null, 'prev');
493
+ }
494
+ } else {
495
+ cur_mins = cur_mins - step_size;
496
+ if (cur_mins < 10) {
497
+ ele_next.find("." + cur_cli + " .mi_tx input").val("0" + cur_mins);
498
+ } else {
499
+ ele_next.find("." + cur_cli + " .mi_tx input").val(cur_mins);
500
+ }
501
+ }
502
+ }
503
+ }
504
+
505
+ function change_meri(cur_ele, direction) {
506
+ var cur_cli = "meridian";
507
+ var ele_st = 0;
508
+ var ele_en = 1;
509
+ var cur_mer = null;
510
+ cur_mer = ele_next.find("." + cur_cli + " .mer_tx input").val();
511
+ if ((cur_ele && cur_ele.hasClass('action-next')) || direction === 'next') {
512
+ if (cur_mer == "ق.ظ") {
513
+ ele_next.find("." + cur_cli + " .mer_tx input").val("ب.ظ");
514
+ } else {
515
+ ele_next.find("." + cur_cli + " .mer_tx input").val("ق.ظ");
516
+ }
517
+ } else if ((cur_ele && cur_ele.hasClass('action-prev')) || direction === 'prev') {
518
+ if (cur_mer == "ق.ظ") {
519
+ ele_next.find("." + cur_cli + " .mer_tx input").val("ب.ظ");
520
+ } else {
521
+ ele_next.find("." + cur_cli + " .mer_tx input").val("ق.ظ");
522
+ }
523
+ }
524
+ }
525
+
526
+ // handle clicking on the arrow icons
527
+ var cur_next = ele_next.find(".action-next");
528
+ var cur_prev = ele_next.find(".action-prev");
529
+ $(cur_prev).add(cur_next).on("click", function() {
530
+ var cur_ele = $(this);
531
+ if (cur_ele.parent().attr("class") == "time") {
532
+ change_time(cur_ele);
533
+ } else if (cur_ele.parent().attr("class") == "mins") {
534
+ change_mins(cur_ele);
535
+ } else {
536
+ if(settings.show_meridian){
537
+ change_meri(cur_ele);
538
+ }
539
+ }
540
+ });
541
+
542
+ });
543
+ };
544
+
545
+ }(jQuery));
assets/js/timepicki.min.js ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function(f){f.fn.timepicki=function(y){var e=f.extend({},{format_output:function(k,l,r){if(e.show_meridian)return k=Math.min(Math.max(parseInt(k),1),12),10>k&&(k="0"+k),l=Math.min(Math.max(parseInt(l),0),59),10>l&&(l="0"+l),k+":"+l+" "+r;k=Math.min(Math.max(parseInt(k),0),23);10>k&&(k="0"+k);l=Math.min(Math.max(parseInt(l),0),59);10>l&&(l="0"+l);return k+":"+l},increase_direction:"up",custom_classes:"",min_hour_value:1,max_hour_value:12,show_meridian:!0,step_size_hours:"1",step_size_minutes:"1",
2
+ overflow_minutes:!1,disable_keyboard_mobile:!1,reset:!1,on_change:null,input_writable:!1},y);return this.each(function(){function k(b){return f.contains(t[0],b[0])||t.is(b)}function l(b,d){var a=c.find(".ti_tx input").val(),g=c.find(".mi_tx input").val(),m="";e.show_meridian&&(m=c.find(".mer_tx input").val());0===a.length||0===g.length||e.show_meridian&&0===m.length||(h.attr("data-timepicki-tim",a),h.attr("data-timepicki-mini",g),e.show_meridian?(h.attr("data-timepicki-meri",m),h.val(e.format_output(a,
3
+ g,m))):h.val(e.format_output(a,g)));if(null!==e.on_change)e.on_change(h[0]);d&&q()}function r(){z(e.start_time);c.fadeIn();if(!e.input_writable){var b=c.find("input:visible").first();b.focus()}var d=function(a){if(9===a.which&&a.shiftKey){b.off("keydown",d);a=f(":input:visible:not(.timepicki-input)");var g=a.index(h);a.get(g-1).focus()}};b.on("keydown",d)}function q(){c.fadeOut("fast")}function z(b){var d;if(h.is("[data-timepicki-tim]")){var a=Number(h.attr("data-timepicki-tim"));var g=Number(h.attr("data-timepicki-mini"));
4
+ e.show_meridian&&(d=h.attr("data-timepicki-meri"))}else"object"===typeof b?(a=Number(b[0]),g=Number(b[1]),e.show_meridian&&(d=b[2])):(b=new Date,a=b.getHours(),g=b.getMinutes(),d="\u0642.\u0638",e.show_meridian&&(0==a?a=12:12==a?d="\u0628.\u0638":12<a&&(a-=12,d="\u0628.\u0638")));10>a?c.find(".ti_tx input").val("0"+a):c.find(".ti_tx input").val(a);10>g?c.find(".mi_tx input").val("0"+g):c.find(".mi_tx input").val(g);e.show_meridian&&(10>d?c.find(".mer_tx input").val("0"+d):c.find(".mer_tx input").val(d))}
5
+ function u(b,d){var a=Number(c.find(".time .ti_tx input").val()),g=Number(e.min_hour_value),m=Number(e.max_hour_value),p=Number(e.step_size_hours);if(b&&b.hasClass("action-next")||"next"===d)a+p>m?(a=g,a=10>a?"0"+a:String(a),c.find(".time .ti_tx input").val(a)):(a+=p,10>a&&(a="0"+a),c.find(".time .ti_tx input").val(a));else if(b&&b.hasClass("action-prev")||"prev"===d)a-p<Number(e.min_hour_value)?(a=m,a=10>a?"0"+a:String(a),c.find(".time .ti_tx input").val(a)):(a-=p,10>a&&(a="0"+a),c.find(".time .ti_tx input").val(a))}
6
+ function v(b,d){var a=Number(c.find(".mins .mi_tx input").val()),g=Number(e.step_size_minutes);if(b&&b.hasClass("action-next")||"next"===d)59<a+g?(c.find(".mins .mi_tx input").val("00"),e.overflow_minutes&&u(null,"next")):(a+=g,10>a?c.find(".mins .mi_tx input").val("0"+a):c.find(".mins .mi_tx input").val(a));else if(b&&b.hasClass("action-prev")||"prev"===d)-1>=a-g?(c.find(".mins .mi_tx input").val(60-g),e.overflow_minutes&&u(null,"prev")):(a-=g,10>a?c.find(".mins .mi_tx input").val("0"+a):c.find(".mins .mi_tx input").val(a))}
7
+ function w(b,d){var a=c.find(".meridian .mer_tx input").val();if(b&&b.hasClass("action-next")||"next"===d)"\u0642.\u0638"==a?c.find(".meridian .mer_tx input").val("\u0628.\u0638"):c.find(".meridian .mer_tx input").val("\u0642.\u0638");else if(b&&b.hasClass("action-prev")||"prev"===d)"\u0642.\u0638"==a?c.find(".meridian .mer_tx input").val("\u0628.\u0638"):c.find(".meridian .mer_tx input").val("\u0642.\u0638")}var h=f(this),x=h.outerHeight();x+=10;f(h).wrap("<div class='time_pick'>");var t=f(this).parents(".time_pick"),
8
+ n=f("<div class='timepicker_wrap "+e.custom_classes+"'><div class='arrow_top'></div><div class='time'><div class='prev action-next'></div><div class='ti_tx'><input type='text' class='timepicki-input'"+(e.disable_keyboard_mobile?"readonly":"")+"></div><div class='next action-prev'></div></div><div class='mins'><div class='prev action-next'></div><div class='mi_tx'><input type='text' class='timepicki-input'"+(e.disable_keyboard_mobile?"readonly":"")+"></div><div class='next action-prev'></div></div>");
9
+ e.show_meridian&&n.append("<div class='meridian'><div class='prev action-next'></div><div class='mer_tx'><input type='text' class='timepicki-input' readonly></div><div class='next action-prev'></div></div>");t.append(n);var c=f(this).next(".timepicker_wrap");c.find("div");n=t.find("input");f(".reset_time").on("click",function(b){h.val("");q()});f(".timepicki-input").keydown(function(b){if(13==b.keyCode)b.preventDefault(),l(),q();else{var d=f(this).parent().parent(),a=f(this),g=a.val();done=!1;setTimeout(function(){if(!done){var m=
10
+ /^\d+$/.test(a.val()),p=""===a.val();d.hasClass("time")?m?(m=e.show_meridian?Math.min(Math.max(parseInt(a.val()),1),12):Math.min(Math.max(parseInt(a.val()),0),23),a.val(m)):p||a.val(g):d.hasClass("mins")?m?(m=Math.min(Math.max(parseInt(a.val()),0),59),a.val(m)):p||a.val(g):d.hasClass("meridian")&&b.preventDefault();done=!0}},0)}});f(document).on("touchstart",function(b){k(f(b.target))||q()});f(document).on("click",function(b){f(b.target).is(c)||"block"!=c.css("display")||f(b.target).is(f(".reset_time"))||
11
+ (f(b.target).is(h)?(c.css({top:x+"px",left:"0px"}),r()):l(b,!k(f(b.target))))});h.on("focus",r);n.on("focus",function(){var b=f(this);b.is(h)||b.select()});n.on("keydown",function(b){var d,a=f(this);38===b.which?d="next":40===b.which&&(d="prev");a.closest(".timepicker_wrap .time").length?u(null,d):a.closest(".timepicker_wrap .mins").length?v(null,d):a.closest(".timepicker_wrap .meridian").length&&e.show_meridian&&w(null,d)});n.on("blur",function(){setTimeout(function(){var b=f(document.activeElement);
12
+ b.is(":input")&&!k(b)&&(l(),q())},0)});n=c.find(".action-next");var A=c.find(".action-prev");f(A).add(n).on("click",function(){var b=f(this);"time"==b.parent().attr("class")?u(b):"mins"==b.parent().attr("class")?v(b):e.show_meridian&&w(b)})})}})(jQuery);
includes/admin/datepicker-rtl.php CHANGED
@@ -14,18 +14,16 @@
14
  * @since 3.0
15
  */
16
 
17
- function wpp_enqueue_datepicker_css()
18
- {
19
- wp_enqueue_style('wp-parsi-datepicker', WP_PARSI_URL . 'assets/css/jquery-ui.css', false, WP_PARSI_VER, 'all');
20
  }
21
 
22
- function wpp_enqueue_datepicker_scripts()
23
- {
24
- wp_register_script('wpp_ui_datepicker', WP_PARSI_URL . 'assets/js/jquery-ui.js', false, WP_PARSI_VER);
25
- wp_register_script('wpp_datepicker_fa', WP_PARSI_URL . 'assets/js/datepicker.js', false, WP_PARSI_VER);
26
- wp_enqueue_script('wpp_ui_datepicker');
27
- wp_enqueue_script('wpp_datepicker_fa');
28
  }
29
 
30
- add_action('admin_enqueue_scripts', 'wpp_enqueue_datepicker_css');
31
- add_action('admin_enqueue_scripts', 'wpp_enqueue_datepicker_scripts', 9999);
14
  * @since 3.0
15
  */
16
 
17
+ function wpp_enqueue_datepicker_css() {
18
+ wp_enqueue_style( 'wp-parsi-datepicker', WP_PARSI_URL . 'assets/css/jquery-ui.css', false, WP_PARSI_VER, 'all' );
 
19
  }
20
 
21
+ function wpp_enqueue_datepicker_scripts() {
22
+ wp_register_script( 'wpp_ui_datepicker', WP_PARSI_URL . 'assets/js/jquery-ui.js', false, WP_PARSI_VER );
23
+ wp_register_script( 'wpp_datepicker_fa', WP_PARSI_URL . 'assets/js/datepicker.js', false, WP_PARSI_VER );
24
+ wp_enqueue_script( 'wpp_ui_datepicker' );
25
+ wp_enqueue_script( 'wpp_datepicker_fa' );
 
26
  }
27
 
28
+ add_action( 'admin_enqueue_scripts', 'wpp_enqueue_datepicker_css' );
29
+ add_action( 'admin_enqueue_scripts', 'wpp_enqueue_datepicker_scripts', 9999 );
includes/admin/gutenberg-jalali-calendar.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Gutenberg Jalali Calendar
4
  *
@@ -10,11 +13,6 @@
10
  * @subpackage Admin/Gutenber_Jalali_Calendar
11
  */
12
 
13
- // Exit if accessed directly.
14
- if (!defined('ABSPATH')) {
15
- exit;
16
- }
17
-
18
  /**
19
  * Enqueue Gutenberg Jalali Calendar assets for backend editor.
20
  *
@@ -29,38 +27,35 @@ if (!defined('ABSPATH')) {
29
  * @uses {wp-date}
30
  * @since 3.0.0
31
  */
32
- if (!function_exists('wpp_gutenberg_jalali_calendar_editor_assets')) {
33
- function wpp_gutenberg_jalali_calendar_editor_assets()
34
- {
35
- // Scripts.
36
- wp_enqueue_script(
37
- 'wpp_gutenberg_jalali_calendar_editor_scripts',
38
- WP_PARSI_URL . 'assets/js/gutenberg-jalali-calendar.build.js',
39
- array(
40
- 'wp-plugins',
41
- 'wp-i18n',
42
- 'wp-compose',
43
- 'wp-components',
44
- 'wp-element',
45
- 'wp-editor',
46
- 'wp-edit-post',
47
- 'wp-data',
48
- 'wp-date'
49
- ),
50
- true
51
- );
52
 
53
- // Styles.
54
- wp_enqueue_style(
55
- 'wpp_gutenberg_jalali_calendar_editor_styles',
56
- WP_PARSI_URL . 'assets/css/gutenberg-jalali-calendar.build.css',
57
- array('wp-edit-blocks')
58
- );
59
- }
60
  }
61
 
62
  // Hook: Editor assets.
63
- $wpp_options = get_option('wpp_settings');
64
- if (version_compare(get_bloginfo('version'), '5.0.0', '>=') && $wpp_options['persian_date'] === 'enable') {
65
- add_action('enqueue_block_editor_assets', 'wpp_gutenberg_jalali_calendar_editor_assets');
66
  }
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Gutenberg Jalali Calendar
7
  *
13
  * @subpackage Admin/Gutenber_Jalali_Calendar
14
  */
15
 
 
 
 
 
 
16
  /**
17
  * Enqueue Gutenberg Jalali Calendar assets for backend editor.
18
  *
27
  * @uses {wp-date}
28
  * @since 3.0.0
29
  */
30
+ if ( ! function_exists( 'wpp_gutenberg_jalali_calendar_editor_assets' ) ) {
31
+ function wpp_gutenberg_jalali_calendar_editor_assets() {
32
+ wp_enqueue_script(
33
+ 'wpp_gutenberg_jalali_calendar_editor_scripts',
34
+ WP_PARSI_URL . 'assets/js/gutenberg-jalali-calendar.build.js',
35
+ array(
36
+ 'wp-plugins',
37
+ 'wp-i18n',
38
+ 'wp-compose',
39
+ 'wp-components',
40
+ 'wp-element',
41
+ 'wp-editor',
42
+ 'wp-edit-post',
43
+ 'wp-data',
44
+ 'wp-date'
45
+ ),
46
+ true
47
+ );
 
 
48
 
49
+ // Styles.
50
+ wp_enqueue_style(
51
+ 'wpp_gutenberg_jalali_calendar_editor_styles',
52
+ WP_PARSI_URL . 'assets/css/gutenberg-jalali-calendar.build.css',
53
+ array( 'wp-edit-blocks' )
54
+ );
55
+ }
56
  }
57
 
58
  // Hook: Editor assets.
59
+ if ( version_compare( get_bloginfo( 'version' ), '5.0.0', '>=' ) && wpp_is_active( 'persian_date' ) ) {
60
+ add_action( 'enqueue_block_editor_assets', 'wpp_gutenberg_jalali_calendar_editor_assets' );
 
61
  }
includes/admin/lists-fix.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Fixes admin lists for dates
4
  *
@@ -13,26 +16,24 @@
13
  * @return void
14
  * @author Ehsaan
15
  */
16
- function wpp_enqueue_admin_scripts()
17
- {
18
- wp_register_script('wpp_admin', WP_PARSI_URL . 'assets/js/admin.js', false, WP_PARSI_VER);
19
- wp_enqueue_script('wpp_admin');
20
  }
21
 
22
- add_action('admin_enqueue_scripts', 'wpp_enqueue_admin_scripts');
23
 
24
  /**
25
  * Hooks admin functions for restrict posts in edit pages
26
  *
27
  * @return void
28
  */
29
- function wpp_backend_init()
30
- {
31
- add_action('restrict_manage_posts', 'wpp_restrict_posts');
32
- add_filter('posts_where', 'wpp_admin_posts_where');
33
  }
34
 
35
- add_action('load-edit.php', 'wpp_backend_init');
36
 
37
  /**
38
  * Limits posts to a certain date, if date setted
@@ -41,15 +42,15 @@ add_action('load-edit.php', 'wpp_backend_init');
41
  *
42
  * @return string New Pointer
43
  */
44
- function wpp_admin_posts_where($where)
45
- {
46
- global $wp_query;
47
- if (isset($_GET['mfa']) && $_GET['mfa'] != '0') {
48
- $wp_query->query_vars['m'] = $_GET['mfa'];
49
- $where = wpp_posts_where($where, $wp_query);
50
- }
51
-
52
- return $where;
53
  }
54
 
55
  /**
@@ -58,44 +59,48 @@ function wpp_admin_posts_where($where)
58
  * @author Parsa Kafi
59
  * @author Mobin Ghasempoor
60
  */
61
- function wpp_restrict_posts()
62
- {
63
- global $post_type, $post_status, $wpdb, $persian_month_names;
64
-
65
- $post_status_w = "AND post_status <> 'auto-draft'";
66
- if ($post_status != "") {
67
- if (is_string($post_status)) {
68
- $post_status_w .= " AND post_status = '$post_status'";
69
- }
70
- } else {
71
- $post_status_w .= " AND post_status <> 'trash'";
72
- }
73
-
74
- $sql = "SELECT DISTINCT date( post_date ) AS date
75
  FROM $wpdb->posts
76
- WHERE post_type='$post_type' {$post_status_w} AND date( post_date ) <> '0000-00-00'
77
  ORDER BY post_date";
78
- $list = $wpdb->get_col($sql);
79
- if (empty($list)) {
80
- return;
81
- }
82
-
83
- $m = isset($_GET['mfa']) ? (int)$_GET['mfa'] : 0;
84
- $predate = '';
85
-
86
- echo '<select name="mfa">';
87
- echo '<option ' . selected($m, 0, false) . ' value="0">' . __('Show All Dates', 'wp-parsidate') . '</option>' . PHP_EOL;
88
- foreach ($list as $date) {
89
- $date = parsidate('Ym', $date, 'eng');
90
- $year = substr($date, 0, 4);
91
- $month = substr($date, 4, 2);
92
- $month = $persian_month_names[intval($month)];
93
-
94
- if ($predate != $date) {
95
- echo sprintf('<option %s value="%s">%s</option>', selected($m, $date, false), $date, $month . ' ' . fixnumber($year));
96
- }
97
-
98
- $predate = $date;
99
- }
100
- echo '</select>';
 
 
 
 
101
  }
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Fixes admin lists for dates
7
  *
16
  * @return void
17
  * @author Ehsaan
18
  */
19
+ function wpp_enqueue_admin_scripts() {
20
+ wp_register_script( 'wpp_admin', WP_PARSI_URL . 'assets/js/admin.js', false, WP_PARSI_VER );
21
+ wp_enqueue_script( 'wpp_admin' );
 
22
  }
23
 
24
+ add_action( 'admin_enqueue_scripts', 'wpp_enqueue_admin_scripts' );
25
 
26
  /**
27
  * Hooks admin functions for restrict posts in edit pages
28
  *
29
  * @return void
30
  */
31
+ function wpp_backend_init() {
32
+ add_action( 'restrict_manage_posts', 'wpp_restrict_posts' );
33
+ add_filter( 'posts_where', 'wpp_admin_posts_where' );
 
34
  }
35
 
36
+ add_action( 'load-edit.php', 'wpp_backend_init' );
37
 
38
  /**
39
  * Limits posts to a certain date, if date setted
42
  *
43
  * @return string New Pointer
44
  */
45
+ function wpp_admin_posts_where( $where ) {
46
+ global $wp_query;
47
+
48
+ if ( isset( $_GET['mfa'] ) && $_GET['mfa'] != '0' ) {
49
+ $wp_query->query_vars['m'] = $_GET['mfa'];
50
+ $where = wpp_posts_where( $where, $wp_query );
51
+ }
52
+
53
+ return $where;
54
  }
55
 
56
  /**
59
  * @author Parsa Kafi
60
  * @author Mobin Ghasempoor
61
  */
62
+ function wpp_restrict_posts() {
63
+ global $post_type, $post_status, $wpdb, $persian_month_names;
64
+
65
+ $post_status_w = "AND post_status <> 'auto-draft'";
66
+
67
+ if ( $post_status != "" ) {
68
+ if ( is_string( $post_status ) ) {
69
+ $post_status_w .= " AND post_status = '$post_status'";
70
+ }
71
+ } else {
72
+ $post_status_w .= " AND post_status <> 'trash'";
73
+ }
74
+
75
+ $sql = "SELECT DISTINCT date( post_date ) AS date
76
  FROM $wpdb->posts
77
+ WHERE post_type='$post_type' $post_status_w AND date( post_date ) <> '0000-00-00'
78
  ORDER BY post_date";
79
+
80
+ $list = $wpdb->get_col( $sql );
81
+
82
+ if ( empty( $list ) ) {
83
+ return;
84
+ }
85
+
86
+ $m = isset( $_GET['mfa'] ) ? (int) $_GET['mfa'] : 0;
87
+ $predate = '';
88
+
89
+ echo '<select name="mfa">';
90
+ echo '<option ' . selected( $m, 0, false ) . ' value="0">' . __( 'Show All Dates', 'wp-parsidate' ) . '</option>' . PHP_EOL;
91
+
92
+ foreach ( $list as $date ) {
93
+ $date = parsidate( 'Ym', $date, 'eng' );
94
+ $year = substr( $date, 0, 4 );
95
+ $month = substr( $date, 4, 2 );
96
+ $month = $persian_month_names[ intval( $month ) ];
97
+
98
+ if ( $predate != $date ) {
99
+ echo sprintf( '<option %s value="%s">%s</option>', selected( $m, $date, false ), $date, $month . ' ' . fix_number( $year ) );
100
+ }
101
+
102
+ $predate = $date;
103
+ }
104
+
105
+ echo '</select>';
106
  }
includes/admin/styles-fix.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Fix admin styles & TinyMCE editor
4
  *
@@ -13,13 +16,14 @@
13
  * @return void
14
  * @since 2.0
15
  */
16
- function wpp_fix_editor_rtl()
17
- {
18
- wp_enqueue_style('functions', WP_PARSI_URL . 'assets/css/admin-fix.css', false, WP_PARSI_VER, 'all');
 
19
  }
20
 
21
- add_action('admin_print_styles-plugin-editor.php', 'wpp_fix_editor_rtl', 10);
22
- add_action('admin_print_styles-theme-editor.php', 'wpp_fix_editor_rtl', 10);
23
 
24
  /**
25
  * Fixes TinyMCE font
@@ -27,11 +31,10 @@ add_action('admin_print_styles-theme-editor.php', 'wpp_fix_editor_rtl', 10);
27
  * @return void
28
  * @since 2.0
29
  */
30
- function wpp_fix_tinymce_font()
31
- {
32
- global $wpp_settings;
33
 
34
- add_editor_style(WP_PARSI_URL . 'assets/css/editor.css');
35
  }
36
 
37
- add_filter('init', 'wpp_fix_tinymce_font', 9);
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Fix admin styles & TinyMCE editor
7
  *
16
  * @return void
17
  * @since 2.0
18
  */
19
+ function wpp_fix_editor_rtl() {
20
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
21
+
22
+ wp_enqueue_style( 'functions', WP_PARSI_URL . "assets/css/admin-fix$suffix.css", false, WP_PARSI_VER, 'all' );
23
  }
24
 
25
+ add_action( 'admin_print_styles-plugin-editor.php', 'wpp_fix_editor_rtl', 10 );
26
+ add_action( 'admin_print_styles-theme-editor.php', 'wpp_fix_editor_rtl', 10 );
27
 
28
  /**
29
  * Fixes TinyMCE font
31
  * @return void
32
  * @since 2.0
33
  */
34
+ function wpp_fix_tinymce_font() {
35
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
 
36
 
37
+ add_editor_style( WP_PARSI_URL . "assets/css/editor$suffix.css" );
38
  }
39
 
40
+ add_filter( 'init', 'wpp_fix_tinymce_font', 9 );
includes/admin/widgets.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Replace wp-planet.ir to News and Events widget
4
  *
@@ -7,51 +10,50 @@
7
  * @subpackage Core/General
8
  */
9
 
10
- add_filter('dashboard_primary_link', 'wpp_dashboard_primary_link', 999, 1);
11
- add_filter('dashboard_primary_feed', 'wpp_dashboard_primary_feed', 999, 1);
12
- add_filter('dashboard_secondary_link', 'wpp_dashboard_secondary_link', 999, 1);
13
- add_filter('dashboard_secondary_feed', 'wpp_dashboard_secondary_feed', 999, 1);
14
-
15
  /**
16
  * Widget primary link
17
  *
18
  * @return string
19
  * @author Morteza Geransayeh
20
  */
21
- function wpp_dashboard_primary_link()
22
- {
23
- return 'https://wp-parsi.com/';
24
  }
25
 
 
 
26
  /**
27
  * Widget primary feed
28
  *
29
  * @return string
30
  * @author Morteza Geransayeh
31
  */
32
- function wpp_dashboard_primary_feed()
33
- {
34
- return 'https://wp-parsi.com/feed/';
35
  }
36
 
 
 
37
  /**
38
  * Widget secondary link
39
  *
40
  * @return string
41
  * @author Morteza Geransayeh
42
  */
43
- function wpp_dashboard_secondary_link()
44
- {
45
- return 'http://wp-planet.ir/';
46
  }
47
 
 
 
48
  /**
49
  * Widget secondary feed
50
  *
51
  * @return string
52
  * @author Morteza Geransayeh
53
  */
54
- function wpp_dashboard_secondary_feed()
55
- {
56
- return 'http://wp-planet.ir/feed';
57
- }
 
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Replace wp-planet.ir to News and Events widget
7
  *
10
  * @subpackage Core/General
11
  */
12
 
 
 
 
 
 
13
  /**
14
  * Widget primary link
15
  *
16
  * @return string
17
  * @author Morteza Geransayeh
18
  */
19
+ function wpp_dashboard_primary_link() {
20
+ return 'https://wp-parsi.com/';
 
21
  }
22
 
23
+ add_filter( 'dashboard_primary_link', 'wpp_dashboard_primary_link', 999, 1 );
24
+
25
  /**
26
  * Widget primary feed
27
  *
28
  * @return string
29
  * @author Morteza Geransayeh
30
  */
31
+ function wpp_dashboard_primary_feed() {
32
+ return 'https://wp-parsi.com/feed/';
 
33
  }
34
 
35
+ add_filter( 'dashboard_primary_feed', 'wpp_dashboard_primary_feed', 999, 1 );
36
+
37
  /**
38
  * Widget secondary link
39
  *
40
  * @return string
41
  * @author Morteza Geransayeh
42
  */
43
+ function wpp_dashboard_secondary_link() {
44
+ return 'http://wp-planet.ir/';
 
45
  }
46
 
47
+ add_filter( 'dashboard_secondary_link', 'wpp_dashboard_secondary_link', 999, 1 );
48
+
49
  /**
50
  * Widget secondary feed
51
  *
52
  * @return string
53
  * @author Morteza Geransayeh
54
  */
55
+ function wpp_dashboard_secondary_feed() {
56
+ return 'http://wp-planet.ir/feed';
57
+ }
58
+
59
+ add_filter( 'dashboard_secondary_feed', 'wpp_dashboard_secondary_feed', 999, 1 );
includes/fixes-archive.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Fixes archives and make them compatible with Shamsi date
4
  *
@@ -7,8 +10,6 @@
7
  * @author Mobin Ghasempoor
8
  */
9
 
10
- add_filter('wp_title', 'wpp_fix_title', 10000, 2);
11
- add_filter('pre_get_document_title', 'wpp_fix_title', 10000); // WP 4.4+
12
 
13
  /**
14
  * Fixes titles for archives
@@ -19,27 +20,30 @@ add_filter('pre_get_document_title', 'wpp_fix_title', 10000); // WP 4.4+
19
  *
20
  * @return string New archive title
21
  */
22
- function wpp_fix_title($title, $sep = '-', $sep_location = 'right')
23
- {
24
- global $persian_month_names, $wp_query, $wpp_settings;
25
- $query = $wp_query->query;
26
 
27
- if (!is_archive() || $wpp_settings['persian_date'] == 'disable') {
28
- return $title;
29
- }
30
 
31
- if ($sep_location == 'right') {
32
- $query = array_reverse($query);
33
- }
34
 
35
- if (isset($query['monthnum'])) {
36
- $query['monthnum'] = $persian_month_names[intval($query['monthnum'])];
37
- $title = implode(" ", $query) . " $sep " . get_bloginfo("name");
38
- }
39
 
40
- if (isset($wpp_settings['conv_page_title']) && $wpp_settings['conv_page_title'] != 'disable') {
41
- $title = fixnumber($title);
42
- }
 
43
 
44
- return $title;
 
 
 
 
45
  }
 
 
 
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Fixes archives and make them compatible with Shamsi date
7
  *
10
  * @author Mobin Ghasempoor
11
  */
12
 
 
 
13
 
14
  /**
15
  * Fixes titles for archives
20
  *
21
  * @return string New archive title
22
  */
23
+ function wpp_fix_title( $title, $sep = '-', $sep_location = 'right' ) {
24
+ global $persian_month_names, $wp_query, $wpp_settings;
 
 
25
 
26
+ $query = $wp_query->query;
 
 
27
 
28
+ if ( ! is_archive() || ! wpp_is_active( 'persian_date' ) ) {
29
+ return $title;
30
+ }
31
 
32
+ if ( $sep_location == 'right' ) {
33
+ $query = array_reverse( $query );
34
+ }
 
35
 
36
+ if ( isset( $query['monthnum'] ) ) {
37
+ $query['monthnum'] = $persian_month_names[ intval( $query['monthnum'] ) ];
38
+ $title = implode( " ", $query ) . " $sep " . get_bloginfo( "name" );
39
+ }
40
 
41
+ if ( wpp_is_active( 'conv_page_title' ) ) {
42
+ $title = fix_number( $title );
43
+ }
44
+
45
+ return $title;
46
  }
47
+
48
+ add_filter( 'wp_title', 'wpp_fix_title', PHP_INT_MAX, 2 );
49
+ add_filter( 'pre_get_document_title', 'wpp_fix_title', PHP_INT_MAX ); // WP 4.4+
includes/fixes-archives.php CHANGED
@@ -1,138 +1,206 @@
1
  <?php
2
 
 
 
3
  /**
4
  * Create Persian Archives
5
  *
6
  * @param string $args
7
- *
8
- * @return string
9
  */
10
- function wpp_get_archives($args = '')
11
- {
12
- global $wpdb, $persian_month_names;
13
- $defaults = array(
14
- 'type' => 'monthly',
15
- 'limit' => '',
16
- 'format' => 'html',
17
- 'before' => '',
18
- 'after' => '',
19
- 'show_post_count' => false,
20
- 'echo' => 1,
21
- 'order' => 'DESC',
22
- 'post_type' => 'post'
23
- );
24
- $r = wp_parse_args($args, $defaults);
25
-
26
- $post_type_object = get_post_type_object($r['post_type']);
27
- if (!is_post_type_viewable($post_type_object)) {
28
- return;
29
- }
30
- $r['post_type'] = $post_type_object->name;
31
-
32
- $results = $wpdb->get_results("SELECT date( post_date )as date,count(ID)as count FROM $wpdb->posts WHERE post_date < NOW() AND post_type = '{$r['post_type']}' AND post_status = 'publish' group by date ORDER BY post_date DESC");
33
-
34
- if (!empty($results))
35
- wpp_print_archive($results, $r);
36
- }
37
 
38
- function echo_yarchive($year, $format, $before, $count, $show_post_count, $r)
39
- {
40
- if ($show_post_count) {
41
- $count = '&nbsp;(' . fixnumber($count) . ')';
42
- } else {
43
- $count = '';
44
- }
45
- $url = get_year_link($year);
46
- if ('post' !== $r['post_type'])
47
- $url = add_query_arg('post_type', $r['post_type'], $url);
48
- echo get_archives_link($url, fixnumber($year), $format, $before, $count);
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  }
50
 
51
- function echo_marchive($old_date, $format, $before, $count, $show_post_count, $r)
52
- {
53
- global $persian_month_names;
54
- $year = substr($old_date, 0, 4);
55
- $month = substr($old_date, 4, 2);
56
- if ($show_post_count) {
57
- $count = '&nbsp;(' . fixnumber($count) . ')';
58
- } else {
59
- $count = '';
60
- }
61
- $url = get_month_link($year, $month);
62
- if ('post' !== $r['post_type'])
63
- $url = add_query_arg('post_type', $r['post_type'], $url);
64
-
65
- echo get_archives_link($url, $persian_month_names[intval($month)] . ' ' . fixnumber($year), $format, $before, $count);
 
 
 
 
 
 
 
66
  }
67
 
68
- function wp_get_parchives($args = '')
69
- {
70
- global $wpdb, $persian_month_names;
71
- $defaults = array(
72
- 'type' => 'monthly',
73
- 'limit' => '',
74
- 'format' => 'html',
75
- 'before' => '',
76
- 'after' => '',
77
- 'show_post_count' => false,
78
- 'echo' => 1,
79
- 'order' => 'DESC'
80
- );
81
-
82
- $r = wp_parse_args($args, $defaults);
83
-
84
- $results = $wpdb->get_results("SELECT date( post_date )as date,count(ID)as count FROM $wpdb->posts WHERE post_date < NOW() AND post_type = 'post' AND post_status = 'publish' group by date ORDER BY post_date DESC");
85
-
86
- if (!empty($results))
87
- wpp_print_archive($results, $r);
 
 
 
 
 
 
 
88
  }
89
 
90
- function wpp_print_archive($results, $args)
91
- {
92
- global $persian_month_names;
93
- if ($args['type'] == 'yearly') {
94
- $old_date = parsidate('Y', $results[0]->date, 'eng');
95
- $count = $results[0]->count;
96
- $c = count($results);
97
- for ($i = 1; $i < $c; $i++) {
98
- $dt = $results[$i];
99
- $date = parsidate('Y', $dt->date, 'eng');
100
- if ($date === $old_date) {
101
- $count += $dt->count;
102
- } else {
103
- echo_yarchive($old_date, $args['format'], $args['before'], $count, $args['show_post_count'], $args);
104
- $old_date = $date;
105
- $count = $dt->count;
106
- }
107
- }
108
- echo_yarchive($old_date, $args['format'], $args['before'], $count, $args['show_post_count'], $args);
109
- } elseif ($args['type'] == 'monthly') {
110
- $old_date = parsidate('Ym', $results[0]->date, 'eng');
111
- $count = $results[0]->count;
112
- $c = count($results);
113
- for ($i = 1; $i < $c; $i++) {
114
- $dt = $results[$i];
115
- $date = parsidate('Ym', $dt->date, 'eng');
116
- if ($date === $old_date) {
117
- $count += $dt->count;
118
- } else {
119
- echo_marchive($old_date, $args['format'], $args['before'], $count, $args['show_post_count'], $args);
120
- $old_date = $date;
121
- $count = $dt->count;
122
- }
123
- }
124
- echo_marchive($old_date, $args['format'], $args['before'], $count, $args['show_post_count'], $args);
125
- } elseif ($args['type'] == 'daily') {
126
- foreach ($results as $row) {
127
- $date = parsidate('Y,m,d', $row->date, 'eng');
128
- $date = explode(',', $date);
129
- if ($args['show_post_count']) {
130
- $count = '&nbsp;(' . fixnumber($row->count) . ')';
131
- } else {
132
- $count = '';
133
- }
134
- $text = fixnumber($date[2]) . ' ' . $persian_month_names[intval($date[1])] . ' ' . fixnumber($date[0]);
135
- echo get_archives_link(get_day_link($date[0], $date[1], $date[2]), $text, $args['format'], $args['before'], $count);
136
- }
137
- }
138
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
 
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Create Persian Archives
7
  *
8
  * @param string $args
 
 
9
  */
10
+ function wpp_get_archives( $args = '' ) {
11
+ global $wpdb;
12
+
13
+ $defaults = array(
14
+ 'type' => 'monthly',
15
+ 'limit' => '',
16
+ 'format' => 'html',
17
+ 'before' => '',
18
+ 'after' => '',
19
+ 'show_post_count' => false,
20
+ 'echo' => 1,
21
+ 'order' => 'DESC',
22
+ 'post_type' => 'post'
23
+ );
24
+
25
+ $r = wp_parse_args( $args, $defaults );
26
+ $post_type_object = get_post_type_object( $r['post_type'] );
 
 
 
 
 
 
 
 
 
 
27
 
28
+ if ( ! is_post_type_viewable( $post_type_object ) ) {
29
+ return;
30
+ }
31
+
32
+ $r['post_type'] = $post_type_object->name;
33
+ $results = $wpdb->get_results(
34
+ $wpdb->prepare(
35
+ "
36
+ SELECT date( post_date ) AS date,
37
+ COUNT( ID ) AS count
38
+ FROM $wpdb->posts
39
+ WHERE post_date < NOW()
40
+ AND post_type = '%s'
41
+ AND post_status = 'publish'
42
+ group by date
43
+ ORDER BY post_date DESC
44
+ ",
45
+ $r['post_type']
46
+ )
47
+ );
48
+
49
+ if ( ! empty( $results ) ) {
50
+ wpp_print_archive( $results, $r );
51
+ }
52
  }
53
 
54
+ /**
55
+ * @param $year
56
+ * @param $format
57
+ * @param $before
58
+ * @param $count
59
+ * @param $show_post_count
60
+ * @param $r
61
+ */
62
+ function echo_yarchive( $year, $format, $before, $count, $show_post_count, $r ) {
63
+ if ( $show_post_count ) {
64
+ $count = '&nbsp;(' . fix_number( $count ) . ')';
65
+ } else {
66
+ $count = '';
67
+ }
68
+
69
+ $url = get_year_link( $year );
70
+
71
+ if ( 'post' !== $r['post_type'] ) {
72
+ $url = add_query_arg( 'post_type', $r['post_type'], $url );
73
+ }
74
+
75
+ echo get_archives_link( $url, fix_number( $year ), $format, $before, $count );
76
  }
77
 
78
+ /**
79
+ * @param $old_date
80
+ * @param $format
81
+ * @param $before
82
+ * @param $count
83
+ * @param $show_post_count
84
+ * @param $r
85
+ */
86
+ function echo_marchive( $old_date, $format, $before, $count, $show_post_count, $r ) {
87
+ global $persian_month_names;
88
+
89
+ $year = substr( $old_date, 0, 4 );
90
+ $month = substr( $old_date, 4, 2 );
91
+
92
+ if ( $show_post_count ) {
93
+ $count = '&nbsp;(' . fix_number( $count ) . ')';
94
+ } else {
95
+ $count = '';
96
+ }
97
+
98
+ $url = get_month_link( $year, $month );
99
+
100
+ if ( 'post' !== $r['post_type'] ) {
101
+ $url = add_query_arg( 'post_type', $r['post_type'], $url );
102
+ }
103
+
104
+ echo get_archives_link( $url, $persian_month_names[ intval( $month ) ] . ' ' . fix_number( $year ), $format, $before, $count );
105
  }
106
 
107
+ /**
108
+ * @param string $args
109
+ */
110
+ function wp_get_parchives( $args = '' ) {
111
+ global $wpdb;
112
+
113
+ $defaults = array(
114
+ 'type' => 'monthly',
115
+ 'limit' => '',
116
+ 'format' => 'html',
117
+ 'before' => '',
118
+ 'after' => '',
119
+ 'show_post_count' => false,
120
+ 'echo' => 1,
121
+ 'order' => 'DESC'
122
+ );
123
+
124
+ $r = wp_parse_args( $args, $defaults );
125
+
126
+ $results = $wpdb->get_results(
127
+ "
128
+ SELECT date ( post_date ) AS date,
129
+ count ( ID ) AS count
130
+ FROM $wpdb->posts
131
+ WHERE post_date < NOW()
132
+ AND post_type = 'post'
133
+ AND post_status = 'publish'
134
+ GROUP BY date
135
+ ORDER BY post_date DESC
136
+ "
137
+ );
138
+
139
+ if ( ! empty( $results ) ) {
140
+ wpp_print_archive( $results, $r );
141
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  }
143
+
144
+ /**
145
+ * @param $results
146
+ * @param $args
147
+ */
148
+ function wpp_print_archive( $results, $args ) {
149
+ global $persian_month_names;
150
+
151
+ if ( $args['type'] == 'yearly' ) {
152
+ $old_date = parsidate( 'Y', $results[0]->date, 'eng' );
153
+ $count = $results[0]->count;
154
+ $c = count( $results );
155
+
156
+ for ( $i = 1; $i < $c; $i ++ ) {
157
+ $dt = $results[ $i ];
158
+ $date = parsidate( 'Y', $dt->date, 'eng' );
159
+
160
+ if ( $date === $old_date ) {
161
+ $count += $dt->count;
162
+ } else {
163
+ echo_yarchive( $old_date, $args['format'], $args['before'], $count, $args['show_post_count'], $args );
164
+
165
+ $old_date = $date;
166
+ $count = $dt->count;
167
+ }
168
+ }
169
+
170
+ echo_yarchive( $old_date, $args['format'], $args['before'], $count, $args['show_post_count'], $args );
171
+ } elseif ( $args['type'] == 'monthly' ) {
172
+ $old_date = parsidate( 'Ym', $results[0]->date, 'eng' );
173
+ $count = $results[0]->count;
174
+ $c = count( $results );
175
+
176
+ for ( $i = 1; $i < $c; $i ++ ) {
177
+ $dt = $results[ $i ];
178
+ $date = parsidate( 'Ym', $dt->date, 'eng' );
179
+
180
+ if ( $date === $old_date ) {
181
+ $count += $dt->count;
182
+ } else {
183
+ echo_marchive( $old_date, $args['format'], $args['before'], $count, $args['show_post_count'], $args );
184
+ $old_date = $date;
185
+ $count = $dt->count;
186
+ }
187
+ }
188
+
189
+ echo_marchive( $old_date, $args['format'], $args['before'], $count, $args['show_post_count'], $args );
190
+ } elseif ( $args['type'] == 'daily' ) {
191
+ foreach ( $results as $row ) {
192
+ $date = parsidate( 'Y,m,d', $row->date, 'eng' );
193
+ $date = explode( ',', $date );
194
+
195
+ if ( $args['show_post_count'] ) {
196
+ $count = '&nbsp;(' . fix_number( $row->count ) . ')';
197
+ } else {
198
+ $count = '';
199
+ }
200
+
201
+ $text = fix_number( $date[2] ) . ' ' . $persian_month_names[ intval( $date[1] ) ] . ' ' . fix_number( $date[0] );
202
+
203
+ echo get_archives_link( get_day_link( $date[0], $date[1], $date[2] ), $text, $args['format'], $args['before'], $count );
204
+ }
205
+ }
206
+ }
includes/fixes-calendar.php CHANGED
@@ -1,247 +1,305 @@
1
  <?php
2
 
 
 
3
  /**
4
  * Create Persian Calendar
5
  *
6
- * @return string
7
  * @author Parsa Kafi
8
  * @author Mobin Ghasempoor
9
  */
10
- function wpp_get_calendar()
11
- {
12
- global $wpdb, $m, $monthnum, $year, $day, $posts;
13
- $jy = 0;
14
- $pd = bn_parsidate::getInstance();
15
- $jm = $monthnum;
16
- if ($m != '') {
17
- $m = preg_replace("/[^0-9]/", "", $m);
18
- $jy = substr($m, 0, 4);
19
- } elseif ($year !== '') {
20
- $jy = $year;
21
- }
22
-
23
- if ($jy > 1500) {
24
- list($jy, $jm, $jd) = $pd->gregorian_to_persian($year, $monthnum, $day);
25
- }
26
-
27
- if (!$posts) {
28
- $gotsome = $wpdb->get_var("SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1");
29
- if (!$gotsome) {
30
- return;
31
- }
32
- }
33
-
34
- $week_begins = intval(get_option('start_of_week'));
35
- $w = isset($_GET['w']) ? intval($_GET['w']) : '';
36
- $is_gregorian = false;
37
-
38
- if (!empty($jm) && !empty($jy)) {
39
- $thismonth = '' . zeroise(intval($jm), 2);
40
- $thisyear = '' . intval($jy);
41
-
42
- } elseif (!empty($w)) {
43
- $thisyear = '' . intval(substr($m, 0, 4));
44
- $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's
45
- $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')");
46
-
47
- } elseif (!empty($m)) {
48
- $thisyear = '' . intval(substr($m, 0, 4));
49
- if (strlen($m) < 6) {
50
- $thismonth = '01';
51
- } else {
52
- $thismonth = '' . zeroise(intval(substr($m, 4, 2)), 2);
53
- }
54
-
55
- } else {
56
- $is_gregorian = true;
57
- $thisyear = gmdate('Y', current_time('timestamp') + get_option('gmt_offset') * 3600);
58
- $thismonth = gmdate('m', current_time('timestamp') + get_option('gmt_offset') * 3600);
59
- $thisday = gmdate('d', current_time('timestamp') + get_option('gmt_offset') * 3600);
60
- }
61
-
62
- //print_r($wp_query->query_vars);
63
-
64
- if ($is_gregorian) {
65
- list($jthisyear, $jthismonth, $jthisday) = $pd->gregorian_to_persian($thisyear, $thismonth, $thisday);
66
- $unixmonth = $pd->gregorian_date('Y-m-d 00:00:00', "$jthisyear-$jthismonth-01");
67
- } else {
68
- $gdate = $pd->persian_to_gregorian($thisyear, $thismonth, 1);
69
- $unixmonth = mktime(0, 0, 0, $gdate[1], 1, $gdate[0]);
70
- $jthisyear = $thisyear;
71
- $jthismonth = $thismonth;
72
- }
73
-
74
- $jnextmonth = $jthismonth + 1;
75
- $jnextyear = $jthisyear;
76
-
77
-
78
- if ($jnextmonth > 12) {
79
- $jnextmonth = 1;
80
- $jnextyear++;
81
- }
82
-
83
- $start = $pd->gregorian_date('Y-m-d 00:00:00', "$jthisyear-$jthismonth-01");
84
- $end = $pd->gregorian_date('Y-m-d 23:59:59', "$jnextyear-$jthismonth-" . $pd->j_days_in_month[$jthismonth - 1]);
85
-
86
- //echo "Start Date: ".$start.", End Date: ".$end."<br>";
87
-
88
- $previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  FROM $wpdb->posts
90
- WHERE post_date < '$start'
91
- AND post_type = 'post' AND post_status = 'publish'
 
92
  ORDER BY post_date DESC
93
- LIMIT 1");
94
- $next = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
 
 
 
 
 
 
 
95
  FROM $wpdb->posts
96
- WHERE post_date >= '$end'
97
- AND post_type = 'post' AND post_status = 'publish'
 
98
  ORDER BY post_date ASC
99
- LIMIT 1");
100
-
101
- $calendar_output = '<table id="wp-calendar" style="direction: rtl" class="widget_calendar">
102
- <caption>' . $pd->persian_month_names[(int)$jthismonth] . ' ' . $pd->persian_date('Y', $unixmonth) . '</caption>
103
- <thead>
104
- <tr>';
105
- $myweek = array();
106
- for ($wdcount = 0; $wdcount <= 6; $wdcount++) {
107
- $myweek[] = $pd->persian_day_small[($wdcount + $week_begins) % 7];
108
- }
109
-
110
- foreach ($myweek as $wd) {
111
- $calendar_output .= "\n\t\t<th scope=\"col\" title=\"$wd\">$wd</th>";
112
- }
113
-
114
- $calendar_output .= '
115
- </tr>
116
- </thead>
117
-
118
- <tfoot>
119
- <tr>';
120
-
121
- if ($previous) {
122
- $previous_month = $jthismonth - 1;
123
- $previous_year = $jthisyear;
124
- if ($previous_month == 0) {
125
- $previous_month = 12;
126
- $previous_year--;
127
- }
128
-
129
- $calendar_output .= "\n\t\t" . '<td colspan="3" id="prev"><a href="' . get_month_link($previous_year, $previous_month) .
130
- '">&laquo; ' . $pd->persian_month_names[$previous_month] . '</a></td>';
131
- } else {
132
- $calendar_output .= "\n\t\t" . '<td colspan="3" id="prev" class="pad">&nbsp;</td>';
133
- }
134
-
135
- $calendar_output .= "\n\t\t" . '<td class="pad">&nbsp;</td>';
136
-
137
- if ($next) {
138
- $next_month = $jthismonth + 1;
139
- $next_year = $jthisyear;
140
- if ($next_month == 13) {
141
- $next_month = 1;
142
- $next_year++;
143
- }
144
- $calendar_output .= "\n\t\t" . '<td colspan="3" id="next"><a href="' . get_month_link($next_year, $next_month) .
145
- '">' . $pd->persian_month_names[$next_month] . ' &raquo;</a></td>';
146
- } else {
147
- $calendar_output .= "\n\t\t" . '<td colspan="3" id="next" class="pad">&nbsp;</td>';
148
- }
149
-
150
- $calendar_output .= '
151
- </tr>
152
- </tfoot>
153
-
154
- <tbody>
155
- <tr>';
156
-
157
- //____________________________________________________________________________________________________________________________________
158
-
159
- $sql = "SELECT DISTINCT DAYOFMONTH(post_date),MONTH(post_date),YEAR(post_date)
160
- FROM $wpdb->posts
161
- WHERE post_date > '$start' AND post_date < '$end'
162
- AND post_type = 'post'
163
- AND post_status = 'publish'";
164
- $dayswithposts = $wpdb->get_results($sql, ARRAY_N);
165
-
166
- if ($dayswithposts) {
167
- foreach ($dayswithposts as $daywith) {
168
- $daywithpost[] = $pd->persian_date('j', "$daywith[2]-$daywith[1]-$daywith[0]", 'eng');
169
- }
170
-
171
- } else {
172
- $daywithpost = array();
173
- }
174
-
175
- if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'camino') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'safari') !== false) {
176
- $ak_title_separator = "\n";
177
- } else {
178
- $ak_title_separator = ', ';
179
- }
180
-
181
- $ak_titles_for_day = array();
182
- $ak_post_titles = $wpdb->get_results("SELECT ID, post_title, DAYOFMONTH(post_date) as dom, MONTH(post_date) as month, YEAR(post_date) as year
183
- FROM $wpdb->posts WHERE post_date >= '$start'
184
- AND post_date <= '$end'
185
- AND post_type = 'post' AND post_status = 'publish'");
186
-
187
- if ($ak_post_titles) {
188
- foreach ($ak_post_titles as $ak_post_title) {
189
- /** This filter is documented in wp-includes/post-template.php */
190
- $post_title = esc_attr(apply_filters('the_title', $ak_post_title->post_title, $ak_post_title->ID));
191
- $ak_post_title->dom = $pd->persian_date('j', "$ak_post_title->year-$ak_post_title->month-$ak_post_title->dom", 'eng');
192
-
193
- if (empty($ak_titles_for_day['day_' . $ak_post_title->dom])) {
194
- $ak_titles_for_day['day_' . $ak_post_title->dom] = '';
195
- }
196
- if (empty($ak_titles_for_day[$ak_post_title->dom])) // first one
197
- {
198
- $ak_titles_for_day[$ak_post_title->dom] = $post_title;
199
- } else {
200
- $ak_titles_for_day[$ak_post_title->dom] .= $ak_title_separator . $post_title;
201
- }
202
- }
203
- }
204
-
205
- $pd = bn_parsidate::getInstance();
206
- $pad = $pd->persian_date("w", $pd->gregorian_date("Y-m-d", $jthisyear . "-" . $jthismonth . "-01"), "eng");
207
-
208
- if (0 != $pad) {
209
- $calendar_output .= "\n\t\t" . '<td colspan="' . $pad . '" class="pad">&nbsp;</td>';
210
- }
211
-
212
- $daysinmonth = intval($pd->persian_date('t', $unixmonth, 'eng'));
213
-
214
- for ($day = 1; $day <= $daysinmonth; ++$day) {
215
- list($thiyear, $thismonth, $thisday) = $pd->persian_to_gregorian($jthisyear, $jthismonth, $day);
216
- if (isset($newrow) && $newrow) {
217
- $calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
218
- }
219
- $newrow = false;
220
-
221
- if ($thisday == gmdate('j', (time() + (get_option('gmt_offset') * 3600))) && $thismonth == gmdate('m', time() + (get_option('gmt_offset') * 3600)) && $thisyear == gmdate('Y', time() + (get_option('gmt_offset') * 3600))) {
222
- $calendar_output .= '<td id="today">';
223
- } else {
224
- $calendar_output .= '<td>';
225
- }
226
-
227
- $p_day = (empty($val['sep_datesnum']) ? $day : per_number($day));
228
-
229
- if (in_array($day, $daywithpost)) // any posts today?
230
- {
231
- $calendar_output .= '<a href="' . get_day_link($jthisyear, $jthismonth, $day) . "\" title=\"$ak_titles_for_day[$day]\">$p_day</a>";
232
- } else {
233
- $calendar_output .= $p_day;
234
- }
235
- $calendar_output .= '</td>';
236
-
237
- if (6 == calendar_week_mod($pd->gregorian_date('w', "$jthisyear-$jthismonth-$day") - $week_begins)) {
238
- $newrow = true;
239
- }
240
- }
241
- $pad = 7 - calendar_week_mod($pd->gregorian_date('w', "$jthisyear-$jthismonth-$day", 'eng') - $week_begins);
242
- if ($pad != 0 && $pad != 7) {
243
- $calendar_output .= "\n\t\t" . '<td class="pad" colspan="' . $pad . '">&nbsp;</td>';
244
- }
245
-
246
- echo $calendar_output . "\n\t</tr>\n\t</tbody>\n\t</table>";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  }
1
  <?php
2
 
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Create Persian Calendar
7
  *
8
+ * @return void
9
  * @author Parsa Kafi
10
  * @author Mobin Ghasempoor
11
  */
12
+ function wpp_get_calendar() {
13
+ global $wpdb, $m, $monthnum, $year, $day, $posts;
14
+
15
+ $jy = 0;
16
+ $pd = bn_parsidate::getInstance();
17
+ $jm = $monthnum;
18
+
19
+ if ( $m != '' ) {
20
+ $m = preg_replace( "/[^0-9]/", "", $m );
21
+ $jy = substr( $m, 0, 4 );
22
+ } elseif ( $year !== '' ) {
23
+ $jy = $year;
24
+ }
25
+
26
+ if ( $jy > 1500 ) {
27
+ list( $jy, $jm, $jd ) = $pd->gregorian_to_persian( $year, $monthnum, $day );
28
+ }
29
+
30
+ if ( ! $posts ) {
31
+ $gotsome = $wpdb->get_var(
32
+ "
33
+ SELECT 1 AS test
34
+ FROM $wpdb->posts
35
+ WHERE post_type = 'post'
36
+ AND post_status = 'publish'
37
+ LIMIT 1
38
+ "
39
+ );
40
+
41
+ if ( ! $gotsome ) {
42
+ return;
43
+ }
44
+ }
45
+
46
+ $week_begins = intval( get_option( 'start_of_week' ) );
47
+ $w = isset( $_GET['w'] ) ? intval( $_GET['w'] ) : '';
48
+ $is_gregorian = false;
49
+
50
+ if ( ! empty( $jm ) && ! empty( $jy ) ) {
51
+ $thismonth = '' . zeroise( (int) $jm, 2 );
52
+ $thisyear = '' . (int) $jy;
53
+ } elseif ( ! empty( $w ) ) {
54
+ $thisyear = '' . (int) substr( $m, 0, 4 );
55
+ $d = ( ( $w - 1 ) * 7 ) + 6; //it seems MySQL's weeks disagree with PHP's
56
+ $thismonth = $wpdb->get_var(
57
+ "
58
+ SELECT DATE_FORMAT ( ( DATE_ADD( '{$thisyear}0101', INTERVAL $d DAY ) ), '%m')
59
+ " );
60
+ } elseif ( ! empty( $m ) ) {
61
+ $thisyear = '' . (int) substr( $m, 0, 4 );
62
+
63
+ if ( strlen( $m ) < 6 ) {
64
+ $thismonth = '01';
65
+ } else {
66
+ $thismonth = '' . zeroise( (int) substr( $m, 4, 2 ), 2 );
67
+ }
68
+ } else {
69
+ $is_gregorian = true;
70
+ $thisyear = gmdate( 'Y', current_time( 'timestamp' ) + get_option( 'gmt_offset' ) * 3600 );
71
+ $thismonth = gmdate( 'm', current_time( 'timestamp' ) + get_option( 'gmt_offset' ) * 3600 );
72
+ $thisday = gmdate( 'd', current_time( 'timestamp' ) + get_option( 'gmt_offset' ) * 3600 );
73
+ }
74
+
75
+ //print_r($wp_query->query_vars);
76
+
77
+ if ( $is_gregorian ) {
78
+ list( $jthisyear,
79
+ $jthismonth,
80
+ $jthisday ) = $pd->gregorian_to_persian( $thisyear, $thismonth, $thisday );
81
+
82
+ $unixmonth = $pd->gregorian_date( 'Y-m-d 00:00:00', "$jthisyear-$jthismonth-01" );
83
+ } else {
84
+ $gdate = $pd->persian_to_gregorian( $thisyear, $thismonth, 1 );
85
+ $unixmonth = mktime( 0, 0, 0, $gdate[1], 1, $gdate[0] );
86
+ $jthisyear = $thisyear;
87
+ $jthismonth = $thismonth;
88
+ }
89
+
90
+ $jnextmonth = $jthismonth + 1;
91
+ $jnextyear = $jthisyear;
92
+
93
+ if ( $jnextmonth > 12 ) {
94
+ $jnextmonth = 1;
95
+ $jnextyear ++;
96
+ }
97
+
98
+ $start = $pd->gregorian_date( 'Y-m-d 00:00:00', "$jthisyear-$jthismonth-01" );
99
+ $end = $pd->gregorian_date( 'Y-m-d 23:59:59', "$jnextyear-$jthismonth-" . $pd->j_days_in_month[ $jthismonth - 1 ] );
100
+
101
+ //echo "Start Date: ".$start.", End Date: ".$end."<br>";
102
+
103
+ $previous = $wpdb->get_row( $wpdb->prepare(
104
+ "
105
+ SELECT MONTH(post_date) AS month,
106
+ YEAR(post_date) AS year
107
  FROM $wpdb->posts
108
+ WHERE post_date < '%s'
109
+ AND post_type = 'post'
110
+ AND post_status = 'publish'
111
  ORDER BY post_date DESC
112
+ LIMIT 1
113
+ ",
114
+ $start
115
+ ) );
116
+
117
+ $next = $wpdb->get_row( $wpdb->prepare(
118
+ "
119
+ SELECT MONTH(post_date) AS month,
120
+ YEAR(post_date) AS year
121
  FROM $wpdb->posts
122
+ WHERE post_date >= '%s'
123
+ AND post_type = 'post'
124
+ AND post_status = 'publish'
125
  ORDER BY post_date ASC
126
+ LIMIT 1
127
+ ",
128
+ $end
129
+ ) );
130
+
131
+ $calendar_output = '<table id="wp-calendar" style="direction: rtl" class="widget_calendar">' .
132
+ '<caption>' . $pd->persian_month_names[ (int) $jthismonth ] . ' ' .
133
+ $pd->persian_date( 'Y', $unixmonth ) . '</caption><thead><tr>';
134
+ $myweek = array();
135
+
136
+ for ( $wdcount = 0; $wdcount <= 6; $wdcount ++ ) {
137
+ $myweek[] = $pd->persian_day_small[ ( $wdcount + $week_begins ) % 7 ];
138
+ }
139
+
140
+ foreach ( $myweek as $wd ) {
141
+ $calendar_output .= "\n\t\t<th scope=\"col\" title=\"$wd\">$wd</th>";
142
+ }
143
+
144
+ $calendar_output .= '</tr></thead><tfoot><tr>';
145
+
146
+ if ( $previous ) {
147
+ $previous_month = $jthismonth - 1;
148
+ $previous_year = $jthisyear;
149
+
150
+ if ( $previous_month == 0 ) {
151
+ $previous_month = 12;
152
+ $previous_year --;
153
+ }
154
+
155
+ $calendar_output .= "\n\t\t" . '<td colspan="3" id="prev"><a href="' . get_month_link( $previous_year, $previous_month ) .
156
+ '">&laquo; ' . $pd->persian_month_names[ $previous_month ] . '</a></td>';
157
+ } else {
158
+ $calendar_output .= "\n\t\t" . '<td colspan="3" id="prev" class="pad">&nbsp;</td>';
159
+ }
160
+
161
+ $calendar_output .= "\n\t\t" . '<td class="pad">&nbsp;</td>';
162
+
163
+ if ( $next ) {
164
+ $next_month = $jthismonth + 1;
165
+ $next_year = $jthisyear;
166
+
167
+ if ( $next_month == 13 ) {
168
+ $next_month = 1;
169
+ $next_year ++;
170
+ }
171
+
172
+ $calendar_output .= "\n\t\t" . '<td colspan="3" id="next"><a href="' . get_month_link( $next_year, $next_month ) .
173
+ '">' . $pd->persian_month_names[ $next_month ] . ' &raquo;</a></td>';
174
+ } else {
175
+ $calendar_output .= "\n\t\t" . '<td colspan="3" id="next" class="pad">&nbsp;</td>';
176
+ }
177
+
178
+ $calendar_output .= '</tr></tfoot><tbody><tr>';
179
+
180
+ //____________________________________________________________________________________________________________________________________
181
+
182
+ $dayswithposts = $wpdb->get_results(
183
+ $wpdb->prepare(
184
+ "
185
+ SELECT DISTINCT DAYOFMONTH ( post_date ),
186
+ MONTH ( post_date ),
187
+ YEAR ( post_date )
188
+ FROM $wpdb->posts
189
+ WHERE post_date > '%s'
190
+ AND post_date < '%s'
191
+ AND post_type = 'post'
192
+ AND post_status = 'publish'
193
+ ",
194
+ $start,
195
+ $end
196
+ ),
197
+ ARRAY_N
198
+ );
199
+
200
+ if ( $dayswithposts ) {
201
+ foreach ( $dayswithposts as $daywith ) {
202
+ $daywithpost[] = $pd->persian_date( 'j', "$daywith[2]-$daywith[1]-$daywith[0]", 'eng' );
203
+ }
204
+ } else {
205
+ $daywithpost = array();
206
+ }
207
+
208
+ if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false
209
+ || stripos( $_SERVER['HTTP_USER_AGENT'], 'camino' ) !== false
210
+ || stripos( $_SERVER['HTTP_USER_AGENT'], 'safari' ) !== false ) {
211
+ $ak_title_separator = "\n";
212
+ } else {
213
+ $ak_title_separator = ', ';
214
+ }
215
+
216
+ $ak_titles_for_day = array();
217
+ $ak_post_titles = $wpdb->get_results(
218
+ $wpdb->prepare(
219
+ "
220
+ SELECT ID,
221
+ post_title,
222
+ DAYOFMONTH ( post_date ) AS dom,
223
+ MONTH ( post_date ) AS month,
224
+ YEAR ( post_date ) AS year
225
+ FROM $wpdb->posts
226
+ WHERE post_date >= '%s'
227
+ AND post_date <= '%s'
228
+ AND post_type = 'post'
229
+ AND post_status = 'publish'
230
+ ",
231
+ $start,
232
+ $end
233
+ )
234
+ );
235
+
236
+ if ( $ak_post_titles ) {
237
+ foreach ( $ak_post_titles as $ak_post_title ) {
238
+ /** This filter is documented in wp-includes/post-template.php */
239
+ $post_title = esc_attr( apply_filters( 'the_title', $ak_post_title->post_title, $ak_post_title->ID ) );
240
+ $ak_post_title->dom = $pd->persian_date( 'j', "$ak_post_title->year-$ak_post_title->month-$ak_post_title->dom", 'eng' );
241
+
242
+ if ( empty( $ak_titles_for_day[ 'day_' . $ak_post_title->dom ] ) ) {
243
+ $ak_titles_for_day[ 'day_' . $ak_post_title->dom ] = '';
244
+ }
245
+
246
+ if ( empty( $ak_titles_for_day[ $ak_post_title->dom ] ) ) { // first one
247
+ $ak_titles_for_day[ $ak_post_title->dom ] = $post_title;
248
+ } else {
249
+ $ak_titles_for_day[ $ak_post_title->dom ] .= $ak_title_separator . $post_title;
250
+ }
251
+ }
252
+ }
253
+
254
+ $pd = bn_parsidate::getInstance();
255
+ $pad = $pd->persian_date( "w", $pd->gregorian_date( "Y-m-d", $jthisyear . "-" . $jthismonth . "-01" ), "eng" );
256
+
257
+ if ( 0 != $pad ) {
258
+ $calendar_output .= "\n\t\t" . '<td colspan="' . $pad . '" class="pad">&nbsp;</td>';
259
+ }
260
+
261
+ $daysinmonth = (int) $pd->persian_date( 't', $unixmonth, 'eng' );
262
+
263
+ for ( $day = 1; $day <= $daysinmonth; ++ $day ) {
264
+ list( $thiyear,
265
+ $thismonth,
266
+ $thisday ) = $pd->persian_to_gregorian( $jthisyear, $jthismonth, $day );
267
+
268
+ if ( isset( $newrow ) && $newrow ) {
269
+ $calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
270
+ }
271
+
272
+ $newrow = false;
273
+
274
+ if ( $thisday == gmdate( 'j', ( time() + ( get_option( 'gmt_offset' ) * 3600 ) ) )
275
+ && $thismonth == gmdate( 'm', time() + ( get_option( 'gmt_offset' ) * 3600 ) )
276
+ && $thisyear == gmdate( 'Y', time() + ( get_option( 'gmt_offset' ) * 3600 ) ) ) {
277
+ $calendar_output .= '<td id="today">';
278
+ } else {
279
+ $calendar_output .= '<td>';
280
+ }
281
+
282
+ $p_day = ( empty( $val['sep_datesnum'] ) ? $day : per_number( $day ) );
283
+
284
+ if ( in_array( $day, $daywithpost ) ) {
285
+ $calendar_output .= '<a href="' . get_day_link( $jthisyear, $jthismonth, $day ) .
286
+ "\" title=\"$ak_titles_for_day[$day]\">$p_day</a>";
287
+ } else {
288
+ $calendar_output .= $p_day;
289
+ }
290
+
291
+ $calendar_output .= '</td>';
292
+
293
+ if ( 6 == calendar_week_mod( $pd->gregorian_date( 'w', "$jthisyear-$jthismonth-$day" ) - $week_begins ) ) {
294
+ $newrow = true;
295
+ }
296
+ }
297
+
298
+ $pad = 7 - calendar_week_mod( $pd->gregorian_date( 'w', "$jthisyear-$jthismonth-$day", 'eng' ) - $week_begins );
299
+
300
+ if ( $pad != 0 && $pad != 7 ) {
301
+ $calendar_output .= "\n\t\t" . '<td class="pad" colspan="' . $pad . '">&nbsp;</td>';
302
+ }
303
+
304
+ echo $calendar_output . "\n\t</tr>\n\t</tbody>\n\t</table>";
305
  }
includes/fixes-dates.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Fixes dates and convert them to Jalali date.
4
  *
@@ -9,111 +12,111 @@
9
 
10
  global $wpp_settings;
11
 
12
- if (get_locale() == 'fa_IR' && $wpp_settings['persian_date'] != 'disable') {
13
- add_filter('the_time', 'wpp_fix_post_time', 10, 2);
14
- add_filter('the_date', 'wpp_fix_post_date', 10, 2);
15
- add_filter('get_the_time', 'wpp_fix_post_date', 10, 2);
16
- add_filter('get_the_date', 'wpp_fix_post_date', 10, 2);
17
- add_filter('get_comment_time', 'wpp_fix_comment_time', 10, 2);
18
- add_filter('get_comment_date', 'wpp_fix_comment_date', 10, 2);
19
- //add_filter('get_post_modified_time', 'wpp_fix_post_modified_time', 10, 3);
20
- add_filter('date_i18n', 'wpp_fix_i18n', 10, 4);
21
- add_filter('wp_date', 'wpp_fix_i18n', 10, 4);
22
  }
23
 
24
  /**
25
- * Fixes post date and returns in Jalali format
26
  *
27
  * @param string $time Post time
28
  * @param string $format Date format
29
  *
30
  * @return string Formatted date
31
  */
32
- function wpp_fix_post_date($time, $format = '')
33
- {
34
- global $post, $wpp_settings;
35
 
36
- // It's seems some plugin like acf does not exits $post.
37
- if (empty($post)) {
38
- return $time;
39
- }
40
 
41
- if (empty($format)) {
42
- $format = get_option('date_format');
43
- }
44
 
45
- if (!disable_wpp())
46
- return date($format, strtotime($post->post_modified));
 
47
 
48
- return parsidate($format, $post->post_date, $wpp_settings['conv_dates'] == 'disable' ? 'eng' : 'per');
49
  }
50
 
51
  /**
52
- * Fixes post date and returns in Jalali format
53
  *
54
- * @param string $time Post time
55
- * @param string $format Date format
56
- * @param bool $gmt retrieve the GMT time. Default false.
57
  *
58
  * @return string Formatted date
59
  * @author Parsa Kafi
60
  */
61
- function wpp_fix_post_modified_time($time, $format, $gmt)
62
- {
63
- global $wpp_settings;
64
-
65
- if (!disable_wpp())
66
- return $time;
67
 
68
- return parsidate($format, $time, $wpp_settings['conv_dates'] == 'disable' ? 'eng' : 'per');
69
  }
70
 
71
  /**
72
- * Fixes post time and returns in Jalali format
73
  *
74
  * @param string $time Post time
75
  * @param string $format Date format
76
  *
77
  * @return string Formatted date
78
  */
79
- function wpp_fix_post_time($time, $format = '')
80
- {
81
- global $post, $wpp_settings;
82
-
83
- if (empty($post)) {
84
- return $time;
85
- }
86
-
87
- if (empty($format)) {
88
- $format = get_option('time_format');
89
- }
90
- if (!disable_wpp())
91
- return date($format, strtotime($post->post_date));
92
- return parsidate($format, $post->post_date, $wpp_settings['conv_dates'] == 'disable' ? 'eng' : 'per');
 
93
  }
94
 
95
  /**
96
- * Fixes comment time and returns in Jalali format
97
  *
98
  * @param string $time Comment time
99
  * @param string $format Date format
100
  *
101
  * @return string Formatted date
102
  */
103
- function wpp_fix_comment_time($time, $format = '')
104
- {
105
- global $comment, $wpp_settings;
106
-
107
- if (empty($comment)) {
108
- return $time;
109
- }
110
-
111
- if (empty($format)) {
112
- $format = get_option('time_format');
113
- }
114
- if (!disable_wpp())
115
- return date($format, strtotime($comment->comment_date));
116
- return parsidate($format, $comment->comment_date, $wpp_settings['conv_dates'] == 'disable' ? 'eng' : 'per');
 
117
  }
118
 
119
  /**
@@ -124,20 +127,21 @@ function wpp_fix_comment_time($time, $format = '')
124
  *
125
  * @return string Formatted date
126
  */
127
- function wpp_fix_comment_date($time, $format = '')
128
- {
129
- global $comment, $wpp_settings;
130
-
131
- if (empty($comment)) {
132
- return $time;
133
- }
134
-
135
- if (empty($format)) {
136
- $format = get_option('date_format');
137
- }
138
- if (!disable_wpp())
139
- return date($format, strtotime($comment->comment_date));
140
- return parsidate($format, $comment->comment_date, $wpp_settings['conv_dates'] == 'disable' ? 'eng' : 'per');
 
141
  }
142
 
143
  /**
@@ -152,43 +156,60 @@ function wpp_fix_comment_date($time, $format = '')
152
  *
153
  * @return string Formatted time
154
  */
155
- function wpp_fix_i18n($date, $format, $timestamp, $gmt)
156
- {
157
- global $wpp_settings, $post;
158
- $post_id = !empty($post) ? $post->ID : null;
159
-
160
- if (!disable_wpp())
161
- return $format;
162
-
163
- if ($post_id != null && get_post_type($post_id) == 'shop_order' && isset($_GET['post'])) // TODO: Remove after implement convert date for woocommerce
164
- return $date;
165
- else
166
- return parsidate($format, $timestamp, $wpp_settings['conv_dates'] == 'disable' ? 'eng' : 'per');
 
 
167
  }
168
 
169
- function wpp_fix_wp_date($date, $format, $timestamp, $timezone)
170
- {
171
- global $wpp_settings;
172
-
173
- if (!disable_wpp())
174
- return $format;
 
 
 
 
 
 
 
 
175
 
176
- return parsidate($format, $timestamp, $wpp_settings['conv_dates'] == 'disable' ? 'eng' : 'per');
177
  }
178
 
179
- function array_key_exists_r($needle, $haystack, $value = null)
180
- {
181
- $result = array_key_exists($needle, $haystack);
182
- if ($result) {
183
- if ($value != null && $haystack[$needle])
184
- return 1;
185
- return $result;
186
- }
187
- foreach ($haystack as $v) {
188
- if (is_array($v) || is_object($v))
189
- $result = array_key_exists_r($needle, $v);
190
- if ($result)
191
- return $result;
192
- }
193
- return $result;
 
 
 
 
 
 
 
194
  }
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Fixes dates and convert them to Jalali date.
7
  *
12
 
13
  global $wpp_settings;
14
 
15
+ if ( get_locale() == 'fa_IR' && wpp_is_active( 'persian_date' ) ) {
16
+ add_filter( 'the_time', 'wpp_fix_post_time', 10, 2 );
17
+ add_filter( 'the_date', 'wpp_fix_post_date', 10, 2 );
18
+ add_filter( 'get_the_time', 'wpp_fix_post_date', 10, 2 );
19
+ add_filter( 'get_the_date', 'wpp_fix_post_date', 100, 2 );
20
+ add_filter( 'get_comment_time', 'wpp_fix_comment_time', 10, 2 );
21
+ add_filter( 'get_comment_date', 'wpp_fix_comment_date', 10, 2 );
22
+ //add_filter('get_post_modified_time', 'wpp_fix_post_modified_time', 10, 3);
23
+ add_filter( 'date_i18n', 'wpp_fix_i18n', 10, 4 );
24
+ add_filter( 'wp_date', 'wpp_fix_i18n', 10, 4 );
25
  }
26
 
27
  /**
28
+ * Fixes post date and returns to Jalali format
29
  *
30
  * @param string $time Post time
31
  * @param string $format Date format
32
  *
33
  * @return string Formatted date
34
  */
35
+ function wpp_fix_post_date( $time, $format = '' ) {
36
+ global $post;
 
37
 
38
+ // It seems some plugin like acf does not exist $post.
39
+ if ( empty( $post ) ) {
40
+ return $time;
41
+ }
42
 
43
+ if ( empty( $format ) ) {
44
+ $format = get_option( 'date_format' );
45
+ }
46
 
47
+ if ( ! disable_wpp() ) {
48
+ return date( $format, strtotime( $post->post_modified ) );
49
+ }
50
 
51
+ return parsidate( $format, date( 'Y-m-d', strtotime( $post->post_date ) ), ! wpp_is_active( 'conv_dates' ) ? 'eng' : 'per' );
52
  }
53
 
54
  /**
55
+ * Fixes post date and returns to Jalali format
56
  *
57
+ * @param string $time Post time
58
+ * @param string $format Date format
59
+ * @param bool $gmt retrieve the GMT time. Default false.
60
  *
61
  * @return string Formatted date
62
  * @author Parsa Kafi
63
  */
64
+ function wpp_fix_post_modified_time( $time, $format, $gmt ) {
65
+ if ( ! disable_wpp() ) {
66
+ return $time;
67
+ }
 
 
68
 
69
+ return parsidate( $format, $time, ! wpp_is_active( 'conv_dates' ) ? 'eng' : 'per' );
70
  }
71
 
72
  /**
73
+ * Fixes post time and returns to Jalali format
74
  *
75
  * @param string $time Post time
76
  * @param string $format Date format
77
  *
78
  * @return string Formatted date
79
  */
80
+ function wpp_fix_post_time( $time, $format = '' ) {
81
+ global $post;
82
+
83
+ if ( empty( $post ) ) {
84
+ return $time;
85
+ }
86
+
87
+ if ( empty( $format ) ) {
88
+ $format = get_option( 'time_format' );
89
+ }
90
+ if ( ! disable_wpp() ) {
91
+ return date( $format, strtotime( $post->post_date ) );
92
+ }
93
+
94
+ return parsidate( $format, $post->post_date, wpp_is_active( 'conv_dates' ) ? 'eng' : 'per' );
95
  }
96
 
97
  /**
98
+ * Fixes comment time and returns to Jalali format
99
  *
100
  * @param string $time Comment time
101
  * @param string $format Date format
102
  *
103
  * @return string Formatted date
104
  */
105
+ function wpp_fix_comment_time( $time, $format = '' ) {
106
+ global $comment;
107
+
108
+ if ( empty( $comment ) ) {
109
+ return $time;
110
+ }
111
+
112
+ if ( empty( $format ) ) {
113
+ $format = get_option( 'time_format' );
114
+ }
115
+ if ( ! disable_wpp() ) {
116
+ return date( $format, strtotime( $comment->comment_date ) );
117
+ }
118
+
119
+ return parsidate( $format, $comment->comment_date, ! wpp_is_active( 'conv_dates' ) ? 'eng' : 'per' );
120
  }
121
 
122
  /**
127
  *
128
  * @return string Formatted date
129
  */
130
+ function wpp_fix_comment_date( $time, $format = '' ) {
131
+ global $comment;
132
+
133
+ if ( empty( $comment ) ) {
134
+ return $time;
135
+ }
136
+
137
+ if ( empty( $format ) ) {
138
+ $format = get_option( 'date_format' );
139
+ }
140
+ if ( ! disable_wpp() ) {
141
+ return date( $format, strtotime( $comment->comment_date ) );
142
+ }
143
+
144
+ return parsidate( $format, $comment->comment_date, ! wpp_is_active( 'conv_dates' ) ? 'eng' : 'per' );
145
  }
146
 
147
  /**
156
  *
157
  * @return string Formatted time
158
  */
159
+ function wpp_fix_i18n( $date, $format, $timestamp, $gmt ) {
160
+ global $post;
161
+ $post_id = ! empty( $post ) ? $post->ID : null;
162
+
163
+ if ( ! disable_wpp() ) {
164
+ return $format;
165
+ }
166
+
167
+ if ( $post_id != null && get_post_type( $post_id ) == 'shop_order' && isset( $_GET['post'] ) ) // TODO: Remove after implement convert date for woocommerce
168
+ {
169
+ return $date;
170
+ } else {
171
+ return parsidate( $format, $timestamp, ! wpp_is_active( 'conv_dates' ) ? 'eng' : 'per' );
172
+ }
173
  }
174
 
175
+ /**
176
+ * Convert date to Jalali
177
+ *
178
+ * @param $date
179
+ * @param $format
180
+ * @param $timestamp
181
+ * @param $timezone
182
+ *
183
+ * @return int|mixed|string
184
+ */
185
+ function wpp_fix_wp_date( $date, $format, $timestamp, $timezone ) {
186
+ if ( ! disable_wpp() ) {
187
+ return $format;
188
+ }
189
 
190
+ return parsidate( $format, $timestamp, ! wpp_is_active( 'conv_dates' ) ? 'eng' : 'per' );
191
  }
192
 
193
+ function array_key_exists_r( $needle, $haystack, $value = null ) {
194
+ $result = array_key_exists( $needle, $haystack );
195
+
196
+ if ( $result ) {
197
+ if ( $value != null && $haystack[ $needle ] ) {
198
+ return 1;
199
+ }
200
+
201
+ return true;
202
+ }
203
+
204
+ foreach ( $haystack as $v ) {
205
+ if ( is_array( $v ) || is_object( $v ) ) {
206
+ $result = array_key_exists_r( $needle, $v );
207
+ }
208
+
209
+ if ( $result ) {
210
+ return $result;
211
+ }
212
+ }
213
+
214
+ return $result;
215
  }
includes/fixes-misc.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Fixes numbers in selected options
4
  *
@@ -8,61 +11,43 @@
8
  * @subpackage Fixes/NumbersAndArabic
9
  */
10
 
11
- if (get_locale() == 'fa_IR') {
12
- global $wpp_settings;
13
-
14
- if (isset($wpp_settings['conv_page_title']) && $wpp_settings['conv_page_title'] != 'disable') {
15
- add_filter('wp_title', 'fixnumber', 1000);
16
- //add_filter('pre_get_document_title', 'fixnumber', 1000); // WP 4.4+
17
- }
18
-
19
- if (isset($wpp_settings['conv_title']) && $wpp_settings['conv_title'] != 'disable') {
20
- add_filter('the_title', 'fixnumber', 1000);
21
- }
22
-
23
- if (isset($wpp_settings['conv_contents']) && $wpp_settings['conv_contents'] != 'disable') {
24
- add_filter('the_content', 'fixnumber', 1000);
25
- }
26
-
27
- if (isset($wpp_settings['conv_excerpt']) && $wpp_settings['conv_excerpt'] != 'disable') {
28
- add_filter('the_excerpt', 'fixnumber', 1000);
29
- }
30
-
31
- if (isset($wpp_settings['conv_comments']) && $wpp_settings['conv_comments'] != 'disable') {
32
- add_filter('comment_text', 'fixnumber', 1000);
33
- }
34
-
35
- if (isset($wpp_settings['conv_comment_count']) && $wpp_settings['conv_comment_count'] != 'disable') {
36
- add_filter('comments_number', 'fixnumber', 1000);
37
- }
38
-
39
- if (isset($wpp_settings['conv_cats']) && $wpp_settings['conv_cats'] != 'disable') {
40
- add_filter('wp_list_categories', 'fixnumber', 1000);
41
- }
42
-
43
- if (isset($wpp_settings['conv_arabic']) && $wpp_settings['conv_arabic'] != 'disable') {
44
- add_filter('the_content', 'fixarabic', 1000);
45
- add_filter('the_title', 'fixarabic', 1000);
46
- add_filter('comment_text', 'fixarabic', 1000);
47
- add_filter('wp_list_categories', 'fixarabic', 1000);
48
- add_filter('the_excerpt', 'fixarabic', 1000);
49
- add_filter('wp_title', 'fixarabic', 1000);
50
- //add_filter('pre_get_document_title', 'fixarabic', 1000); // WP 4.4+
51
- }
52
- } else {
53
- /*remove_filter('wp_title', 'fixnumber', 1001);
54
- remove_filter('pre_get_document_title', 'fixnumber', 1001); // WP 4.4+
55
- remove_filter('the_title', 'fixnumber', 1001);
56
- remove_filter('the_content', 'fixnumber', 1001);
57
- remove_filter('the_excerpt', 'fixnumber', 1001);
58
- remove_filter('comment_text', 'fixnumber', 1001);
59
- remove_filter('comments_number', 'fixnumber', 1001);
60
- remove_filter('wp_list_categories', 'fixnumber', 1001);
61
- remove_filter('the_content', 'fixarabic', 1001);
62
- remove_filter('the_title', 'fixarabic', 1001);
63
- remove_filter('comment_text', 'fixarabic', 1001);
64
- remove_filter('wp_list_categories', 'fixarabic', 1001);
65
- remove_filter('the_excerpt', 'fixarabic', 1001);
66
- remove_filter('wp_title', 'fixarabic', 1001);
67
- remove_filter('pre_get_document_title', 'fixarabic', 1001); // WP 4.4+*/
68
  }
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Fixes numbers in selected options
7
  *
11
  * @subpackage Fixes/NumbersAndArabic
12
  */
13
 
14
+ if ( get_locale() == 'fa_IR' ) {
15
+ global $wpp_settings;
16
+
17
+ if ( wpp_is_active( 'conv_page_title' ) ) {
18
+ add_filter( 'wp_title', 'fix_number', 1000 );
19
+ }
20
+
21
+ if ( wpp_is_active( 'conv_title' ) ) {
22
+ add_filter( 'the_title', 'fix_number', 1000 );
23
+ }
24
+
25
+ if ( wpp_is_active( 'conv_contents' ) ) {
26
+ add_filter( 'the_content', 'fix_number', 1000 );
27
+ }
28
+
29
+ if ( wpp_is_active( 'conv_excerpt' ) ) {
30
+ add_filter( 'the_excerpt', 'fix_number', 1000 );
31
+ }
32
+
33
+ if ( wpp_is_active( 'conv_comments' ) ) {
34
+ add_filter( 'comment_text', 'fix_number', 1000 );
35
+ }
36
+
37
+ if ( wpp_is_active( 'conv_comment_count' ) ) {
38
+ add_filter( 'comments_number', 'fix_number', 1000 );
39
+ }
40
+
41
+ if ( wpp_is_active( 'conv_cats' ) ) {
42
+ add_filter( 'wp_list_categories', 'fix_number', 1000 );
43
+ }
44
+
45
+ if ( wpp_is_active( 'conv_arabic' ) ) {
46
+ add_filter( 'the_content', 'fix_arabic', 1000 );
47
+ add_filter( 'the_title', 'fix_arabic', 1000 );
48
+ add_filter( 'comment_text', 'fix_arabic', 1000 );
49
+ add_filter( 'wp_list_categories', 'fix_arabic', 1000 );
50
+ add_filter( 'the_excerpt', 'fix_arabic', 1000 );
51
+ add_filter( 'wp_title', 'fix_arabic', 1000 );
52
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  }
includes/fixes-permalinks.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Fixes and converts permalinks date to Jalali
4
  *
@@ -8,10 +11,10 @@
8
  */
9
  global $wpp_settings;
10
 
11
- if ($wpp_settings['conv_permalinks'] == 'enable') {
12
- add_filter('posts_where', 'wpp_posts_where', 10, 2);
13
- add_action('pre_get_posts', 'wpp_pre_get_posts');
14
- add_filter('post_link', 'wpp_permalink', 10, 3);
15
  }
16
 
17
  /**
@@ -22,120 +25,123 @@ if ($wpp_settings['conv_permalinks'] == 'enable') {
22
  *
23
  * @return string
24
  */
25
- function wpp_posts_where($where, $wp_query = '')
26
- {
27
- global $wpdb;
28
- if (empty($wp_query)) {
29
- global $wp_query;
30
- }
31
-
32
- if (!$wp_query->is_main_query() || empty($wp_query->query_vars)) {
33
- return $where;
34
- }
35
-
36
- $pd = bn_parsidate::getInstance();
37
-
38
- $m = (isset($wp_query->query_vars['m'])) ? $wp_query->query_vars['m'] : '';
39
- $hour = (isset($wp_query->query_vars['hour'])) ? $wp_query->query_vars['hour'] : '';
40
- $minute = (isset($wp_query->query_vars['minute'])) ? $wp_query->query_vars['minute'] : '';
41
- $second = (isset($wp_query->query_vars['second'])) ? $wp_query->query_vars['second'] : '';
42
- $year = (isset($wp_query->query_vars['year'])) ? $wp_query->query_vars['year'] : '';
43
- $month = (isset($wp_query->query_vars['monthnum'])) ? $wp_query->query_vars['monthnum'] : '';
44
- $day = (isset($wp_query->query_vars['day'])) ? $wp_query->query_vars['day'] : '';
45
-
46
- if (!empty($m)) {
47
- $len = strlen($m);
48
- $year = substr($m, 0, 4);
49
- if ($len > 5) {
50
- $month = substr($m, 4, 2);
51
- }
52
- if ($len > 7) {
53
- $day = substr($m, 6, 2);
54
- }
55
- if ($len > 9) {
56
- $hour = substr($m, 8, 2);
57
- }
58
- if ($len > 11) {
59
- $minute = substr($m, 10, 2);
60
- }
61
- if ($len > 13) {
62
- $second = substr($m, 12, 2);
63
- }
64
- }
65
-
66
- if (empty($year) || $year > 1700) {
67
- return $where;
68
- }
69
-
70
- $stamon = 1;
71
- $staday = 1;
72
- $stahou = '00';
73
- $stamin = '00';
74
- $stasec = '00';
75
- $endmon = 1;
76
- $endday = 1;
77
- $endhou = '00';
78
- $endmin = '00';
79
- $endsec = '00';
80
-
81
- $stayear = $year;
82
- $endyear = $year + 1;
83
-
84
- if ($month != '') {
85
- $stamon = $month;
86
- $endmon = ($month == 12 ? 1 : $month + 1);
87
- $endyear = ($endmon == 1 ? $stayear + 1 : $stayear);
88
- }
89
-
90
- if ($day != '') {
91
- $staday = $day;
92
- $endday = ($day == $pd->j_days_in_month[(int)$month - 1] ? 1 : $day + 1);
93
- $endmon = ($endday == 1 ? $stamon + 1 : $stamon);
94
- }
95
-
96
- if ($hour != '') {
97
- $stahou = $hour;
98
- $endhou = ($hour == 24 ? '00' : $hour + 1);
99
- $endday = ($endhou == '00' ? $staday + 1 : $staday);
100
- }
101
-
102
- if ($minute != '') {
103
- $stamin = $minute;
104
- $endmin = ($minute == 59 ? '00' : $minute + 1);
105
- $endhou = ($endmin == '00' ? $stahou + 1 : $stahou);
106
- }
107
-
108
- if ($second != '') {
109
- $stasec = $second;
110
- $endsec = ($second == 59 ? '00' : $second + 1);
111
- $endmin = ($endsec == '00' ? $stamin + 1 : $stamin);
112
- }
113
-
114
- $stadate = "$stayear-$stamon-$staday";
115
- $enddate = "$endyear-$endmon-$endday";
116
- $stadate = gregdate('Y-m-d', $stadate);
117
- $enddate = gregdate('Y-m-d', $enddate);
118
- $stadate .= " $stahou:$stamin:$stasec";
119
- $enddate .= " $endhou:$endmin:$endsec";
120
-
121
- $patterns = array(
122
- '/YEAR\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
123
- '/DAYOFMONTH\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
124
- '/MONTH\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
125
- '/HOUR\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
126
- '/MINUTE\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
127
- '/SECOND\((.*?)post_date\s*\)\s*=\s*[0-9\']*/'
128
- );
129
- foreach ($patterns as $pattern) {
130
- $where = preg_replace($pattern, '1=1', $where);
131
- }
132
-
133
- $prefixp = "{$wpdb->posts}.";
134
- $prefixp = (strpos($where, $prefixp) == false) ? '' : $prefixp;
135
-
136
- $where .= " AND {$prefixp}post_date >= '$stadate' AND {$prefixp}post_date < '$enddate' ";
137
-
138
- return $where;
 
 
 
139
  }
140
 
141
  /**
@@ -143,115 +149,118 @@ function wpp_posts_where($where, $wp_query = '')
143
  *
144
  * @param WP_Query $query
145
  *
146
- * @return mixed
147
  */
148
- function wpp_pre_get_posts($query)
149
- {
150
- global $wpdb;
151
-
152
- $permalink = $query->query;
153
- $year = '';
154
- $monthnum = '';
155
- $day = '';//start
156
-
157
- if (isset($permalink['year'])) {
158
- $year = $permalink['year'];
159
- }
160
- if (isset($permalink['monthnum'])) {
161
- $monthnum = $permalink['monthnum'];
162
- }
163
- if (isset($permalink['day'])) {
164
- $day = $permalink['day'];
165
- }
166
- if ($year > 1700) {
167
- return $query;
168
- }
169
-
170
- $out = false;
171
- $pd = bn_parsidate::getInstance();
172
- if (isset($permalink['name'])) {
173
- $var = $wpdb->get_var("SELECT post_date FROM {$wpdb->prefix}posts WHERE post_name='{$permalink['name']}' AND post_type!='attachment' ORDER BY id");
174
- $per = parsidate('Y-m-d', $var, 'eng');
175
- //update_option('options', $per );
176
- $per = explode('-', $per);
177
- $out = true;
178
-
179
- if (!empty($year) && $year != $per[0]) {
180
- $out = false;
181
- }
182
- if ($out && !empty($monthnum) && $monthnum != $per[1]) {
183
- $out = false;
184
- }
185
- if ($out && !empty($day) && $day != $per[2]) {
186
- $out = false;
187
- }
188
- } elseif (isset($permalink['post_id'])) {
189
- $out = true;
190
- $var = $wpdb->get_var("SELECT post_date FROM {$wpdb->prefix}posts WHERE ID={$permalink['post_id']}");
191
- } elseif (!empty($year) && !empty($monthnum) && !empty($day)) {
192
- $out = true;
193
- $var = gregdate('Y-m-d', "$year-$monthnum-$day");
194
- } elseif (!empty($year) && !empty($monthnum)) {
195
- $stadate = $pd->persian_to_gregorian($year, $monthnum, 1);
196
- $enddate = $pd->persian_to_gregorian($year, $monthnum, $pd->j_days_in_month[($monthnum - 1)]);
197
- $date_query = array(
198
- array(
199
- 'after' => array(
200
- 'year' => $stadate[0],
201
- 'month' => $stadate[1],
202
- 'day' => $stadate[2] - 1,
203
- ),
204
- 'before' => array(
205
- 'year' => $enddate[0],
206
- 'month' => $enddate[1],
207
- 'day' => $enddate[2] + 1,
208
- ),
209
- 'inclusive' => true,
210
- ),
211
- );
212
- $query->set('date_query', $date_query);
213
-
214
- // commented for get year & month in calander widget
215
- // $query->set('year', '');
216
- // $query->set('monthnum', '');
217
- $out = false;
218
-
219
- } elseif (!empty($year)) {
220
- $stadate = $pd->persian_to_gregorian($year, 1, 1);
221
- $enddate = $pd->persian_to_gregorian(($year + 1), 1, 1);
222
- $date_query = array(
223
- array(
224
- 'after' => array(
225
- 'year' => $stadate[0],
226
- 'month' => $stadate[1],
227
- 'day' => $stadate[2] - 1,
228
- ),
229
- 'before' => array(
230
- 'year' => $enddate[0],
231
- 'month' => $enddate[1],
232
- 'day' => $enddate[2],
233
- ),
234
- 'inclusive' => true,
235
- ),
236
- );
237
- $query->set('date_query', $date_query);
238
- // $query->set('year', '');
239
- $out = false;
240
- }
241
-
242
- if ($out) {
243
- preg_match_all('!\d+!', $var, $matches);
244
- $var = $matches[0];
245
-
246
- $query->set('year', $var[0]);
247
- $query->set('monthnum', $var[1]);
248
- $query->set('day', $var[2]);
249
- $query->is_404 = false;
250
- $query->query_vars['error'] = '';
251
- }//else
252
- // $query->is_404 = true;
253
-
254
- return $query;
 
 
 
255
  }
256
 
257
  /**
@@ -263,90 +272,118 @@ function wpp_pre_get_posts($query)
263
  *
264
  * @return string New permalink
265
  */
266
- function wpp_permalink($perma, $post, $leavename = false)
267
- {
268
- if (empty($post->ID)) {
269
- return false;
270
- }
271
- if ($post->post_type == 'page' || $post->post_status == 'static') {
272
- return get_page_link($post->ID);
273
- } elseif ($post->post_type == 'attachment') {
274
- return get_attachment_link($post->ID);
275
- } elseif (in_array($post->post_type, get_post_types(array('_builtin' => false)))) {
276
- return get_post_permalink($post->ID);
277
- }
278
-
279
- $permalink = get_option('permalink_structure');
280
- preg_match_all('/%([^\/]*)%/', $permalink, $rewriteCode);
281
- $rewriteCode = $rewriteCode[0];
282
- if ('' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) {
283
- if ($leavename) {
284
- $rewriteCode = array_diff($rewriteCode, array('%postname%', '%pagename%'));
285
- }
286
-
287
- $date = explode(' ', parsidate('Y m d H i s', $post->post_date, 'eng'));
288
- $out = array();
289
-
290
- foreach ($rewriteCode as $rewrite) {
291
- switch ($rewrite) {
292
- case '%year%':
293
- $out[] = $date[0];
294
- break;
295
- case '%monthnum%':
296
- $out[] = $date[1];
297
- break;
298
- case '%day%':
299
- $out[] = $date[2];
300
- break;
301
- case '%hour%':
302
- $out[] = $date[3];
303
- break;
304
- case '%minute%':
305
- $out[] = $date[4];
306
- break;
307
- case '%second%':
308
- $out[] = $date[5];
309
- break;
310
- case '%post_id%':
311
- $out[] = $post->ID;
312
- break;
313
- case '%postname%':
314
- $out[] = $post->post_name;
315
- break;
316
- case '%category%':
317
- $category = '';
318
- $cats = get_the_category($post->ID);
319
- if ($cats) {
320
- //usort($cats, '_usort_terms_by_ID');
321
- $cats = wp_list_sort($cats, array('term_id' => 'ASC',));
322
- $category = $cats[0]->slug;
323
- if ($cats[0]->parent) {
324
- $category = get_category_parents($cats[0]->parent, false, '/', true);
325
- }
326
-
327
- /*if ($cats[0]->parent != 0) {
328
- $category .= $cats[0]->slug;
329
- }*/
330
- }
331
- if (empty($category)) {
332
- $default_category = get_term(get_option('default_category'), 'category');
333
- $category = is_wp_error($default_category) ? '' : $default_category->slug;
334
- }
335
- $out[] = $category;
336
- break;
337
- case '%author%':
338
- $authordata = get_userdata($post->post_author);
339
- $out[] = $authordata->user_nicename;
340
- break;
341
- default:
342
- unset($rewriteCode[array_search($rewrite, $rewriteCode)]);
343
- break;
344
- }
345
- }
346
- $permalink = home_url(str_replace($rewriteCode, $out, $permalink));
347
-
348
- return user_trailingslashit($permalink, 'single');
349
- } else {
350
- return home_url("?p=$post->ID");
351
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352
  }
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Fixes and converts permalinks date to Jalali
7
  *
11
  */
12
  global $wpp_settings;
13
 
14
+ if ( wpp_is_active( 'conv_permalinks' ) ) {
15
+ add_filter( 'posts_where', 'wpp_posts_where', 10, 2 );
16
+ add_action( 'pre_get_posts', 'wpp_pre_get_posts' );
17
+ add_filter( 'post_link', 'wpp_permalink', 10, 3 );
18
  }
19
 
20
  /**
25
  *
26
  * @return string
27
  */
28
+ function wpp_posts_where( $where, $wp_query = '' ) {
29
+ global $wpdb;
30
+
31
+ if ( empty( $wp_query ) ) {
32
+ global $wp_query;
33
+ }
34
+
35
+ if ( ! $wp_query->is_main_query() || empty( $wp_query->query_vars ) ) {
36
+ return $where;
37
+ }
38
+
39
+ $pd = bn_parsidate::getInstance();
40
+
41
+ $m = ( isset( $wp_query->query_vars['m'] ) ) ? $wp_query->query_vars['m'] : '';
42
+ $hour = ( isset( $wp_query->query_vars['hour'] ) ) ? $wp_query->query_vars['hour'] : '';
43
+ $minute = ( isset( $wp_query->query_vars['minute'] ) ) ? $wp_query->query_vars['minute'] : '';
44
+ $second = ( isset( $wp_query->query_vars['second'] ) ) ? $wp_query->query_vars['second'] : '';
45
+ $year = ( isset( $wp_query->query_vars['year'] ) ) ? $wp_query->query_vars['year'] : '';
46
+ $month = ( isset( $wp_query->query_vars['monthnum'] ) ) ? $wp_query->query_vars['monthnum'] : '';
47
+ $day = ( isset( $wp_query->query_vars['day'] ) ) ? $wp_query->query_vars['day'] : '';
48
+
49
+ if ( ! empty( $m ) ) {
50
+ $len = strlen( $m );
51
+ $year = substr( $m, 0, 4 );
52
+
53
+ if ( $len > 5 ) {
54
+ $month = substr( $m, 4, 2 );
55
+ }
56
+
57
+ if ( $len > 7 ) {
58
+ $day = substr( $m, 6, 2 );
59
+ }
60
+
61
+ if ( $len > 9 ) {
62
+ $hour = substr( $m, 8, 2 );
63
+ }
64
+ if ( $len > 11 ) {
65
+ $minute = substr( $m, 10, 2 );
66
+ }
67
+
68
+ if ( $len > 13 ) {
69
+ $second = substr( $m, 12, 2 );
70
+ }
71
+ }
72
+
73
+ if ( empty( $year ) || $year > 1700 ) {
74
+ return $where;
75
+ }
76
+
77
+ $stamon = 1;
78
+ $staday = 1;
79
+ $stahou = '00';
80
+ $stamin = '00';
81
+ $stasec = '00';
82
+ $endmon = 1;
83
+ $endday = 1;
84
+ $endhou = '00';
85
+ $endmin = '00';
86
+ $endsec = '00';
87
+ $stayear = $year;
88
+ $endyear = $year + 1;
89
+
90
+ if ( $month != '' ) {
91
+ $stamon = $month;
92
+ $endmon = ( $month == 12 ? 1 : $month + 1 );
93
+ $endyear = ( $endmon == 1 ? $stayear + 1 : $stayear );
94
+ }
95
+
96
+ if ( $day != '' ) {
97
+ $staday = $day;
98
+ $endday = ( $day == $pd->j_days_in_month[ (int) $month - 1 ] ? 1 : $day + 1 );
99
+ $endmon = ( $endday == 1 ? $stamon + 1 : $stamon );
100
+ }
101
+
102
+ if ( $hour != '' ) {
103
+ $stahou = $hour;
104
+ $endhou = ( $hour == 24 ? '00' : $hour + 1 );
105
+ $endday = ( $endhou == '00' ? $staday + 1 : $staday );
106
+ }
107
+
108
+ if ( $minute != '' ) {
109
+ $stamin = $minute;
110
+ $endmin = ( $minute == 59 ? '00' : $minute + 1 );
111
+ $endhou = ( $endmin == '00' ? $stahou + 1 : $stahou );
112
+ }
113
+
114
+ if ( $second != '' ) {
115
+ $stasec = $second;
116
+ $endsec = ( $second == 59 ? '00' : $second + 1 );
117
+ $endmin = ( $endsec == '00' ? $stamin + 1 : $stamin );
118
+ }
119
+
120
+ $stadate = "$stayear-$stamon-$staday";
121
+ $enddate = "$endyear-$endmon-$endday";
122
+ $stadate = gregdate( 'Y-m-d', $stadate );
123
+ $enddate = gregdate( 'Y-m-d', $enddate );
124
+ $stadate .= " $stahou:$stamin:$stasec";
125
+ $enddate .= " $endhou:$endmin:$endsec";
126
+
127
+ $patterns = array(
128
+ '/YEAR\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
129
+ '/DAYOFMONTH\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
130
+ '/MONTH\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
131
+ '/HOUR\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
132
+ '/MINUTE\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
133
+ '/SECOND\((.*?)post_date\s*\)\s*=\s*[0-9\']*/'
134
+ );
135
+
136
+ foreach ( $patterns as $pattern ) {
137
+ $where = preg_replace( $pattern, '1 = 1', $where );
138
+ }
139
+
140
+ $prefixp = "{$wpdb->posts}.";
141
+ $prefixp = ( strpos( $where, $prefixp ) == false ) ? '' : $prefixp;
142
+ $where .= " AND {$prefixp}post_date >= '$stadate' AND {$prefixp}post_date < '$enddate' ";
143
+
144
+ return $where;
145
  }
146
 
147
  /**
149
  *
150
  * @param WP_Query $query
151
  *
152
+ * @return WP_Query
153
  */
154
+ function wpp_pre_get_posts( $query ) {
155
+ global $wpdb;
156
+
157
+ $permalink = $query->query;
158
+ $year = '';
159
+ $monthnum = '';
160
+ $day = '';//start
161
+
162
+ if ( isset( $permalink['year'] ) ) {
163
+ $year = $permalink['year'];
164
+ }
165
+
166
+ if ( isset( $permalink['monthnum'] ) ) {
167
+ $monthnum = $permalink['monthnum'];
168
+ }
169
+
170
+ if ( isset( $permalink['day'] ) ) {
171
+ $day = $permalink['day'];
172
+ }
173
+
174
+ if ( $year > 1700 ) {
175
+ return $query;
176
+ }
177
+
178
+ $out = false;
179
+ $pd = bn_parsidate::getInstance();
180
+
181
+ if ( isset( $permalink['name'] ) ) {
182
+ $var = $wpdb->get_var( "SELECT post_date FROM {$wpdb->prefix}posts WHERE post_name='{$permalink['name']}' AND post_type!='attachment' ORDER BY id" );
183
+ $per = parsidate( 'Y-m-d', $var, 'eng' );
184
+ $per = explode( '-', $per );
185
+ $out = true;
186
+
187
+ if ( ! empty( $year ) && $year != $per[0] ) {
188
+ $out = false;
189
+ }
190
+
191
+ if ( $out && ! empty( $monthnum ) && $monthnum != $per[1] ) {
192
+ $out = false;
193
+ }
194
+
195
+ if ( $out && ! empty( $day ) && $day != $per[2] ) {
196
+ $out = false;
197
+ }
198
+ } elseif ( isset( $permalink['post_id'] ) ) {
199
+ $out = true;
200
+ $var = $wpdb->get_var( "SELECT post_date FROM {$wpdb->prefix}posts WHERE ID={$permalink['post_id']}" );
201
+ } elseif ( ! empty( $year ) && ! empty( $monthnum ) && ! empty( $day ) ) {
202
+ $out = true;
203
+ $var = gregdate( 'Y-m-d', "$year-$monthnum-$day" );
204
+ } elseif ( ! empty( $year ) && ! empty( $monthnum ) ) {
205
+ $stadate = $pd->persian_to_gregorian( $year, $monthnum, 1 );
206
+ $enddate = $pd->persian_to_gregorian( $year, $monthnum, $pd->j_days_in_month[ ( $monthnum - 1 ) ] );
207
+ $date_query = array(
208
+ array(
209
+ 'after' => array(
210
+ 'year' => $stadate[0],
211
+ 'month' => $stadate[1],
212
+ 'day' => $stadate[2] - 1,
213
+ ),
214
+ 'before' => array(
215
+ 'year' => $enddate[0],
216
+ 'month' => $enddate[1],
217
+ 'day' => $enddate[2] + 1,
218
+ ),
219
+ 'inclusive' => true,
220
+ ),
221
+ );
222
+
223
+ $query->set( 'date_query', $date_query );
224
+
225
+ $out = false;
226
+ } elseif ( ! empty( $year ) ) {
227
+ $stadate = $pd->persian_to_gregorian( $year, 1, 1 );
228
+ $enddate = $pd->persian_to_gregorian( ( $year + 1 ), 1, 1 );
229
+ $date_query = array(
230
+ array(
231
+ 'after' => array(
232
+ 'year' => $stadate[0],
233
+ 'month' => $stadate[1],
234
+ 'day' => $stadate[2] - 1,
235
+ ),
236
+ 'before' => array(
237
+ 'year' => $enddate[0],
238
+ 'month' => $enddate[1],
239
+ 'day' => $enddate[2],
240
+ ),
241
+ 'inclusive' => true,
242
+ ),
243
+ );
244
+
245
+ $query->set( 'date_query', $date_query );
246
+
247
+ $out = false;
248
+ }
249
+
250
+ if ( $out ) {
251
+ preg_match_all( '!\d+!', $var, $matches );
252
+
253
+ $var = $matches[0];
254
+
255
+ $query->set( 'year', $var[0] );
256
+ $query->set( 'monthnum', $var[1] );
257
+ $query->set( 'day', $var[2] );
258
+
259
+ $query->is_404 = false;
260
+ $query->query_vars['error'] = '';
261
+ }
262
+
263
+ return $query;
264
  }
265
 
266
  /**
272
  *
273
  * @return string New permalink
274
  */
275
+ function wpp_permalink( $perma, $post, $leavename = false ) {
276
+ if ( empty( $post->ID ) ) {
277
+ return false;
278
+ }
279
+
280
+ if ( $post->post_type == 'page' || $post->post_status == 'static' ) {
281
+ return get_page_link( $post->ID );
282
+ } elseif ( $post->post_type == 'attachment' ) {
283
+ return get_attachment_link( $post->ID );
284
+ } elseif ( in_array( $post->post_type, get_post_types( array( '_builtin' => false ) ) ) ) {
285
+ return get_post_permalink( $post->ID );
286
+ }
287
+
288
+ $permalink = get_option( 'permalink_structure' );
289
+
290
+ preg_match_all( '%\%([^\%]*)\%%', $permalink, $rewriteCode );
291
+
292
+ $rewriteCode = $rewriteCode[0];
293
+
294
+ if ( '' != $permalink && ! in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {
295
+ if ( $leavename ) {
296
+ $rewriteCode = array_diff( $rewriteCode, array( '%postname%', '%pagename%' ) );
297
+ }
298
+
299
+ $date = explode( ' ', parsidate( 'Y m d H i s', $post->post_date, 'eng' ) );
300
+ $out = array();
301
+
302
+ foreach ( $rewriteCode as $rewrite ) {
303
+ switch ( $rewrite ) {
304
+ case '%year%':
305
+ $out[] = $date[0];
306
+ break;
307
+ case '%monthnum%':
308
+ $out[] = $date[1];
309
+ break;
310
+ case '%day%':
311
+ $out[] = $date[2];
312
+ break;
313
+ case '%hour%':
314
+ $out[] = $date[3];
315
+ break;
316
+ case '%minute%':
317
+ $out[] = $date[4];
318
+ break;
319
+ case '%second%':
320
+ $out[] = $date[5];
321
+ break;
322
+ case '%post_id%':
323
+ $out[] = $post->ID;
324
+ break;
325
+ case '%postname%':
326
+ $out[] = $post->post_name;
327
+ break;
328
+ case '%category%':
329
+ $category = '';
330
+ /**
331
+ * This code from wp-includes/link-template.php:171
332
+ * */
333
+ $cats = get_the_category( $post->ID );
334
+ if ( $cats ) {
335
+ $cats = wp_list_sort(
336
+ $cats,
337
+ array(
338
+ 'term_id' => 'ASC',
339
+ )
340
+ );
341
+
342
+ /**
343
+ * Filters the category that gets used in the %category% permalink token.
344
+ *
345
+ * @param WP_Term $cat The category to use in the permalink.
346
+ * @param array $cats Array of all categories (WP_Term objects) associated with the post.
347
+ * @param WP_Post $post The post in question.
348
+ *
349
+ * @since 3.5.0
350
+ *
351
+ */
352
+ $category_object = apply_filters( 'post_link_category', $cats[0], $cats, $post );
353
+ $category_object = get_term( $category_object, 'category' );
354
+ $category = $category_object->slug;
355
+
356
+ if ( $category_object->parent ) {
357
+ $category = get_category_parents( $category_object->parent, false, '/', true ) . $category;
358
+ }
359
+ }
360
+
361
+ // Show default category in permalinks,
362
+ // without having to assign it explicitly.
363
+ if ( empty( $category ) ) {
364
+ $default_category = get_term( get_option( 'default_category' ), 'category' );
365
+
366
+ if ( $default_category && ! is_wp_error( $default_category ) ) {
367
+ $category = $default_category->slug;
368
+ }
369
+ }
370
+
371
+ $out[] = $category;
372
+ break;
373
+ case '%author%':
374
+ $authordata = get_userdata( $post->post_author );
375
+ $out[] = $authordata->user_nicename;
376
+ break;
377
+ default:
378
+ unset( $rewriteCode[ array_search( $rewrite, $rewriteCode ) ] );
379
+ break;
380
+ }
381
+ }
382
+
383
+ $permalink = home_url( str_replace( $rewriteCode, $out, $permalink ) );
384
+
385
+ return user_trailingslashit( $permalink, 'single' );
386
+ }
387
+
388
+ return home_url( "?p=$post->ID" );
389
  }
includes/general.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * WP-Parsidate general functions
4
  *
@@ -8,49 +11,103 @@
8
  * @package WP-Parsidate
9
  * @subpackage Core/General
10
  */
11
- global $wpp_settings;
12
-
13
- add_filter('login_headerurl', 'wpp_login_headerurl', 10, 2);
14
- add_filter('locale', 'wp_parsi_set_locale', 0);
15
- add_action('admin_notices', 'wpp_activation_notice');
16
- add_action('admin_init', 'wpp_dismiss_notice_action');
17
 
18
  /**
19
  * Change Locale WordPress Admin and Front-end user
 
20
  * @param String $locale
21
  *
22
- * @return String
23
- * @author
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  *
 
 
25
  */
26
- function wp_parsi_set_locale($locale)
27
- {
28
- global $locale;
29
- $settings = get_option('wpp_settings');
30
- $user_locale = $admin_locale = $locale;
31
-
32
- if ($settings['admin_lang'] == 'enable') {
33
- $admin_locale = "fa_IR";
34
- } elseif ($settings['admin_lang'] == 'disable') {
35
- $admin_locale = $locale;
36
- }
37
- if ($settings['user_lang'] == 'enable') {
38
- $user_locale = "fa_IR";
39
- } elseif ($settings['user_lang'] == 'disable') {
40
- $user_locale = $locale;
41
- }
42
-
43
- $locale_s = is_admin() ? $admin_locale : $user_locale;
44
-
45
- if (!empty($locale_s)) {
46
- $locale = $locale_s;
47
- }
48
-
49
- setlocale(LC_ALL, $locale);
50
-
51
- return $locale;
52
  }
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
  /**
56
  * Detects current page is feed or not
@@ -58,17 +115,16 @@ function wp_parsi_set_locale($locale)
58
  * @return bool True when page is feed, false when page isn't feed
59
  * @since 1.0
60
  */
61
- function wpp_is_feed()
62
- {
63
- if (is_feed()) {
64
- return true;
65
- }
66
 
67
- $path = $_SERVER['REQUEST_URI'];
68
- $exts = array('xml', 'gz', 'xsl');
69
- $ext = pathinfo($path, PATHINFO_EXTENSION);
70
 
71
- return in_array($ext, $exts);
72
  }
73
 
74
  /**
@@ -76,15 +132,14 @@ function wpp_is_feed()
76
  *
77
  * @param string $number Numbers
78
  *
79
- * @return string Formatted numbers
80
  */
81
- function per_number($number)
82
- {
83
- return str_replace(
84
- range(0, 9),
85
- array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'),
86
- $number
87
- );
88
  }
89
 
90
  /**
@@ -92,15 +147,14 @@ function per_number($number)
92
  *
93
  * @param string $number Numbers
94
  *
95
- * @return string Formatted numbers
96
  */
97
- function eng_number($number)
98
- {
99
- return str_replace(
100
- array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'),
101
- range(0, 9),
102
- $number
103
- );
104
  }
105
 
106
  /**
@@ -108,13 +162,10 @@ function eng_number($number)
108
  *
109
  * @param string $content Post content
110
  *
111
- * @return string Formatted content
112
  */
113
- function persian_number($content)
114
- {
115
- return (
116
- isset($content[1]) ? per_number($content[1]) : $content[0]
117
- );
118
  }
119
 
120
  /**
@@ -122,11 +173,10 @@ function persian_number($content)
122
  *
123
  * @param string $content
124
  *
125
- * @return mixed
126
  */
127
- function fixnumber($content)
128
- {
129
- return preg_replace_callback('/(?:&#\d{2,4};)|(?:[0]?[a-z][\x20-\x3B=\x3F-\x7F]*)|(\d+[\.\d]*)|<\s*[^>]+>/i', 'persian_number', $content);
130
  }
131
 
132
  /**
@@ -134,53 +184,45 @@ function fixnumber($content)
134
  *
135
  * @param string $content
136
  *
137
- * @return mixed
138
  */
139
- function fixarabic($content)
140
- {
141
- return str_replace(array('ي', 'ك', '٤', '٥', '٦', 'ة'), array('ی', 'ک', '۴', '۵', '۶', 'ه'), $content);
142
  }
143
 
144
  /**
145
- * Change login header url in wp-login.php
 
146
  *
147
- * @return string
148
- */
149
- function wpp_login_headerurl()
150
- {
151
- return 'http://wp-parsi.com';
152
- }
153
-
154
- /**
155
- * Notice for the activation.
156
- * Added dismiss feature.
157
- *
158
- * @return void
159
- * @author Ehsaan
160
- */
161
- function wpp_activation_notice()
162
- {
163
- $dismissed = get_option('wpp_dismissed', false);
164
-
165
- if (!$dismissed) {
166
- global $wpp_settings;
167
-
168
- if ($wpp_settings['persian_date'] != 'enable') {
169
- $output = sprintf(__('<div class="updated wpp-message"><p>ParsiDate activated, you may need to configure it to work properly. <a href="%s">Go to configuartion page</a> &ndash; <a href="%s">Dismiss</a></p></div>', 'wp-parsidate'), admin_url('admin.php?page=wp-parsi-settings'), add_query_arg('wpp-action', 'dismiss-notice'));
170
- echo $output;
171
- }
172
- }
173
- }
174
-
175
- /**
176
- * Dismiss the notice action
177
  *
178
- * @return void
179
- * @author Ehsaan
180
  */
181
- function wpp_dismiss_notice_action()
182
- {
183
- if (isset($_GET['wpp-action']) && $_GET['wpp-action'] == 'dismiss-notice') {
184
- update_option('wpp_dismissed', true);
185
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  }
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * WP-Parsidate general functions
7
  *
11
  * @package WP-Parsidate
12
  * @subpackage Core/General
13
  */
 
 
 
 
 
 
14
 
15
  /**
16
  * Change Locale WordPress Admin and Front-end user
17
+ *
18
  * @param String $locale
19
  *
20
+ * @return String
21
+ */
22
+ function wp_parsi_set_locale( $locale ) {
23
+ global $locale;
24
+
25
+ if ( wpp_is_active( 'admin_lang' ) ) {
26
+ $admin_locale = "fa_IR";
27
+ } else {
28
+ $admin_locale = $locale;
29
+ }
30
+
31
+ if ( wpp_is_active( 'user_lang' ) ) {
32
+ $user_locale = "fa_IR";
33
+ } else {
34
+ $user_locale = $locale;
35
+ }
36
+
37
+ $locale_s = is_admin() ? $admin_locale : $user_locale;
38
+
39
+ if ( ! empty( $locale_s ) ) {
40
+ $locale = $locale_s;
41
+ }
42
+
43
+ setlocale( LC_ALL, $locale );
44
+
45
+ return $locale;
46
+ }
47
+
48
+ add_filter( 'locale', 'wp_parsi_set_locale', 0 );
49
+
50
+ /**
51
+ * Change login header url in wp-login.php
52
+ *
53
+ * @return string
54
+ */
55
+ function wpp_login_headerurl() {
56
+ return 'https://wp-parsi.com';
57
+ }
58
+
59
+ add_filter( 'login_headerurl', 'wpp_login_headerurl', 10, 2 );
60
+
61
+ /**
62
+ * Notice for the activation.
63
+ * Added dismiss feature.
64
+ *
65
+ * @return void
66
+ * @author Ehsaan
67
+ */
68
+ function wpp_activation_notice() {
69
+ $dismissed = get_option( 'wpp_dismissed', false );
70
+
71
+ if ( ! $dismissed ) {
72
+ if ( ! wpp_is_active( 'persian_date' ) ) {
73
+ echo sprintf(
74
+ __( '<div class="updated wpp-message"><p>ParsiDate activated, you may need to configure it to work properly. <a href="%s">Go to configuration page</a> &ndash; <a href="%s">Dismiss</a></p></div>', 'wp-parsidate' ),
75
+ admin_url( 'admin.php?page=wp-parsi-settings' ),
76
+ add_query_arg( 'wpp-action', 'dismiss-notice' )
77
+ );
78
+ }
79
+ }
80
+ }
81
+
82
+ add_action( 'admin_notices', 'wpp_activation_notice' );
83
+
84
+ /**
85
+ * Dismiss the notice action
86
  *
87
+ * @return void
88
+ * @author Ehsaan
89
  */
90
+ function wpp_dismiss_notice_action() {
91
+ if ( isset( $_GET['wpp-action'] ) && $_GET['wpp-action'] == 'dismiss-notice' ) {
92
+ update_option( 'wpp_dismissed', true );
93
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  }
95
 
96
+ add_action( 'admin_init', 'wpp_dismiss_notice_action' );
97
+
98
+ /**
99
+ * disable wp widget block that introduced in WordPress 5.8
100
+ *
101
+ * @since 4.0.0
102
+ */
103
+ function wpp_disable_gutenberg_blocks_widget() {
104
+ if ( wpp_is_active( 'disable_widget_block' ) ) {
105
+ add_filter( 'gutenberg_use_widgets_block_editor', '__return_false' );
106
+ add_filter( 'use_widgets_block_editor', '__return_false' );
107
+ }
108
+ }
109
+
110
+ add_action( 'init', 'wpp_disable_gutenberg_blocks_widget' );
111
 
112
  /**
113
  * Detects current page is feed or not
115
  * @return bool True when page is feed, false when page isn't feed
116
  * @since 1.0
117
  */
118
+ function wpp_is_feed() {
119
+ if ( is_feed() ) {
120
+ return true;
121
+ }
 
122
 
123
+ $path = $_SERVER['REQUEST_URI'];
124
+ $exts = array( 'xml', 'gz', 'xsl' );
125
+ $ext = pathinfo( $path, PATHINFO_EXTENSION );
126
 
127
+ return in_array( $ext, $exts );
128
  }
129
 
130
  /**
132
  *
133
  * @param string $number Numbers
134
  *
135
+ * @return string Formatted numbers
136
  */
137
+ function per_number( $number ) {
138
+ return str_replace(
139
+ range( 0, 9 ),
140
+ array( '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹' ),
141
+ $number
142
+ );
 
143
  }
144
 
145
  /**
147
  *
148
  * @param string $number Numbers
149
  *
150
+ * @return string Formatted numbers
151
  */
152
+ function eng_number( $number ) {
153
+ return str_replace(
154
+ array( '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹' ),
155
+ range( 0, 9 ),
156
+ $number
157
+ );
 
158
  }
159
 
160
  /**
162
  *
163
  * @param string $content Post content
164
  *
165
+ * @return string Formatted content
166
  */
167
+ function persian_number( $content ) {
168
+ return isset( $content[1] ) ? per_number( $content[1] ) : $content[0];
 
 
 
169
  }
170
 
171
  /**
173
  *
174
  * @param string $content
175
  *
176
+ * @return array|string|string[]|null
177
  */
178
+ function fix_number( $content ) {
179
+ return preg_replace_callback( '/(?:&#\d{2,4};)|(?:[0]?[a-z][\x20-\x3B=\x3F-\x7F]*)|(\d+[\d]*)|<\s*[^>]+>/i', 'persian_number', $content );
 
180
  }
181
 
182
  /**
184
  *
185
  * @param string $content
186
  *
187
+ * @return array|string|string[]
188
  */
189
+ function fix_arabic( $content ) {
190
+ return str_replace( array( 'ي', 'ك', '٤', '٥', '٦', 'ة' ), array( 'ی', 'ک', '۴', '۵', '۶', 'ه' ), $content );
 
191
  }
192
 
193
  /**
194
+ * parsidate_check_format()
195
+ * checks format for iso definitions
196
  *
197
+ * @param string $format
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  *
199
+ * @return boolean
 
200
  */
201
+ function parsidate_check_format( $format ) {
202
+ return in_array( $format, array(
203
+ 'Z', // Timezone offset in seconds // -43200 through 50400
204
+ 'T', // Timezone abbreviation // Examples: EST, MDT
205
+ 'O', // Difference to Greenwich time (GMT) in hours // Example: +0200
206
+ 'P', // Difference to Greenwich time (GMT) with colon between hours and minutes // Example: +02:00
207
+ 'U', // Seconds since the Unix Epoch (January 1, 1970 00:00:00 GMT)
208
+ 'u', // Microseconds // Example: 654321
209
+ 'e', // Timezone identifier // Examples: UTC, GMT, Atlantic/Azores
210
+ 'r', // RFC 2822 formatted date // Example: Thu, 21 Dec 2000 16:01:07 +0200
211
+ 'c', // ISO 8601 date // 2004-02-12T15:19:21+00:00 // 'Y-m-d\TH:i:s\Z'
212
+ 'G', // 24-hour format of an hour without leading zeros // 0 through 23
213
+ 'I', // Whether the date is in daylight saving time // 1 if Daylight Saving Time, 0 otherwise.
214
+
215
+ // Commented this lines, because user/system want to convert these formats.
216
+ /*'Y-m-d_H-i-s',
217
+ 'Y-m-d_G-i-s',
218
+ 'Y-m-d H:i:s',
219
+ 'Y-m-d G:i:s',
220
+ 'd-M-Y H:i',*/
221
+
222
+ DATE_W3C, // eq `c`
223
+ DATE_ISO8601, // eq `c`
224
+ DATE_RFC2822, // eq `r`
225
+ 'Y-m-d\TH:i:s+00:00', // eq `DATE_W3C` @SEE: http://jochenhebbrecht.be/site/node/761
226
+ 'Y-m-d\TH:i:sP',
227
+ ) );
228
  }
includes/install.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Plugin installer helper
4
  *
@@ -7,15 +10,14 @@
7
  * @subpackage Core/Install
8
  */
9
 
10
- register_activation_hook(WP_PARSI_ROOT, 'wpp_install');
11
-
12
  /**
13
  * Copys files from plugin languages folder to global languages folder
14
  *
15
  * @return void
16
  * @since 1.0
17
  */
18
- function wpp_install()
19
- {
20
- update_option('wpp_settings', array());
21
- }
 
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Plugin installer helper
7
  *
10
  * @subpackage Core/Install
11
  */
12
 
 
 
13
  /**
14
  * Copys files from plugin languages folder to global languages folder
15
  *
16
  * @return void
17
  * @since 1.0
18
  */
19
+ function wpp_install() {
20
+ update_option( 'wpp_settings', array() );
21
+ }
22
+
23
+ register_activation_hook( WP_PARSI_ROOT, 'wpp_install' );
includes/parsidate.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Parsi date main conversation class
4
  *
@@ -6,405 +9,410 @@
6
  * @package WP-Parsidate
7
  * @subpackage DateConversation
8
  */
9
-
10
  /*Special thanks to :
11
  Reza Gholampanahi for convert function*/
12
 
13
- class bn_parsidate
14
- {
15
- protected static $instance;
16
- public $persian_month_names = array(
17
- '',
18
- 'فروردین',
19
- 'اردیبهشت',
20
- 'خرداد',
21
- 'تیر',
22
- 'مرداد',
23
- 'شهریور',
24
- 'مهر',
25
- 'آبان',
26
- 'آذر',
27
- 'دی',
28
- 'بهمن',
29
- 'اسفند'
30
- );
31
- public $persian_short_month_names = array(
32
- '',
33
- 'فروردین',
34
- 'اردیبهشت',
35
- 'خرداد',
36
- 'تیر',
37
- 'مرداد',
38
- 'شهریور',
39
- 'مهر',
40
- 'آبان',
41
- 'آذر',
42
- 'دی',
43
- 'بهمن',
44
- 'اسفند'
45
- );
46
- public $sesson = array('بهار', 'تابستان', 'پاییز', 'زمستان');
47
-
48
- public $persian_day_names = array('یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه');
49
- public $persian_day_small = array('ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش');
50
-
51
- public $j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
52
- private $j_days_sum_month = array(0, 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336);
53
-
54
- private $g_days_sum_month = array(0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);
55
-
56
-
57
- /**
58
- * Constructor
59
- */
60
- function __construct()
61
- {
62
- }
63
-
64
- /**
65
- * bn_parsidate::IsPerLeapYear()
66
- * check year is leap
67
- *
68
- * @param mixed $year
69
- *
70
- * @return boolean
71
- */
72
- public function IsPerLeapYear($year)
73
- {
74
- $mod = $year % 33;
75
-
76
- if ($mod == 1 or $mod == 5 or $mod == 9 or $mod == 13 or $mod == 17 or $mod == 22 or $mod == 26 or $mod == 30) {
77
- return true;
78
- }
79
- return false;
80
- }
81
-
82
- /**
83
- * bn_parsidate::IsLeapYear()
84
- * check year is leap
85
- *
86
- * @param mixed $year
87
- *
88
- * @return boolean
89
- */
90
- private function IsLeapYear($year)
91
- {
92
- if ((($year % 4) == 0 && ($year % 100) != 0) || (($year % 400) == 0) && ($year % 100) == 0) {
93
- return true;
94
- } else {
95
- return false;
96
- }
97
- }
98
-
99
- /**
100
- * bn_parsidate::persian_date()
101
- * convert gregorian datetime to persian datetime
102
- *
103
- * @param mixed $format
104
- * @param string $date
105
- * @param string $lang
106
- *
107
- * @return string
108
- */
109
- public function persian_date($format, $date = 'now', $lang = 'per')
110
- {
111
-
112
- $j_days_in_month = array(31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 365);
113
- $timestamp = is_numeric($date) && (int)$date == $date ? $date : strtotime($date);
114
- $date = getdate($timestamp);
115
- list($date['year'], $date['mon'], $date['mday']) = self::gregorian_to_persian($date['year'], $date['mon'], $date['mday']);
116
- $date['mon'] = (int)$date['mon'];
117
- $date['mday'] = (int)$date['mday'];
118
- $out = '';
119
- $len = strlen($format);
120
- for ($i = 0; $i < $len; $i++) {
121
- Switch ($format[$i]) {
122
- //day
123
- case'd':
124
- $out .= ($date['mday'] < 10) ? '0' . $date['mday'] : $date['mday'];
125
- break;
126
- case'D':
127
- $out .= $this->persian_day_small[$date['wday']];
128
- break;
129
- case'l':
130
- $out .= $this->persian_day_names[$date['wday']];
131
- break;
132
- case'j':
133
- $out .= $date['mday'];
134
- break;
135
- case'N':
136
- $out .= $this->week_day($date['wday']) + 1;
137
- break;
138
- case'w':
139
- $out .= $this->week_day($date['wday']);
140
- break;
141
- case'z':
142
- if ($date['mon'] == 12 && self::IsPerLeapYear($date['year']))
143
- $out .= 30 + $date['mday'];
144
- else
145
- $out .= $this->j_days_in_month[$date['mon']] + $date['mday'];
146
- break;
147
- //week
148
- case'W':
149
- $yday = $this->j_days_sum_month[$date['mon'] - 1] + $date['mday'];
150
- $out .= intval($yday / 7);
151
- break;
152
- //month
153
- case'f':
154
- $mon = $date['mon'];
155
- switch ($mon) {
156
- case($mon < 4):
157
- $out .= $this->sesson[0];
158
- break;
159
- case($mon < 7):
160
- $out .= $this->sesson[1];
161
- break;
162
- case($mon < 10):
163
- $out .= $this->sesson[2];
164
- break;
165
- case($mon > 9):
166
- $out .= $this->sesson[3];
167
- break;
168
- }
169
- break;
170
- case'F':
171
- $out .= $this->persian_month_names[(int)$date['mon']];
172
- break;
173
- case'm':
174
- $out .= ($date['mon'] < 10) ? '0' . $date['mon'] : $date['mon'];
175
- break;
176
- case'M':
177
- $out .= $this->persian_short_month_names[(int)$date['mon']];
178
- break;
179
- case'n':
180
- $out .= $date['mon'];
181
- break;
182
- case'S':
183
- $out .= 'ام';
184
- break;
185
- case't':
186
- if ($date['mon'] == 12 && self::IsPerLeapYear($date['year']))
187
- $out .= 30;
188
- else
189
- $out .= $this->j_days_in_month[(int)$date['mon'] - 1];
190
- break;
191
- //year
192
- case'L':
193
- $out .= (($date['year'] % 4) == 0) ? 1 : 0;
194
- break;
195
- case'o':
196
- case'Y':
197
- $out .= $date['year'];
198
- break;
199
- case'y':
200
- $out .= substr($date['year'], 2, 2);
201
- break;
202
- //time
203
- case'a':
204
- $out .= ($date['hours'] < 12) ? 'ق.ظ' : 'ب.ظ';
205
- break;
206
- case'A':
207
- $out .= ($date['hours'] < 12) ? 'قبل از ظهر' : 'بعد از ظهر';
208
- break;
209
- case'B':
210
- $out .= (int)(1 + ($date['mon'] / 3));
211
- break;
212
- case'g':
213
- $out .= ($date['hours'] > 12) ? $date['hours'] - 12 : $date['hours'];
214
- break;
215
- case'G':
216
- $out .= $date['hours'];
217
- break;
218
- case'h':
219
- $hour = ($date['hours'] > 12) ? $date['hours'] - 12 : $date['hours'];
220
- $out .= ($hour < 10) ? '0' . $hour : $hour;
221
- break;
222
- case'H':
223
- $out .= ($date['hours'] < 10) ? '0' . $date['hours'] : $date['hours'];
224
- break;
225
- case'i':
226
- $out .= ($date['minutes'] < 10) ? '0' . $date['minutes'] : $date['minutes'];
227
- break;
228
- case's':
229
- $out .= ($date['seconds'] < 10) ? '0' . $date['seconds'] : $date['seconds'];
230
- break;
231
- //full date time
232
- case'c':
233
- $out = $date['year'] . '/' . $date['mon'] . '/' . $date['mday'] . ' ' . $date['hours'] . ':' . (($date['minutes'] < 10) ? '0' . $date['minutes'] : $date['minutes']) . ':' . (($date['seconds'] < 10) ? '0' . $date['seconds'] : $date['seconds']);//2004-02-12T15:19:21+00:00
234
- break;
235
- case'r':
236
- $out = $this->persian_day_names[$date['wday']] . ',' . $date['mday'] . ' ' . $this->persian_month_names[(int)$date['mon']] . ' ' . $date['year'] . ' ' . $date['hours'] . ':' . (($date['minutes'] < 10) ? '0' . $date['minutes'] : $date['minutes']) . ':' . (($date['seconds'] < 10) ? '0' . $date['seconds'] : $date['seconds']);//Thu, 21 Dec 2000 16:01:07
237
- break;
238
- case'U':
239
- $out = $timestamp;
240
- break;
241
- //others
242
- case'e':
243
- case'I':
244
- case'O':
245
- case'P':
246
- case'T':
247
- case'Z':
248
- case'u':
249
- break;
250
- default:
251
- $out .= $format[$i];
252
- }
253
- }
254
-
255
- if (strtolower($format) != 'u' && $lang == 'per') {
256
- return self::trim_number($out);
257
- } else {
258
- return $out;
259
- }
260
- }
261
-
262
- /**
263
- * bn_parsidate::gregorian_to_persian()
264
- * convert gregorian date to persian date
265
- *
266
- * @param mixed $gy
267
- * @param mixed $gm
268
- * @param mixed $gd
269
- *
270
- * @return array
271
- */
272
- function gregorian_to_persian($gy, $gm, $gd)
273
- {
274
- $dayOfYear = $this->g_days_sum_month[(int)$gm] + $gd;
275
- if (self::IsLeapYear($gy) and $gm > 2) {
276
- $dayOfYear++;
277
- }
278
- $d_33 = (int)((($gy - 16) % 132) * 0.0305);
279
- $leap = $gy % 4;
280
- $a = (($d_33 == 1 or $d_33 == 2) and ($d_33 == $leap or $leap == 1)) ? 78 : (($d_33 == 3 and $leap == 0) ? 80 : 79);
281
- $b = ($d_33 == 3 or $d_33 < ($leap - 1) or $leap == 0) ? 286 : 287;
282
- if ((int)(($gy - 10) / 63) == 30) {
283
- $b--;
284
- $a++;
285
- }
286
- if ($dayOfYear > $a) {
287
- $jy = $gy - 621;
288
- $jd = $dayOfYear - $a;
289
- } else {
290
- $jy = $gy - 622;
291
- $jd = $dayOfYear + $b;
292
- }
293
- for ($i = 0; $i < 11 and $jd > $this->j_days_in_month[$i]; $i++) {
294
- $jd -= $this->j_days_in_month[$i];
295
- }
296
- $jm = ++$i;
297
-
298
- return array($jy, strlen($jm) == 1 ? '0' . $jm : $jm, strlen($jd) == 1 ? '0' . $jd : $jd);
299
- }
300
-
301
- /**
302
- * Get day of the week shamsi/jalali
303
- * @param int $wday
304
- *
305
- * @return int
306
- * @author Parsa Kafi
307
- *
308
- */
309
- private function week_day($wday)
310
- {
311
- return $wday == 6 ? 0 : ++$wday;
312
- }
313
-
314
- /**
315
- * bn_parsidate::trim_number()
316
- * convert english number to persian number
317
- *
318
- * @param mixed $num
319
- * @param string $sp
320
- *
321
- * @return string
322
- */
323
- public function trim_number($num, $sp = '٫')
324
- {
325
- $eng = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.');
326
- $per = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', $sp);
327
- $number = filter_var($num, FILTER_SANITIZE_NUMBER_INT);
328
-
329
- return empty($number) ? str_replace($per, $eng, $num) : str_replace($eng, $per, $num);
330
- }
331
-
332
- /**
333
- * bn_parsidate::getInstance()
334
- * create instance of bn_parsidate class
335
- *
336
- * @return bn_parsidate
337
- */
338
- public static function getInstance()
339
- {
340
- if (!isset(self::$instance)) {
341
- self::$instance = new self();
342
- }
343
-
344
- return self::$instance;
345
- }
346
-
347
- /**
348
- * bn_parsidate::gregorian_date()
349
- * convert persian datetime to gregorian datetime
350
- *
351
- * @param mixed $format
352
- * @param mixed $persiandate
353
- *
354
- * @return mixed
355
- */
356
- public function gregorian_date($format, $persiandate)
357
- {
358
- preg_match_all('!\d+!', $persiandate, $matches);
359
- $matches = $matches[0];
360
- list($year, $mon, $day) = self::persian_to_gregorian($matches[0], $matches[1], $matches[2]);
361
-
362
- return date($format, mktime((isset($matches[3]) ? $matches[3] : 0), (isset($matches[4]) ? $matches[4] : 0), (isset($matches[5]) ? $matches[5] : 0), $mon, $day, $year));
363
- }
364
-
365
- /**
366
- * bn_parsidate::persian_to_gregorian()
367
- * convert persian date to gregorian date
368
- *
369
- * @param mixed $jy
370
- * @param mixed $jm
371
- * @param mixed $jd
372
- *
373
- * @return array
374
- */
375
- public function persian_to_gregorian($jy, $jm, $jd)
376
- {
377
- $doyj = ($jm - 2 > -1 ? $this->j_days_sum_month[(int)$jm] + $jd : $jd);
378
- $d4 = ($jy + 1) % 4;
379
- $d33 = (int)((($jy - 55) % 132) * .0305);
380
- $a = ($d33 != 3 and $d4 <= $d33) ? 287 : 286;
381
- $b = (($d33 == 1 or $d33 == 2) and ($d33 == $d4 or $d4 == 1)) ? 78 : (($d33 == 3 and $d4 == 0) ? 80 : 79);
382
- if ((int)(($jy - 19) / 63) == 20) {
383
- $a--;
384
- $b++;
385
- }
386
- if ($doyj <= $a) {
387
- $gy = $jy + 621;
388
- $gd = $doyj + $b;
389
- } else {
390
- $gy = $jy + 622;
391
- $gd = $doyj - $a;
392
- }
393
- foreach (array(0, 31, ($gy % 4 == 0) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) as $gm => $days) {
394
- if ($gd <= $days) {
395
- break;
396
- }
397
- $gd -= $days;
398
- }
399
- return array($gy, $gm, $gd);
400
- }
 
 
 
 
 
 
 
 
 
 
401
  }
402
 
403
- /*
404
- * parsidate function
405
- */
406
  /**
407
- * parsidate()
408
  * convert gregorian datetime to persian datetime
409
  *
410
  * @param mixed $input
@@ -413,12 +421,10 @@ class bn_parsidate
413
  *
414
  * @return string
415
  */
416
- function parsidate($input, $datetime = 'now', $lang = 'per')
417
- {
418
- $bndate = bn_parsidate::getInstance();
419
- $bndate = $bndate->persian_date($input, $datetime, $lang);
420
 
421
- return $bndate;
422
  }
423
 
424
  /**
@@ -428,12 +434,10 @@ function parsidate($input, $datetime = 'now', $lang = 'per')
428
  * @param mixed $input
429
  * @param mixed $datetime
430
  *
431
- * @return datetime
432
  */
433
- function gregdate($input, $datetime)
434
- {
435
- $bndate = bn_parsidate::getInstance();
436
- $bndate = $bndate->gregorian_date($input, $datetime);
437
 
438
- return $bndate;
439
  }
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Parsi date main conversation class
7
  *
9
  * @package WP-Parsidate
10
  * @subpackage DateConversation
11
  */
 
12
  /*Special thanks to :
13
  Reza Gholampanahi for convert function*/
14
 
15
+ class bn_parsidate {
16
+ protected static $instance;
17
+
18
+ public $persian_month_names = array(
19
+ '',
20
+ 'فروردین',
21
+ 'اردیبهشت',
22
+ 'خرداد',
23
+ 'تیر',
24
+ 'مرداد',
25
+ 'شهریور',
26
+ 'مهر',
27
+ 'آبان',
28
+ 'آذر',
29
+ 'دی',
30
+ 'بهمن',
31
+ 'اسفند'
32
+ );
33
+
34
+ public $persian_short_month_names = array(
35
+ '',
36
+ 'فروردین',
37
+ 'اردیبهشت',
38
+ 'خرداد',
39
+ 'تیر',
40
+ 'مرداد',
41
+ 'شهریور',
42
+ 'مهر',
43
+ 'آبان',
44
+ 'آذر',
45
+ 'دی',
46
+ 'بهمن',
47
+ 'اسفند'
48
+ );
49
+
50
+ public $sesson = array( 'بهار', 'تابستان', 'پاییز', 'زمستان' );
51
+
52
+ public $persian_day_names = array( 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه' );
53
+ public $persian_day_small = array( 'ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش' );
54
+
55
+ public $j_days_in_month = array( 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29 );
56
+ private $j_days_sum_month = array( 0, 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336 );
57
+
58
+ private $g_days_sum_month = array( 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 );
59
+
60
+ /**
61
+ * Constructor
62
+ */
63
+ function __construct() {
64
+ }
65
+
66
+ /**
67
+ * bn_parsidate::IsPerLeapYear()
68
+ * check year is leap
69
+ *
70
+ * @param mixed $year
71
+ *
72
+ * @return boolean
73
+ */
74
+ public function IsPerLeapYear( $year ) {
75
+ $mod = $year % 33;
76
+
77
+ if ( $mod == 1 or $mod == 5 or $mod == 9 or $mod == 13 or $mod == 17 or $mod == 22 or $mod == 26 or $mod == 30 ) {
78
+ return true;
79
+ }
80
+
81
+ return false;
82
+ }
83
+
84
+ /**
85
+ * bn_parsidate::IsLeapYear()
86
+ * check year is leap
87
+ *
88
+ * @param mixed $year
89
+ *
90
+ * @return boolean
91
+ */
92
+ private function IsLeapYear( $year ) {
93
+ if ( ( ( $year % 4 ) == 0 && ( $year % 100 ) != 0 ) || ( ( $year % 400 ) == 0 ) && ( $year % 100 ) == 0 ) {
94
+ return true;
95
+ }
96
+
97
+ return false;
98
+ }
99
+
100
+ /**
101
+ * bn_parsidate::persian_date()
102
+ * convert gregorian datetime to persian datetime
103
+ *
104
+ * @param mixed $format
105
+ * @param string $date
106
+ * @param string $lang
107
+ *
108
+ * @return string
109
+ */
110
+ public function persian_date( $format, $date = 'now', $lang = 'per' ) {
111
+ $j_days_in_month = array( 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 365 );
112
+ $timestamp = is_numeric( $date ) && (int) $date == $date ? $date : strtotime( $date );
113
+ $date = getdate( $timestamp );
114
+
115
+ list( $date['year'], $date['mon'], $date['mday'] ) = self::gregorian_to_persian( $date['year'], $date['mon'], $date['mday'] );
116
+
117
+ $date['mon'] = (int) $date['mon'];
118
+ $date['mday'] = (int) $date['mday'];
119
+ $out = '';
120
+ $len = strlen( $format );
121
+
122
+ for ( $i = 0; $i < $len; $i ++ ) {
123
+ switch ( $format[ $i ] ) {
124
+ //day
125
+ case'd':
126
+ $out .= ( $date['mday'] < 10 ) ? '0' . $date['mday'] : $date['mday'];
127
+ break;
128
+ case'D':
129
+ $out .= $this->persian_day_small[ $date['wday'] ];
130
+ break;
131
+ case'l':
132
+ $out .= $this->persian_day_names[ $date['wday'] ];
133
+ break;
134
+ case'j':
135
+ $out .= $date['mday'];
136
+ break;
137
+ case'N':
138
+ $out .= $this->week_day( $date['wday'] ) + 1;
139
+ break;
140
+ case'w':
141
+ $out .= $this->week_day( $date['wday'] );
142
+ break;
143
+ case'z':
144
+ if ( $date['mon'] == 12 && self::IsPerLeapYear( $date['year'] ) ) {
145
+ $out .= 30 + $date['mday'];
146
+ } else {
147
+ $out .= $this->j_days_in_month[ $date['mon'] ] + $date['mday'];
148
+ }
149
+ break;
150
+ //week
151
+ case'W':
152
+ $yday = $this->j_days_sum_month[ $date['mon'] - 1 ] + $date['mday'];
153
+ $out .= intval( $yday / 7 );
154
+ break;
155
+ //month
156
+ case'f':
157
+ $mon = $date['mon'];
158
+ switch ( $mon ) {
159
+ case( $mon < 4 ):
160
+ $out .= $this->sesson[0];
161
+ break;
162
+ case( $mon < 7 ):
163
+ $out .= $this->sesson[1];
164
+ break;
165
+ case( $mon < 10 ):
166
+ $out .= $this->sesson[2];
167
+ break;
168
+ case( $mon > 9 ):
169
+ $out .= $this->sesson[3];
170
+ break;
171
+ }
172
+ break;
173
+ case'F':
174
+ $out .= $this->persian_month_names[ $date['mon'] ];
175
+ break;
176
+ case'm':
177
+ $out .= ( $date['mon'] < 10 ) ? '0' . $date['mon'] : $date['mon'];
178
+ break;
179
+ case'M':
180
+ $out .= $this->persian_short_month_names[ $date['mon'] ];
181
+ break;
182
+ case'n':
183
+ $out .= $date['mon'];
184
+ break;
185
+ case'S':
186
+ $out .= 'ام';
187
+ break;
188
+ case't':
189
+ if ( $date['mon'] == 12 && self::IsPerLeapYear( $date['year'] ) ) {
190
+ $out .= 30;
191
+ } else {
192
+ $out .= $this->j_days_in_month[ $date['mon'] - 1 ];
193
+ }
194
+ break;
195
+ //year
196
+ case'L':
197
+ $out .= ( ( $date['year'] % 4 ) == 0 ) ? 1 : 0;
198
+ break;
199
+ case'o':
200
+ case'Y':
201
+ $out .= $date['year'];
202
+ break;
203
+ case'y':
204
+ $out .= substr( $date['year'], 2, 2 );
205
+ break;
206
+ //time
207
+ case'a':
208
+ $out .= ( $date['hours'] < 12 ) ? 'ق.ظ' : 'ب.ظ';
209
+ break;
210
+ case'A':
211
+ $out .= ( $date['hours'] < 12 ) ? 'قبل از ظهر' : 'بعد از ظهر';
212
+ break;
213
+ case'B':
214
+ $out .= (int) ( 1 + ( $date['mon'] / 3 ) );
215
+ break;
216
+ case'g':
217
+ $out .= ( $date['hours'] > 12 ) ? $date['hours'] - 12 : $date['hours'];
218
+ break;
219
+ case'G':
220
+ $out .= $date['hours'];
221
+ break;
222
+ case'h':
223
+ $hour = ( $date['hours'] > 12 ) ? $date['hours'] - 12 : $date['hours'];
224
+ $out .= ( $hour < 10 ) ? '0' . $hour : $hour;
225
+ break;
226
+ case'H':
227
+ $out .= ( $date['hours'] < 10 ) ? '0' . $date['hours'] : $date['hours'];
228
+ break;
229
+ case'i':
230
+ $out .= ( $date['minutes'] < 10 ) ? '0' . $date['minutes'] : $date['minutes'];
231
+ break;
232
+ case's':
233
+ $out .= ( $date['seconds'] < 10 ) ? '0' . $date['seconds'] : $date['seconds'];
234
+ break;
235
+ //full date time
236
+ case'c':
237
+ $out = $date['year'] . '/' . $date['mon'] . '/' . $date['mday'] . ' ' . $date['hours'] . ':' . ( ( $date['minutes'] < 10 ) ? '0' . $date['minutes'] : $date['minutes'] ) . ':' . ( ( $date['seconds'] < 10 ) ? '0' . $date['seconds'] : $date['seconds'] );//2004-02-12T15:19:21+00:00
238
+ break;
239
+ case'r':
240
+ $out = $this->persian_day_names[ $date['wday'] ] . ',' . $date['mday'] . ' ' . $this->persian_month_names[ $date['mon'] ] . ' ' . $date['year'] . ' ' . $date['hours'] . ':' . ( ( $date['minutes'] < 10 ) ? '0' . $date['minutes'] : $date['minutes'] ) . ':' . ( ( $date['seconds'] < 10 ) ? '0' . $date['seconds'] : $date['seconds'] );//Thu, 21 Dec 2000 16:01:07
241
+ break;
242
+ case'U':
243
+ $out = $timestamp;
244
+ break;
245
+ //others
246
+ case'e':
247
+ case'I':
248
+ case'O':
249
+ case'P':
250
+ case'T':
251
+ case'Z':
252
+ case'u':
253
+ break;
254
+ default:
255
+ $out .= $format[ $i ];
256
+ }
257
+ }
258
+
259
+ if ( in_array( strtolower( $format ), [ 'u', 'timestamp' ] ) && $lang == 'per' ) {
260
+ return self::trim_number( $out );
261
+ } else {
262
+ return $out;
263
+ }
264
+ }
265
+
266
+ /**
267
+ * bn_parsidate::gregorian_to_persian()
268
+ * convert gregorian date to persian date
269
+ *
270
+ * @param mixed $gy
271
+ * @param mixed $gm
272
+ * @param mixed $gd
273
+ *
274
+ * @return array
275
+ */
276
+ function gregorian_to_persian( $gy, $gm, $gd ) {
277
+ $dayOfYear = $this->g_days_sum_month[ (int) $gm ] + $gd;
278
+
279
+ if ( self::IsLeapYear( $gy ) and $gm > 2 ) {
280
+ $dayOfYear ++;
281
+ }
282
+
283
+ $d_33 = (int) ( ( ( $gy - 16 ) % 132 ) * 0.0305 );
284
+ $leap = $gy % 4;
285
+ $a = ( ( $d_33 == 1 or $d_33 == 2 ) and ( $d_33 == $leap or $leap == 1 ) ) ? 78 : ( ( $d_33 == 3 and $leap == 0 ) ? 80 : 79 );
286
+ $b = ( $d_33 == 3 or $d_33 < ( $leap - 1 ) or $leap == 0 ) ? 286 : 287;
287
+
288
+ if ( (int) ( ( $gy - 10 ) / 63 ) == 30 ) {
289
+ $b --;
290
+ $a ++;
291
+ }
292
+
293
+ if ( $dayOfYear > $a ) {
294
+ $jy = $gy - 621;
295
+ $jd = $dayOfYear - $a;
296
+ } else {
297
+ $jy = $gy - 622;
298
+ $jd = $dayOfYear + $b;
299
+ }
300
+
301
+ for ( $i = 0; $i < 11 and $jd > $this->j_days_in_month[ $i ]; $i ++ ) {
302
+ $jd -= $this->j_days_in_month[ $i ];
303
+ }
304
+
305
+ $jm = ++ $i;
306
+
307
+ return array( $jy, strlen( $jm ) == 1 ? '0' . $jm : $jm, strlen( $jd ) == 1 ? '0' . $jd : $jd );
308
+ }
309
+
310
+ /**
311
+ * Get day of the week shamsi/jalali
312
+ *
313
+ * @param int $wday
314
+ *
315
+ * @return int
316
+ * @author Parsa Kafi
317
+ *
318
+ */
319
+ private function week_day( $wday ) {
320
+ return $wday == 6 ? 0 : ++ $wday;
321
+ }
322
+
323
+ /**
324
+ * bn_parsidate::trim_number()
325
+ * convert english number to persian number
326
+ *
327
+ * @param mixed $num
328
+ * @param string $sp
329
+ *
330
+ * @return string
331
+ */
332
+ public function trim_number( $num, $sp = '٫' ) {
333
+ $eng = array( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' );
334
+ $per = array( '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', $sp );
335
+ $number = filter_var( $num, FILTER_SANITIZE_NUMBER_INT );
336
+
337
+ return empty( $number ) ? str_replace( $per, $eng, $num ) : str_replace( $eng, $per, $num );
338
+ }
339
+
340
+ /**
341
+ * bn_parsidate::getInstance()
342
+ * create instance of bn_parsidate class
343
+ *
344
+ * @return bn_parsidate
345
+ */
346
+ public static function getInstance() {
347
+ if ( ! isset( self::$instance ) ) {
348
+ self::$instance = new self();
349
+ }
350
+
351
+ return self::$instance;
352
+ }
353
+
354
+ /**
355
+ * bn_parsidate::gregorian_date()
356
+ * convert persian datetime to gregorian datetime
357
+ *
358
+ * @param mixed $format
359
+ * @param mixed $persiandate
360
+ *
361
+ * @return false|string
362
+ */
363
+ public function gregorian_date( $format, $persiandate ) {
364
+ preg_match_all( '!\d+!', $persiandate, $matches );
365
+
366
+ $matches = $matches[0];
367
+
368
+ list( $year, $mon, $day ) = self::persian_to_gregorian( $matches[0], $matches[1], $matches[2] );
369
+
370
+ return date( $format, mktime( ( isset( $matches[3] ) ? $matches[3] : 0 ), ( isset( $matches[4] ) ? $matches[4] : 0 ), ( isset( $matches[5] ) ? $matches[5] : 0 ), $mon, $day, $year ) );
371
+ }
372
+
373
+ /**
374
+ * bn_parsidate::persian_to_gregorian()
375
+ * convert persian date to gregorian date
376
+ *
377
+ * @param mixed $jy
378
+ * @param mixed $jm
379
+ * @param mixed $jd
380
+ *
381
+ * @return array
382
+ */
383
+ public function persian_to_gregorian( $jy, $jm, $jd ) {
384
+ $doyj = ( $jm - 2 > - 1 ? $this->j_days_sum_month[ (int) $jm ] + $jd : $jd );
385
+ $d4 = ( $jy + 1 ) % 4;
386
+ $d33 = (int) ( ( ( $jy - 55 ) % 132 ) * .0305 );
387
+ $a = ( $d33 != 3 and $d4 <= $d33 ) ? 287 : 286;
388
+ $b = ( ( $d33 == 1 or $d33 == 2 ) and ( $d33 == $d4 or $d4 == 1 ) ) ? 78 : ( ( $d33 == 3 and $d4 == 0 ) ? 80 : 79 );
389
+
390
+ if ( (int) ( ( $jy - 19 ) / 63 ) == 20 ) {
391
+ $a --;
392
+ $b ++;
393
+ }
394
+
395
+ if ( $doyj <= $a ) {
396
+ $gy = $jy + 621;
397
+ $gd = $doyj + $b;
398
+ } else {
399
+ $gy = $jy + 622;
400
+ $gd = $doyj - $a;
401
+ }
402
+
403
+ foreach ( array( 0, 31, ( $gy % 4 == 0 ) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ) as $gm => $days ) {
404
+ if ( $gd <= $days ) {
405
+ break;
406
+ }
407
+
408
+ $gd -= $days;
409
+ }
410
+
411
+ return array( $gy, $gm, $gd );
412
+ }
413
  }
414
 
 
 
 
415
  /**
 
416
  * convert gregorian datetime to persian datetime
417
  *
418
  * @param mixed $input
421
  *
422
  * @return string
423
  */
424
+ function parsidate( $input, $datetime = 'now', $lang = 'per' ) {
425
+ $bndate = bn_parsidate::getInstance();
 
 
426
 
427
+ return $bndate->persian_date( $input, $datetime, $lang );
428
  }
429
 
430
  /**
434
  * @param mixed $input
435
  * @param mixed $datetime
436
  *
437
+ * @return false|string
438
  */
439
+ function gregdate( $input, $datetime ) {
440
+ $bndate = bn_parsidate::getInstance();
 
 
441
 
442
+ return $bndate->gregorian_date( $input, $datetime );
443
  }
includes/plugins/acf-fields/class-wpp-acf-datepicker-v4.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ defined( 'ABSPATH' ) || exit( 'No direct script access allowed' );
4
+
5
+ /**
6
+ * Adds Jalali Datepicker field to ACF
7
+ *
8
+ * @package WP-Parsidate
9
+ * @subpackage Plugins/ACF/WPP_acf_field_jalali_datepicker
10
+ *
11
+ * @since 4.0.0
12
+ */
13
+ class WPP_acf_field_jalali_datepicker extends acf_field {
14
+ /**
15
+ * Hooks required tags
16
+ */
17
+ function __construct( $settings ) {
18
+ $this->name = 'jalali_datepicker';
19
+
20
+ $this->label = __( 'Date', 'wp-parsidate' );
21
+
22
+ $this->category = __( 'Parsidate', 'wp-parsidate' );
23
+
24
+ $this->defaults = array(
25
+ 'placeholder' => 'YYYY-MM-DD',
26
+ );
27
+
28
+ parent::__construct();
29
+
30
+ $this->settings = $settings;
31
+ }
32
+
33
+ /**
34
+ * Create extra settings for your field. These are visible when editing a field
35
+ *
36
+ * @param $field (array) the $field being edited
37
+ *
38
+ * @since 4.0.0
39
+ */
40
+ function create_options( $field ) {
41
+ $key = $field['name'];
42
+ ?>
43
+ <tr class="field_option field_option_<?php echo $this->name; ?>">
44
+ <td class="label">
45
+ <label><?php __( 'Placeholder', 'wp-parsidate' ); ?></label>
46
+ <p class="description"><?php _e( 'Show custom placeholder', 'wp-parsidate' ); ?></p>
47
+ </td>
48
+ <td>
49
+ <?php
50
+ do_action( 'acf/create_field', array(
51
+ 'type' => 'text',
52
+ 'name' => 'fields[' . $key . '][placeholder]',
53
+ 'value' => $field['placeholder'],
54
+ 'layout' => 'horizontal'
55
+ ) );
56
+ ?>
57
+ </td>
58
+ </tr>
59
+ <?php
60
+ }
61
+
62
+ /**
63
+ * Create the HTML interface for your field
64
+ *
65
+ * @param $field (array) the $field being edited
66
+ *
67
+ * @since 4.0.0
68
+ */
69
+ function create_field( $field ) {
70
+ ?>
71
+ <div>
72
+ <input type="text" name="<?php echo esc_attr( $field['name'] ) ?>"
73
+ value="<?php echo esc_attr( $field['value'] ) ?>" class="date-picker" autocomplete="off"
74
+ placeholder="<?php echo $field['placeholder'] ?>"/>
75
+ </div>
76
+ <?php
77
+ }
78
+
79
+ /**
80
+ * This action is called in the admin_enqueue_scripts action on the edit screen where your field is created.
81
+ * Use this action to add CSS + JavaScript to assist your render_field() action.
82
+ *
83
+ * @since 4.0.0
84
+ */
85
+ function input_admin_enqueue_scripts() {
86
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
87
+
88
+ wp_enqueue_script( 'wpp_jalali_datepicker', WP_PARSI_URL . 'assets/js/jalalidatepicker.min.js', array( 'acf-input' ), WP_PARSI_VER );
89
+ wp_enqueue_style( 'wpp_jalali_datepicker', WP_PARSI_URL . "assets/css/jalalidatepicker$suffix.css", array( 'acf-input' ), WP_PARSI_VER );
90
+ }
91
+
92
+ /**
93
+ * This filter is applied to the $value after it is loaded from the db
94
+ *
95
+ * @param $value (mixed) the value found in the database
96
+ * @param $post_id (mixed) the $post_id from which the value was loaded
97
+ * @param $field (array) the field array holding all the field options
98
+ *
99
+ * @return int|string $value
100
+ * @since 4.0.0
101
+ */
102
+ function load_value( $value, $post_id, $field ) {
103
+ if ( ! wpp_is_active( 'acf_persian_date' ) ) {
104
+ $value = parsidate( 'Y-m-d', $value );
105
+ }
106
+
107
+ return apply_filters( 'wpp_acf_after_load_jalali_date', $value );
108
+ }
109
+
110
+ /**
111
+ * This filter is applied to the $value before it is saved in the db
112
+ *
113
+ * @param $value (mixed) the value found in the database
114
+ * @param $post_id (mixed) the $post_id from which the value was loaded
115
+ * @param $field (array) the field array holding all the field options
116
+ *
117
+ * @return false|string $value
118
+ * @since 4.0.0
119
+ */
120
+ function update_value( $value, $post_id, $field ) {
121
+ if ( ! wpp_is_active( 'acf_persian_date' ) ) {
122
+ $value = gregdate( 'Y-m-d', $value );
123
+ }
124
+
125
+ return apply_filters( 'wpp_acf_before_update_jalali_date', $value );
126
+ }
127
+
128
+ /**
129
+ * This filter is applied to the $value after it is loaded from the db and, before it is passed back to the API functions such as the_field
130
+ *
131
+ * @param $value - the value which was loaded from the database
132
+ * @param $post_id - the $post_id from which the value was loaded
133
+ * @param $field - the field array holding all the field options
134
+ *
135
+ * @return mixed|void $value - the modified value
136
+ * @since 4.0.0
137
+ */
138
+ function format_value_for_api( $value, $post_id, $field ) {
139
+ if ( ! wpp_is_active( 'acf_persian_date' ) ) {
140
+ $value = parsidate( 'Y-m-d', $value );
141
+ }
142
+
143
+ return apply_filters( 'wpp_acf_after_load_jalali_date', $value );
144
+ }
145
+ }
146
+
147
+ new WPP_acf_field_jalali_datepicker( $this->settings );
includes/plugins/acf-fields/class-wpp-acf-datepicker-v5.php ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ defined( 'ABSPATH' ) || exit( 'No direct script access allowed' );
4
+
5
+ /**
6
+ * Adds Jalali Datepicker field to ACF
7
+ *
8
+ * @package WP-Parsidate
9
+ * @subpackage Plugins/ACF/WPP_acf_field_jalali_datepicker
10
+ *
11
+ * @since 4.0.0
12
+ */
13
+ class WPP_acf_field_jalali_datepicker extends acf_field {
14
+
15
+ /**
16
+ * Hooks required tags
17
+ */
18
+ function __construct( $settings ) {
19
+ $this->name = 'jalali_datepicker';
20
+
21
+ $this->label = __( 'Date', 'wp-parsidate' );
22
+
23
+ $this->category = __( 'Parsidate', 'wp-parsidate' );
24
+
25
+ $this->defaults = array(
26
+ 'placeholder' => 'YYYY-MM-DD',
27
+ );
28
+
29
+ $this->l10n = array(
30
+ 'error' => __( 'Error! Please select a valid date.', 'wp-parsidate' ),
31
+ );
32
+
33
+ $this->settings = $settings;
34
+
35
+ parent::__construct();
36
+ }
37
+
38
+ /**
39
+ * Create extra settings for your field. These are visible when editing a field
40
+ *
41
+ * @param $field (array) the $field being edited
42
+ *
43
+ * @since 4.0.0
44
+ */
45
+ function render_field_settings( $field ) {
46
+ acf_render_field_setting( $field, array(
47
+ 'label' => __( 'Placeholder', 'wp-parsidate' ),
48
+ 'instructions' => __( 'Show custom placeholder', 'wp-parsidate' ),
49
+ 'type' => 'text',
50
+ 'name' => 'placeholder',
51
+ ) );
52
+ }
53
+
54
+ /**
55
+ * Create the HTML interface for your field
56
+ *
57
+ * @param $field (array) the $field being edited
58
+ *
59
+ * @since 4.0.0
60
+ */
61
+ function render_field( $field ) { ?>
62
+ <input type="text" name="<?php echo esc_attr( $field['name'] ) ?>"
63
+ value="<?php echo esc_attr( $field['value'] ) ?>" class="date-picker" autocomplete="off"
64
+ placeholder="<?php echo $field['placeholder'] ?>"/>
65
+ <?php
66
+ }
67
+
68
+ /**
69
+ * This action is called in the admin_enqueue_scripts action on the edit screen where your field is created.
70
+ * Use this action to add CSS + JavaScript to assist your render_field() action.
71
+ *
72
+ * @since 4.0.0
73
+ */
74
+ function input_admin_enqueue_scripts() {
75
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
76
+
77
+ if ( ! wp_script_is( 'wpp-jalali-datepicker' ) ) {
78
+ wp_enqueue_script( 'wpp_jalali_datepicker', WP_PARSI_URL . 'assets/js/jalalidatepicker.min.js', array( 'acf-input' ), WP_PARSI_VER );
79
+ wp_enqueue_style( 'wpp_jalali_datepicker', WP_PARSI_URL . "assets/css/jalalidatepicker$suffix.css", array( 'acf-input' ), WP_PARSI_VER );
80
+ }
81
+ }
82
+
83
+ /**
84
+ * This filter is applied to the $value after it is loaded from the db
85
+ *
86
+ * @param $value (mixed) the value found in the database
87
+ * @param $post_id (mixed) the $post_id from which the value was loaded
88
+ * @param $field (array) the field array holding all the field options
89
+ *
90
+ * @return int|string $value
91
+ * @since 4.0.0
92
+ */
93
+ function load_value( $value, $post_id, $field ) {
94
+ if ( ! wpp_is_active( 'acf_persian_date' ) ) {
95
+ $value = parsidate( 'Y-m-d', $value );
96
+ }
97
+
98
+ return apply_filters( 'wpp_acf_after_load_jalali_date', $value );
99
+ }
100
+
101
+ /**
102
+ * This filter is applied to the $value before it is saved in the db
103
+ *
104
+ * @param $value (mixed) the value found in the database
105
+ * @param $post_id (mixed) the $post_id from which the value was loaded
106
+ * @param $field (array) the field array holding all the field options
107
+ *
108
+ * @return false|string $value
109
+ * @since 4.0.0
110
+ */
111
+ function update_value( $value, $post_id, $field ) {
112
+ if ( ! wpp_is_active( 'acf_persian_date' ) ) {
113
+ $value = gregdate( 'Y-m-d', $value );
114
+ }
115
+
116
+ return apply_filters( 'wpp_acf_before_update_jalali_date', $value );
117
+ }
118
+
119
+ /**
120
+ * This filter is applied to the $value after it is loaded from the db and, before it is returned to the template
121
+ *
122
+ * @param $value (mixed) the value which was loaded from the database
123
+ * @param $post_id (mixed) the $post_id from which the value was loaded
124
+ * @param $field (array) the field array holding all the field options
125
+ *
126
+ * @return mixed $value (mixed) the modified value
127
+ * @since 4.0.0
128
+ */
129
+ function format_value( $value, $post_id, $field ) {
130
+ if ( empty( $value ) ) {
131
+ return $value;
132
+ }
133
+
134
+ return apply_filters( 'wpp_acf_before_jalali_date_render', $value );
135
+ }
136
+
137
+ /**
138
+ * This filter is used to perform validation on the value prior to saving.
139
+ * All values are validated regardless of the field's required setting. This allows you to validate and return
140
+ * messages to the user if the value is not correct
141
+ *
142
+ * @param $valid (boolean) validation status based on the value and the field's required setting
143
+ * @param $value (mixed) the $_POST value
144
+ * @param $field (array) the field array holding all the field options
145
+ * @param $input (string) the corresponding input name for $_POST value
146
+ *
147
+ * @return true|false
148
+ * @since 4.0.0
149
+ *
150
+ */
151
+ function validate_value( $valid, $value, $field, $input ) {
152
+ return apply_filters( 'wpp_acf_validate_date_value', $valid, $value, $field, $input );
153
+ }
154
+
155
+ /**
156
+ * This filter is applied to the $field after it is loaded from the database
157
+ *
158
+ * @param $field (array) the field array holding all the field options
159
+ *
160
+ * @return mixed $field
161
+ * @since 4.0.0
162
+ */
163
+ function load_field( $field ) {
164
+ return apply_filters( 'wpp_acf_after_load_date_field', $field );
165
+ }
166
+
167
+ /**
168
+ * This filter is applied to the $field before it is saved to the database
169
+ *
170
+ * @param $field (array) the field array holding all the field options
171
+ *
172
+ * @return mixed $field
173
+ * @since 4.0.0
174
+ */
175
+ function update_field( $field ) {
176
+ return apply_filters( 'wpp_acf_before_save_date_field', $field );
177
+ }
178
+ }
179
+
180
+ new WPP_acf_field_jalali_datepicker( $this->settings );
includes/plugins/acf-fields/class-wpp-acf-timepicker-v4.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ defined( 'ABSPATH' ) || exit( 'No direct script access allowed' );
4
+
5
+ /**
6
+ * Adds Jalali Datepicker field to ACF
7
+ *
8
+ * @package WP-Parsidate
9
+ * @subpackage Plugins/ACF/WPP_acf_field_wpp_timepicker
10
+ *
11
+ * @since 4.0.0
12
+ */
13
+ class WPP_acf_field_wpp_timepicker extends acf_field {
14
+ /**
15
+ * Hooks required tags
16
+ */
17
+ function __construct( $settings ) {
18
+ $this->name = 'wpp_timepicker';
19
+
20
+ $this->label = __( 'Date', 'wp-parsidate' );
21
+
22
+ $this->category = __( 'Date', 'wp-parsidate' );
23
+
24
+ $this->defaults = array(
25
+ 'placeholder' => 'YYYY-MM-DD',
26
+ );
27
+
28
+ parent::__construct();
29
+
30
+ $this->settings = $settings;
31
+ }
32
+
33
+ /**
34
+ * Create extra settings for your field. These are visible when editing a field
35
+ *
36
+ * @param $field (array) the $field being edited
37
+ *
38
+ * @since 4.0.0
39
+ */
40
+ function create_options( $field ) {
41
+ $key = $field['name'];
42
+ ?>
43
+ <tr class="field_option field_option_<?php echo $this->name; ?>">
44
+ <td class="label">
45
+ <label><?php _e( "Preview Size", 'TEXTDOMAIN' ); ?></label>
46
+ <p class="description"><?php _e( "Thumbnail is advised", 'TEXTDOMAIN' ); ?></p>
47
+ </td>
48
+ <td>
49
+ <?php
50
+ do_action( 'acf/create_field', array(
51
+ 'type' => 'text',
52
+ 'name' => 'fields[' . $key . '][placeholder]',
53
+ 'value' => $field['placeholder'],
54
+ 'layout' => 'horizontal'
55
+ ) );
56
+ ?>
57
+ </td>
58
+ </tr>
59
+ <?php
60
+ }
61
+
62
+ /**
63
+ * Create the HTML interface for your field
64
+ *
65
+ * @param $field (array) the $field being edited
66
+ *
67
+ * @since 4.0.0
68
+ */
69
+ function create_field( $field ) {
70
+ ?>
71
+ <div>
72
+ <input type="text" name="<?php echo esc_attr( $field['name'] ) ?>"
73
+ value="<?php echo esc_attr( $field['value'] ) ?>" class="date-picker" autocomplete="off"
74
+ placeholder="<?php echo $field['placeholder'] ?>"/>
75
+ </div>
76
+ <?php
77
+ }
78
+
79
+ /**
80
+ * This action is called in the admin_enqueue_scripts action on the edit screen where your field is created.
81
+ * Use this action to add CSS + JavaScript to assist your render_field() action.
82
+ *
83
+ * @since 4.0.0
84
+ */
85
+ function input_admin_enqueue_scripts() {
86
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
87
+
88
+ wp_enqueue_script( 'wpp_wpp_timepicker', WP_PARSI_URL . 'assets/js/jalalidatepicker.min.js', array( 'acf-input' ), WP_PARSI_VER );
89
+ wp_enqueue_style( 'wpp_wpp_timepicker', WP_PARSI_URL . "assets/css/jalalidatepicker$suffix.css", array( 'acf-input' ), WP_PARSI_VER );
90
+ }
91
+
92
+ /**
93
+ * This filter is applied to the $value after it is loaded from the db
94
+ *
95
+ * @param $value (mixed) the value found in the database
96
+ * @param $post_id (mixed) the $post_id from which the value was loaded
97
+ * @param $field (array) the field array holding all the field options
98
+ *
99
+ * @return int|string $value
100
+ * @since 4.0.0
101
+ */
102
+ function load_value( $value, $post_id, $field ) {
103
+ if ( ! wpp_is_active( 'acf_persian_date' ) ) {
104
+ $value = parsidate( 'Y-m-d', $value );
105
+ }
106
+
107
+ return apply_filters( 'wpp_acf_after_load_jalali_date', $value );
108
+ }
109
+
110
+ /**
111
+ * This filter is applied to the $value before it is saved in the db
112
+ *
113
+ * @param $value (mixed) the value found in the database
114
+ * @param $post_id (mixed) the $post_id from which the value was loaded
115
+ * @param $field (array) the field array holding all the field options
116
+ *
117
+ * @return false|string $value
118
+ * @since 4.0.0
119
+ */
120
+ function update_value( $value, $post_id, $field ) {
121
+ if ( ! wpp_is_active( 'acf_persian_date' ) ) {
122
+ $value = gregdate( 'Y-m-d', $value );
123
+ }
124
+
125
+ return apply_filters( 'wpp_acf_before_update_jalali_date', $value );
126
+ }
127
+
128
+ /**
129
+ * This filter is applied to the $value after it is loaded from the db and, before it is passed back to the API functions such as the_field
130
+ *
131
+ * @param $value - the value which was loaded from the database
132
+ * @param $post_id - the $post_id from which the value was loaded
133
+ * @param $field - the field array holding all the field options
134
+ *
135
+ * @return mixed|void $value - the modified value
136
+ * @since 4.0.0
137
+ */
138
+ function format_value_for_api( $value, $post_id, $field ) {
139
+ if ( ! wpp_is_active( 'acf_persian_date' ) ) {
140
+ $value = parsidate( 'Y-m-d', $value );
141
+ }
142
+
143
+ return apply_filters( 'wpp_acf_after_load_jalali_date', $value );
144
+ }
145
+ }
146
+
147
+ new WPP_acf_field_wpp_timepicker( $this->settings );
includes/plugins/acf-fields/class-wpp-acf-timepicker-v5.php ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ defined( 'ABSPATH' ) || exit( 'No direct script access allowed' );
4
+
5
+ /**
6
+ * Adds Timepicker field to ACF
7
+ *
8
+ * @package WP-Parsidate
9
+ * @subpackage Plugins/ACF/WPP_acf_field_wpp_timepicker
10
+ *
11
+ * @since 4.0.0
12
+ */
13
+ class WPP_acf_field_wpp_timepicker extends acf_field {
14
+
15
+ /**
16
+ * Hooks required tags
17
+ */
18
+ function __construct( $settings ) {
19
+ $this->name = 'wpp_timepicker';
20
+
21
+ $this->label = __( 'Time', 'wp-parsidate' );
22
+
23
+ $this->category = __( 'Parsidate', 'wp-parsidate' );
24
+
25
+ $this->defaults = array(
26
+ 'time-format' => '12 hours',
27
+ 'placeholder' => 'HH:MM',
28
+ );
29
+
30
+ $this->l10n = array(
31
+ 'error' => __( 'Error! Please select a valid time.', 'wp-parsidate' ),
32
+ );
33
+
34
+ $this->settings = $settings;
35
+
36
+ parent::__construct();
37
+ }
38
+
39
+ /**
40
+ * Create extra settings for your field. These are visible when editing a field
41
+ *
42
+ * @param $field (array) the $field being edited
43
+ *
44
+ * @since 4.0.0
45
+ */
46
+ function render_field_settings( $field ) {
47
+ acf_render_field_setting( $field, array(
48
+ 'label' => __( 'Time Format', 'wp-parsidate' ),
49
+ 'instructions' => __( 'Display time picker in 24 or 12 hours format', 'wp-parsidate' ),
50
+ 'type' => 'select',
51
+ 'name' => 'time-format',
52
+ 'choices' => array(
53
+ '12hours' => '12 hours',
54
+ '24hours' => '24 hours',
55
+ )
56
+ ) );
57
+
58
+ acf_render_field_setting( $field, array(
59
+ 'label' => __( 'Placeholder', 'wp-parsidate' ),
60
+ 'instructions' => __( 'Show custom placeholder', 'wp-parsidate' ),
61
+ 'type' => 'text',
62
+ 'name' => 'placeholder',
63
+ ) );
64
+ }
65
+
66
+ /**
67
+ * Create the HTML interface for your field
68
+ *
69
+ * @param $field (array) the $field being edited
70
+ *
71
+ * @since 4.0.0
72
+ */
73
+ function render_field( $field ) { ?>
74
+ <div class="wpp-time-picker">
75
+ <input type="text" id="<?php echo esc_attr( $field['key'] ) ?>"
76
+ name="<?php echo esc_attr( $field['name'] ) ?>" dir="ltr"
77
+ value="<?php echo esc_attr( $field['value'] ) ?>" autocomplete="off"
78
+ placeholder="<?php echo $field['placeholder'] ?>"/>
79
+ <script>
80
+ jQuery(document).ready(function ($) {
81
+ $('#<?php echo esc_attr( $field['key'] ) ?>').timepicki({
82
+ show_meridian:<?php echo '24hours' === $field['time-format'] ? 'true' : 'false'; ?>,
83
+ disable_keyboard_mobile: true
84
+ })
85
+ })
86
+ </script>
87
+ </div>
88
+ <?php
89
+ }
90
+
91
+ /**
92
+ * This action is called in the admin_enqueue_scripts action on the edit screen where your field is created.
93
+ * Use this action to add CSS + JavaScript to assist your render_field() action.
94
+ *
95
+ * @since 4.0.0
96
+ */
97
+ function input_admin_enqueue_scripts() {
98
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
99
+
100
+ wp_enqueue_script( 'wpp_wpp_timepicker', WP_PARSI_URL . "assets/js/timepicki$suffix.js", array( 'acf-input' ), WP_PARSI_VER );
101
+ wp_enqueue_style( 'wpp_wpp_timepicker', WP_PARSI_URL . "assets/css/timepicki$suffix.css", array( 'acf-input' ), WP_PARSI_VER );
102
+
103
+ // Remove jquery time picker to avoid conflict with woocommerce
104
+ wp_dequeue_style( 'acf-timepicker' );
105
+ wp_dequeue_script( 'acf-timepicker' );
106
+ }
107
+
108
+ /**
109
+ * This filter is applied to the $value after it is loaded from the db
110
+ *
111
+ * @param $value (mixed) the value found in the database
112
+ * @param $post_id (mixed) the $post_id from which the value was loaded
113
+ * @param $field (array) the field array holding all the field options
114
+ *
115
+ * @return int|string $value
116
+ * @since 4.0.0
117
+ */
118
+ function load_value( $value, $post_id, $field ) {
119
+ return apply_filters( 'wpp_acf_after_load_time', $value );
120
+ }
121
+
122
+ /**
123
+ * This filter is applied to the $value before it is saved in the db
124
+ *
125
+ * @param $value (mixed) the value found in the database
126
+ * @param $post_id (mixed) the $post_id from which the value was loaded
127
+ * @param $field (array) the field array holding all the field options
128
+ *
129
+ * @return false|string $value
130
+ * @since 4.0.0
131
+ */
132
+ function update_value( $value, $post_id, $field ) {
133
+ return apply_filters( 'wpp_acf_before_update_time', $value );
134
+ }
135
+
136
+ /**
137
+ * This filter is applied to the $value after it is loaded from the db and, before it is returned to the template
138
+ *
139
+ * @param $value (mixed) the value which was loaded from the database
140
+ * @param $post_id (mixed) the $post_id from which the value was loaded
141
+ * @param $field (array) the field array holding all the field options
142
+ *
143
+ * @return mixed $value (mixed) the modified value
144
+ * @since 4.0.0
145
+ */
146
+ function format_value( $value, $post_id, $field ) {
147
+ if ( empty( $value ) ) {
148
+ return $value;
149
+ }
150
+
151
+ return apply_filters( 'wpp_acf_before_time_render', $value );
152
+ }
153
+
154
+ /**
155
+ * This filter is used to perform validation on the value prior to saving.
156
+ * All values are validated regardless of the field's required setting. This allows you to validate and return
157
+ * messages to the user if the value is not correct
158
+ *
159
+ * @param $valid (boolean) validation status based on the value and the field's required setting
160
+ * @param $value (mixed) the $_POST value
161
+ * @param $field (array) the field array holding all the field options
162
+ * @param $input (string) the corresponding input name for $_POST value
163
+ *
164
+ * @return true|false
165
+ * @since 4.0.0
166
+ *
167
+ */
168
+ function validate_value( $valid, $value, $field, $input ) {
169
+ return apply_filters( 'wpp_acf_validate_time_value', $valid, $value, $field, $input );
170
+ }
171
+
172
+ /**
173
+ * This filter is applied to the $field after it is loaded from the database
174
+ *
175
+ * @param $field (array) the field array holding all the field options
176
+ *
177
+ * @return mixed $field
178
+ * @since 4.0.0
179
+ */
180
+ function load_field( $field ) {
181
+ return apply_filters( 'wpp_acf_after_load_time_field', $field );
182
+ }
183
+
184
+ /**
185
+ * This filter is applied to the $field before it is saved to the database
186
+ *
187
+ * @param $field (array) the field array holding all the field options
188
+ *
189
+ * @return mixed $field
190
+ * @since 4.0.0
191
+ */
192
+ function update_field( $field ) {
193
+ return apply_filters( 'wpp_acf_before_save_time_field', $field );
194
+ }
195
+ }
196
+
197
+ new WPP_acf_field_wpp_timepicker( $this->settings );
includes/plugins/acf.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
+ /**
6
+ * Makes ACF compatible with WP-Parsidate plugin
7
+ *
8
+ * @package WP-Parsidate
9
+ * @subpackage Plugins/ACF
10
+ * @since 4.0.0
11
+ */
12
+ class WPP_ACF {
13
+ public static $instance = null;
14
+ var $settings;
15
+
16
+ /**
17
+ * Hooks required tags
18
+ */
19
+ private function __construct() {
20
+ $this->settings = array(
21
+ 'version' => '1.0.0',
22
+ 'url' => WP_PARSI_URL . 'includes/plugins/',
23
+ 'path' => WP_PARSI_DIR . 'includes/plugins/'
24
+ );
25
+
26
+ add_filter( 'wpp_plugins_compatibility_settings', array( $this, 'add_settings' ) );
27
+ add_action( 'acf/include_field_types', array( $this, 'wpp_acf_include_field' ) ); // v5
28
+ add_action( 'acf/register_fields', array( $this, 'wpp_acf_include_field' ) ); // v4
29
+ }
30
+
31
+ /**
32
+ * Returns an instance of class
33
+ *
34
+ * @return WPP_ACF
35
+ * @since 4.0.0
36
+ */
37
+ public static function getInstance() {
38
+ if ( self::$instance == null ) {
39
+ self::$instance = new WPP_ACF();
40
+ }
41
+
42
+ return self::$instance;
43
+ }
44
+
45
+ /**
46
+ * This function will include the field type class
47
+ *
48
+ * @param $version (int) major ACF version. Defaults to false
49
+ *
50
+ * @return void
51
+ * @since 4.0.0
52
+ */
53
+ public function wpp_acf_include_field( $version = false ) {
54
+ $version = $version ? (float)$version : 4;
55
+
56
+ include_once( 'acf-fields/class-wpp-acf-datepicker-v' . (float) $version . '.php' );
57
+ include_once( 'acf-fields/class-wpp-acf-timepicker-v' . (float) $version . '.php' );
58
+ }
59
+
60
+ /**
61
+ * Adds settings for toggle fixing
62
+ *
63
+ * @param array $old_settings Old settings
64
+ *
65
+ * @return array New settings
66
+ */
67
+ public function add_settings( $old_settings ) {
68
+ $settings = array(
69
+ 'acf' => array(
70
+ 'id' => 'acf',
71
+ 'name' => __( 'Advanced Custom Fields (ACF)', 'wp-parsidate' ),
72
+ 'type' => 'header'
73
+ ),
74
+ 'acf_persian_date' => array(
75
+ 'id' => 'acf_persian_date',
76
+ 'name' => __( 'Save dates in Jalali format (Not recommended)', 'wp-parsidate' ),
77
+ 'type' => 'checkbox',
78
+ 'options' => 1,
79
+ 'std' => 0
80
+ )
81
+ );
82
+
83
+ return array_merge( $old_settings, $settings );
84
+ }
85
+ }
86
+
87
+ return WPP_ACF::getInstance();
includes/plugins/disable.php CHANGED
@@ -1,91 +1,122 @@
1
  <?php
 
 
 
2
  global $wpp_settings, $dis_hook;
3
- if (isset($wpp_settings['dis_input'])) {
4
-
5
- $dis_hook = array();
6
- $lists = explode("\n", $wpp_settings['dis_input']);
7
- foreach ($lists as $list) {
8
- $list = explode(',', $list);
9
- if (count($list) < 2)
10
- continue;
11
- $dis_hook[$list[0]][] = array('func' => $list[1], 'class' => (isset($list[2]) ? $list[2] : ''));
12
- }
13
- }
14
 
15
- function disable_wpp()
16
- {
17
-
18
- global $dis_hook;
19
- if (wpp_is_feed())
20
- return false;
21
- $calls = debug_backtrace();
22
- unset($calls[0]);
23
- unset($calls[1]);
24
- unset($calls[2]);
25
-
26
- foreach ($calls as $i => $call) {
27
- unset($calls[$i]);
28
- if ($call['function'] == 'apply_filters' and empty($call['class']))
29
- break;
30
- }
31
- $func = $calls[++$i]['function'];
32
-
33
- if (empty($dis_hook[$func]))
34
- return true;
35
-
36
- $hooks = $dis_hook[$func];
37
- if (empty($hooks))
38
- return true;
39
-
40
- unset($calls[$i]);
41
-
42
- foreach ($calls as $i => $call) {
43
- foreach ($hooks as $hook) {
44
- $hook['class'] = trim($hook['class']);
45
- if ((isset($call['class']) and empty($hook['class'])) or (!isset($call['class']) and !empty($hook['class'])))
46
- continue;
47
- if (!empty($hook['func']) and ($call['function'] != trim($hook['func'])))
48
- continue;
49
- if ((!isset($call['class']) and empty($hook['class'])) or $call['class'] == $hook['class'])
50
- return false;
51
- }
52
- }
53
- return true;
54
- }
55
 
 
 
56
 
57
- function wpp_woocommerce_admin_report_data($report_data)
58
- {
 
59
 
60
- $report_data['where'] = preg_replace_callback("/posts.post_date\s.=?\s'([^']+)'/i", 'fix_date_woo_report', $report_data['where']);
61
- return $report_data;
62
  }
63
 
64
- ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
- function fix_date_woo_report($date)
67
- {
68
 
69
- if (empty($_GET['start_date']) or empty($_GET['end_date']))
70
- return $date[0];
 
71
 
72
- if (strpos($date[0], '=') === false) {
 
 
73
 
74
- if ((int)$_GET['end_date'] > 1900)
75
- return $date[0];
76
- $dt = gregdate('Y-m-d', $_GET['end_date']);
77
- $dt = date('Y-m-d', strtotime("$dt +1 day"));
78
- } else {
79
 
80
- if ((int)$_GET['start_date'] > 1900)
81
- return $date[0];
82
- $dt = gregdate('Y-m-d', $_GET['start_date']);
83
- }
84
- return substr_replace($date[0], $dt, -20, 10);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  }
86
 
87
  // add the filter
88
- add_filter('woocommerce_reports_get_order_report_query', 'wpp_woocommerce_admin_report_data', 10, 1);
89
 
90
 
91
  /**
@@ -95,80 +126,80 @@ add_filter('woocommerce_reports_get_order_report_query', 'wpp_woocommerce_admin_
95
  * @subpackage Plugins/EDD
96
  * @author Ehsaan
97
  */
98
- class WPP_Disable
99
- {
100
- public static $instance = null;
101
-
102
- /**
103
- * Hooks required tags
104
- */
105
- private function __construct()
106
- {
107
- global $wpp_settings;
108
- add_filter('wpp_plugins_compability_settings', array($this, 'add_settings'));
109
-
110
- if (isset($wpp_settings['dis_prices']) && $wpp_settings['dis_prices'] != 'disable') {
111
- add_filter('dis_rial_currency_filter_after', 'per_number', 10, 2);
112
- }
113
-
114
- if (isset($wpp_settings['dis_rial_fix']) && $wpp_settings['dis_rial_fix'] != 'disable') {
115
- add_filter('dis_rial_currency_filter_after', array($this, 'rial_fix'), 10, 2);
116
- }
117
- }
118
-
119
- /**
120
- * Returns an instance of class
121
- *
122
- * @return WPP_Disable
123
- */
124
- public static function getInstance()
125
- {
126
- if (self::$instance == null) {
127
- self::$instance = new WPP_Disable();
128
- }
129
-
130
- return self::$instance;
131
- }
132
-
133
- /**
134
- * RIAL fix for EDD
135
- */
136
- public function rial_fix($price, $did)
137
- {
138
- return str_replace('RIAL', 'ریال', $price);
139
- }
140
-
141
- /**
142
- * Adds settings for toggle fixing
143
- *
144
- * @param array $old_settings Old settings
145
- *
146
- * @return array New settings
147
- */
148
- public function add_settings($old_settings)
149
- {
150
- $options = array(
151
- 'enable' => __('Enable', 'wp-parsidate'),
152
- 'disable' => __('Disable', 'wp-parsidate')
153
- );
154
- $settings = array(
155
- 'dis' => array(
156
- 'id' => 'dis',
157
- 'name' => __('Hook deactivator', 'wp-parsidate'),
158
- 'type' => 'header'
159
- ),
160
- 'dis_prices' => array(
161
- 'id' => 'dis_input',
162
- 'name' => __('Hook list', 'wp-parsidate'),
163
- 'type' => 'textarea',
164
- 'options' => $options,
165
- 'std' => '',
166
- 'desc' => __('Enter hook,class,function to remove parsidate filter from it', 'wp-parsidate')
167
- )
168
- );
169
-
170
- return array_merge($old_settings, $settings);
171
- }
172
  }
173
 
174
  return WPP_Disable::getInstance();
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) || exit( 'No direct script access allowed' );
4
+
5
  global $wpp_settings, $dis_hook;
 
 
 
 
 
 
 
 
 
 
 
6
 
7
+ if ( isset( $wpp_settings['dis_input'] ) ) {
8
+ $dis_hook = array();
9
+ $lists = explode( "\n", $wpp_settings['dis_input'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
+ foreach ( $lists as $list ) {
12
+ $list = explode( ',', $list );
13
 
14
+ if ( count( $list ) < 2 ) {
15
+ continue;
16
+ }
17
 
18
+ $dis_hook[ $list[0] ][] = array( 'func' => $list[1], 'class' => ( isset( $list[2] ) ? $list[2] : '' ) );
19
+ }
20
  }
21
 
22
+ /**
23
+ * @return bool
24
+ */
25
+ function disable_wpp() {
26
+ global $dis_hook;
27
+
28
+ if ( wpp_is_feed() ) {
29
+ return false;
30
+ }
31
+
32
+ $calls = debug_backtrace();
33
+ unset( $calls[0], $calls[1], $calls[2] );
34
+
35
+ foreach ( $calls as $i => $call ) {
36
+ unset( $calls[ $i ] );
37
+
38
+ if ( $call['function'] == 'apply_filters' && empty( $call['class'] ) ) {
39
+ break;
40
+ }
41
+ }
42
+
43
+ $func = $calls[ ++ $i ]['function'];
44
+
45
+ if ( empty( $dis_hook[ $func ] ) ) {
46
+ return true;
47
+ }
48
+
49
+ $hooks = $dis_hook[ $func ];
50
+
51
+ if ( empty( $hooks ) ) {
52
+ return true;
53
+ }
54
 
55
+ unset( $calls[ $i ] );
 
56
 
57
+ foreach ( $calls as $i => $call ) {
58
+ foreach ( $hooks as $hook ) {
59
+ $hook['class'] = trim( $hook['class'] );
60
 
61
+ if ( ( isset( $call['class'] ) && empty( $hook['class'] ) ) ||( ! isset( $call['class'] ) && ! empty( $hook['class'] ) ) ) {
62
+ continue;
63
+ }
64
 
65
+ if ( ! empty( $hook['func'] ) && ( $call['function'] != trim( $hook['func'] ) ) ) {
66
+ continue;
67
+ }
 
 
68
 
69
+ if ( ( ! isset( $call['class'] ) && empty( $hook['class'] ) ) ||$call['class'] == $hook['class'] ) {
70
+ return false;
71
+ }
72
+ }
73
+ }
74
+
75
+ return true;
76
+ }
77
+
78
+
79
+ /**
80
+ * @param $report_data
81
+ *
82
+ * @return mixed
83
+ */
84
+ function wpp_woocommerce_admin_report_data( $report_data ) {
85
+ $report_data['where'] = preg_replace_callback( "/posts.post_date\s.=?\s'([^']+)'/i", 'fix_date_woo_report', $report_data['where'] );
86
+
87
+ return $report_data;
88
+ }
89
+
90
+ /**
91
+ * @param $date
92
+ *
93
+ * @return array|mixed|string|string[]
94
+ */
95
+ function fix_date_woo_report( $date ) {
96
+ if ( empty( $_GET['start_date'] ) ||empty( $_GET['end_date'] ) ) {
97
+ return $date[0];
98
+ }
99
+
100
+ if ( strpos( $date[0], '=' ) === false ) {
101
+ if ( (int) $_GET['end_date'] > 1900 ) {
102
+ return $date[0];
103
+ }
104
+
105
+ $dt = gregdate( 'Y-m-d', $_GET['end_date'] );
106
+ $dt = date( 'Y-m-d', strtotime( "$dt +1 day" ) );
107
+ } else {
108
+ if ( (int) $_GET['start_date'] > 1900 ) {
109
+ return $date[0];
110
+ }
111
+
112
+ $dt = gregdate( 'Y-m-d', $_GET['start_date'] );
113
+ }
114
+
115
+ return substr_replace( $date[0], $dt, - 20, 10 );
116
  }
117
 
118
  // add the filter
119
+ add_filter( 'woocommerce_reports_get_order_report_query', 'wpp_woocommerce_admin_report_data', 10, 1 );
120
 
121
 
122
  /**
126
  * @subpackage Plugins/EDD
127
  * @author Ehsaan
128
  */
129
+ class WPP_Disable {
130
+ public static $instance = null;
131
+
132
+ /**
133
+ * Hooks required tags
134
+ */
135
+ private function __construct() {
136
+ add_filter( 'wpp_plugins_compatibility_settings', array( $this, 'add_settings' ) );
137
+
138
+ if ( ! wpp_is_active( 'dis_prices' ) ) {
139
+ add_filter( 'dis_rial_currency_filter_after', 'per_number', 10, 2 );
140
+ }
141
+
142
+ if ( ! wpp_is_active( 'dis_rial_fix' ) ) {
143
+ add_filter( 'dis_rial_currency_filter_after', array( $this, 'rial_fix' ), 10, 2 );
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Returns an instance of class
149
+ *
150
+ * @return WPP_Disable
151
+ */
152
+ public static function getInstance() {
153
+ if ( self::$instance == null ) {
154
+ self::$instance = new WPP_Disable();
155
+ }
156
+
157
+ return self::$instance;
158
+ }
159
+
160
+ /**
161
+ * RIAL fix for EDD
162
+ *
163
+ * @param integer|string $price Price Number
164
+ * @param $did
165
+ *
166
+ * @return string
167
+ */
168
+ public function rial_fix( $price, $did ) {
169
+ return str_replace( 'RIAL', 'ریال', $price );
170
+ }
171
+
172
+ /**
173
+ * Adds settings for toggle fixing
174
+ *
175
+ * @param array $old_settings Old settings
176
+ *
177
+ * @return array New settings
178
+ */
179
+ public function add_settings( $old_settings ) {
180
+ $options = array(
181
+ 'enable' => __( 'Enable', 'wp-parsidate' ),
182
+ 'disable' => __( 'Disable', 'wp-parsidate' )
183
+ );
184
+
185
+ $settings = array(
186
+ 'dis' => array(
187
+ 'id' => 'dis',
188
+ 'name' => __( 'Hook deactivator', 'wp-parsidate' ),
189
+ 'type' => 'header'
190
+ ),
191
+ 'dis_prices' => array(
192
+ 'id' => 'dis_input',
193
+ 'name' => __( 'Hook list', 'wp-parsidate' ),
194
+ 'type' => 'textarea',
195
+ 'options' => $options,
196
+ 'std' => '',
197
+ 'desc' => __( 'Enter hook,class,function to remove parsidate filter from it', 'wp-parsidate' )
198
+ )
199
+ );
200
+
201
+ return array_merge( $old_settings, $settings );
202
+ }
203
  }
204
 
205
  return WPP_Disable::getInstance();
includes/plugins/edd.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  /**
4
  * Makes EDD compatible with WP-Parsidate plugin
5
  *
@@ -7,86 +9,76 @@
7
  * @subpackage Plugins/EDD
8
  * @author Ehsaan
9
  */
10
- class WPP_EDD
11
- {
12
- public static $instance = null;
13
 
14
- /**
15
- * Hooks required tags
16
- */
17
- private function __construct()
18
- {
19
- global $wpp_settings;
20
- add_filter('wpp_plugins_compability_settings', array($this, 'add_settings'));
21
 
22
- if (isset($wpp_settings['edd_prices']) && $wpp_settings['edd_prices'] != 'disable') {
23
- add_filter('edd_rial_currency_filter_after', 'per_number', 10, 2);
24
- }
25
 
26
- if (isset($wpp_settings['edd_rial_fix']) && $wpp_settings['edd_rial_fix'] != 'disable') {
27
- add_filter('edd_rial_currency_filter_after', array($this, 'rial_fix'), 10, 2);
28
- }
29
- }
30
 
31
- /**
32
- * Returns an instance of class
33
- *
34
- * @return WPP_EDD
35
- */
36
- public static function getInstance()
37
- {
38
- if (self::$instance == null) {
39
- self::$instance = new WPP_EDD();
40
- }
41
 
42
- return self::$instance;
43
- }
44
 
45
- /**
46
- * RIAL fix for EDD
47
- */
48
- public function rial_fix($price, $did)
49
- {
50
- return str_replace('RIAL', 'ریال', $price);
51
- }
52
 
53
- /**
54
- * Adds settings for toggle fixing
55
- *
56
- * @param array $old_settings Old settings
57
- *
58
- * @return array New settings
59
- */
60
- public function add_settings($old_settings)
61
- {
62
- $options = array(
63
- 'enable' => __('Enable', 'wp-parsidate'),
64
- 'disable' => __('Disable', 'wp-parsidate')
65
- );
66
- $settings = array(
67
- 'edd' => array(
68
- 'id' => 'edd',
69
- 'name' => __('Easy Digital Downloads', 'wp-parsidate'),
70
- 'type' => 'header'
71
- ),
72
- 'edd_prices' => array(
73
- 'id' => 'edd_prices',
74
- 'name' => __('Fix prices', 'wp-parsidate'),
75
- 'type' => 'radio',
76
- 'options' => $options,
77
- 'std' => 'disable'
78
- ),
79
- 'edd_rial_fix' => array(
80
- 'id' => 'edd_rial_fix',
81
- 'name' => __('Replace ریال with RIAL', 'wp-parsidate'),
82
- 'type' => 'radio',
83
- 'options' => $options,
84
- 'std' => 'disable'
85
- )
86
- );
87
 
88
- return array_merge($old_settings, $settings);
89
- }
90
  }
91
 
92
- return WPP_EDD::getInstance();
1
  <?php
2
 
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Makes EDD compatible with WP-Parsidate plugin
7
  *
9
  * @subpackage Plugins/EDD
10
  * @author Ehsaan
11
  */
12
+ class WPP_EDD {
13
+ public static $instance = null;
 
14
 
15
+ /**
16
+ * Hooks required tags
17
+ */
18
+ private function __construct() {
19
+ add_filter( 'wpp_plugins_compatibility_settings', array( $this, 'add_settings' ) );
 
 
20
 
21
+ if ( wpp_is_active( 'edd_prices' ) ) {
22
+ add_filter( 'edd_rial_currency_filter_after', 'per_number', 10, 2 );
23
+ }
24
 
25
+ if ( wpp_is_active( 'edd_rial_fix' ) ) {
26
+ add_filter( 'edd_rial_currency_filter_after', array( $this, 'rial_fix' ), 10, 2 );
27
+ }
28
+ }
29
 
30
+ /**
31
+ * Returns an instance of class
32
+ *
33
+ * @return WPP_EDD
34
+ */
35
+ public static function getInstance() {
36
+ if ( self::$instance == null ) {
37
+ self::$instance = new WPP_EDD();
38
+ }
 
39
 
40
+ return self::$instance;
41
+ }
42
 
43
+ /**
44
+ * RIAL fix for EDD
45
+ */
46
+ public function rial_fix( $price, $did ) {
47
+ return str_replace( 'RIAL', 'ریال', $price );
48
+ }
 
49
 
50
+ /**
51
+ * Adds settings for toggle fixing
52
+ *
53
+ * @param array $old_settings Old settings
54
+ *
55
+ * @return array New settings
56
+ */
57
+ public function add_settings( $old_settings ) {
58
+ $settings = array(
59
+ 'edd' => array(
60
+ 'id' => 'edd',
61
+ 'name' => __( 'Easy Digital Downloads', 'wp-parsidate' ),
62
+ 'type' => 'header'
63
+ ),
64
+ 'edd_prices' => array(
65
+ 'id' => 'edd_prices',
66
+ 'name' => __( 'Fix prices', 'wp-parsidate' ),
67
+ 'type' => 'checkbox',
68
+ 'options' => 1,
69
+ 'std' => 0
70
+ ),
71
+ 'edd_rial_fix' => array(
72
+ 'id' => 'edd_rial_fix',
73
+ 'name' => __( 'Replace ریال with RIAL', 'wp-parsidate' ),
74
+ 'type' => 'checkbox',
75
+ 'options' => 1,
76
+ 'std' => 0
77
+ )
78
+ );
 
 
 
 
 
79
 
80
+ return array_merge( $old_settings, $settings );
81
+ }
82
  }
83
 
84
+ return WPP_EDD::getInstance();
includes/plugins/fixes-woo.php CHANGED
@@ -1,34 +1,30 @@
1
  <?php
2
- add_filter('wp_insert_post_data', 'wpp_wc_save_post', '9999', 2);
3
 
4
- function wpp_wc_save_post($data, $postarr)
5
- {
 
 
 
 
 
 
 
 
 
6
 
7
- if ($data['post_type'] == 'shop_order')
8
- $_POST['order_date'] = gregdate('Y-m-d', $_POST['order_date']);
9
- if ($data['post_type'] == 'product') {
10
- if (isset($_POST['_sale_price_dates_from']) and !empty($_POST['_sale_price_dates_from'])) {
11
- $_POST['_sale_price_dates_from'] = gregdate('Y-m-d', $_POST['_sale_price_dates_from']);
12
- }
13
- if (isset($_POST['_sale_price_dates_to']) and !empty($_POST['_sale_price_dates_to'])) {
14
- $_POST['_sale_price_dates_to'] = gregdate('Y-m-d', $_POST['_sale_price_dates_to']);
15
- }
16
- }
17
- return $data;
18
  }
19
 
20
- function getqtlangcustomfieldvalue($metadata, $object_id, $meta_key, $single)
21
- {
22
-
23
- if ($meta_key == '_sale_price_dates_from') {
24
- var_dump($_POST);
25
- var_dump(func_get_args());//die;
26
- }
27
- if ($meta_key == '_sale_price_dates_to') {
28
- var_dump($_POST);
29
- var_dump(func_get_args());//die;
30
- }
31
-
32
  }
33
 
34
- add_filter('update_post_metadata', 'getqtlangcustomfieldvalue', 10, 4);
1
  <?php
2
+ add_filter( 'wp_insert_post_data', 'wpp_wc_save_post', '9999', 2 );
3
 
4
+ function wpp_wc_save_post( $data, $postarr ) {
5
+ if ( $data['post_type'] == 'shop_order' )
6
+ $_POST['order_date'] = gregdate( 'Y-m-d', $_POST['order_date'] );
7
+ if ( $data['post_type'] == 'product' ) {
8
+ if ( isset( $_POST['_sale_price_dates_from'] ) and ! empty( $_POST['_sale_price_dates_from'] ) ) {
9
+ $_POST['_sale_price_dates_from'] = gregdate( 'Y-m-d', $_POST['_sale_price_dates_from'] );
10
+ }
11
+ if ( isset( $_POST['_sale_price_dates_to'] ) and ! empty( $_POST['_sale_price_dates_to'] ) ) {
12
+ $_POST['_sale_price_dates_to'] = gregdate( 'Y-m-d', $_POST['_sale_price_dates_to'] );
13
+ }
14
+ }
15
 
16
+ return $data;
 
 
 
 
 
 
 
 
 
 
17
  }
18
 
19
+ function getGTLangCustomFieldValue( $metadata, $object_id, $meta_key, $single ) {
20
+ if ( $meta_key == '_sale_price_dates_from' ) {
21
+ var_dump( $_POST );
22
+ var_dump( func_get_args() );//die;
23
+ }
24
+ if ( $meta_key == '_sale_price_dates_to' ) {
25
+ var_dump( $_POST );
26
+ var_dump( func_get_args() );//die;
27
+ }
 
 
 
28
  }
29
 
30
+ //add_filter( 'update_post_metadata', 'getGTLangCustomFieldValue', 10, 4 );
includes/plugins/woocommerce.php CHANGED
@@ -1,75 +1,325 @@
1
  <?php
2
 
 
 
3
  /**
4
  * Makes WooCommerce compatible with WP-Parsidate plugin
5
  *
6
  * @package WP-Parsidate
7
  * @subpackage Plugins/WooCommerce
8
- * @author Ehsaan
9
- * @author Farhan Nisi
10
  */
11
- class WPP_WooCommerce
12
- {
13
- public static $instance = null;
14
-
15
- /**
16
- * Hooks required tags
17
- */
18
- private function __construct()
19
- {
20
- global $wpp_settings;
21
- add_filter('wpp_plugins_compability_settings', array($this, 'add_settings'));
22
-
23
- if (isset($wpp_settings['woo_per_price']) && $wpp_settings['woo_per_price'] != 'disable') {
24
- add_filter('woocommerce_sale_price_html', 'per_number');
25
- add_filter('woocommerce_price_html', 'per_number');
26
- }
27
- }
28
-
29
- /**
30
- * Returns an instance of class
31
- *
32
- * @return WPP_WooCommerce
33
- */
34
- public static function getInstance()
35
- {
36
- if (self::$instance == null) {
37
- self::$instance = new WPP_WooCommerce();
38
- }
39
-
40
- return self::$instance;
41
- }
42
-
43
- /**
44
- * Adds settings for toggle fixing
45
- *
46
- * @param array $old_settings Old settings
47
- *
48
- * @return array New settings
49
- */
50
- public function add_settings($old_settings)
51
- {
52
- $options = array(
53
- 'enable' => __('Enable', 'wp-parsidate'),
54
- 'disable' => __('Disable', 'wp-parsidate')
55
- );
56
- $settings = array(
57
- 'woocommerce' => array(
58
- 'id' => 'woocommerce',
59
- 'name' => __('WooCommerce', 'wp-parsidate'),
60
- 'type' => 'header'
61
- ),
62
- 'woo_per_price' => array(
63
- 'id' => 'woo_per_price',
64
- 'name' => __('Fix prices', 'wp-parsidate'),
65
- 'type' => 'radio',
66
- 'options' => $options,
67
- 'std' => 'disable'
68
- )
69
- );
70
-
71
- return array_merge($old_settings, $settings);
72
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  }
74
 
75
  return WPP_WooCommerce::getInstance();
1
  <?php
2
 
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Makes WooCommerce compatible with WP-Parsidate plugin
7
  *
8
  * @package WP-Parsidate
9
  * @subpackage Plugins/WooCommerce
 
 
10
  */
11
+ class WPP_WooCommerce {
12
+ public static $instance = null;
13
+
14
+ /**
15
+ * Hooks required tags
16
+ */
17
+ private function __construct() {
18
+ add_filter( 'wpp_plugins_compatibility_settings', array( $this, 'add_settings' ) );
19
+
20
+ if ( class_exists( 'WooCommerce' ) && get_locale() === 'fa_IR' ) {
21
+ if ( wpp_is_active( 'woo_per_price' ) ) {
22
+ add_filter( 'wc_price', 'fix_number' );
23
+ add_filter( 'woocommerce_get_price_html', 'fix_number' );
24
+ add_filter( 'woocommerce_cart_item_price', 'fix_number' );
25
+ add_filter( 'woocommerce_cart_item_subtotal', 'fix_number' );
26
+ add_filter( 'woocommerce_cart_subtotal', 'fix_number' );
27
+ add_filter( 'woocommerce_cart_totals_coupon_html', 'fix_number' );
28
+ add_filter( 'woocommerce_cart_shipping_method_full_label', 'fix_number' );
29
+ add_filter( 'woocommerce_cart_total', 'fix_number' );
30
+ }
31
+
32
+ if ( wpp_is_active( 'woo_fix_date' ) ) {
33
+ // Jalali datepicker
34
+ add_action( 'admin_enqueue_scripts', array( $this, 'wpp_admin_woocommerce_jalali_datepicker_assets' ) );
35
+
36
+ // Convert order_date using js
37
+ add_action( 'save_post', array($this, 'wpp_change_order_date_on_save_order'), 0, 2 );
38
+ add_action( 'admin_footer', array( $this, 'wpp_fix_show_created_order_date' ) );
39
+
40
+ add_action( 'admin_init', array( $this, 'wpp_change_wc_report_dates' ), 1000 );
41
+ add_filter( 'wp_insert_post_data', array( $this, 'wpp_validate_dates_on_woocommerce_save_data' ), 1, 2 );
42
+ add_action( 'woocommerce_admin_process_variation_object', array( $this, 'wpp_convert_wc_variations_scheduled_sale_dates' ), 1000, 2 );
43
+
44
+ add_filter( 'get_post_metadata', array( $this, 'wpp_change_wc_order_date_and_coupon_expires' ), 10, 4 );
45
+
46
+ add_filter( 'manage_edit-shop_coupon_columns', array( $this, 'wpp_remove_wc_coupon_expiry_date_column' ), 10, 1 );
47
+ add_action( 'manage_shop_coupon_posts_custom_column', array( $this, 'wpp_add_jalali_expiry_date_column' ), 10, 2 );
48
+ }
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Returns an instance of class
54
+ *
55
+ * @return WPP_WooCommerce
56
+ */
57
+ public static function getInstance() {
58
+ if ( self::$instance == null ) {
59
+ self::$instance = new WPP_WooCommerce();
60
+ }
61
+
62
+ return self::$instance;
63
+ }
64
+
65
+ /**
66
+ * Adds settings for toggle fixing
67
+ *
68
+ * @param array $old_settings Old settings
69
+ *
70
+ * @return array New settings
71
+ * @since 4.0.0
72
+ */
73
+ public function add_settings( $old_settings ) {
74
+ $settings = array(
75
+ 'woocommerce' => array(
76
+ 'id' => 'woocommerce',
77
+ 'name' => __( 'WooCommerce', 'wp-parsidate' ),
78
+ 'type' => 'header'
79
+ ),
80
+ 'woo_fix_date' => array(
81
+ 'id' => 'woo_fix_date',
82
+ 'name' => __( 'Jalali Datepicker', 'wp-parsidate' ),
83
+ 'type' => 'checkbox',
84
+ 'options' => 1,
85
+ 'std' => 0
86
+ ),
87
+ 'woo_per_price' => array(
88
+ 'id' => 'woo_per_price',
89
+ 'name' => __( 'Fix prices', 'wp-parsidate' ),
90
+ 'type' => 'checkbox',
91
+ 'options' => 1,
92
+ 'std' => 0
93
+ )
94
+ );
95
+
96
+ return array_merge( $old_settings, $settings );
97
+ }
98
+
99
+ /**
100
+ * enqueue jalali date picker assets
101
+ *
102
+ * @since 4.0.0
103
+ */
104
+ public function wpp_admin_woocommerce_jalali_datepicker_assets() {
105
+ $screen = get_current_screen();
106
+
107
+ if ( ! $screen || ! property_exists( $screen, 'post_type' ) ) {
108
+ return;
109
+ }
110
+
111
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
112
+ $current_screen = $screen->post_type;
113
+
114
+ if ( wpp_is_active( 'woo_fix_date' )
115
+ && in_array( $current_screen, array( 'product', 'shop_order', 'shop_coupon', 'wc-reports' ) ) ) {
116
+ wp_enqueue_script( 'wpp-jalali-datepicker', WP_PARSI_URL . 'assets/js/jalalidatepicker.min.js', array( 'jquery', 'jquery-ui-datepicker' ), WP_PARSI_VER );
117
+ wp_enqueue_style( 'wpp-jalali-datepicker', WP_PARSI_URL . "assets/css/jalalidatepicker$suffix.css", null, WP_PARSI_VER );
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Unfortunately WooCommerce does not use standard functions for dates,
123
+ * so we have to change values after or before submission.
124
+ *
125
+ * @param $post_id
126
+ * @param $post
127
+ * @since 4.0.0
128
+ */
129
+ public function wpp_change_order_date_on_save_order( $post_id, $post ) {
130
+ $post_type = get_post_type( $post_id );
131
+
132
+ if ( 'shop_order' === $post_type && ! empty( $_POST['order_date'] ) ) {
133
+ $_POST['order_date'] = gregdate( 'Y-m-d', $_POST['order_date'] );
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Changes order_date field in "Edit order" screen using JS
139
+ *
140
+ * @since 4.0.0
141
+ */
142
+ public function wpp_fix_show_created_order_date() {
143
+ $screen = get_current_screen();
144
+ $screen_id = $screen ? $screen->id : '';
145
+
146
+ if ( 'shop_order' !== $screen_id ) {
147
+ return;
148
+ }
149
+
150
+ global $post;
151
+
152
+ if ( ! $post ) {
153
+ return;
154
+ }
155
+
156
+ $jalali_date = parsidate( 'Y-m-d', date( 'Y-m-d', strtotime( $post->post_date ) ) );
157
+
158
+ echo '<script>jQuery(function($){$("input[name=order_date]").val("' . $jalali_date . '")})</script>';
159
+ }
160
+
161
+ /**
162
+ * Convert selected Jalali dates to gregorian on woocommerce save data
163
+ *
164
+ * @param $post
165
+ * @param $arg
166
+ *
167
+ * @return mixed
168
+ * @since 4.0.0
169
+ */
170
+ public function wpp_validate_dates_on_woocommerce_save_data( $post, $arg ) {
171
+ if ( empty( $post['post_type'] ) ) {
172
+ return $post;
173
+ }
174
+
175
+ switch ( $post['post_type'] ) {
176
+ case 'product':
177
+ if ( ! empty( $_POST['_sale_price_dates_from'] ) ) {
178
+ $_POST['_sale_price_dates_from'] = gregdate( 'Y-m-d', esc_attr( $_POST['_sale_price_dates_from'] ) );
179
+ }
180
+
181
+ if ( ! empty( $_POST['_sale_price_dates_to'] ) && $post['post_type'] == 'product' ) {
182
+ $_POST['_sale_price_dates_to'] = gregdate( 'Y-m-d', esc_attr( $_POST['_sale_price_dates_to'] ) );
183
+ }
184
+
185
+ break;
186
+ case 'shop_coupon':
187
+ if ( ! empty( $_POST['expiry_date'] ) ) {
188
+ $_POST['expiry_date'] = gregdate( 'Y-m-d', esc_attr( $_POST['expiry_date'] ) );
189
+ }
190
+
191
+ break;
192
+ }
193
+
194
+ return $post;
195
+ }
196
+
197
+ /**
198
+ * Changes coupon expire date on load coupon data
199
+ * We use $wpdb to avoid creating an infinite loop
200
+ *
201
+ * @param $metadata
202
+ * @param $object_id
203
+ * @param $meta_key
204
+ * @param $single
205
+ *
206
+ * @return int|mixed|string
207
+ *
208
+ * @since 4.0.0
209
+ */
210
+ public function wpp_change_wc_order_date_and_coupon_expires( $metadata, $object_id, $meta_key, $single ) {
211
+ global $wpdb;
212
+
213
+ $post_type = get_post_type( $object_id );
214
+ $action = isset( $_GET['action'] ) && $_GET['action'] == 'edit';
215
+
216
+ if ( $action && 'shop_coupon' === $post_type && 'date_expires' === $meta_key ) {
217
+ $metadata = $wpdb->get_var(
218
+ $wpdb->prepare(
219
+ "
220
+ SELECT meta_value
221
+ From $wpdb->postmeta
222
+ WHERE post_id = %d
223
+ AND meta_key = '%s'
224
+ ",
225
+ $object_id,
226
+ $meta_key
227
+ )
228
+ );
229
+
230
+ if ( ! empty( $metadata ) ) {
231
+ return parsidate( 'Y-m-d', $metadata );
232
+ }
233
+ }
234
+
235
+ return $metadata;
236
+ }
237
+
238
+ /**
239
+ * Changes gregorian dates to Jalali date on wc report screen
240
+ *
241
+ * @since 4.0.0
242
+ */
243
+ public function wpp_change_wc_report_dates() {
244
+ if ( ! empty( $_GET['page'] ) && 'wc-reports' === esc_attr( $_GET['page'] ) ) {
245
+ if ( ! empty( $_GET['start_date'] ) ) {
246
+ $_GET['start_date'] = esc_attr( gregdate( 'Y-m-d', $_GET['start_date'] ) );
247
+ }
248
+
249
+ if ( ! empty( $_GET['end_date'] ) ) {
250
+ $_GET['end_date'] = esc_attr( gregdate( 'Y-m-d', $_GET['end_date'] ) );
251
+ }
252
+ }
253
+ }
254
+
255
+ /**
256
+ * Converts variations selected Jalali dates to gregorian
257
+ *
258
+ * @param $variation
259
+ * @param $index
260
+ *
261
+ * @since 4.0.0
262
+ */
263
+ public function wpp_convert_wc_variations_scheduled_sale_dates( $variation, $index ) {
264
+ $date_on_sale_from = '';
265
+ $date_on_sale_to = '';
266
+
267
+ if ( ! empty( $_POST['variable_sale_price_dates_from'][ $index ] ) ) {
268
+ $date_on_sale_from = wc_clean( wp_unslash( $_POST['variable_sale_price_dates_from'][ $index ] ) );
269
+
270
+ if ( ! empty( $date_on_sale_from ) ) {
271
+ $date_on_sale_from = gregdate( 'Y-m-d 00:00:00', $date_on_sale_from );
272
+ }
273
+ }
274
+
275
+ if ( ! empty( $_POST['variable_sale_price_dates_to'][ $index ] ) ) {
276
+ $date_on_sale_to = wc_clean( wp_unslash( $_POST['variable_sale_price_dates_to'][ $index ] ) );
277
+
278
+ if ( ! empty( $date_on_sale_to ) ) {
279
+ $date_on_sale_to = gregdate( 'Y-m-d 23:59:59', $date_on_sale_to );
280
+ }
281
+ }
282
+
283
+ $variation->set_props(
284
+ array(
285
+ 'date_on_sale_from' => $date_on_sale_from,
286
+ 'date_on_sale_to' => $date_on_sale_to,
287
+ )
288
+ );
289
+
290
+ $variation->save();
291
+ }
292
+
293
+ /**
294
+ * Remove default wc expire date column in coupons screen and add our custom column
295
+ *
296
+ * @param $columns
297
+ *
298
+ * @return mixed
299
+ * @since 4.0.0
300
+ */
301
+ public function wpp_remove_wc_coupon_expiry_date_column( $columns ) {
302
+ unset( $columns['expiry_date'] );
303
+
304
+ $columns['wpp_expiry_date'] = __( 'Expiry date', 'woocommerce' );
305
+
306
+ return $columns;
307
+ }
308
+
309
+ /**
310
+ * Fill our custom date expires column value
311
+ *
312
+ * @param $column
313
+ * @param $postid
314
+ * @since 4.0.0
315
+ */
316
+ public function wpp_add_jalali_expiry_date_column( $column, $postid ) {
317
+ if ( $column == 'wpp_expiry_date' ) {
318
+ $date = get_post_meta( $postid, 'date_expires', true );
319
+
320
+ echo ! empty( $date ) ? parsidate( 'Y-m-d', $date ) : '&ndash;';
321
+ }
322
+ }
323
  }
324
 
325
  return WPP_WooCommerce::getInstance();
includes/settings.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Adds settings part to plugin
4
  * Originally, wrote by Pippin Williamson
@@ -10,38 +13,33 @@
10
  * @package WP-Parsidate
11
  * @subpackage Admin/Settings
12
  */
13
- if (!defined('ABSPATH')) {
14
- exit;
15
- } // No direct access allowed ;)
16
-
17
- add_action('admin_menu', 'wpp_add_settings_menu', 11);
18
 
19
  /**
20
  * Add WP-Parsidate admin page settings
21
  * */
22
- function wpp_add_settings_menu()
23
- {
24
- global $wpp_settings;
25
-
26
- if ($wpp_settings['submenu_move'] != 'disable') {
27
  add_submenu_page(
28
- 'options-general.php',
29
- __('Parsi Settings', 'wp-parsidate'),
30
- __('Parsi Settings', 'wp-parsidate'),
31
- 'manage_options',
32
- 'wp-parsi-settings',
33
- 'wpp_render_settings'
34
  );
35
  } else {
36
  add_menu_page(
37
- __('Parsi Settings', 'wp-parsidate'),
38
- __('Parsi Settings', 'wp-parsidate'),
39
- 'manage_options',
40
- 'wp-parsi-settings',
41
- 'wpp_render_settings',
42
- 'dashicons-admin-site'
43
  );
44
  }
 
 
45
  }
46
 
47
  /**
@@ -50,29 +48,39 @@ function wpp_add_settings_menu()
50
  * @return array Parsi Settings
51
  * @since 2.0
52
  */
53
- function wp_parsi_get_settings()
54
- {
55
- $settings = get_option('wpp_settings');
56
- if (empty($settings)) {
57
- update_option('wpp_settings', array(
58
- 'admin_lang' => 'disable',
59
- 'user_lang' => 'disable',
60
- 'submenu_move' => 'disable',
61
- 'persian_date' => 'disable',
62
- 'conv_title' => 'disable',
63
- 'conv_contents' => 'disable',
64
- 'conv_excerpt' => 'disable',
65
- 'conv_comments' => 'disable',
66
- 'conv_comment_count' => 'disable',
67
- 'conv_dates' => 'disable',
68
- 'conv_cats' => 'disable',
69
- 'conv_arabic' => 'disable',
70
- 'conv_permalinks' => 'disable',
71
- 'news_source' => 'parsi'
72
- ));
 
 
73
  }
 
 
 
 
 
 
 
 
74
 
75
- return apply_filters('wpp_get_settings', $settings);
76
  }
77
 
78
  /**
@@ -81,46 +89,45 @@ function wp_parsi_get_settings()
81
  * @return void
82
  * @since 2.0
83
  */
84
- function wpp_register_settings()
85
- {
86
- if (false == get_option('wpp_settings')) {
87
- add_option('wpp_settings');
88
  }
89
 
90
- foreach (wpp_get_registered_settings() as $tab => $settings) {
91
  add_settings_section(
92
- 'wpp_settings_' . $tab,
93
- __return_null(),
94
- '__return_false',
95
- 'wpp_settings_' . $tab
96
  );
97
 
98
- foreach ($settings as $option) {
99
- $name = isset($option['name']) ? $option['name'] : '';
100
 
101
  add_settings_field(
102
- 'wpp_settings[' . $option['id'] . ']',
103
- $name,
104
- function_exists('wpp_' . $option['type'] . '_callback') ? 'wpp_' . $option['type'] . '_callback' : 'wpp_missing_callback',
105
- 'wpp_settings_' . $tab,
106
- 'wpp_settings_' . $tab,
107
- array(
108
- 'id' => isset($option['id']) ? $option['id'] : null,
109
- 'desc' => !empty($option['desc']) ? $option['desc'] : '',
110
- 'name' => isset($option['name']) ? $option['name'] : null,
111
- 'section' => $tab,
112
- 'size' => isset($option['size']) ? $option['size'] : null,
113
- 'options' => isset($option['options']) ? $option['options'] : '',
114
- 'std' => isset($option['std']) ? $option['std'] : ''
115
- )
116
  );
117
 
118
- register_setting('wpp_settings', 'wpp_settings', 'wpp_settings_sanitize');
119
  }
120
  }
121
  }
122
 
123
- add_action('admin_init', 'wpp_register_settings');
124
 
125
  /**
126
  * Gets settings tabs
@@ -128,15 +135,12 @@ add_action('admin_init', 'wpp_register_settings');
128
  * @return array Tabs list
129
  * @since 2.0
130
  */
131
- function wpp_get_tabs()
132
- {
133
- $tabs = array(
134
- 'core' => sprintf(__('%s Core', 'wp-parsidate'), '<span class="dashicons dashicons-admin-site"></span>'),
135
- 'conv' => sprintf(__('%s Converts', 'wp-parsidate'), '<span class="dashicons dashicons-admin-settings"></span>'),
136
- 'plugins' => sprintf(__('%s Plugins compability', 'wp-parsidate'), '<span class="dashicons dashicons-admin-plugins"></span>')
137
  );
138
-
139
- return $tabs;
140
  }
141
 
142
  /**
@@ -148,59 +152,50 @@ function wpp_get_tabs()
148
  * @since 2.0
149
  *
150
  */
151
- function wpp_settings_sanitize($input = array())
152
- {
153
-
154
  global $wpp_settings;
155
 
156
- if (empty($_POST['_wp_http_referer'])) {
157
  return $input;
158
  }
159
 
160
- parse_str($_POST['_wp_http_referer'], $referrer);
161
 
162
  $settings = wpp_get_registered_settings();
163
- $tab = isset($referrer['tab']) ? $referrer['tab'] : 'core';
164
-
165
- $input = $input ? $input : array();
166
- $input = apply_filters('wpp_settings_' . $tab . '_sanitize', $input);
167
 
168
  // Loop through each setting being saved and pass it through a sanitization filter
169
- foreach ($input as $key => $value) {
170
-
171
- // Get the setting type (checkbox, select, etc)
172
- $type = isset($settings[$tab][$key]['type']) ? $settings[$tab][$key]['type'] : false;
173
 
174
- if ($type) {
175
  // Field type specific filter
176
- $input[$key] = apply_filters('wpp_settings_sanitize_' . $type, $value, $key);
177
  }
178
 
179
  // General filter
180
- $input[$key] = apply_filters('wpp_settings_sanitize', $value, $key);
181
  }
182
 
183
-
184
  // Loop through the whitelist and unset any that are empty for the tab being saved
185
- if (!empty($settings[$tab])) {
186
- foreach ($settings[$tab] as $key => $value) {
187
-
188
  // settings used to have numeric keys, now they have keys that match the option ID. This ensures both methods work
189
- if (is_numeric($key)) {
190
  $key = $value['id'];
191
  }
192
 
193
- if (empty($input[$key])) {
194
- unset($wpp_settings[$key]);
195
  }
196
  }
197
  }
198
 
199
  // Merge our new settings with the existing
200
- $output = array_merge($wpp_settings, $input);
201
-
202
- return $output;
203
-
204
  }
205
 
206
  /**
@@ -209,289 +204,330 @@ function wpp_settings_sanitize($input = array())
209
  * @return array Fields
210
  * @since 2.0
211
  */
212
- function wpp_get_registered_settings()
213
- {
214
  $options = array(
215
- 'enable' => __('Enable', 'wp-parsidate'),
216
- 'disable' => __('Disable', 'wp-parsidate')
217
  );
218
- $settings = apply_filters('wpp_registered_settings', array(
219
- 'core' => apply_filters('wpp_core_settings', array(
220
- 'admin_lang' => array(
221
- 'id' => 'admin_lang',
222
- 'name' => __('Change Locale in admin', 'wp-parsidate'),
223
- 'type' => 'radio',
224
- 'options' => $options,
225
- 'std' => 'disable',
226
- 'desc' => __('This option change WordPress locale to Persian in Admin', 'wp-parsidate')
227
- ),
228
- 'user_lang' => array(
229
- 'id' => 'user_lang',
230
- 'name' => __('Change Locale in theme', 'wp-parsidate'),
231
- 'type' => 'radio',
232
- 'options' => $options,
233
- 'std' => 'disable',
234
- 'desc' => __('This option change WordPress locale to Persian in theme', 'wp-parsidate')
235
- ),
236
- 'persian_date' => array(
237
- 'id' => 'persian_date',
238
- 'name' => __('Shamsi date', 'wp-parsidate'),
239
- 'type' => 'radio',
240
- 'options' => $options,
241
- 'std' => 'disable',
242
- 'desc' => __('By enabling this, Dates will convert to Shamsi (Jalali) dates', 'wp-parsidate')
243
- ),
244
- 'submenu_move' => array(
245
- 'id' => 'submenu_move',
246
- 'name' => __('Move page to submenu?', 'wp-parsidate'),
247
- 'type' => 'radio',
248
- 'options' => $options,
249
- 'std' => 'disable',
250
- 'desc' => __('With enabling this option, page item will be moved to Settings menu as submenu.', 'wp-parsidate')
251
- ),
252
- )),
253
- 'conv' => apply_filters('wpp_conv_settings', array(
254
- 'conv_nums' => array(
255
- 'id' => 'conv_nums',
256
- 'name' => __('Persian digits', 'wp-parsidate'),
257
- 'type' => 'header'
258
- ),
259
- 'conv_page_title' => array(
260
- 'id' => 'conv_page_title',
261
- 'name' => __('Page title', 'wp-parsidate'),
262
- 'type' => 'radio',
263
- 'options' => $options,
264
- 'std' => 'disable'
265
- ),
266
- 'conv_title' => array(
267
- 'id' => 'conv_title',
268
- 'name' => __('Post title', 'wp-parsidate'),
269
- 'type' => 'radio',
270
- 'options' => $options,
271
- 'std' => 'disable'
272
- ),
273
- 'conv_contents' => array(
274
- 'id' => 'conv_contents',
275
- 'name' => __('Post content', 'wp-parsidate'),
276
- 'type' => 'radio',
277
- 'options' => $options,
278
- 'std' => 'enable'
279
- ),
280
- 'conv_excerpt' => array(
281
- 'id' => 'conv_excerpt',
282
- 'name' => __('Post excerpt', 'wp-parsidate'),
283
- 'type' => 'radio',
284
- 'options' => $options,
285
- 'std' => 'disable'
286
- ),
287
- 'conv_comments' => array(
288
- 'id' => 'conv_comments',
289
- 'name' => __('Comments text', 'wp-parsidate'),
290
- 'type' => 'radio',
291
- 'options' => $options,
292
- 'std' => 'disable'
293
- ),
294
- 'conv_comment_count' => array(
295
- 'id' => 'conv_comment_count',
296
- 'name' => __('Comments count', 'wp-parsidate'),
297
- 'type' => 'radio',
298
- 'options' => $options,
299
- 'std' => 'disable'
300
- ),
301
- 'conv_dates' => array(
302
- 'id' => 'conv_dates',
303
- 'name' => __('Dates', 'wp-parsidate'),
304
- 'type' => 'radio',
305
- 'options' => $options,
306
- 'std' => 'disable'
307
- ),
308
- 'conv_cats' => array(
309
- 'id' => 'conv_cats',
310
- 'name' => __('Categories', 'wp-parsidate'),
311
- 'type' => 'radio',
312
- 'options' => $options,
313
- 'std' => 'disable'
314
- ),
315
- 'sep' => array(
316
- 'id' => 'sep',
317
- 'type' => 'header'
318
- ),
319
- 'conv_arabic' => array(
320
- 'id' => 'conv_arabic',
321
- 'name' => __('Fix arabic characters', 'wp-parsidate'),
322
- 'type' => 'radio',
323
- 'options' => $options,
324
- 'std' => 'disable',
325
- 'desc' => __('Fixes arabic characters caused by wrong keyboard layouts', 'wp-parsidate')
326
- ),
327
- 'conv_permalinks' => array(
328
- 'id' => 'conv_permalinks',
329
- 'name' => __('Fix permalinks dates', 'wp-parsidate'),
330
- 'type' => 'radio',
331
- 'options' => $options,
332
- 'std' => 'disable',
333
- 'desc' => __('By enabling this, dates in permalinks converted to Shamsi (Jalali) date', 'wp-parsidate')
334
- ),
335
- 'sep_font' => array(
336
- 'id' => 'sep_font',
337
- 'type' => 'header'
338
- )
339
- )),
340
- 'plugins' => apply_filters('wpp_plugins_compability_settings', array())
341
- ));
342
-
343
- return $settings;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
344
  }
345
 
346
  /* Form Callbacks Made by EDD Development Team */
347
- function wpp_header_callback($args)
348
- {
 
 
349
  echo '<hr/>';
350
  }
351
 
352
- function wpp_checkbox_callback($args)
353
- {
 
 
354
  global $wpp_settings;
355
 
356
- $checked = isset($wpp_settings[$args['id']]) ? checked(1, $wpp_settings[$args['id']], false) : '';
357
- $html = '<input type="checkbox" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="1" ' . $checked . '/>';
358
- $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
 
 
 
 
 
359
 
360
  echo $html;
361
  }
362
 
363
- function wpp_multicheck_callback($args)
364
- {
365
- global $wpp_settings;
366
-
367
  $html = '';
368
- foreach ($args['options'] as $key => $value) {
 
369
  $option_name = $args['id'] . '-' . $key;
370
- wpp_checkbox_callback(array(
371
- 'id' => $option_name,
372
- 'desc' => $value
373
- ));
 
 
374
  echo '<br>';
375
  }
376
 
377
  echo $html;
378
  }
379
 
380
- function wpp_radio_callback($args)
381
- {
 
 
382
  global $wpp_settings;
383
 
384
- foreach ($args['options'] as $key => $option) :
385
  $checked = false;
386
 
387
- if (isset($wpp_settings[$args['id']]) && $wpp_settings[$args['id']] == $key) {
388
  $checked = true;
389
- } elseif (isset($args['std']) && $args['std'] == $key && !isset($wpp_settings[$args['id']])) {
390
  $checked = true;
391
  }
392
 
393
- echo '<input name="wpp_settings[' . $args['id'] . ']"" id="wpp_settings[' . $args['id'] . '][' . $key . ']" type="radio" value="' . $key . '" ' . checked(true, $checked, false) . '/>';
394
  echo '<label for="wpp_settings[' . $args['id'] . '][' . $key . ']">' . $option . '</label>&nbsp;&nbsp;';
395
  endforeach;
396
 
397
  echo '<p class="description">' . $args['desc'] . '</p>';
398
  }
399
 
400
- function wpp_text_callback($args)
401
- {
 
 
402
  global $wpp_settings;
403
 
404
- if (isset($wpp_settings[$args['id']])) {
405
- $value = $wpp_settings[$args['id']];
406
  } else {
407
- $value = isset($args['std']) ? $args['std'] : '';
408
  }
409
 
410
- $size = (isset($args['size']) && !is_null($args['size'])) ? $args['size'] : 'regular';
411
- $html = '<input type="text" class="' . $size . '-text" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr(stripslashes($value)) . '"/>';
412
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
413
 
414
  echo $html;
415
  }
416
 
417
- function wpp_number_callback($args)
418
- {
 
 
419
  global $wpp_settings;
420
 
421
- if (isset($wpp_settings[$args['id']])) {
422
- $value = $wpp_settings[$args['id']];
423
  } else {
424
- $value = isset($args['std']) ? $args['std'] : '';
425
  }
426
 
427
- $max = isset($args['max']) ? $args['max'] : 999999;
428
- $min = isset($args['min']) ? $args['min'] : 0;
429
- $step = isset($args['step']) ? $args['step'] : 1;
430
-
431
- $size = (isset($args['size']) && !is_null($args['size'])) ? $args['size'] : 'regular';
432
- $html = '<input type="number" step="' . esc_attr($step) . '" max="' . esc_attr($max) . '" min="' . esc_attr($min) . '" class="' . $size . '-text" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr(stripslashes($value)) . '"/>';
433
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
434
 
435
  echo $html;
436
  }
437
 
438
- function wpp_textarea_callback($args)
439
- {
 
 
440
  global $wpp_settings;
441
 
442
- if (isset($wpp_settings[$args['id']])) {
443
- $value = $wpp_settings[$args['id']];
444
  } else {
445
- $value = isset($args['std']) ? $args['std'] : '';
446
  }
447
 
448
- $size = (isset($args['size']) && !is_null($args['size'])) ? $args['size'] : 'regular';
449
- $html = '<textarea class="large-text" cols="50" rows="5" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']">' . esc_textarea(stripslashes($value)) . '</textarea>';
450
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
451
 
452
  echo $html;
453
  }
454
 
455
- function wpp_password_callback($args)
456
- {
 
 
457
  global $wpp_settings;
458
 
459
- if (isset($wpp_settings[$args['id']])) {
460
- $value = $wpp_settings[$args['id']];
461
  } else {
462
- $value = isset($args['std']) ? $args['std'] : '';
463
  }
464
 
465
- $size = (isset($args['size']) && !is_null($args['size'])) ? $args['size'] : 'regular';
466
- $html = '<input type="password" class="' . $size . '-text" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr($value) . '"/>';
467
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
468
 
469
  echo $html;
470
  }
471
 
472
- function wpp_missing_callback($args)
473
- {
 
 
 
 
474
  echo '&ndash;';
475
 
476
  return false;
477
  }
478
 
479
 
480
- function wpp_select_callback($args)
481
- {
 
 
482
  global $wpp_settings;
483
 
484
- if (isset($wpp_settings[$args['id']])) {
485
- $value = $wpp_settings[$args['id']];
486
  } else {
487
- $value = isset($args['std']) ? $args['std'] : '';
488
  }
489
 
490
  $html = '<select id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']"/>';
491
 
492
- foreach ($args['options'] as $option => $name) :
493
- $selected = selected($option, $value, false);
494
- $html .= '<option value="' . $option . '" ' . $selected . '>' . $name . '</option>';
495
  endforeach;
496
 
497
  $html .= '</select>';
@@ -500,21 +536,23 @@ function wpp_select_callback($args)
500
  echo $html;
501
  }
502
 
503
- function wpp_color_select_callback($args)
504
- {
 
 
505
  global $wpp_settings;
506
 
507
- if (isset($wpp_settings[$args['id']])) {
508
- $value = $wpp_settings[$args['id']];
509
  } else {
510
- $value = isset($args['std']) ? $args['std'] : '';
511
  }
512
 
513
  $html = '<select id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']"/>';
514
 
515
- foreach ($args['options'] as $option => $color) :
516
- $selected = selected($option, $value, false);
517
- $html .= '<option value="' . $option . '" ' . $selected . '>' . $color['label'] . '</option>';
518
  endforeach;
519
 
520
  $html .= '</select>';
@@ -523,20 +561,28 @@ function wpp_color_select_callback($args)
523
  echo $html;
524
  }
525
 
526
- function wpp_rich_editor_callback($args)
527
- {
 
 
528
  global $wpp_settings, $wp_version;
529
 
530
- if (isset($wpp_settings[$args['id']])) {
531
- $value = $wpp_settings[$args['id']];
532
  } else {
533
- $value = isset($args['std']) ? $args['std'] : '';
534
  }
535
 
536
- if ($wp_version >= 3.3 && function_exists('wp_editor')) {
537
- $html = wp_editor(stripslashes($value), 'wpp_settings[' . $args['id'] . ']', array('textarea_name' => 'wpp_settings[' . $args['id'] . ']'));
 
 
 
 
 
 
538
  } else {
539
- $html = '<textarea class="large-text" rows="10" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']">' . esc_textarea(stripslashes($value)) . '</textarea>';
540
  }
541
 
542
  $html .= '<br/><label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
@@ -544,76 +590,77 @@ function wpp_rich_editor_callback($args)
544
  echo $html;
545
  }
546
 
547
- function wpp_upload_callback($args)
548
- {
 
 
549
  global $wpp_settings;
550
 
551
- if (isset($wpp_settings[$args['id']])) {
552
- $value = $wpp_settings[$args['id']];
553
  } else {
554
- $value = isset($args['std']) ? $args['std'] : '';
555
  }
556
 
557
- $size = (isset($args['size']) && !is_null($args['size'])) ? $args['size'] : 'regular';
558
- $html = '<input type="text" class="' . $size . '-text wpp_upload_field" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr(stripslashes($value)) . '"/>';
559
- $html .= '<span>&nbsp;<input type="button" class="wpp_settings_upload_button button-secondary" value="' . __('Upload File', 'wpp') . '"/></span>';
560
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
561
 
562
  echo $html;
563
  }
564
 
565
- function wpp_color_callback($args)
566
- {
 
 
567
  global $wpp_settings;
568
 
569
- if (isset($wpp_settings[$args['id']])) {
570
- $value = $wpp_settings[$args['id']];
571
  } else {
572
- $value = isset($args['std']) ? $args['std'] : '';
573
  }
574
 
575
- $default = isset($args['std']) ? $args['std'] : '';
576
-
577
- $size = (isset($args['size']) && !is_null($args['size'])) ? $args['size'] : 'regular';
578
- $html = '<input type="text" class="wpp-color-picker" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr($value) . '" data-default-color="' . esc_attr($default) . '" />';
579
- $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
580
 
581
  echo $html;
582
  }
583
 
584
- function wpp_render_settings()
585
- {
586
- global $wpp_settings;
587
- $active_tab = isset($_GET['tab']) && array_key_exists($_GET['tab'], wpp_get_tabs()) ? $_GET['tab'] : 'core';
588
 
589
  ob_start();
590
  ?>
591
  <div class="wrap wpp-settings-wrap">
592
- <h2><?php _e('Parsi Settings', 'wp-parsidate') ?></h2>
593
  <h2 class="nav-tab-wrapper">
594
  <?php
595
- foreach (wpp_get_tabs() as $tab_id => $tab_name) {
596
 
597
- $tab_url = add_query_arg(array(
598
- 'settings-updated' => false,
599
- 'tab' => $tab_id
600
- ));
601
 
602
  $active = $active_tab == $tab_id ? ' nav-tab-active' : '';
603
 
604
- echo '<a href="' . esc_url($tab_url) . '" title="' . esc_attr($tab_name) . '" class="nav-tab' . $active . '">';
605
  echo $tab_name;
606
  echo '</a>';
607
  }
608
  ?>
609
  </h2>
610
- <?php settings_errors('wpp-notices'); ?>
611
  <div id="tab_container">
612
  <form method="post" action="options.php">
613
  <table class="form-table">
614
  <?php
615
- settings_fields('wpp_settings');
616
- do_settings_fields('wpp_settings_' . $active_tab, 'wpp_settings_' . $active_tab);
617
  ?>
618
  </table>
619
  <?php submit_button(); ?>
@@ -622,4 +669,35 @@ function wpp_render_settings()
622
  </div><!-- .wrap -->
623
  <?php
624
  echo ob_get_clean();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
625
  }
1
  <?php
2
+
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * Adds settings part to plugin
7
  * Originally, wrote by Pippin Williamson
13
  * @package WP-Parsidate
14
  * @subpackage Admin/Settings
15
  */
16
+ add_action( 'admin_menu', 'wpp_add_settings_menu', 11 );
 
 
 
 
17
 
18
  /**
19
  * Add WP-Parsidate admin page settings
20
  * */
21
+ function wpp_add_settings_menu() {
22
+ if ( wpp_is_active( 'submenu_move' ) ) {
 
 
 
23
  add_submenu_page(
24
+ 'options-general.php',
25
+ __( 'Parsi Settings', 'wp-parsidate' ),
26
+ __( 'Parsi Settings', 'wp-parsidate' ),
27
+ 'manage_options',
28
+ 'wp-parsi-settings',
29
+ 'wpp_render_settings'
30
  );
31
  } else {
32
  add_menu_page(
33
+ __( 'Parsi Settings', 'wp-parsidate' ),
34
+ __( 'Parsi Settings', 'wp-parsidate' ),
35
+ 'manage_options',
36
+ 'wp-parsi-settings',
37
+ 'wpp_render_settings',
38
+ 'dashicons-admin-site'
39
  );
40
  }
41
+
42
+ add_action( 'admin_enqueue_scripts', 'wpp_enqueue_setting_page_style' );
43
  }
44
 
45
  /**
48
  * @return array Parsi Settings
49
  * @since 2.0
50
  */
51
+ function wp_parsi_get_settings() {
52
+ $settings = get_option( 'wpp_settings' );
53
+
54
+ if ( empty( $settings ) ) {
55
+ update_option( 'wpp_settings', array(
56
+ 'admin_lang' => 'disable',
57
+ 'user_lang' => 'disable',
58
+ 'persian_date' => 'disable',
59
+ 'disable_widget_block' => 'disable',
60
+ 'submenu_move' => 'disable',
61
+ 'dev_mode' => 'disable',
62
+ 'conv_title' => 'disable',
63
+ 'conv_contents' => 'disable',
64
+ 'conv_excerpt' => 'disable',
65
+ 'conv_comments' => 'disable',
66
+ 'conv_comment_count' => 'disable',
67
+ 'conv_dates' => 'disable',
68
+ 'conv_cats' => 'disable',
69
+ 'conv_arabic' => 'disable',
70
+ 'conv_permalinks' => 'disable',
71
+ 'news_source' => 'parsi'
72
+ ) );
73
  }
74
+ // Check settings synced with wpp version 4.0.0
75
+ /*if ( ! empty( $settings ) ) {
76
+ $settings_ver = get_option( 'wpp_settings_ver' );
77
+
78
+ if ( empty( $settings_ver ) ) {
79
+ $settings = wpp_sync_setting_version( $settings );
80
+ }
81
+ }*/
82
 
83
+ return apply_filters( 'wpp_get_settings', $settings );
84
  }
85
 
86
  /**
89
  * @return void
90
  * @since 2.0
91
  */
92
+ function wpp_register_settings() {
93
+ if ( false == get_option( 'wpp_settings' ) ) {
94
+ add_option( 'wpp_settings', array() );
 
95
  }
96
 
97
+ foreach ( wpp_get_registered_settings() as $tab => $settings ) {
98
  add_settings_section(
99
+ 'wpp_settings_' . $tab,
100
+ __return_null(),
101
+ '__return_false',
102
+ 'wpp_settings_' . $tab
103
  );
104
 
105
+ foreach ( $settings as $option ) {
106
+ $name = isset( $option['name'] ) ? $option['name'] : '';
107
 
108
  add_settings_field(
109
+ 'wpp_settings[' . $option['id'] . ']',
110
+ $name,
111
+ function_exists( 'wpp_' . $option['type'] . '_callback' ) ? 'wpp_' . $option['type'] . '_callback' : 'wpp_missing_callback',
112
+ 'wpp_settings_' . $tab,
113
+ 'wpp_settings_' . $tab,
114
+ array(
115
+ 'id' => isset( $option['id'] ) ? $option['id'] : null,
116
+ 'desc' => ! empty( $option['desc'] ) ? $option['desc'] : '',
117
+ 'name' => isset( $option['name'] ) ? $option['name'] : null,
118
+ 'section' => $tab,
119
+ 'size' => isset( $option['size'] ) ? $option['size'] : null,
120
+ 'options' => isset( $option['options'] ) ? $option['options'] : '',
121
+ 'std' => isset( $option['std'] ) ? $option['std'] : ''
122
+ )
123
  );
124
 
125
+ register_setting( 'wpp_settings', 'wpp_settings', 'wpp_settings_sanitize' );
126
  }
127
  }
128
  }
129
 
130
+ add_action( 'admin_init', 'wpp_register_settings' );
131
 
132
  /**
133
  * Gets settings tabs
135
  * @return array Tabs list
136
  * @since 2.0
137
  */
138
+ function wpp_get_tabs() {
139
+ return array(
140
+ 'core' => sprintf( __( '%s Core', 'wp-parsidate' ), '<span class="dashicons dashicons-admin-site"></span>' ),
141
+ 'conv' => sprintf( __( '%s Converts', 'wp-parsidate' ), '<span class="dashicons dashicons-admin-settings"></span>' ),
142
+ 'plugins' => sprintf( __( '%s Plugins compatibility', 'wp-parsidate' ), '<span class="dashicons dashicons-admin-plugins"></span>' )
 
143
  );
 
 
144
  }
145
 
146
  /**
152
  * @since 2.0
153
  *
154
  */
155
+ function wpp_settings_sanitize( $input = array() ) {
 
 
156
  global $wpp_settings;
157
 
158
+ if ( empty( $_POST['_wp_http_referer'] ) ) {
159
  return $input;
160
  }
161
 
162
+ parse_str( $_POST['_wp_http_referer'], $referrer );
163
 
164
  $settings = wpp_get_registered_settings();
165
+ $tab = isset( $referrer['tab'] ) ? $referrer['tab'] : 'core';
166
+ $input = $input ?: array();
167
+ $input = apply_filters( 'wpp_settings_' . $tab . '_sanitize', $input );
 
168
 
169
  // Loop through each setting being saved and pass it through a sanitization filter
170
+ foreach ( $input as $key => $value ) {
171
+ // Get the setting type (checkbox, select, etc.)
172
+ $type = isset( $settings[ $tab ][ $key ]['type'] ) ? $settings[ $tab ][ $key ]['type'] : false;
 
173
 
174
+ if ( $type ) {
175
  // Field type specific filter
176
+ $input[ $key ] = apply_filters( 'wpp_settings_sanitize_' . $type, $value, $key );
177
  }
178
 
179
  // General filter
180
+ $input[ $key ] = apply_filters( 'wpp_settings_sanitize', $value, $key );
181
  }
182
 
 
183
  // Loop through the whitelist and unset any that are empty for the tab being saved
184
+ if ( ! empty( $settings[ $tab ] ) ) {
185
+ foreach ( $settings[ $tab ] as $key => $value ) {
 
186
  // settings used to have numeric keys, now they have keys that match the option ID. This ensures both methods work
187
+ if ( is_numeric( $key ) ) {
188
  $key = $value['id'];
189
  }
190
 
191
+ if ( empty( $input[ $key ] ) ) {
192
+ unset( $wpp_settings[ $key ] );
193
  }
194
  }
195
  }
196
 
197
  // Merge our new settings with the existing
198
+ return array_merge( $wpp_settings, $input );
 
 
 
199
  }
200
 
201
  /**
204
  * @return array Fields
205
  * @since 2.0
206
  */
207
+ function wpp_get_registered_settings() {
 
208
  $options = array(
209
+ 'enable' => __( 'Enable', 'wp-parsidate' ),
210
+ 'disable' => __( 'Disable', 'wp-parsidate' )
211
  );
212
+
213
+ return apply_filters( 'wpp_registered_settings', array(
214
+ 'core' => apply_filters( 'wpp_core_settings', array(
215
+ 'admin_lang' => array(
216
+ 'id' => 'admin_lang',
217
+ 'name' => __( 'Change Locale in admin', 'wp-parsidate' ),
218
+ 'type' => 'checkbox',
219
+ 'options' => 'enable',
220
+ 'std' => 0,
221
+ 'desc' => __( 'This option change WordPress locale to Persian in Admin', 'wp-parsidate' )
222
+ ),
223
+ 'user_lang' => array(
224
+ 'id' => 'user_lang',
225
+ 'name' => __( 'Change Locale in theme', 'wp-parsidate' ),
226
+ 'type' => 'checkbox',
227
+ 'options' => 'enable',
228
+ 'std' => 0,
229
+ 'desc' => __( 'This option change WordPress locale to Persian in theme', 'wp-parsidate' )
230
+ ),
231
+ 'persian_date' => array(
232
+ 'id' => 'persian_date',
233
+ 'name' => __( 'Shamsi date', 'wp-parsidate' ),
234
+ 'type' => 'checkbox',
235
+ 'options' => 'enable',
236
+ 'std' => 0,
237
+ 'desc' => __( 'By enabling this, Dates will convert to Shamsi (Jalali) dates', 'wp-parsidate' )
238
+ ),
239
+ 'disable_widget_block' => array(
240
+ 'id' => 'disable_widget_block',
241
+ 'name' => __( 'Disable Widget Block', 'wp-parsidate' ),
242
+ 'type' => 'checkbox',
243
+ 'options' => 'enable',
244
+ 'std' => 0,
245
+ 'desc' => __( 'By enabling this, Widget Block Editor disabled', 'wp-parsidate' )
246
+ ),
247
+ 'submenu_move' => array(
248
+ 'id' => 'submenu_move',
249
+ 'name' => __( 'Move page to submenu?', 'wp-parsidate' ),
250
+ 'type' => 'checkbox',
251
+ 'options' => 'enable',
252
+ 'std' => 0,
253
+ 'desc' => __( 'By enabling this option, page item will be moved to Settings menu as submenu.', 'wp-parsidate' )
254
+ ),
255
+ 'dev_mode' => array(
256
+ 'id' => 'dev_mode',
257
+ 'name' => __( 'Debug Mode', 'wp-parsidate' ),
258
+ 'type' => 'checkbox',
259
+ 'options' => 'enable',
260
+ 'std' => 0,
261
+ 'desc' => __( 'By enabling this option, the uncompressed version of the JS and CSS files will be loaded.', 'wp-parsidate' )
262
+ ),
263
+ ) ),
264
+ 'conv' => apply_filters( 'wpp_conv_settings', array(
265
+ 'conv_nums' => array(
266
+ 'id' => 'conv_nums',
267
+ 'name' => __( 'Persian digits', 'wp-parsidate' ),
268
+ 'type' => 'header'
269
+ ),
270
+ 'conv_page_title' => array(
271
+ 'id' => 'conv_page_title',
272
+ 'name' => __( 'Page title', 'wp-parsidate' ),
273
+ 'type' => 'checkbox',
274
+ 'options' => 'enable',
275
+ 'std' => 0
276
+ ),
277
+ 'conv_title' => array(
278
+ 'id' => 'conv_title',
279
+ 'name' => __( 'Post title', 'wp-parsidate' ),
280
+ 'type' => 'checkbox',
281
+ 'options' => 'enable',
282
+ 'std' => 0
283
+ ),
284
+ 'conv_contents' => array(
285
+ 'id' => 'conv_contents',
286
+ 'name' => __( 'Post content', 'wp-parsidate' ),
287
+ 'type' => 'checkbox',
288
+ 'options' => 'enable',
289
+ 'std' => 'enable'
290
+ ),
291
+ 'conv_excerpt' => array(
292
+ 'id' => 'conv_excerpt',
293
+ 'name' => __( 'Post excerpt', 'wp-parsidate' ),
294
+ 'type' => 'checkbox',
295
+ 'options' => 'enable',
296
+ 'std' => 0
297
+ ),
298
+ 'conv_comments' => array(
299
+ 'id' => 'conv_comments',
300
+ 'name' => __( 'Comments text', 'wp-parsidate' ),
301
+ 'type' => 'checkbox',
302
+ 'options' => 'enable',
303
+ 'std' => 0
304
+ ),
305
+ 'conv_comment_count' => array(
306
+ 'id' => 'conv_comment_count',
307
+ 'name' => __( 'Comments count', 'wp-parsidate' ),
308
+ 'type' => 'checkbox',
309
+ 'options' => 'enable',
310
+ 'std' => 0
311
+ ),
312
+ 'conv_dates' => array(
313
+ 'id' => 'conv_dates',
314
+ 'name' => __( 'Dates', 'wp-parsidate' ),
315
+ 'type' => 'checkbox',
316
+ 'options' => 'enable',
317
+ 'std' => 0
318
+ ),
319
+ 'conv_cats' => array(
320
+ 'id' => 'conv_cats',
321
+ 'name' => __( 'Categories', 'wp-parsidate' ),
322
+ 'type' => 'checkbox',
323
+ 'options' => 'enable',
324
+ 'std' => 0
325
+ ),
326
+ 'sep' => array(
327
+ 'id' => 'sep',
328
+ 'type' => 'header'
329
+ ),
330
+ 'conv_arabic' => array(
331
+ 'id' => 'conv_arabic',
332
+ 'name' => __( 'Fix arabic characters', 'wp-parsidate' ),
333
+ 'type' => 'checkbox',
334
+ 'options' => 'enable',
335
+ 'std' => 'disable',
336
+ 'desc' => __( 'Fixes arabic characters caused by wrong keyboard layouts', 'wp-parsidate' )
337
+ ),
338
+ 'conv_permalinks' => array(
339
+ 'id' => 'conv_permalinks',
340
+ 'name' => __( 'Fix permalinks dates', 'wp-parsidate' ),
341
+ 'type' => 'checkbox',
342
+ 'options' => 'enable',
343
+ 'std' => 0,
344
+ 'desc' => __( 'By enabling this, dates in permalinks converted to Shamsi (Jalali) date', 'wp-parsidate' )
345
+ ),
346
+ 'sep_font' => array(
347
+ 'id' => 'sep_font',
348
+ 'type' => 'header'
349
+ )
350
+ ) ),
351
+ 'plugins' => apply_filters( 'wpp_plugins_compatibility_settings', array() )
352
+ ) );
353
  }
354
 
355
  /* Form Callbacks Made by EDD Development Team */
356
+ /**
357
+ * @param $args
358
+ */
359
+ function wpp_header_callback( $args ) {
360
  echo '<hr/>';
361
  }
362
 
363
+ /**
364
+ * @param $args
365
+ */
366
+ function wpp_checkbox_callback( $args ) {
367
  global $wpp_settings;
368
 
369
+ $checked = isset( $wpp_settings[ $args['id'] ] ) ? checked( 'enable', $wpp_settings[ $args['id'] ], false ) : '';
370
+ $html = sprintf( '<input type="checkbox" id="wpp_settings[%1$s]" name="wpp_settings[%1$s]" value="enable" %2$s/>' .
371
+ '<label for="wpp_settings[%1$s]" class="wpp-checkbox-label %3$s"><span></span> %4$s</label>',
372
+ $args['id'],
373
+ $checked,
374
+ empty( $args['desc'] ) ? 'empty-label' : '',
375
+ $args['desc']
376
+ );
377
 
378
  echo $html;
379
  }
380
 
381
+ /**
382
+ * @param $args
383
+ */
384
+ function wpp_multicheck_callback( $args ) {
385
  $html = '';
386
+
387
+ foreach ( $args['options'] as $key => $value ) {
388
  $option_name = $args['id'] . '-' . $key;
389
+
390
+ wpp_checkbox_callback( array(
391
+ 'id' => $option_name,
392
+ 'desc' => $value
393
+ ) );
394
+
395
  echo '<br>';
396
  }
397
 
398
  echo $html;
399
  }
400
 
401
+ /**
402
+ * @param $args
403
+ */
404
+ function wpp_radio_callback( $args ) {
405
  global $wpp_settings;
406
 
407
+ foreach ( $args['options'] as $key => $option ) :
408
  $checked = false;
409
 
410
+ if ( isset( $wpp_settings[ $args['id'] ] ) && $wpp_settings[ $args['id'] ] == $key ) {
411
  $checked = true;
412
+ } elseif ( isset( $args['std'] ) && $args['std'] == $key && ! isset( $wpp_settings[ $args['id'] ] ) ) {
413
  $checked = true;
414
  }
415
 
416
+ echo '<input name="wpp_settings[' . $args['id'] . ']"" id="wpp_settings[' . $args['id'] . '][' . $key . ']" type="radio" value="' . $key . '" ' . checked( true, $checked, false ) . '/>';
417
  echo '<label for="wpp_settings[' . $args['id'] . '][' . $key . ']">' . $option . '</label>&nbsp;&nbsp;';
418
  endforeach;
419
 
420
  echo '<p class="description">' . $args['desc'] . '</p>';
421
  }
422
 
423
+ /**
424
+ * @param $args
425
+ */
426
+ function wpp_text_callback( $args ) {
427
  global $wpp_settings;
428
 
429
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
430
+ $value = $wpp_settings[ $args['id'] ];
431
  } else {
432
+ $value = isset( $args['std'] ) ? $args['std'] : '';
433
  }
434
 
435
+ $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
436
+ $html = '<input type="text" class="' . $size . '-text" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
437
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
438
 
439
  echo $html;
440
  }
441
 
442
+ /**
443
+ * @param $args
444
+ */
445
+ function wpp_number_callback( $args ) {
446
  global $wpp_settings;
447
 
448
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
449
+ $value = $wpp_settings[ $args['id'] ];
450
  } else {
451
+ $value = isset( $args['std'] ) ? $args['std'] : '';
452
  }
453
 
454
+ $max = isset( $args['max'] ) ? $args['max'] : 999999;
455
+ $min = isset( $args['min'] ) ? $args['min'] : 0;
456
+ $step = isset( $args['step'] ) ? $args['step'] : 1;
457
+ $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
458
+ $html = '<input type="number" step="' . esc_attr( $step ) . '" max="' . esc_attr( $max ) . '" min="' . esc_attr( $min ) . '" class="' . $size . '-text" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
 
459
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
460
 
461
  echo $html;
462
  }
463
 
464
+ /**
465
+ * @param $args
466
+ */
467
+ function wpp_textarea_callback( $args ) {
468
  global $wpp_settings;
469
 
470
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
471
+ $value = $wpp_settings[ $args['id'] ];
472
  } else {
473
+ $value = isset( $args['std'] ) ? $args['std'] : '';
474
  }
475
 
476
+ $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
477
+ $html = '<textarea class="large-text" cols="50" rows="5" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
478
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
479
 
480
  echo $html;
481
  }
482
 
483
+ /**
484
+ * @param $args
485
+ */
486
+ function wpp_password_callback( $args ) {
487
  global $wpp_settings;
488
 
489
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
490
+ $value = $wpp_settings[ $args['id'] ];
491
  } else {
492
+ $value = isset( $args['std'] ) ? $args['std'] : '';
493
  }
494
 
495
+ $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
496
+ $html = '<input type="password" class="' . $size . '-text" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr( $value ) . '"/>';
497
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
498
 
499
  echo $html;
500
  }
501
 
502
+ /**
503
+ * @param $args
504
+ *
505
+ * @return false
506
+ */
507
+ function wpp_missing_callback( $args ) {
508
  echo '&ndash;';
509
 
510
  return false;
511
  }
512
 
513
 
514
+ /**
515
+ * @param $args
516
+ */
517
+ function wpp_select_callback( $args ) {
518
  global $wpp_settings;
519
 
520
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
521
+ $value = $wpp_settings[ $args['id'] ];
522
  } else {
523
+ $value = isset( $args['std'] ) ? $args['std'] : '';
524
  }
525
 
526
  $html = '<select id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']"/>';
527
 
528
+ foreach ( $args['options'] as $option => $name ) :
529
+ $selected = selected( $option, $value, false );
530
+ $html .= '<option value="' . $option . '" ' . $selected . '>' . $name . '</option>';
531
  endforeach;
532
 
533
  $html .= '</select>';
536
  echo $html;
537
  }
538
 
539
+ /**
540
+ * @param $args
541
+ */
542
+ function wpp_color_select_callback( $args ) {
543
  global $wpp_settings;
544
 
545
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
546
+ $value = $wpp_settings[ $args['id'] ];
547
  } else {
548
+ $value = isset( $args['std'] ) ? $args['std'] : '';
549
  }
550
 
551
  $html = '<select id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']"/>';
552
 
553
+ foreach ( $args['options'] as $option => $color ) :
554
+ $selected = selected( $option, $value, false );
555
+ $html .= '<option value="' . $option . '" ' . $selected . '>' . $color['label'] . '</option>';
556
  endforeach;
557
 
558
  $html .= '</select>';
561
  echo $html;
562
  }
563
 
564
+ /**
565
+ * @param $args
566
+ */
567
+ function wpp_rich_editor_callback( $args ) {
568
  global $wpp_settings, $wp_version;
569
 
570
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
571
+ $value = $wpp_settings[ $args['id'] ];
572
  } else {
573
+ $value = isset( $args['std'] ) ? $args['std'] : '';
574
  }
575
 
576
+ if ( $wp_version >= 3.3 && function_exists( 'wp_editor' ) ) {
577
+ ob_start();
578
+
579
+ wp_editor( stripslashes( $value ), 'wpp_settings[' . $args['id'] . ']', array( 'textarea_name' => 'wpp_settings[' . $args['id'] . ']' ) );
580
+
581
+ $html = ob_get_contents();
582
+
583
+ ob_end_clean();
584
  } else {
585
+ $html = '<textarea class="large-text" rows="10" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
586
  }
587
 
588
  $html .= '<br/><label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
590
  echo $html;
591
  }
592
 
593
+ /**
594
+ * @param $args
595
+ */
596
+ function wpp_upload_callback( $args ) {
597
  global $wpp_settings;
598
 
599
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
600
+ $value = $wpp_settings[ $args['id'] ];
601
  } else {
602
+ $value = isset( $args['std'] ) ? $args['std'] : '';
603
  }
604
 
605
+ $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
606
+ $html = '<input type="text" class="' . $size . '-text wpp_upload_field" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
607
+ $html .= '<span>&nbsp;<input type="button" class="wpp_settings_upload_button button-secondary" value="' . __( 'Upload File', 'wpp' ) . '"/></span>';
608
  $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
609
 
610
  echo $html;
611
  }
612
 
613
+ /**
614
+ * @param $args
615
+ */
616
+ function wpp_color_callback( $args ) {
617
  global $wpp_settings;
618
 
619
+ if ( isset( $wpp_settings[ $args['id'] ] ) ) {
620
+ $value = $wpp_settings[ $args['id'] ];
621
  } else {
622
+ $value = isset( $args['std'] ) ? $args['std'] : '';
623
  }
624
 
625
+ $default = isset( $args['std'] ) ? $args['std'] : '';
626
+ $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
627
+ $html = '<input type="text" class="wpp-color-picker" id="wpp_settings[' . $args['id'] . ']" name="wpp_settings[' . $args['id'] . ']" value="' . esc_attr( $value ) . '" data-default-color="' . esc_attr( $default ) . '" />';
628
+ $html .= '<label for="wpp_settings[' . $args['id'] . ']"> ' . $args['desc'] . '</label>';
 
629
 
630
  echo $html;
631
  }
632
 
633
+ function wpp_render_settings() {
634
+ $active_tab = isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], wpp_get_tabs() ) ? $_GET['tab'] : 'core';
 
 
635
 
636
  ob_start();
637
  ?>
638
  <div class="wrap wpp-settings-wrap">
639
+ <h2><?php _e( 'Parsi Settings', 'wp-parsidate' ) ?></h2>
640
  <h2 class="nav-tab-wrapper">
641
  <?php
642
+ foreach ( wpp_get_tabs() as $tab_id => $tab_name ) {
643
 
644
+ $tab_url = add_query_arg( array(
645
+ 'settings-updated' => false,
646
+ 'tab' => $tab_id
647
+ ) );
648
 
649
  $active = $active_tab == $tab_id ? ' nav-tab-active' : '';
650
 
651
+ echo '<a href="' . esc_url( $tab_url ) . '" title="' . esc_attr( $tab_name ) . '" class="nav-tab' . $active . '">';
652
  echo $tab_name;
653
  echo '</a>';
654
  }
655
  ?>
656
  </h2>
657
+ <?php settings_errors( 'wpp-notices' ); ?>
658
  <div id="tab_container">
659
  <form method="post" action="options.php">
660
  <table class="form-table">
661
  <?php
662
+ settings_fields( 'wpp_settings' );
663
+ do_settings_fields( 'wpp_settings_' . $active_tab, 'wpp_settings_' . $active_tab );
664
  ?>
665
  </table>
666
  <?php submit_button(); ?>
669
  </div><!-- .wrap -->
670
  <?php
671
  echo ob_get_clean();
672
+ }
673
+
674
+ /**
675
+ * Gets an option name and check that option is active or not
676
+ *
677
+ * @param $option_name
678
+ *
679
+ * @return bool
680
+ * @since 4.0.0
681
+ */
682
+ function wpp_is_active( $option_name ) {
683
+ global $wpp_settings;
684
+
685
+ return ! empty($wpp_settings[$option_name]) && 'enable' === $wpp_settings[$option_name];
686
+ }
687
+
688
+ /**
689
+ * Enqueue setting page style
690
+ *
691
+ * @param $hook
692
+ *
693
+ * @since 4.0.0
694
+ */
695
+ function wpp_enqueue_setting_page_style( $hook ) {
696
+ if ( ! in_array( $hook, array( 'toplevel_page_wp-parsi-settings', 'settings_page_wp-parsi-settings' ) ) ) {
697
+ return;
698
+ }
699
+
700
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
701
+
702
+ wp_enqueue_style( 'wpp_option_page', WP_PARSI_URL . "assets/css/settings$suffix.css", null, WP_PARSI_VER );
703
  }
includes/widget/widget_archive.php CHANGED
@@ -1,104 +1,174 @@
1
  <?php
2
 
 
 
3
  /**
4
  * @author lord_viper
5
  * @copyright 2013
6
  */
7
- class parsidate_archive extends WP_Widget
8
- {
9
- public function __construct()
10
- {
11
  global $wp_version;
12
 
13
- // backwards compability
14
- if (version_compare($wp_version, '4.3', '>=')) {
15
- parent::__construct(false, __('Jalali Date Archives', 'wp-parsidate'), 'description=' . __('Jalali Date Archives', 'wp-parsidate'));
 
16
  } else {
17
- parent::WP_Widget(false, __('Jalali Date Archives', 'wp-parsidate'), 'description=' . __('Jalali Date Archives', 'wp-parsidate'));
 
18
  }
19
  }
20
 
21
- public function form($instance)
22
- {
 
 
 
 
 
 
 
23
  global $wpp_settings;
24
- $type = isset($instance['parsidate_archive_type']) ? $instance['parsidate_archive_type'] : 'monthly';
25
- $instance['parsidate_archive_title'] = isset($instance['parsidate_archive_title']) ? strip_tags($instance['parsidate_archive_title']) : __('Jalali Date Archives', 'wp-parsidate');
26
- $instance['parsidate_archive_count'] = isset($instance['parsidate_archive_count']) ? $instance['parsidate_archive_count'] : 0;
27
- $instance['parsidate_archive_list'] = isset($instance['parsidate_archive_list']) ? $instance['parsidate_archive_list'] : 0;
28
 
 
 
 
 
 
29
  ?>
30
  <p style="text-align:right; direction:rtl">
31
- <label></label>
32
- <input style="width: 200px;" id="<?php echo $this->get_field_id('parsidate_archive_title'); ?>"
33
- name="<?php echo $this->get_field_name('parsidate_archive_title'); ?>" type="text"
34
- value="<?php echo(empty($instance['parsidate_archive_title']) ? __('Jalali Date Archives', 'wp-parsidate') : $instance['parsidate_archive_title']) ?>"/>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  <br/>
36
- <label><input type="radio" id="parsidate_archive_type1"
37
- name="<?php echo $this->get_field_name('parsidate_archive_type'); ?>"
38
- value="yearly" <?php checked($type, 'yearly'); ?>/><label
39
- for="parsidate_archive_type1"><?php _e('Yearly', 'wp-parsidate') ?></label><br/>
40
- <label><input type="radio" id="parsidate_archive_type2"
41
- name="<?php echo $this->get_field_name('parsidate_archive_type'); ?>"
42
- value="monthly" <?php checked($type, 'monthly'); ?>/><?php _e('Monthly', 'wp-parsidate') ?>
43
- </label><br/>
44
- <label><input type="radio" id="parsidate_archive_type3"
45
- name="<?php echo $this->get_field_name('parsidate_archive_type'); ?>"
46
- value="daily" <?php checked($type, 'daily'); ?>/><?php _e('Daily', 'wp-parsidate') ?>
47
- </label><br/>
48
- <br/>
49
- <input type="checkbox" name="<?php echo $this->get_field_name('parsidate_archive_count'); ?>"
50
- id="<?php echo $this->get_field_id('parsidate_archive_count'); ?>"
51
- value="1" <?php checked($instance['parsidate_archive_count'], 1, true); ?>/>
52
- <label for="<?php echo $this->get_field_id('parsidate_archive_count'); ?>"><?php _e('Show post counts', 'wp-parsidate') ?></label>
53
- <br/>
54
- <input type="checkbox" name="<?php echo $this->get_field_name('parsidate_archive_list'); ?>"
55
- id="<?php echo $this->get_field_id('parsidate_archive_list'); ?>"
56
- value="1" <?php echo checked($instance['parsidate_archive_list'], 1, true); ?>/>
57
- <label for="<?php echo $this->get_field_id('parsidate_archive_list'); ?>"><?php _e('Display as dropdown', 'wp-parsidate') ?></label>
58
  </p>
59
  <?php
60
- if ($wpp_settings['conv_permalinks'] == 'disable') {
61
- echo "<p style='color: #ff8153'>" . __('For use widget, active "Fix permalinks dates" option in plugin settings.', 'wp-parsidate') . "</p>";
 
62
  }
63
  }
64
 
65
- public function update($new_instance, $old_instance)
66
- {
67
- $instance = $old_instance;
68
- $instance['parsidate_archive_title'] = isset($new_instance['parsidate_archive_title']) ? strip_tags($new_instance['parsidate_archive_title']) : __('Jalali Date Archives', 'wp-parsidate');
69
- $instance['parsidate_archive_count'] = isset($new_instance['parsidate_archive_count']) ? $new_instance['parsidate_archive_count'] : 0;
70
- $instance['parsidate_archive_list'] = isset($new_instance['parsidate_archive_list']) ? $new_instance['parsidate_archive_list'] : 0;
71
- $instance['parsidate_archive_type'] = isset($new_instance['parsidate_archive_type']) ? $new_instance['parsidate_archive_type'] : 'monthly';
 
 
 
 
 
 
 
 
 
 
 
 
 
72
 
73
  return $instance;
74
  }
75
 
76
- public function widget($args, $instance)
77
- {
78
- global $wpp_settings;
79
- if ($wpp_settings['conv_permalinks'] == 'disable') {
 
 
 
 
 
 
 
 
 
80
  return;
81
  }
82
 
83
- $type = isset($instance['parsidate_archive_type']) ? $instance['parsidate_archive_type'] : 'monthly';
84
- $title = isset($instance['parsidate_archive_title']) ? $instance['parsidate_archive_title'] : __('Jalali Date Archives', 'wp-parsidate');
85
- $post_count = isset($instance['parsidate_archive_count']) ? $instance['parsidate_archive_count'] : false;
86
- $ddl_style = isset($instance['parsidate_archive_list']) ? $instance['parsidate_archive_list'] : false;
87
 
88
  echo $args['before_widget'];
89
- if (!empty($instance['parsidate_archive_title'])) {
90
- echo $args['before_title'] . apply_filters('widget_title', $instance['parsidate_archive_title']) . $args['after_title'];
 
91
  }
92
 
93
- if ($ddl_style) {
94
- echo "<select name='parsidate_archive_list' onchange='document.location.href=this.options[this.selectedIndex].value;'> <option value='0'>" . esc_attr($title) . "</option>";
95
- wp_get_parchives("type=$type&format=option&show_post_count=$post_count");
 
 
96
  echo '</select>';
97
  } else {
98
  echo '<ul>';
99
- wpp_get_archives("type=$type&show_post_count=$post_count");
 
 
100
  echo '</ul>';
101
  }
 
102
  echo $args['after_widget'];
103
  }
104
  }
1
  <?php
2
 
3
+ defined('ABSPATH') OR exit('No direct script access allowed');
4
+
5
  /**
6
  * @author lord_viper
7
  * @copyright 2013
8
  */
9
+ class parsidate_archive extends WP_Widget {
10
+ public function __construct() {
 
 
11
  global $wp_version;
12
 
13
+ // backwards compatibility
14
+ if ( version_compare( $wp_version, '4.3', '>=' ) ) {
15
+ parent::__construct( false, __( 'Jalali Date Archives', 'wp-parsidate' ),
16
+ 'description=' . __( 'Jalali Date Archives', 'wp-parsidate' ) );
17
  } else {
18
+ parent::WP_Widget( false, __( 'Jalali Date Archives', 'wp-parsidate' ),
19
+ 'description=' . __( 'Jalali Date Archives', 'wp-parsidate' ) );
20
  }
21
  }
22
 
23
+ /**
24
+ * Outputs the settings update form.
25
+ *
26
+ * @since 2.8.0
27
+ *
28
+ * @param array $instance Current settings.
29
+ * @return void Default return is 'noform'.
30
+ */
31
+ public function form( $instance ) {
32
  global $wpp_settings;
 
 
 
 
33
 
34
+ $type = isset( $instance['parsidate_archive_type'] ) ? $instance['parsidate_archive_type'] : 'monthly';
35
+ $instance['parsidate_archive_title'] = isset( $instance['parsidate_archive_title'] ) ? strip_tags( $instance['parsidate_archive_title'] ) : __( 'Jalali Date Archives',
36
+ 'wp-parsidate' );
37
+ $instance['parsidate_archive_count'] = isset( $instance['parsidate_archive_count'] ) ? $instance['parsidate_archive_count'] : 0;
38
+ $instance['parsidate_archive_list'] = isset( $instance['parsidate_archive_list'] ) ? $instance['parsidate_archive_list'] : 0;
39
  ?>
40
  <p style="text-align:right; direction:rtl">
41
+
42
+ <label for="<?php echo $this->get_field_id( 'parsidate_archive_title' ); ?>"><?php _e( 'Title' ) ?>:</label>
43
+
44
+ <input style="width: 200px;" id="<?php echo $this->get_field_id( 'parsidate_archive_title' ); ?>"
45
+ name="<?php echo $this->get_field_name( 'parsidate_archive_title' ); ?>" type="text"
46
+ value="<?php echo( empty( $instance['parsidate_archive_title'] ) ? __( 'Jalali Date Archives',
47
+ 'wp-parsidate' ) : $instance['parsidate_archive_title'] ) ?>"/>
48
+
49
+ <br><br>
50
+
51
+ <span><?php _e( 'How to display', 'wp-parsidate' ) ?>:</span><br>
52
+
53
+ <label>
54
+ <input type="radio" id="parsidate_archive_type1"
55
+ name="<?php echo $this->get_field_name( 'parsidate_archive_type' ); ?>"
56
+ value="yearly" <?php checked( $type, 'yearly' ); ?>/>
57
+ <?php _e( 'Yearly', 'wp-parsidate' ) ?>
58
+ </label>
59
+
60
+ <br/>
61
+
62
+ <label>
63
+ <input type="radio" id="parsidate_archive_type2"
64
+ name="<?php echo $this->get_field_name( 'parsidate_archive_type' ); ?>"
65
+ value="monthly" <?php checked( $type, 'monthly' ); ?>/>
66
+ <?php _e( 'Monthly', 'wp-parsidate' ) ?>
67
+ </label>
68
+
69
+ <br/>
70
+
71
+ <label>
72
+ <input type="radio" id="parsidate_archive_type3"
73
+ name="<?php echo $this->get_field_name( 'parsidate_archive_type' ); ?>"
74
+ value="daily" <?php checked( $type, 'daily' ); ?>/>
75
+ <?php _e( 'Daily', 'wp-parsidate' ) ?>
76
+ </label>
77
+
78
+ <br/>
79
  <br/>
80
+
81
+ <input type="checkbox" name="<?php echo $this->get_field_name( 'parsidate_archive_count' ); ?>"
82
+ id="<?php echo $this->get_field_id( 'parsidate_archive_count' ); ?>"
83
+ value="1" <?php checked( $instance['parsidate_archive_count'], 1 ); ?>/>
84
+
85
+ <label for="<?php echo $this->get_field_id( 'parsidate_archive_count' ); ?>">
86
+ <?php _e( 'Show post counts', 'wp-parsidate' ) ?>
87
+ </label>
88
+
89
+ <br/>
90
+
91
+ <input type="checkbox" name="<?php echo $this->get_field_name( 'parsidate_archive_list' ); ?>"
92
+ id="<?php echo $this->get_field_id( 'parsidate_archive_list' ); ?>"
93
+ value="1" <?php echo checked( $instance['parsidate_archive_list'], 1 ); ?>/>
94
+
95
+ <label for="<?php echo $this->get_field_id( 'parsidate_archive_list' ); ?>">
96
+ <?php _e( 'Display as dropdown', 'wp-parsidate' ) ?>
97
+ </label>
98
+
 
 
 
99
  </p>
100
  <?php
101
+ if ( empty($wpp_settings['conv_permalinks'] ) ) {
102
+ echo "<p style='color: #ff8153'>" . __( 'For use widget, active "Fix permalinks dates" option in plugin settings.',
103
+ 'wp-parsidate' ) . "</p>";
104
  }
105
  }
106
 
107
+ /**
108
+ * Updates a particular instance of a widget.
109
+ *
110
+ * This function should check that `$new_instance` is set correctly. The newly-calculated
111
+ * value of `$instance` should be returned. If false is returned, the instance won't be
112
+ * saved/updated.
113
+ *
114
+ * @since 2.8.0
115
+ *
116
+ * @param array $new_instance New settings for this instance as input by the user via
117
+ * WP_Widget::form().
118
+ * @param array $old_instance Old settings for this instance.
119
+ * @return array Settings to save or bool false to cancel saving.
120
+ */
121
+ public function update( $new_instance, $old_instance ) {
122
+ $instance = $old_instance;
123
+ $instance['parsidate_archive_title'] = isset( $new_instance['parsidate_archive_title'] ) ? strip_tags( $new_instance['parsidate_archive_title'] ) : __( 'Jalali Date Archives', 'wp-parsidate' );
124
+ $instance['parsidate_archive_count'] = isset( $new_instance['parsidate_archive_count'] ) ? $new_instance['parsidate_archive_count'] : 0;
125
+ $instance['parsidate_archive_list'] = isset( $new_instance['parsidate_archive_list'] ) ? $new_instance['parsidate_archive_list'] : 0;
126
+ $instance['parsidate_archive_type'] = isset( $new_instance['parsidate_archive_type'] ) ? $new_instance['parsidate_archive_type'] : 'monthly';
127
 
128
  return $instance;
129
  }
130
 
131
+ /**
132
+ * Echoes the widget content.
133
+ *
134
+ * Subclasses should override this function to generate their widget code.
135
+ *
136
+ * @since 2.8.0
137
+ *
138
+ * @param array $args Display arguments including 'before_title', 'after_title',
139
+ * 'before_widget', and 'after_widget'.
140
+ * @param array $instance The settings for the particular instance of the widget.
141
+ */
142
+ public function widget( $args, $instance ) {
143
+ if ( wpp_is_active('conv_permalinks' ) ) {
144
  return;
145
  }
146
 
147
+ $type = isset( $instance['parsidate_archive_type'] ) ? $instance['parsidate_archive_type'] : 'monthly';
148
+ $title = isset( $instance['parsidate_archive_title'] ) ? $instance['parsidate_archive_title'] : __( 'Jalali Date Archives', 'wp-parsidate' );
149
+ $post_count = isset( $instance['parsidate_archive_count'] ) ? $instance['parsidate_archive_count'] : false;
150
+ $ddl_style = isset( $instance['parsidate_archive_list'] ) && $instance['parsidate_archive_list'];
151
 
152
  echo $args['before_widget'];
153
+ if ( ! empty( $instance['parsidate_archive_title'] ) ) {
154
+ echo $args['before_title'] . apply_filters( 'widget_title',
155
+ $instance['parsidate_archive_title'] ) . $args['after_title'];
156
  }
157
 
158
+ if ( $ddl_style ) {
159
+ echo "<select name='parsidate_archive_list' onchange='document.location.href=this.options[this.selectedIndex].value;'> <option value='0'>" . esc_attr( $title ) . "</option>";
160
+
161
+ wp_get_parchives( "type=$type&format=option&show_post_count=$post_count" );
162
+
163
  echo '</select>';
164
  } else {
165
  echo '<ul>';
166
+
167
+ wpp_get_archives( "type=$type&show_post_count=$post_count" );
168
+
169
  echo '</ul>';
170
  }
171
+
172
  echo $args['after_widget'];
173
  }
174
  }
includes/widget/widget_calendar.php CHANGED
@@ -1,56 +1,131 @@
1
  <?php
2
 
 
 
3
  /**
4
  * @author lord_viper
5
  * @copyright 2013
6
  */
7
- class parsidate_calendar extends WP_Widget
8
- {
9
- public function __construct()
10
- {
11
  global $wp_version;
12
- if (version_compare($wp_version, '4.3', '>=')) {
13
- parent::__construct(false, __('Jalali Date Calender', 'wp-parsidate'), 'description=' . __('Jalali Date Calender', 'wp-parsidate'));
 
14
  } else {
15
- parent::WP_Widget(false, __('Jalali Date Calender', 'wp-parsidate'), 'description=' . __('Jalali Date Calender', 'wp-parsidate'));
16
  }
17
  }
18
 
19
- public function form($instance)
20
- {
21
- global $wpp_settings;
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  ?>
23
  <p style="text-align:right; direction:rtl">
24
- <label><?php _e('Title:', 'wp-parsidate') ?></label>
25
- <input style="width: 200px;" id="<?php echo $this->get_field_id('parsidate_calendar_title'); ?>"
26
- name="<?php echo $this->get_field_name('parsidate_calendar_title'); ?>" type="text"
27
- value="<?php echo(empty($instance['parsidate_calendar_title']) ? __('Jalali Date Calender', 'wp-parsidate') : $instance['parsidate_calendar_title']) ?>"/>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  </p>
29
  <?php
30
- if ($wpp_settings['conv_permalinks'] == 'disable') {
31
- echo "<p style='color: #ff8153'>" . __('For use widget, active "Fix permalinks dates" option in plugin settings.', 'wp-parsidate') . "</p>";
32
- }
33
  }
34
 
35
- public function update($new_instance, $old_instance)
36
- {
37
- $instance = $old_instance;
38
- $instance['parsidate_calendar_title'] = strip_tags($new_instance['parsidate_calendar_title']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
  return $instance;
41
  }
42
 
43
- public function widget($args, $instance)
44
- {
45
- global $wpp_settings;
46
- if ($wpp_settings['conv_permalinks'] == 'disable') {
 
 
 
 
 
 
 
 
 
 
47
  return;
48
  }
 
 
 
49
  echo $args['before_widget'];
50
- if (!empty($instance['parsidate_calendar_title'])) {
51
- echo $args['before_title'] . apply_filters('widget_title', $instance['parsidate_calendar_title']) . $args['after_title'];
 
52
  }
 
53
  wpp_get_calendar();
 
54
  echo $args['after_widget'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
56
  }
1
  <?php
2
 
3
+ defined( 'ABSPATH' ) or exit( 'No direct script access allowed' );
4
+
5
  /**
6
  * @author lord_viper
7
  * @copyright 2013
8
  */
9
+ class parsidate_calendar extends WP_Widget {
10
+ public function __construct() {
 
 
11
  global $wp_version;
12
+
13
+ if ( version_compare( $wp_version, '4.3', '>=' ) ) {
14
+ parent::__construct( false, __( 'Jalali Date Calender', 'wp-parsidate' ), 'description=' . __( 'Jalali Date Calender', 'wp-parsidate' ) );
15
  } else {
16
+ parent::WP_Widget( false, __( 'Jalali Date Calender', 'wp-parsidate' ), 'description=' . __( 'Jalali Date Calender', 'wp-parsidate' ) );
17
  }
18
  }
19
 
20
+ /**
21
+ * Outputs the settings update form.
22
+ *
23
+ * @param array $instance Current settings.
24
+ *
25
+ * @return void Default return is 'noform'.
26
+ * @since 2.8.0
27
+ *
28
+ */
29
+ public function form( $instance ) {
30
+ $title = ! empty( $instance['parsidate_calendar_title'] ) ? $instance['parsidate_calendar_title'] : __( 'Jalali Date Calender', 'wp-parsidate' );
31
+ $theme = ! empty( $instance['theme_color'] ) ? $instance['theme_color'] : 'light-mode';
32
+
33
+ if ( ! wpp_is_active( 'conv_permalinks' ) ) {
34
+ echo "<p style='color: #ff8153'>" . __( 'For use widget, active "Fix permalinks dates" option in plugin settings.', 'wp-parsidate' ) . "</p>";
35
+ }
36
  ?>
37
  <p style="text-align:right; direction:rtl">
38
+ <label for="<?php echo $this->get_field_id( 'parsidate_calendar_title' ); ?>">
39
+ <?php _e( 'Title:', 'wp-parsidate' ) ?></label>
40
+
41
+ <input style="width:calc(100% - 120px);float:left" id="<?php echo $this->get_field_id( 'parsidate_calendar_title' ); ?>"
42
+ name="<?php echo $this->get_field_name( 'parsidate_calendar_title' ); ?>" type="text"
43
+ value="<?php echo esc_attr( $title ); ?>"/>
44
+ </p>
45
+
46
+ <p style="text-align:right; direction:rtl">
47
+ <label for="<?php echo $this->get_field_id( 'theme-color' ); ?>">
48
+ <?php _e( 'Theme color:', 'wp-parsidate' ) ?></label>
49
+
50
+ <select style="width:calc(100% - 120px);float:left" id="<?php echo $this->get_field_id( 'theme-color' ); ?>"
51
+ name="<?php echo $this->get_field_name( 'theme-color' ); ?>">
52
+ <option value="light-mode" <?php selected( $theme, 'light-mode' ); ?>>
53
+ <?php _e( 'Light Mode', 'wp-parsidate' ) ?>
54
+ </option>
55
+ <option value="dark-mode" <?php selected( $theme, 'dark-mode' ); ?>>
56
+ <?php _e( 'Dark Mode', 'wp-parsidate' ) ?>
57
+ </option>
58
+ </select>
59
  </p>
60
  <?php
 
 
 
61
  }
62
 
63
+ /**
64
+ * Updates a particular instance of a widget.
65
+ *
66
+ * This function should check that `$new_instance` is set correctly. The newly-calculated
67
+ * value of `$instance` should be returned. If false is returned, the instance won't be
68
+ * saved/updated.
69
+ *
70
+ * @param array $new_instance New settings for this instance as input by the user via
71
+ * WP_Widget::form().
72
+ * @param array $old_instance Old settings for this instance.
73
+ *
74
+ * @return array Settings to save or bool false to cancel saving.
75
+ * @since 2.8.0
76
+ *
77
+ */
78
+ public function update( $new_instance, $old_instance ) {
79
+ $instance = $old_instance;
80
+ $instance['parsidate_calendar_title'] = esc_html( $new_instance['parsidate_calendar_title'] );
81
+ $instance['theme_color'] = esc_attr( $new_instance['theme-color'] );
82
 
83
  return $instance;
84
  }
85
 
86
+ /**
87
+ * Echoes the widget content.
88
+ *
89
+ * Subclasses should override this function to generate their widget code.
90
+ *
91
+ * @param array $args Display arguments including 'before_title', 'after_title',
92
+ * 'before_widget', and 'after_widget'.
93
+ * @param array $instance The settings for the particular instance of the widget.
94
+ *
95
+ * @since 2.8.0
96
+ *
97
+ */
98
+ public function widget( $args, $instance ) {
99
+ if ( ! wpp_is_active( 'conv_permalinks' ) ) {
100
  return;
101
  }
102
+
103
+ $theme = ! empty( $instance['theme_color'] ) ? $instance['theme_color'] : 'light-mode';
104
+
105
  echo $args['before_widget'];
106
+
107
+ if ( ! empty( $instance['parsidate_calendar_title'] ) ) {
108
+ echo $args['before_title'] . apply_filters( 'widget_title', $instance['parsidate_calendar_title'] ) . $args['after_title'];
109
  }
110
+
111
  wpp_get_calendar();
112
+
113
  echo $args['after_widget'];
114
+
115
+ if ( $theme === 'dark-mode' ) {
116
+ echo '<style>.widget_parsidate_calendar{background:#141414;border-radius:8px 8px 4px 4px;' .
117
+ 'overflow:hidden;box-shadow:0 0 5px 0 #000;text-align:center;padding-top:15px;color:#dcdcdc}'.
118
+ '.widget_parsidate_calendar table{direction:rtl;border-radius:12px;overflow:hidden;'.
119
+ 'background:#1d1d1d;box-shadow:inset 0 0 0 6px #141414}.widget_parsidate_calendar table th,'.
120
+ '.widget_parsidate_calendar table td{border:0}.widget_parsidate_calendar table th:last-child,'.
121
+ '.widget_parsidate_calendar table tr td:last-child{color:#f28a8a}</style>';
122
+ } else {
123
+ echo '<style>.widget_parsidate_calendar{background:#dbdbdb;border-radius:12px;overflow:hidden;'.
124
+ 'box-shadow:0 0 15px 0 #0000004f,inset 0 0 0 1px #8080806e;text-align:center;padding-top:15px;'.
125
+ 'color:#1e1e1e}.widget_parsidate_calendar table{direction:rtl;border-radius:9px;overflow:hidden;'.
126
+ 'background:#fdfdfd;box-shadow:0 -13px 14px 0 #8080801a}.widget_parsidate_calendar table th,'.
127
+ '.widget_parsidate_calendar table td{border:0}.widget_parsidate_calendar table th:last-child,'.
128
+ '.widget_parsidate_calendar table tr td:last-child{color:#bf4a4a}</style>';
129
+ }
130
  }
131
  }
languages/fa_IR.mo CHANGED
Binary file
languages/fa_IR.po CHANGED
@@ -1,42 +1,46 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: WP-Parsi additional strings\n"
 
4
  "POT-Creation-Date: 2019-02-02 10:37+0330\n"
5
- "PO-Revision-Date: 2019-02-02 10:39+0330\n"
6
  "Last-Translator: Ehsan <iehsan.ir@gmail.com>\n"
7
- "Language-Team: WP-Pari Team\n"
8
- "Language: fa_IR\n"
 
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 2.2\n"
 
13
  "X-Poedit-Basepath: .\n"
14
- "Plural-Forms: nplurals=1; plural=0;\n"
15
  "X-Poedit-KeywordsList: __;_e\n"
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "X-Poedit-SearchPath-0: ..\n"
 
 
18
 
19
  #: ../includes/admin/lists-fix.php:83
20
  msgid "Show All Dates"
21
- msgstr "نمایش همه‌ی تاریخ‌ها"
22
 
23
  #: ../includes/general.php:170
24
  #, php-format
25
  msgid ""
26
  "<div class=\"updated wpp-message\"><p>ParsiDate activated, you may need to "
27
- "configure it to work properly. <a href=\"%s\">Go to configuartion page</a> "
28
  "&ndash; <a href=\"%s\">Dismiss</a></p></div>"
29
  msgstr ""
30
- "<div class=\"updated wpp-message\"><p>وردپرس پارسی فعال شد! برای کارکردن افزونه "
31
- "نیاز به پیکربندی آن دارید. <a href=\"%s\">برگه‌ی پیکربندی</a> &ndash; <a href="
32
- "\"%s\">بی‌خیال</a></p></div>"
33
 
34
- #: ../includes/plugins/disable.php:130 ../includes/plugins/edd.php:58
35
  #: ../includes/plugins/woocommerce.php:49 ../includes/settings.php:210
36
  msgid "Enable"
37
  msgstr "فعال"
38
 
39
- #: ../includes/plugins/disable.php:131 ../includes/plugins/edd.php:59
40
  #: ../includes/plugins/woocommerce.php:50 ../includes/settings.php:211
41
  msgid "Disable"
42
  msgstr "غیرفعال"
@@ -47,11 +51,11 @@ msgstr "غیرفعال کردن فیلتر وردپرس پارسی"
47
 
48
  #: ../includes/plugins/disable.php:141
49
  msgid "Hook list"
50
- msgstr "لیست فیلترها"
51
 
52
  #: ../includes/plugins/disable.php:145
53
  msgid "Enter hook,class,function to remove parsidate filter from it"
54
- msgstr "نام هوک، کلاس و تابع موردنظر را جهت رفع فیلتر پارسی‌دیت وارد کنید"
55
 
56
  #: ../includes/plugins/edd.php:64
57
  msgid "Easy Digital Downloads"
@@ -69,8 +73,8 @@ msgstr "جایگزینی ریال با RIAL"
69
  msgid "WooCommerce"
70
  msgstr "ووکامرس"
71
 
72
- #: ../includes/settings.php:28 ../includes/settings.php:29
73
- #: ../includes/settings.php:36 ../includes/settings.php:37
74
  #: ../includes/settings.php:572
75
  msgid "Parsi Settings"
76
  msgstr "تنظیمات پارسی"
@@ -87,7 +91,7 @@ msgstr "%s تبدیل"
87
 
88
  #: ../includes/settings.php:132
89
  #, php-format
90
- msgid "%s Plugins compability"
91
  msgstr "%s هماهنگی با افزونه‌ها"
92
 
93
  #: ../includes/settings.php:217
@@ -112,7 +116,8 @@ msgstr "تاریخ خورشیدی"
112
 
113
  #: ../includes/settings.php:237
114
  msgid "By enabling this, Dates will convert to Shamsi (Jalali) dates"
115
- msgstr "با فعال‌کردن این گزینه، تاریخ‌ها به صورت تاریخ خورشیدی (جلالی) درمی‌آیند"
 
116
 
117
  #: ../includes/settings.php:241
118
  msgid "Move page to submenu?"
@@ -120,9 +125,10 @@ msgstr "انتقال این برگه به زیرمنو؟"
120
 
121
  #: ../includes/settings.php:245
122
  msgid ""
123
- "With enabling this option, page item will be moved to Settings menu as submenu."
124
  msgstr ""
125
- "با فعال‌کردن این گزینه، مورد پیکربندی پلاگین به زیرمنوی \"تنظیمات\" منتقل می‌شود."
 
126
 
127
  #: ../includes/settings.php:251
128
  msgid "Persian digits"
@@ -177,18 +183,18 @@ msgstr "تبدیل تاریخ در پیوندهای یکتا"
177
  #: ../includes/settings.php:328
178
  msgid "By enabling this, dates in permalinks converted to Shamsi (Jalali) date"
179
  msgstr ""
180
- "با فعال‌کردن این گزینه، تاریخ‌ها در پیوندهای یکتا به تاریخ خورشیدی (جلالی) تبدیل "
181
- "می‌شوند"
182
 
183
  #: ../includes/settings.php:541
184
  msgid "Upload File"
185
  msgstr "آپلود فایل"
186
 
187
- #: ../includes/widget/widget_archive.php:13
188
- #: ../includes/widget/widget_archive.php:15
189
- #: ../includes/widget/widget_archive.php:22
190
- #: ../includes/widget/widget_archive.php:31
191
- #: ../includes/widget/widget_archive.php:64
192
  #: ../includes/widget/widget_archive.php:79
193
  msgid "Jalali Date Archives"
194
  msgstr "بایگانی تاریخ خورشیدی"
@@ -213,15 +219,16 @@ msgstr "نمايش تعداد نوشته‌ها"
213
  msgid "Display as dropdown"
214
  msgstr "نمايش به صورت ليست بازشو"
215
 
216
- #: ../includes/widget/widget_archive.php:58
217
  #: ../includes/widget/widget_calendar.php:28
218
- msgid "For use widget, active \"Fix permalinks dates\" option in plugin settings."
 
219
  msgstr ""
220
  "برای استفاده از ابزارک، گزینه \"تبدیل تاریخ در پیوندهای یکتا\" را در تنظیمات "
221
  "افزونه فعال کنید."
222
 
223
- #: ../includes/widget/widget_calendar.php:11
224
- #: ../includes/widget/widget_calendar.php:13
225
  #: ../includes/widget/widget_calendar.php:24
226
  msgid "Jalali Date Calender"
227
  msgstr "گاه‌شمار تاریخ خورشیدی"
@@ -236,15 +243,16 @@ msgstr "بسته وردپرس پارسی"
236
 
237
  #: ../languages/common-strings.php:3
238
  msgid ""
239
- "Persian package for WordPress, Adds full RTL and Shamsi (Jalali) support for: "
240
- "posts, comments, pages, archives, search, categories, permalinks and all admin "
241
- "sections and TinyMce editor, lists, quick editor. This package has Jalali "
242
- "archive widget."
243
  msgstr ""
244
- "بسته‌ی پارسی سازی وردپرس، اضافه‌کردن پشتیبانی کامل راست‌به‌چپ و تاریخ خورشیدی برای "
245
- "وردپرس. این افزونه از نوشته‌ها، دیدگاه‌ها، برگه‌ها، بایگانی‌ها، جستجو‌ها و "
246
- "دسته‌بندی‌ها و پیوندهای یکتا پشتیبانی می‌کند و تمام قسمت‌های مدیریت و ویرایشگر را "
247
- "پارسی می‌کند. این افزونه هم‌چنین یک بزارک بایگانی شمسی نیز دارد."
 
248
 
249
  #: ../languages/common-strings.php:4
250
  msgid "WP-Parsi Team"
@@ -254,59 +262,41 @@ msgstr "تیم وردپرس پارسی"
254
  msgid "settings"
255
  msgstr "تنظیمات"
256
 
257
- #~ msgid "Use Droid Sans font for admin side"
258
- #~ msgstr "استفاده از قلم \"دروید سنس\" برای مدیریت"
259
-
260
- #~ msgid ""
261
- #~ "Droid Sans Naskh and Roboto font families will be activated in admin side, "
262
- #~ "if this is enabled."
263
- #~ msgstr ""
264
- #~ "خانواده فونت‌های \"Droid Sans Naskh\"و \"Roboto\" در قسمت مدیریت فعال خواهند "
265
- #~ "شد."
266
-
267
- #~ msgid "Use Droid Sans font for editors"
268
- #~ msgstr "استفاده از قلم \"دروید سنس\" برای ویرایشگر"
269
-
270
- #~ msgid ""
271
- #~ "Droid Sans Naskh and Roboto font families will be activated in all rich "
272
- #~ "editors in back end."
273
- #~ msgstr ""
274
- #~ "خانواده فونت‌های \"Droid Sans Naskh\"و \"Roboto\" در همه‌ی ویرایشگرها فعال "
275
- #~ "خواهند شد."
276
 
277
- #~ msgid "WordPress Planet"
278
- #~ msgstr "سیاره وردپرس"
279
 
280
- #~ msgid "No items"
281
- #~ msgstr "موردی پیدا نشد"
 
 
 
 
282
 
283
- #~ msgid "Settings updated"
284
- #~ msgstr "پیکربندی به‌روز شد"
285
 
286
- #~ msgid ""
287
- #~ "WP-Parsidate plugin Activated, Please go to <a href=\"%s\">plugin page "
288
- #~ "settings</a> and setup plugin."
289
- #~ msgstr ""
290
- #~ "افزونه بسته پارسی‌ساز فعال است، لطفا به <a href=\"%s\">صفحه تنظیمات افزونه</"
291
- #~ "a> بروید و تنظیمات دلخواه را انجام دهید."
292
 
293
- #~ msgid "Persian language"
294
- #~ msgstr "زبان پارسی"
295
 
296
- #~ msgid ""
297
- #~ "This option, makes WordPress Persian and texts right to left (Currently "
298
- #~ "Deactivate)"
299
- #~ msgstr ""
300
- #~ "این گزینه، زبان وردپرس را فارسی و جهت نوشته‌ها را راست‌به‌جپ می‌کند (غیرفعال است)"
301
 
302
- #~ msgid "%s Misc"
303
- #~ msgstr "%s متفرقه"
304
 
305
- #~ msgid "Latest news source"
306
- #~ msgstr "منبع آخرین اخبار"
307
 
308
- #~ msgid "Select one"
309
- #~ msgstr "انتخاب کنید"
310
 
311
- #~ msgid "WP-Parsi news"
312
- #~ msgstr "اخبار وردپرس پارسی"
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: WP-Parsi additional strings\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2019-02-02 10:37+0330\n"
6
+ "PO-Revision-Date: 2021-09-02 17:59+0000\n"
7
  "Last-Translator: Ehsan <iehsan.ir@gmail.com>\n"
8
+ "Language-Team: Persian (Iran)\n"
9
+ "Language: fa-IR\n"
10
+ "Plural-Forms: nplurals=1; plural=0;\n"
11
  "MIME-Version: 1.0\n"
12
  "Content-Type: text/plain; charset=UTF-8\n"
13
  "Content-Transfer-Encoding: 8bit\n"
14
+ "X-Loco-Source-Locale: en_FR\n"
15
+ "X-Generator: Loco https://localise.biz/\n"
16
  "X-Poedit-Basepath: .\n"
 
17
  "X-Poedit-KeywordsList: __;_e\n"
18
  "X-Poedit-SourceCharset: UTF-8\n"
19
  "X-Poedit-SearchPath-0: ..\n"
20
+ "\n"
21
+ "X-Loco-Parser: loco_parse_po"
22
 
23
  #: ../includes/admin/lists-fix.php:83
24
  msgid "Show All Dates"
25
+ msgstr "نمایش همۀ تاریخ‌ها"
26
 
27
  #: ../includes/general.php:170
28
  #, php-format
29
  msgid ""
30
  "<div class=\"updated wpp-message\"><p>ParsiDate activated, you may need to "
31
+ "configure it to work properly. <a href=\"%s\">Go to configuration page</a> "
32
  "&ndash; <a href=\"%s\">Dismiss</a></p></div>"
33
  msgstr ""
34
+ "<div class=\"updated wpp-message\"><p>وردپرس پارسی فعال شد! برای کارکردن "
35
+ "افزونه نیاز به پیکربندی آن دارید. <a href=\"%s\">برگه‌ی پیکربندی</a> &ndash; "
36
+ "<a href=\"%s\">بی‌خیال</a></p></div>"
37
 
38
+ #: ../includes/plugins/disable.php:130 ../includes/plugins/edd.php:58
39
  #: ../includes/plugins/woocommerce.php:49 ../includes/settings.php:210
40
  msgid "Enable"
41
  msgstr "فعال"
42
 
43
+ #: ../includes/plugins/disable.php:131 ../includes/plugins/edd.php:59
44
  #: ../includes/plugins/woocommerce.php:50 ../includes/settings.php:211
45
  msgid "Disable"
46
  msgstr "غیرفعال"
51
 
52
  #: ../includes/plugins/disable.php:141
53
  msgid "Hook list"
54
+ msgstr "لیست قلاب‌ها"
55
 
56
  #: ../includes/plugins/disable.php:145
57
  msgid "Enter hook,class,function to remove parsidate filter from it"
58
+ msgstr "نام قلاب، کلاس و تابع موردنظر را جهت رفع فیلتر پارسی‌دیت وارد کنید"
59
 
60
  #: ../includes/plugins/edd.php:64
61
  msgid "Easy Digital Downloads"
73
  msgid "WooCommerce"
74
  msgstr "ووکامرس"
75
 
76
+ #: ../includes/settings.php:28 ../includes/settings.php:29
77
+ #: ../includes/settings.php:36 ../includes/settings.php:37
78
  #: ../includes/settings.php:572
79
  msgid "Parsi Settings"
80
  msgstr "تنظیمات پارسی"
91
 
92
  #: ../includes/settings.php:132
93
  #, php-format
94
+ msgid "%s Plugins compatibility"
95
  msgstr "%s هماهنگی با افزونه‌ها"
96
 
97
  #: ../includes/settings.php:217
116
 
117
  #: ../includes/settings.php:237
118
  msgid "By enabling this, Dates will convert to Shamsi (Jalali) dates"
119
+ msgstr ""
120
+ "با فعال‌کردن این گزینه، تاریخ‌ها به صورت تاریخ خورشیدی (جلالی) درمی‌آیند"
121
 
122
  #: ../includes/settings.php:241
123
  msgid "Move page to submenu?"
125
 
126
  #: ../includes/settings.php:245
127
  msgid ""
128
+ "By enabling this option, page item will be moved to Settings menu as submenu."
129
  msgstr ""
130
+ "با فعال‌کردن این گزینه، صفحۀ پیکربندی پارسی‌دیت به زیرفهرست «تنظیمات» منتقل "
131
+ "می‌شود."
132
 
133
  #: ../includes/settings.php:251
134
  msgid "Persian digits"
183
  #: ../includes/settings.php:328
184
  msgid "By enabling this, dates in permalinks converted to Shamsi (Jalali) date"
185
  msgstr ""
186
+ "با فعال‌کردن این گزینه، تاریخ‌ها در پیوندهای یکتا به تاریخ خورشیدی (جلالی) "
187
+ "تبدیل می‌شوند"
188
 
189
  #: ../includes/settings.php:541
190
  msgid "Upload File"
191
  msgstr "آپلود فایل"
192
 
193
+ #: ../includes/widget/widget_archive.php:13
194
+ #: ../includes/widget/widget_archive.php:15
195
+ #: ../includes/widget/widget_archive.php:22
196
+ #: ../includes/widget/widget_archive.php:31
197
+ #: ../includes/widget/widget_archive.php:64
198
  #: ../includes/widget/widget_archive.php:79
199
  msgid "Jalali Date Archives"
200
  msgstr "بایگانی تاریخ خورشیدی"
219
  msgid "Display as dropdown"
220
  msgstr "نمايش به صورت ليست بازشو"
221
 
222
+ #: ../includes/widget/widget_archive.php:58
223
  #: ../includes/widget/widget_calendar.php:28
224
+ msgid ""
225
+ "For use widget, active \"Fix permalinks dates\" option in plugin settings."
226
  msgstr ""
227
  "برای استفاده از ابزارک، گزینه \"تبدیل تاریخ در پیوندهای یکتا\" را در تنظیمات "
228
  "افزونه فعال کنید."
229
 
230
+ #: ../includes/widget/widget_calendar.php:11
231
+ #: ../includes/widget/widget_calendar.php:13
232
  #: ../includes/widget/widget_calendar.php:24
233
  msgid "Jalali Date Calender"
234
  msgstr "گاه‌شمار تاریخ خورشیدی"
243
 
244
  #: ../languages/common-strings.php:3
245
  msgid ""
246
+ "Persian package for WordPress, Adds full RTL and Shamsi (Jalali) support for:"
247
+ " posts, comments, pages, archives, search, categories, permalinks and all "
248
+ "admin sections and TinyMce editor, lists, quick editor. This package has "
249
+ "Jalali archive widget."
250
  msgstr ""
251
+ "بسته‌ی پارسی سازی وردپرس، اضافه‌کردن پشتیبانی کامل راست‌به‌چپ و تاریخ "
252
+ "خورشیدی برای وردپرس. این افزونه از نوشته‌ها، دیدگاه‌ها، برگه‌ها، بایگانی‌ها، "
253
+ "جستجو‌ها و دسته‌بندی‌ها و پیوندهای یکتا پشتیبانی می‌کند و تمام قسمت‌های "
254
+ "مدیریت و ویرایشگر را پارسی می‌کند. این افزونه هم‌چنین یک بزارک بایگانی شمسی "
255
+ "نیز دارد."
256
 
257
  #: ../languages/common-strings.php:4
258
  msgid "WP-Parsi Team"
262
  msgid "settings"
263
  msgstr "تنظیمات"
264
 
265
+ msgid "By enabling this, Widget Block Editor disabled"
266
+ msgstr ""
267
+ "با فعال‌کردن این گزینه، «ویرایشگر بلوک ابزارک» در بخش ابزارک‌ها غیرفعال "
268
+ "می‌شود."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
269
 
270
+ msgid "Debug Mode"
271
+ msgstr "حالت اشکال‌زادیی"
272
 
273
+ msgid ""
274
+ "By enabling this option, the uncompressed version of the JS and CSS files "
275
+ "will be loaded."
276
+ msgstr ""
277
+ "با فعال‌کردن این گزینه، نسخۀ فشرده‌نشدۀ پرونده‌های JS و CSS افزونۀ پارسی‌دیت "
278
+ "بارگذاری می‌شوند."
279
 
280
+ msgid "Jalali Datepicker"
281
+ msgstr "انتخاب‌گر تاریخ شمسی (جلالی)"
282
 
283
+ msgid "Save dates in Jalali format (Not recommended)"
284
+ msgstr "ذخیره‌سازی تاریخ بصورت شمسی (توصیه نمی‌شود)"
 
 
 
 
285
 
286
+ msgid "Advanced Custom Fields (ACF)"
287
+ msgstr "زمینه‌های سفارشی (ACF)"
288
 
289
+ msgid "Date"
290
+ msgstr "تاریخ شمسی"
 
 
 
291
 
292
+ msgid "Error! Please select a valid date."
293
+ msgstr "خطا! لطفاً تاریخ معتبری وارد کنید."
294
 
295
+ msgid "Placeholder"
296
+ msgstr "متن راهنما"
297
 
298
+ msgid "Show custom placeholder"
299
+ msgstr "نمایش متن راهنمای سفارشی"
300
 
301
+ msgid "Disable Widget Block"
302
+ msgstr "غیرفعال کردن ویرایشگر بلوک ابزارک"
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Parsi Date ===
2
- Contributors: lord_viper, man4toman, parselearn, alirdn, saeedfard, iehsanir
3
  Donate link: https://wp-parsi.com/support/
4
- Tags: shamsi, wp-parsi, wpparsi, persian, parsi, farsi, jalali, date, calendar, i18n, l10n, Iran, Iranian, parsidate, rtl, gutenberg
5
  Requires at least: 5.3
6
- Tested up to: 5.3
7
- Stable tag: 3.0.3
8
 
9
  Persian date support for WordPress
10
 
@@ -16,7 +16,7 @@ List of some features:
16
 
17
  * Shamsi (Jalali) day-picker in Block Editor (Gutenberg)
18
  * Shamsi (Jalali) jQuery UI date-picker
19
- * [WP-Planet.ir](http://wp-planet.ir) Widget
20
  * Shamsi (Jalali) date in Posts, comments, pages, archives, search, categories
21
  * Shamsi (Jalali) date in Permalinks
22
  * Shamsi (Jalali) date in admin sections such as posts lists, comments lists, pages lists
@@ -24,6 +24,8 @@ List of some features:
24
  * Shamsi (Jalali) calender widget
25
  * Shamsi (Jalali) archive widget
26
  * RTL and fixed tinymce editor
 
 
27
  * Powerful and fast function for fixing Arabic (ي , ك) to Persian (ی , ک)
28
  * Powerful and fast function for Persian numbers
29
  * Low resources usage
@@ -37,13 +39,46 @@ List of some features:
37
 
38
  == Screenshots ==
39
 
40
- 1. Plugin configuration page
41
- 2. 'Jalali Date Archives' Widget
42
- 3. 'Jalali Date Calender' Widget
43
- 4. 'Jalali Date Calender' in action
 
44
 
45
  == Changelog ==
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  = 3.0.3 =
48
  * Fix widgets fatal errors
49
  * Fix get_post_modified_time output
@@ -91,7 +126,7 @@ List of some features:
91
  * Fix set editor font css
92
 
93
  = 2.3 =
94
- * Add [WP-Planet.ir](http://wp-planet.ir) widget
95
  * Fix some bug
96
 
97
  = 2.2.3 =
1
  === Parsi Date ===
2
+ Contributors: lord_viper, man4toman, parselearn, yazdaniwp, saeedfard, iehsanir
3
  Donate link: https://wp-parsi.com/support/
4
+ Tags: shamsi, wp-parsi, wpparsi, persian, parsi, farsi, jalali, date, calendar, i18n, l10n, iran, iranian, parsidate, rtl, gutenberg, acf,woocommerce
5
  Requires at least: 5.3
6
+ Tested up to: 5.8.2
7
+ Stable tag: 4.0.0
8
 
9
  Persian date support for WordPress
10
 
16
 
17
  * Shamsi (Jalali) day-picker in Block Editor (Gutenberg)
18
  * Shamsi (Jalali) jQuery UI date-picker
19
+ * [WP-Planet.ir](https://wp-planet.ir) Widget
20
  * Shamsi (Jalali) date in Posts, comments, pages, archives, search, categories
21
  * Shamsi (Jalali) date in Permalinks
22
  * Shamsi (Jalali) date in admin sections such as posts lists, comments lists, pages lists
24
  * Shamsi (Jalali) calender widget
25
  * Shamsi (Jalali) archive widget
26
  * RTL and fixed tinymce editor
27
+ * Add Persian features to WooCommerce
28
+ * Add Persian features to ACF
29
  * Powerful and fast function for fixing Arabic (ي , ك) to Persian (ی , ک)
30
  * Powerful and fast function for Persian numbers
31
  * Low resources usage
39
 
40
  == Screenshots ==
41
 
42
+ 1. Plugin main settings
43
+ 2. Number conversions settings
44
+ 3. Other plugin compatibility
45
+ 4. Persian datepicker in WooCommerce
46
+ 5. Persian date type in ACF
47
 
48
  == Changelog ==
49
 
50
+ = 4.0.0 =
51
+ * This release contains huge bug fix:
52
+ - Conflict with jetpack
53
+ - Dashboard page warrning
54
+ - Conflict with DATE_W3C format
55
+ - Date problem in comments feed
56
+ - Error while save ACF fields
57
+ - Notice: Undefined index: date_i18n
58
+ - Notice error in archive.php pages
59
+ - RevSlider conflicts
60
+ - Date convertion problem in WordPress 5.3
61
+ - Conflict with get_the_modified_date
62
+ - Parsi Widget error
63
+ - Notice: Undefined index: wp_date, disable.php
64
+ - WooCommerce order detail fix
65
+ - Conflict with polylang and wpml
66
+ - Duplicate activity date in dashbaord
67
+ - Type error in editor datepicke
68
+ - Direction problem in legacy editor
69
+ - Wrong callback in get_the_time hook
70
+ - Default timezone problem
71
+ * Displaying "@" instead of "at" in Jalali version
72
+ * Persian number in WooCommerce prices
73
+ * Better support of Persian date in WooCommerce
74
+ * Persian datepicker in WooCommerce
75
+ * ACF Parsi date
76
+ * Mini support of WMPL and Polylang
77
+ * Update Calendar widgets
78
+ * Update attachments filter dropdown
79
+ * New looks and feels of settings panel
80
+ * Add Vazir font to admin area
81
+
82
  = 3.0.3 =
83
  * Fix widgets fatal errors
84
  * Fix get_post_modified_time output
126
  * Fix set editor font css
127
 
128
  = 2.3 =
129
+ * Add [WP-Planet.ir](https://wp-planet.ir) widget
130
  * Fix some bug
131
 
132
  = 2.2.3 =
screenshot-1.png CHANGED
Binary file
screenshot-2.png CHANGED
Binary file
screenshot-3.png CHANGED
Binary file
screenshot-4.png CHANGED
Binary file
screenshot-5.png ADDED
Binary file
wp-parsidate.php CHANGED
@@ -1,11 +1,13 @@
1
  <?php
 
 
2
  /**
3
  * Plugin Name: WP-Parsidate
4
- * Version: 3.0.3
5
- * Plugin URI: http://forum.wp-parsi.com/
6
  * Description: Persian package for WordPress, Adds full RTL and Shamsi (Jalali) support for: posts, comments, pages, archives, search, categories, permalinks and all admin sections and TinyMce editor, lists, quick editor. This package has Jalali archive widget.
7
  * Author: WP-Parsi Team
8
- * Author URI: http://wp-parsi.com/
9
  * Text Domain: wp-parsidate
10
  * Domain Path: parsi-languages
11
  * License: GPL3
@@ -29,181 +31,214 @@
29
  * Developers:
30
  * Mobin Ghasempoor ( Senior programmer & Founder )
31
  * Morteza Geransayeh ( Senior programmer & Manager )
 
 
32
  * Alireza Dabiri Nejad ( Programmer )
33
  * Ehsaan ( Programmer )
34
- * Farhan Nisi ( Programmer )
35
- * Parsa Kafi ( Programmer )
36
- * Mostafa Soufi ( Programmer )
37
- * Ali Aghdam ( Programmer )
38
- * Kamran Khorsandi ( Programmer )
39
- * Mehrshad Darzi ( Programmer )
40
- * Saeed Fard ( Analyst )
 
41
  *
42
  * @author Mobin Ghasempoor
43
  * @author Morteza Geransayeh
44
- * @author Alireza Dabiri Nejad
45
- * @link http://wp-parsi.com/
46
- * @version 3.0.1
47
  * @license http://www.gnu.org/licenses/gpl-3.0.html GNU Public License v3.0
48
  * @package WP-Parsidate
49
  * @subpackage Core
50
  */
51
 
52
-
53
- if (!defined('ABSPATH')) exit; //No direct access allowed
54
-
55
- final class WP_Parsidate
56
- {
57
- /**
58
- * @var WP_Parsidate Class instance
59
- */
60
- public static $instance = null;
61
-
62
- private function __construct()
63
- {
64
- $this->define_const();
65
- $this->setup_vars();
66
- $this->include_files();
67
- add_filter('plugin_action_links_' . plugin_basename(__FILE__), array($this, 'parsi_settings_link'));
68
- add_action('widgets_init', array($this, 'register_widget'));
69
- }
70
-
71
- /**
72
- * Sets up constants for plugin
73
- *
74
- * @return void
75
- * @since 2.0
76
- */
77
- private function define_const()
78
- {
79
- if (!defined('WP_PARSI_ROOT')) {
80
- define('WP_PARSI_ROOT', __FILE__);
81
- }
82
-
83
- if (!defined('WP_PARSI_DIR')) {
84
- define('WP_PARSI_DIR', plugin_dir_path(WP_PARSI_ROOT));
85
- }
86
-
87
- if (!defined('WP_PARSI_URL')) {
88
- define('WP_PARSI_URL', plugin_dir_url(WP_PARSI_ROOT));
89
- }
90
-
91
- if (!defined('WP_PARSI_VER')) {
92
- define('WP_PARSI_VER', '2.2');
93
- }
94
- }
95
-
96
- /**
97
- * Sets up global variables
98
- *
99
- * @return void
100
- * @since 2.0
101
- */
102
- private function setup_vars()
103
- {
104
- global $persian_month_names;
105
- $persian_month_names = array(
106
- '',
107
- 'فروردین',
108
- 'اردیبهشت',
109
- 'خرداد',
110
- 'تیر',
111
- 'مرداد',
112
- 'شهریور',
113
- 'مهر',
114
- 'آبان',
115
- 'آذر',
116
- 'دی',
117
- 'بهمن',
118
- 'اسفند'
119
- );
120
- }
121
-
122
- /**
123
- * Includes files for plugin
124
- *
125
- * @return void
126
- * @since 2.0
127
- */
128
- public function include_files()
129
- {
130
- require_once(WP_PARSI_DIR . 'includes/settings.php');
131
- global $wpp_settings;
132
- $wpp_settings = wp_parsi_get_settings();
133
-
134
- $files = array(
135
- 'parsidate',
136
- 'general',
137
- 'fixes-archive',
138
- 'fixes-permalinks',
139
- 'fixes-dates',
140
- 'fixes-misc',
141
- 'admin/styles-fix',
142
- //'admin/datepicker-rtl',
143
- 'admin/gutenberg-jalali-calendar',
144
- 'admin/lists-fix',
145
- 'admin/widgets',
146
- 'fixes-calendar',
147
- 'fixes-archives',
148
- 'plugins/woocommerce',
149
- //'plugins/fixes-woo',
150
- 'plugins/edd',
151
- 'plugins/disable',
152
- 'widget/widget_archive',
153
- 'widget/widget_calendar'
154
- );
155
-
156
- foreach ($files as $file) {
157
- require_once(WP_PARSI_DIR . 'includes/' . $file . '.php');
158
- }
159
-
160
- if (get_locale() == 'fa_IR') {
161
- load_textdomain('wp-parsidate', WP_PARSI_DIR . 'languages/fa_IR.mo');
162
- }
163
- }
164
-
165
- /**
166
- * Returns an instance of WP_Parsidate class, makes instance if not exists
167
- *
168
- * @return WP_Parsidate Instance of WP_Parsidate
169
- * @since 2.0
170
- */
171
- public static function get_instance()
172
- {
173
- if (self::$instance == null) {
174
- self::$instance = new WP_Parsidate();
175
- }
176
-
177
- return self::$instance;
178
- }
179
-
180
- /**
181
- * Add Setting Link To Install Plugin
182
- *
183
- * @param array $links
184
- *
185
- * @return array
186
- */
187
- public static function parsi_settings_link($links)
188
- {
189
- $settings_link = array('<a href="' . menu_page_url('wp-parsi-settings', false) . '">' . __('settings', 'wp-parsidate') . '</a>');
190
-
191
- return array_merge($links, $settings_link);
192
- }
193
-
194
- /**
195
- * Register Plugin Widgets
196
- *
197
- * @return boolean
198
- * @since 2.0
199
- */
200
- public function register_widget()
201
- {
202
- register_widget('parsidate_archive');
203
- register_widget('parsidate_calendar');
204
-
205
- return true;
206
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  }
208
 
209
- return WP_Parsidate::get_instance();
1
  <?php
2
+ defined( 'ABSPATH' ) || exit( 'No direct script access allowed' );
3
+
4
  /**
5
  * Plugin Name: WP-Parsidate
6
+ * Version: 4.0.0
7
+ * Plugin URI: https://wp-parsi.com/support/
8
  * Description: Persian package for WordPress, Adds full RTL and Shamsi (Jalali) support for: posts, comments, pages, archives, search, categories, permalinks and all admin sections and TinyMce editor, lists, quick editor. This package has Jalali archive widget.
9
  * Author: WP-Parsi Team
10
+ * Author URI: https://wp-parsi.com/
11
  * Text Domain: wp-parsidate
12
  * Domain Path: parsi-languages
13
  * License: GPL3
31
  * Developers:
32
  * Mobin Ghasempoor ( Senior programmer & Founder )
33
  * Morteza Geransayeh ( Senior programmer & Manager )
34
+ * HamidReza Yazdani ( Programmer )
35
+ * Parsa Kafi ( Programmer )
36
  * Alireza Dabiri Nejad ( Programmer )
37
  * Ehsaan ( Programmer )
38
+ * Saeed Fard ( Analyst & Contributor )
39
+ * Farhan Nisi ( Contributor )
40
+ * Mostafa Soufi ( Contributor )
41
+ * Ali Aghdam ( Contributor )
42
+ * Kamran Khorsandi ( Contributor )
43
+ * Mehrshad Darzi ( Contributor )
44
+ * Nasser Rafie ( Contributor )
45
+ * Milad Nazari ( Contributor )
46
  *
47
  * @author Mobin Ghasempoor
48
  * @author Morteza Geransayeh
49
+ * @link https://wp-parsi.com/
50
+ * @version 4.0.0
 
51
  * @license http://www.gnu.org/licenses/gpl-3.0.html GNU Public License v3.0
52
  * @package WP-Parsidate
53
  * @subpackage Core
54
  */
55
 
56
+ /**
57
+ *
58
+ */
59
+ final class WP_Parsidate {
60
+ /**
61
+ * @var WP_Parsidate Class instance
62
+ */
63
+ public static $instance = null;
64
+
65
+ private function __construct() {
66
+ $this->define_const();
67
+ $this->setup_vars();
68
+ $this->include_files();
69
+
70
+ add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'parsi_settings_link' ) );
71
+ add_action( 'widgets_init', array( $this, 'register_widget' ) );
72
+ add_action( 'admin_enqueue_scripts', array( $this, 'wpp_load_vazir_font_in_admin_area' ) );
73
+ }
74
+
75
+ /**
76
+ * Sets up constants for plugin
77
+ *
78
+ * @return void
79
+ * @since 2.0
80
+ */
81
+ private function define_const() {
82
+ if ( ! defined( 'WP_PARSI_ROOT' ) ) {
83
+ define( 'WP_PARSI_ROOT', __FILE__ );
84
+ }
85
+
86
+ if ( ! defined( 'WP_PARSI_DIR' ) ) {
87
+ define( 'WP_PARSI_DIR', plugin_dir_path( WP_PARSI_ROOT ) );
88
+ }
89
+
90
+ if ( ! defined( 'WP_PARSI_URL' ) ) {
91
+ define( 'WP_PARSI_URL', plugin_dir_url( WP_PARSI_ROOT ) );
92
+ }
93
+
94
+ if ( ! defined( 'WP_PARSI_VER' ) ) {
95
+ define( 'WP_PARSI_VER', '4.0.0' );
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Sets up global variables
101
+ *
102
+ * @return void
103
+ * @since 2.0
104
+ */
105
+ private function setup_vars() {
106
+ global $persian_month_names;
107
+ $persian_month_names = array(
108
+ '',
109
+ 'فروردین',
110
+ 'اردیبهشت',
111
+ 'خرداد',
112
+ 'تیر',
113
+ 'مرداد',
114
+ 'شهریور',
115
+ 'مهر',
116
+ 'آبان',
117
+ 'آذر',
118
+ 'دی',
119
+ 'بهمن',
120
+ 'اسفند'
121
+ );
122
+ }
123
+
124
+ /**
125
+ * Includes files for plugin
126
+ *
127
+ * @return void
128
+ * @since 2.0
129
+ */
130
+ public function include_files() {
131
+ require_once( WP_PARSI_DIR . 'includes/settings.php' );
132
+
133
+ global $wpp_settings;
134
+
135
+ $wpp_settings = wp_parsi_get_settings();
136
+ $files = array(
137
+ 'parsidate',
138
+ 'general',
139
+ 'fixes-archive',
140
+ 'fixes-permalinks',
141
+ 'fixes-dates',
142
+ 'fixes-misc',
143
+ 'admin/styles-fix',
144
+ 'admin/gutenberg-jalali-calendar',
145
+ 'admin/lists-fix',
146
+ 'admin/widgets',
147
+ 'fixes-calendar',
148
+ 'fixes-archives',
149
+ 'widget/widget_archive',
150
+ 'widget/widget_calendar'
151
+ );
152
+
153
+ if ( class_exists( 'WooCommerce' ) ) {
154
+ $files[] = 'plugins/woocommerce';
155
+ }
156
+
157
+ if ( class_exists( 'Easy_Digital_Downloads' ) ) {
158
+ $files[] = 'plugins/edd';
159
+ }
160
+
161
+ if ( class_exists( 'ACF' ) ) {
162
+ $files[] = 'plugins/acf';
163
+ }
164
+
165
+ $files[] = 'plugins/disable';
166
+
167
+ foreach ( $files as $file ) {
168
+ require_once( WP_PARSI_DIR . 'includes/' . $file . '.php' );
169
+ }
170
+
171
+ if ( get_locale() == 'fa_IR' ) {
172
+ load_textdomain( 'wp-parsidate', WP_PARSI_DIR . 'languages/fa_IR.mo' );
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Returns an instance of WP_Parsidate class, makes instance if not exists
178
+ *
179
+ * @return WP_Parsidate Instance of WP_Parsidate
180
+ * @since 2.0
181
+ */
182
+ public static function get_instance() {
183
+ if ( self::$instance == null ) {
184
+ self::$instance = new WP_Parsidate();
185
+ }
186
+
187
+ return self::$instance;
188
+ }
189
+
190
+ /**
191
+ * Add Setting Link To Install Plugin
192
+ *
193
+ * @param array $links
194
+ *
195
+ * @return array
196
+ */
197
+ public static function parsi_settings_link( $links ) {
198
+ $settings_link = array( '<a href="' . menu_page_url( 'wp-parsi-settings', false ) . '">' . __( 'settings', 'wp-parsidate' ) . '</a>' );
199
+
200
+ return array_merge( $links, $settings_link );
201
+ }
202
+
203
+ /**
204
+ * Register Plugin Widgets
205
+ *
206
+ * @return boolean
207
+ * @since 2.0
208
+ */
209
+ public function register_widget() {
210
+ register_widget( 'parsidate_archive' );
211
+ register_widget( 'parsidate_calendar' );
212
+
213
+ return true;
214
+ }
215
+
216
+ /**
217
+ * Load vazir font in admin area
218
+ *
219
+ * @since 4.0.0
220
+ */
221
+ public function wpp_load_vazir_font_in_admin_area() {
222
+ if ( get_locale() !== 'fa_IR' ) {
223
+ return;
224
+ }
225
+
226
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || wpp_is_active( 'dev_mode' ) ? '' : '.min';
227
+
228
+ wp_enqueue_style( 'wpp-vazir-font', WP_PARSI_URL . "assets/css/vazir-font$suffix.css", null, WP_PARSI_VER, 'all' );
229
+
230
+ add_action( 'admin_head', array( $this, 'wpp_preload_vazir_fonts' ) );
231
+ }
232
+
233
+ /**
234
+ * Preload vazir font to achieve to high performance
235
+ *
236
+ * @since 4.0.0
237
+ */
238
+ public function wpp_preload_vazir_fonts() {
239
+ echo '<link rel="preload" href="' . WP_PARSI_URL . 'assets/fonts/Vazir-Regular.woff2" as="font" type="font/woff2" crossorigin>' . PHP_EOL .
240
+ '<link rel="preload" href="' . WP_PARSI_URL . 'assets/fonts/Vazir-Bold.woff2" as="font" type="font/woff2" crossorigin>' . PHP_EOL;
241
+ }
242
  }
243
 
244
+ return WP_Parsidate::get_instance();