Events Manager - Version 5.9.1

Version Description

  • fixed the & operator in category search attribute not working correctly in MultiSite Global Tables mode
  • added fix/workaround for any code that changes the timezone from WP's UTC timezone during runtime
  • fixed multisite upgrade issues with timezones
  • added option to reset timezones for all blogs on multisite and also reset each blog to its individual WP timezone
  • changed default subscriber capabilities so they can't submit events by default
  • added option to resume failed timezone resets on multisite blogs
  • added upgrade warning for multisite users who upgraded to 5.9 and had timezone update errors
  • fixed (deprecated with backward compatibility) shorthand EM_Booking object properties such as 'status' not having values after 5.9 update
  • fixed recurrence pattern date miscalculations on sites where a plugin/theme changes the default server timezone after WP sets it to UTC
  • added gutenberg support with define('EM_GUTENBERG', true); defined in wp-config.php
  • fixed new tickets not being added to previously created recurring event where bookings were previously disabled
  • added tweaked EM_DateTime functionality so functions that might return false in DateTime set valid property to false before returning object for chaining
Download this release

Release Info

Developer netweblogic
Plugin Icon 128x128 Events Manager
Version 5.9.1
Comparing to
See all releases

Code changes from version 5.9 to 5.9.1

Files changed (68) hide show
  1. admin/em-options.php +62 -3
  2. classes/em-admin-notice.php +1 -1
  3. classes/em-booking.php +2 -0
  4. classes/em-datetime.php +78 -23
  5. classes/em-event.php +25 -37
  6. classes/em-object.php +0 -1
  7. em-install.php +33 -11
  8. em-posts.php +14 -0
  9. em-rss.php +0 -41
  10. events-manager.php +2 -2
  11. includes/js/events-manager.min.js +0 -3
  12. includes/js/i18n/jquery-ui-i18n.js +0 -1199
  13. includes/js/i18n/jquery.ui.datepicker-af.js +0 -23
  14. includes/js/i18n/jquery.ui.datepicker-ar.js +0 -24
  15. includes/js/i18n/jquery.ui.datepicker-az.js +0 -23
  16. includes/js/i18n/jquery.ui.datepicker-bg.js +0 -24
  17. includes/js/i18n/jquery.ui.datepicker-bs.js +0 -23
  18. includes/js/i18n/jquery.ui.datepicker-ca.js +0 -23
  19. includes/js/i18n/jquery.ui.datepicker-cs.js +0 -23
  20. includes/js/i18n/jquery.ui.datepicker-da.js +0 -23
  21. includes/js/i18n/jquery.ui.datepicker-de.js +0 -23
  22. includes/js/i18n/jquery.ui.datepicker-el.js +0 -23
  23. includes/js/i18n/jquery.ui.datepicker-en-GB.js +0 -23
  24. includes/js/i18n/jquery.ui.datepicker-eo.js +0 -23
  25. includes/js/i18n/jquery.ui.datepicker-es.js +0 -23
  26. includes/js/i18n/jquery.ui.datepicker-et.js +0 -23
  27. includes/js/i18n/jquery.ui.datepicker-eu.js +0 -23
  28. includes/js/i18n/jquery.ui.datepicker-fa.js +0 -23
  29. includes/js/i18n/jquery.ui.datepicker-fi.js +0 -23
  30. includes/js/i18n/jquery.ui.datepicker-fo.js +0 -23
  31. includes/js/i18n/jquery.ui.datepicker-fr-CH.js +0 -23
  32. includes/js/i18n/jquery.ui.datepicker-fr.js +0 -23
  33. includes/js/i18n/jquery.ui.datepicker-he.js +0 -23
  34. includes/js/i18n/jquery.ui.datepicker-hr.js +0 -23
  35. includes/js/i18n/jquery.ui.datepicker-hu.js +0 -23
  36. includes/js/i18n/jquery.ui.datepicker-hy.js +0 -23
  37. includes/js/i18n/jquery.ui.datepicker-id.js +0 -23
  38. includes/js/i18n/jquery.ui.datepicker-is.js +0 -23
  39. includes/js/i18n/jquery.ui.datepicker-it.js +0 -23
  40. includes/js/i18n/jquery.ui.datepicker-ja.js +0 -23
  41. includes/js/i18n/jquery.ui.datepicker-ko.js +0 -23
  42. includes/js/i18n/jquery.ui.datepicker-kz.js +0 -23
  43. includes/js/i18n/jquery.ui.datepicker-lt.js +0 -23
  44. includes/js/i18n/jquery.ui.datepicker-lv.js +0 -23
  45. includes/js/i18n/jquery.ui.datepicker-ms.js +0 -23
  46. includes/js/i18n/jquery.ui.datepicker-nl.js +0 -24
  47. includes/js/i18n/jquery.ui.datepicker-no.js +0 -23
  48. includes/js/i18n/jquery.ui.datepicker-pl.js +0 -23
  49. includes/js/i18n/jquery.ui.datepicker-pt-BR.js +0 -23
  50. includes/js/i18n/jquery.ui.datepicker-ro.js +0 -26
  51. includes/js/i18n/jquery.ui.datepicker-ru.js +0 -23
  52. includes/js/i18n/jquery.ui.datepicker-sk.js +0 -23
  53. includes/js/i18n/jquery.ui.datepicker-sl.js +0 -24
  54. includes/js/i18n/jquery.ui.datepicker-sq.js +0 -23
  55. includes/js/i18n/jquery.ui.datepicker-sr-SR.js +0 -23
  56. includes/js/i18n/jquery.ui.datepicker-sr.js +0 -23
  57. includes/js/i18n/jquery.ui.datepicker-sv.js +0 -23
  58. includes/js/i18n/jquery.ui.datepicker-ta.js +0 -23
  59. includes/js/i18n/jquery.ui.datepicker-th.js +0 -23
  60. includes/js/i18n/jquery.ui.datepicker-tr.js +0 -23
  61. includes/js/i18n/jquery.ui.datepicker-uk.js +0 -23
  62. includes/js/i18n/jquery.ui.datepicker-vi.js +0 -23
  63. includes/js/i18n/jquery.ui.datepicker-zh-CN.js +0 -23
  64. includes/js/i18n/jquery.ui.datepicker-zh-HK.js +0 -23
  65. includes/js/i18n/jquery.ui.datepicker-zh-TW.js +0 -23
  66. plugins/wp-seo.php +0 -12
  67. readme.txt +15 -2
  68. templates/templates/bookings-event-printable.php +1 -1
admin/em-options.php CHANGED
@@ -252,9 +252,45 @@ function em_options_save(){
252
if( !empty($_REQUEST['timezone_reset_blog']) && is_numeric($_REQUEST['timezone_reset_blog']) ){
253
$blog_id = $_REQUEST['timezone_reset_blog'];
254
switch_to_blog($blog_id);
255
$blog_name = get_bloginfo('name');
256
$result = em_migrate_datetime_timezones(true, true, $timezone);
257
restore_current_blog();
258
}else{
259
$result = __('A valid blog ID must be provided, you can only reset one blog at a time.','events-manager');
260
}
@@ -265,7 +301,11 @@ function em_options_save(){
265
$EM_Notices->add_error($result, true);
266
}else{
267
if( is_multisite() ){
268
- $EM_Notices->add_confirm(sprintf(__('Event timezones for blog %s have been reset to %s.','events-manager'), '<code>'.$blog_name.'</code>', '<code>'.$timezone.'</code>'), true);
269
}else{
270
$EM_Notices->add_confirm(sprintf(__('Event timezones have been reset to %s.','events-manager'), '<code>'.$timezone.'</code>'), true);
271
}
@@ -799,18 +839,37 @@ function em_admin_option_box_uninstall(){
799
<table class="form-table">
800
<tr class="em-header"><td colspan="2">
801
<h4><?php _e ( 'Reset Timezones', 'events-manager'); ?></h4>
802
- </td></tr>
803
<tr>
804
<th style="text-align:right;">
805
<a href="#" class="button-secondary" id="em-reset-event-timezones"><?php esc_html_e('Reset Event Timezones','events-manager'); ?></a>
806
</th>
807
<td>
808
<select name="timezone_reset_value" class="em-reset-event-timezones">
809
- <?php echo wp_timezone_choice(''); ?>
810
</select>
811
<?php if( is_multisite() ): ?>
812
<select name="timezone_reset_blog" class="em-reset-event-timezones">
813
<option value="0"><?php esc_html_e('Select a blog...', 'events-manager'); ?></option>
814
<?php
815
foreach( get_sites() as $WP_Site){ /* @var WP_Site $WP_Site */
816
echo '<option value="'.esc_attr($WP_Site->blog_id).'">'. esc_html($WP_Site->blogname) .'</option>';
252
if( !empty($_REQUEST['timezone_reset_blog']) && is_numeric($_REQUEST['timezone_reset_blog']) ){
253
$blog_id = $_REQUEST['timezone_reset_blog'];
254
switch_to_blog($blog_id);
255
+ if( $timezone == 'default' ){
256
+ $timezone = str_replace(' ', EM_DateTimeZone::create()->getName());
257
+ }
258
$blog_name = get_bloginfo('name');
259
$result = em_migrate_datetime_timezones(true, true, $timezone);
260
restore_current_blog();
261
+ }elseif( !empty($_REQUEST['timezone_reset_blog']) && ($_REQUEST['timezone_reset_blog'] == 'all' || $_REQUEST['timezone_reset_blog'] == 'all-resume') ){
262
+ global $wpdb, $current_site;
263
+ $blog_ids = $blog_ids_progress = get_site_option('dbem_reset_timezone_multisite_progress', false);
264
+ if( !is_array($blog_ids) || $_REQUEST['timezone_reset_blog'] == 'all' ){
265
+ $blog_ids = $blog_ids_progress = $wpdb->get_col('SELECT blog_id FROM '.$wpdb->blogs.' WHERE site_id='.$current_site->id);
266
+ update_site_option('dbem_reset_timezone_multisite_progress', $blog_ids_progress);
267
+ }
268
+ foreach($blog_ids as $k => $blog_id){
269
+ $result = true;
270
+ $plugin_basename = plugin_basename(dirname(dirname(__FILE__)).'/events-manager.php');
271
+ if( in_array( $plugin_basename, (array) get_blog_option($blog_id, 'active_plugins', array() ) ) || is_plugin_active_for_network($plugin_basename) ){
272
+ switch_to_blog($blog_id);
273
+ $blog_timezone = $timezone == 'default' ? str_replace(' ', '', EM_DateTimeZone::create()->getName()) : $timezone;
274
+ $blog_name = get_bloginfo('name');
275
+ $blog_result = em_migrate_datetime_timezones(true, true, $blog_timezone);
276
+ if( !$blog_result ){
277
+ $fails[$blog_id] = $blog_name;
278
+ }else{
279
+ unset($blog_ids_progress[$k]);
280
+ update_site_option('dbem_reset_timezone_multisite_progress', $blog_ids_progress);
281
+ }
282
+ }
283
+ }
284
+ if( !empty($fails) ){
285
+ $result = __('The following blog timezones could not be successfully reset:', 'events-manager');
286
+ $result .= '<ul>';
287
+ foreach( $fails as $fail ) $result .= '<li>'.$fail.'</li>';
288
+ $result .= '</ul>';
289
+ }else{
290
+ delete_site_option('dbem_reset_timezone_multisite_progress');
291
+ EM_Admin_Notices::remove('date_time_migration_5.9_multisite', true);
292
+ }
293
+ restore_current_blog();
294
}else{
295
$result = __('A valid blog ID must be provided, you can only reset one blog at a time.','events-manager');
296
}
301
$EM_Notices->add_error($result, true);
302
}else{
303
if( is_multisite() ){
304
+ if( $_REQUEST['timezone_reset_blog'] == 'all' || $_REQUEST['timezone_reset_blog'] == 'all-resume' ){
305
+ $EM_Notices->add_confirm(sprintf(__('Event timezones on all blogs have been reset to %s.','events-manager'), '<code>'.$timezone.'</code>'), true);
306
+ }else{
307
+ $EM_Notices->add_confirm(sprintf(__('Event timezones for blog %s have been reset to %s.','events-manager'), '<code>'.$blog_name.'</code>', '<code>'.$timezone.'</code>'), true);
308
+ }
309
}else{
310
$EM_Notices->add_confirm(sprintf(__('Event timezones have been reset to %s.','events-manager'), '<code>'.$timezone.'</code>'), true);
311
}
839
<table class="form-table">
840
<tr class="em-header"><td colspan="2">
841
<h4><?php _e ( 'Reset Timezones', 'events-manager'); ?></h4>
842
+ <?php if( is_multisite() && get_site_option('dbem_reset_timezone_multisite_progress', false) !== false ): ?>
843
+ <p style="color:red;">
844
+ <?php
845
+ echo sprintf( esc_html__('Your last attempt to reset all blogs to a certain timezone did not complete successfully. You can attempt to reset only those blogs that weren\'t completed by selecting your desired timezone again and then %s from the dropdowns below', 'events-manager'), '<code>'.esc_html__('Resume Previous Attempt (All Blogs)', 'events-manager').'</code>' );
846
+ ?>
847
+ </p>
848
+ <?php endif; ?>
849
+ </td></tr>
850
<tr>
851
<th style="text-align:right;">
852
<a href="#" class="button-secondary" id="em-reset-event-timezones"><?php esc_html_e('Reset Event Timezones','events-manager'); ?></a>
853
</th>
854
<td>
855
<select name="timezone_reset_value" class="em-reset-event-timezones">
856
+ <?php
857
+ if( is_multisite() ){
858
+ $timezone_default = 'none';
859
+ echo '<option value="default">'.__('Blog Default Timezone', 'events-manager').'</option>';
860
+ }else{
861
+ $timezone_default = str_replace(' ', '', EM_DateTimeZone::create()->getName());
862
+ }
863
+ ?>
864
+ <?php echo wp_timezone_choice($timezone_default); ?>
865
</select>
866
<?php if( is_multisite() ): ?>
867
<select name="timezone_reset_blog" class="em-reset-event-timezones">
868
<option value="0"><?php esc_html_e('Select a blog...', 'events-manager'); ?></option>
869
+ <option value="all"><?php esc_html_e('All Blogs', 'events-manager'); ?></option>
870
+ <?php if( is_multisite() && get_site_option('dbem_reset_timezone_multisite_progress', false) !== false ): ?>
871
+ <option value="all-resume"><?php esc_html_e('Resume Previous Attempt (All Blogs)', 'events-manager'); ?></option>
872
+ <?php endif; ?>
873
<?php
874
foreach( get_sites() as $WP_Site){ /* @var WP_Site $WP_Site */
875
echo '<option value="'.esc_attr($WP_Site->blog_id).'">'. esc_html($WP_Site->blogname) .'</option>';
classes/em-admin-notice.php CHANGED
@@ -17,7 +17,7 @@ class EM_Admin_Notice {
17
*/
18
public $who = 'admin';
19
/**
20
- * Represents the date of when
21
* @var string
22
*/
23
public $what = 'info';
17
*/
18
public $who = 'admin';
19
/**
20
+ * What kind of notices this is, which can be 'success','info','warning' or 'error'
21
* @var string
22
*/
23
public $what = 'info';
classes/em-booking.php CHANGED
@@ -174,6 +174,8 @@ class EM_Booking extends EM_Object{
174
if( $prop == 'timestamp' ){
175
if( $this->date() !== false );
176
$this->date()->setTimestamp($val);
177
}
178
}
179
174
if( $prop == 'timestamp' ){
175
if( $this->date() !== false );
176
$this->date()->setTimestamp($val);
177
+ }else{
178
+ $this->$prop = $val;
179
}
180
}
181
classes/em-datetime.php CHANGED
@@ -80,7 +80,7 @@ class EM_DateTime extends DateTime {
80
if( !$this->valid && ($format == 'Y-m-d' || $format == em_get_date_format())) return '';
81
//if we deal with offsets, then we offset UTC time by that much
82
if( $this->timezone_manual_offset !== false ){
83
- return date($format, $this->getTimestamp() + $this->timezone_manual_offset );
84
}
85
return parent::format($format);
86
}
@@ -105,9 +105,7 @@ class EM_DateTime extends DateTime {
105
public function i18n( $format = 'Y-m-d H:i:s' ){
106
if( !$this->valid && $format == em_get_date_format()) return '';
107
//if we deal with offsets, then we offset UTC time by that much
108
- $ts = $this->getTimestamp();
109
- $tswo = $this->getTimestampWithOffset();
110
- return date_i18n( $format, $this->getTimestampWithOffset() );
111
}
112
113
/**
@@ -119,7 +117,8 @@ class EM_DateTime extends DateTime {
119
}
120
121
/**
122
- * Modifies the time of this object, if a mysql TIME valid format is provided (e.g. 14:30:00)
123
* @param string $hour
124
* @return EM_DateTime Returns object for chaining.
125
*/
@@ -127,47 +126,71 @@ class EM_DateTime extends DateTime {
127
if( preg_match('/^\d{2}:\d{2}:\d{2}#x2F;', $hour) ){
128
$time = explode(':', $hour);
129
$this->setTime($time[0], $time[1], $time[2]);
130
}
131
return $this;
132
}
133
134
public function setTimestamp( $timestamp ){
135
if( function_exists('date_timestamp_set') ){
136
- return parent::setTimestamp( $timestamp );
137
}else{
138
//PHP < 5.3 fallback :/ setting modify() with a timestamp produces unpredictable results, so we play more tricks...
139
$date = explode(',', date('Y,n,j,G,i,s', $timestamp));
140
parent::setDate( (int) $date[0], (int) $date[1], (int) $date[2]);
141
parent::setTime( (int) $date[3], (int) $date[4], (int) $date[5]);
142
- return $this;
143
}
144
}
145
146
/**
147
* Extends DateTime functionality by accepting a false or string value for a timezone.
148
* @see DateTime::setTimezone()
149
* @return EM_DateTime Returns object for chaining.
150
*/
151
public function setTimezone( $timezone ){
152
if( $timezone == $this->getTimezone()->getName() ) return $this;
153
$timezone = EM_DateTimeZone::create($timezone);
154
- parent::setTimezone($timezone);
155
$this->timezone_name = $timezone->getName();
156
$this->timezone_manual_offset = $timezone->manual_offset;
157
return $this;
158
}
159
160
public function setTime( $hour, $minute, $second = NULL, $microseconds = NULL ){
161
- parent::setTime( $hour, $minute, $second );
162
$this->handleOffsets();
163
return $this;
164
}
165
166
public function setDate( $year, $month, $day ){
167
if( $this->timezone_manual_offset !== false ){
168
//we run into issues if we're dealing with timezones on the fringe of date changes e.g. 2018-01-01 01:00:00 UTC+2
169
$DateTime = new DateTime( $this->getDateTime(), new DateTimeZone('UTC'));
170
- $DateTime->setDate( $year, $month, $day );
171
//create a new timestamp based on UTC DateTime and offset it to current timezone
172
if( function_exists('date_timestamp_get') ){
173
$timestamp = $DateTime->getTimestamp();
@@ -177,23 +200,40 @@ class EM_DateTime extends DateTime {
177
}
178
$timestamp -= $this->timezone_manual_offset;
179
$this->setTimestamp( $timestamp );
180
}else{
181
- parent::setDate( $year, $month, $day );
182
}
183
return $this;
184
}
185
186
public function setISODate( $year, $week, $day = NULL ){
187
- parent::setISODate( $year, $week, $day );
188
return $this;
189
}
190
191
public function modify( $modify ){
192
if( function_exists('date_add') ){
193
- parent::modify($modify);
194
}else{
195
//PHP < 5.3 fallback :/ wierd stuff happens when using the DateTime modify function
196
- $this->setTimestamp( strtotime($modify, $this->getTimestamp()) );
197
}
198
$this->handleOffsets();
199
return $this;
@@ -201,6 +241,7 @@ class EM_DateTime extends DateTime {
201
202
/**
203
* Extends DateTime function to allow string representation of argument passed to create a new DateInterval object.
204
* @see DateTime::add()
205
* @param string|DateInterval
206
* @return EM_DateTime Returns object for chaining.
@@ -208,20 +249,23 @@ class EM_DateTime extends DateTime {
208
public function add( $DateInterval ){
209
if( function_exists('date_add') ){
210
if( is_object($DateInterval) ){
211
- return parent::add($DateInterval);
212
}else{
213
- return parent::add( new DateInterval($DateInterval) );
214
}
215
}else{
216
//PHP < 5.3 fallback :/
217
$strtotime = $this->dateinterval_fallback($DateInterval, 'add');
218
$this->setTimestamp( strtotime($strtotime, $this->getTimestamp()) );
219
- return $this;
220
}
221
}
222
223
/**
224
* Extends DateTime function to allow string representation of argument passed to create a new DateInterval object.
225
* @see DateTime::sub()
226
* @param string|DateInterval
227
* @return EM_DateTime
@@ -229,16 +273,18 @@ class EM_DateTime extends DateTime {
229
public function sub( $DateInterval ){
230
if( function_exists('date_sub') ){
231
if( is_object($DateInterval) ){
232
- return parent::sub($DateInterval);
233
}else{
234
- return parent::sub( new DateInterval($DateInterval) );
235
}
236
}else{
237
//PHP < 5.3 fallback :/
238
$strtotime = $this->dateinterval_fallback($DateInterval, 'subtract');
239
$this->setTimestamp( strtotime($strtotime, $this->getTimestamp()) );
240
- return $this;
241
}
242
}
243
244
/**
@@ -279,6 +325,10 @@ class EM_DateTime extends DateTime {
279
return clone $this;
280
}
281
282
public function getTimestamp(){
283
if( function_exists('date_timestamp_get') ){
284
return parent::getTimestamp();
@@ -291,10 +341,15 @@ class EM_DateTime extends DateTime {
291
}
292
293
/**
294
- * Gets a timestamp with an offset, which will represent the local time equivalent in UTC time (so a local time would be produced if supplied to date())
295
*/
296
- public function getTimestampWithOffset(){
297
- return $this->getOffset() + $this->getTimestamp();
298
}
299
300
/**
80
if( !$this->valid && ($format == 'Y-m-d' || $format == em_get_date_format())) return '';
81
//if we deal with offsets, then we offset UTC time by that much
82
if( $this->timezone_manual_offset !== false ){
83
+ return date($format, $this->getTimestampWithOffset(true) );
84
}
85
return parent::format($format);
86
}
105
public function i18n( $format = 'Y-m-d H:i:s' ){
106
if( !$this->valid && $format == em_get_date_format()) return '';
107
//if we deal with offsets, then we offset UTC time by that much
108
+ return date_i18n( $format, $this->getTimestampWithOffset(true) );
109
}
110
111
/**
117
}
118
119
/**
120
+ * Modifies the time of this object, if a mysql TIME valid format is provided (e.g. 14:30:00).
121
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
122
* @param string $hour
123
* @return EM_DateTime Returns object for chaining.
124
*/
126
if( preg_match('/^\d{2}:\d{2}:\d{2}#x2F;', $hour) ){
127
$time = explode(':', $hour);
128
$this->setTime($time[0], $time[1], $time[2]);
129
+ }else{
130
+ $this->valid = false;
131
}
132
return $this;
133
}
134
135
+ /**
136
+ * Sets timestamp with PHP 5.2.x fallback.
137
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
138
+ * @see DateTime::setTimestamp()
139
+ */
140
public function setTimestamp( $timestamp ){
141
if( function_exists('date_timestamp_set') ){
142
+ $return = parent::setTimestamp( $timestamp );
143
+ $this->valid = $return !== false;
144
}else{
145
//PHP < 5.3 fallback :/ setting modify() with a timestamp produces unpredictable results, so we play more tricks...
146
$date = explode(',', date('Y,n,j,G,i,s', $timestamp));
147
parent::setDate( (int) $date[0], (int) $date[1], (int) $date[2]);
148
parent::setTime( (int) $date[3], (int) $date[4], (int) $date[5]);
149
+ //$this->valid determined in functions above
150
}
151
+ return $this;
152
}
153
154
/**
155
* Extends DateTime functionality by accepting a false or string value for a timezone.
156
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
157
* @see DateTime::setTimezone()
158
* @return EM_DateTime Returns object for chaining.
159
*/
160
public function setTimezone( $timezone ){
161
if( $timezone == $this->getTimezone()->getName() ) return $this;
162
$timezone = EM_DateTimeZone::create($timezone);
163
+ $return = parent::setTimezone($timezone);
164
$this->timezone_name = $timezone->getName();
165
$this->timezone_manual_offset = $timezone->manual_offset;
166
+ $this->valid = $return !== false;
167
return $this;
168
}
169
170
+ /**
171
+ * Sets time along with adjusting internal timestamp for manual UTC offsets.
172
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
173
+ * {@inheritDoc}
174
+ * @see DateTime::setTime()
175
+ */
176
public function setTime( $hour, $minute, $second = NULL, $microseconds = NULL ){
177
+ $return = parent::setTime( $hour, $minute, $second );
178
$this->handleOffsets();
179
+ $this->valid = $return !== false;
180
return $this;
181
}
182
183
+ /**
184
+ * Sets date along with adjusting internal timestamp for manual UTC offsets.
185
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
186
+ * {@inheritDoc}
187
+ * @see DateTime::setDate()
188
+ */
189
public function setDate( $year, $month, $day ){
190
if( $this->timezone_manual_offset !== false ){
191
//we run into issues if we're dealing with timezones on the fringe of date changes e.g. 2018-01-01 01:00:00 UTC+2
192
$DateTime = new DateTime( $this->getDateTime(), new DateTimeZone('UTC'));
193
+ $DateTime->setDate( $year, $month, $day ); //$this->valid is determined here
194
//create a new timestamp based on UTC DateTime and offset it to current timezone
195
if( function_exists('date_timestamp_get') ){
196
$timestamp = $DateTime->getTimestamp();
200
}
201
$timestamp -= $this->timezone_manual_offset;
202
$this->setTimestamp( $timestamp );
203
+ $return = $this->valid;
204
}else{
205
+ $return = parent::setDate( $year, $month, $day );
206
}
207
+ $this->valid = $return !== false;
208
return $this;
209
}
210
211
+ /**
212
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
213
+ * {@inheritDoc}
214
+ * @see DateTime::setISODate()
215
+ */
216
public function setISODate( $year, $week, $day = NULL ){
217
+ $return = parent::setISODate( $year, $week, $day );
218
+ $this->valid = $return !== false;
219
return $this;
220
}
221
222
+ /**
223
+ * Handles UTC manual offsets along with providing a PHP 5.2.x fallback.
224
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
225
+ * {@inheritDoc}
226
+ * @see DateTime::modify()
227
+ */
228
public function modify( $modify ){
229
if( function_exists('date_add') ){
230
+ $result = parent::modify($modify);
231
+ $this->valid = $result !== false;
232
}else{
233
//PHP < 5.3 fallback :/ wierd stuff happens when using the DateTime modify function
234
+ $timestamp = strtotime($modify, $this->getTimestamp());
235
+ $this->valid = $timestamp !== false;
236
+ if( $this->valid ) $this->setTimestamp( $timestamp );
237
}
238
$this->handleOffsets();
239
return $this;
241
242
/**
243
* Extends DateTime function to allow string representation of argument passed to create a new DateInterval object.
244
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
245
* @see DateTime::add()
246
* @param string|DateInterval
247
* @return EM_DateTime Returns object for chaining.
249
public function add( $DateInterval ){
250
if( function_exists('date_add') ){
251
if( is_object($DateInterval) ){
252
+ $result = parent::add($DateInterval);
253
}else{
254
+ $result = parent::add( new DateInterval($DateInterval) );
255
}
256
+ $this->valid = $result !== false;
257
}else{
258
//PHP < 5.3 fallback :/
259
$strtotime = $this->dateinterval_fallback($DateInterval, 'add');
260
$this->setTimestamp( strtotime($strtotime, $this->getTimestamp()) );
261
+ //$this->valid determined in setTimestamp
262
}
263
+ return $this;
264
}
265
266
/**
267
* Extends DateTime function to allow string representation of argument passed to create a new DateInterval object.
268
+ * Returns EM_DateTime object in all cases, but $this->valid will be set to false if unsuccessful
269
* @see DateTime::sub()
270
* @param string|DateInterval
271
* @return EM_DateTime
273
public function sub( $DateInterval ){
274
if( function_exists('date_sub') ){
275
if( is_object($DateInterval) ){
276
+ $result = parent::sub($DateInterval);
277
}else{
278
+ $result = parent::sub( new DateInterval($DateInterval) );
279
}
280
+ $this->valid = $result !== false;
281
}else{
282
//PHP < 5.3 fallback :/
283
$strtotime = $this->dateinterval_fallback($DateInterval, 'subtract');
284
$this->setTimestamp( strtotime($strtotime, $this->getTimestamp()) );
285
+ //$this->valid determined in setTimestamp
286
}
287
+ return $this;
288
}
289
290
/**
325
return clone $this;
326
}
327
328
+ /**
329
+ * {@inheritDoc}
330
+ * @see DateTime::getTimestamp()
331
+ */
332
public function getTimestamp(){
333
if( function_exists('date_timestamp_get') ){
334
return parent::getTimestamp();
341
}
342
343
/**
344
+ * Gets a timestamp with an offset, which will represent the local time equivalent in UTC time.
345
+ * If using this to supply to a date() function, set $server_localized to true which will account for any rogue code
346
+ * that sets the server default timezone to something other than UTC (which is WP sets it to at the start)
347
+ * @param boolean $server_localized
348
*/
349
+ public function getTimestampWithOffset( $server_localized = false ){
350
+ //aside from the actual offset from the timezone, we also have a local server offset we need to deal with here...
351
+ $server_offset = $server_localized ? date('Z',$this->getTimestamp()) : 0;
352
+ return $this->getOffset() + $this->getTimestamp() - $server_offset;
353
}
354
355
/**
classes/em-event.php CHANGED
@@ -634,7 +634,7 @@ class EM_Event extends EM_Object{
634
$preview_autosave = is_admin() && !empty($_REQUEST['_emnonce']) && !empty($_REQUEST['wp-preview']) && $_REQUEST['wp-preview'] == 'dopreview'; //we shouldn't save new data during a preview auto-save
635
if( !$preview_autosave && $can_manage_bookings && !empty($_POST['event_rsvp']) && $_POST['event_rsvp'] ){
636
//get tickets only if event is new, non-recurring, or recurring but specifically allowed to reschedule by user
637
- if( !$this->is_recurring() || (empty($this->event_id) || !empty($_REQUEST['event_recreate_tickets'])) ){
638
$this->get_bookings()->get_tickets()->get_post();
639
}
640
$this->event_rsvp = 1;
@@ -2636,7 +2636,7 @@ class EM_Event extends EM_Object{
2636
$meta_fields['_event_end_date'] = $event_array['event_end_date'];
2637
$meta_fields['_event_end_local'] = $event_array['event_end_date']. ' ' . $event_array['event_end_time'];
2638
$site_data = get_site_option('dbem_data');
2639
- if( $site_data['updates']['timezone-backcompat'] ){
2640
$meta_fields['_start_ts'] = $start_timestamp;
2641
$meta_fields['_end_ts'] = $end_timestamp;
2642
}
@@ -2815,40 +2815,34 @@ class EM_Event extends EM_Object{
2815
* @return array
2816
*/
2817
function get_recurrence_days(){
2818
- $EM_DateTime = new EM_DateTime();
2819
- $start_date = $EM_DateTime->modify($this->start()->getDate())->getTimestamp();
2820
- $end_date = $EM_DateTime->modify($this->end()->getDate())->getTimestamp();
2821
-
2822
$weekdays = explode(",", $this->recurrence_byday); //what days of the week (or if monthly, one value at index 0)
2823
-
2824
- $matching_days = array();
2825
- $aDay = 86400; // a day in seconds
2826
- $aWeek = $aDay * 7;
2827
-
2828
- //TODO can this be optimized?
2829
switch ( $this->recurrence_freq ){
2830
case 'daily':
2831
//If daily, it's simple. Get start date, add interval timestamps to that and create matching day for each interval until end date.
2832
$current_date = $start_date;
2833
while( $current_date <= $end_date ){
2834
$matching_days[] = $current_date;
2835
- $current_date = $current_date + ($aDay * $this->recurrence_interval);
2836
}
2837
break;
2838
case 'weekly':
2839
//sort out week one, get starting days and then days that match time span of event (i.e. remove past events in week 1)
2840
$start_of_week = get_option('start_of_week'); //Start of week depends on WordPress
2841
- //first, get the start of this week as timestamp
2842
- $event_start_day = date('w', $start_date);
2843
//then get the timestamps of weekdays during this first week, regardless if within event range
2844
$start_weekday_dates = array(); //Days in week 1 where there would events, regardless of event date range
2845
for($i = 0; $i < 7; $i++){
2846
- $weekday_date = $start_date+($aDay*$i); //the date of the weekday we're currently checking
2847
- $weekday_day = date('w',$weekday_date); //the day of the week we're checking, taking into account wp start of week setting
2848
-
2849
- if( in_array( $weekday_day, $weekdays) ){
2850
- $start_weekday_dates[] = $weekday_date; //it's in our starting week day, so add it
2851
}
2852
}
2853
//for each day of eventful days in week 1, add 7 days * weekly intervals
2854
foreach ($start_weekday_dates as $weekday_date){
@@ -2857,20 +2851,17 @@ class EM_Event extends EM_Object{
2857
if( $weekday_date >= $start_date && $weekday_date <= $end_date ){
2858
$matching_days[] = $weekday_date;
2859
}
2860
- $weekday_date = $weekday_date + ($aWeek * $this->recurrence_interval);
2861
}
2862
}//done!
2863
break;
2864
case 'monthly':
2865
//loop months starting this month by intervals
2866
- $current_arr = getdate($start_date);
2867
- $end_arr = getdate($end_date);
2868
- $end_month_date = strtotime( date('Y-m-t', $end_date) ); //End date on last day of month
2869
- $current_date = strtotime( date('Y-m-1', $start_date) ); //Start date on first day of month
2870
- while( $current_date <= $end_month_date ){
2871
- $last_day_of_month = date('t', $current_date);
2872
//Now find which day we're talking about
2873
- $current_week_day = date('w',$current_date);
2874
$matching_month_days = array();
2875
//Loop through days of this years month and save matching days to temp array
2876
for($day = 1; $day <= $last_day_of_month; $day++){
@@ -2882,26 +2873,23 @@ class EM_Event extends EM_Object{
2882
//Now grab from the array the x day of the month
2883
$matching_day = false;
2884
if( $this->recurrence_byweekno > 0 ){
2885
if( !empty($matching_month_days[$this->recurrence_byweekno-1]) ){
2886
$matching_day = $matching_month_days[$this->recurrence_byweekno-1];
2887
}
2888
}else{
2889
$matching_day = array_pop($matching_month_days);
2890
}
2891
if( !empty($matching_day) ){
2892
- $matching_date = strtotime(date('Y-m',$current_date).'-'.$matching_day);
2893
if($matching_date >= $start_date && $matching_date <= $end_date){
2894
$matching_days[] = $matching_date;
2895
}
2896
}
2897
- //add the number of days in this month to make start of next month
2898
- $current_arr['mon'] += $this->recurrence_interval;
2899
- if($current_arr['mon'] > 12){
2900
- //FIXME this won't work if interval is more than 12
2901
- $current_arr['mon'] = $current_arr['mon'] - 12;
2902
- $current_arr['year']++;
2903
- }
2904
- $current_date = strtotime("{$current_arr['year']}-{$current_arr['mon']}-1");
2905
}
2906
break;
2907
case 'yearly':
634
$preview_autosave = is_admin() && !empty($_REQUEST['_emnonce']) && !empty($_REQUEST['wp-preview']) && $_REQUEST['wp-preview'] == 'dopreview'; //we shouldn't save new data during a preview auto-save
635
if( !$preview_autosave && $can_manage_bookings && !empty($_POST['event_rsvp']) && $_POST['event_rsvp'] ){
636
//get tickets only if event is new, non-recurring, or recurring but specifically allowed to reschedule by user
637
+ if( !$this->is_recurring() || (empty($this->event_id) || !empty($_REQUEST['event_recreate_tickets'])) || !$this->event_rsvp ){
638
$this->get_bookings()->get_tickets()->get_post();
639
}
640
$this->event_rsvp = 1;
2636
$meta_fields['_event_end_date'] = $event_array['event_end_date'];
2637
$meta_fields['_event_end_local'] = $event_array['event_end_date']. ' ' . $event_array['event_end_time'];
2638
$site_data = get_site_option('dbem_data');
2639
+ if( !empty($site_data['updates']['timezone-backcompat']) ){
2640
$meta_fields['_start_ts'] = $start_timestamp;
2641
$meta_fields['_end_ts'] = $end_timestamp;
2642
}
2815
* @return array
2816
*/
2817
function get_recurrence_days(){
2818
+ //get timestampes for start and end dates, both at 12AM
2819
+ $start_date = $this->start()->copy()->setTime(0,0,0)->getTimestamp();
2820
+ $end_date = $this->end()->copy()->setTime(0,0,0)->getTimestamp();
2821
+
2822
$weekdays = explode(",", $this->recurrence_byday); //what days of the week (or if monthly, one value at index 0)
2823
+ $matching_days = array(); //the days we'll be returning in timestamps
2824
+
2825
+ //generate matching dates based on frequency type
2826
switch ( $this->recurrence_freq ){
2827
case 'daily':
2828
//If daily, it's simple. Get start date, add interval timestamps to that and create matching day for each interval until end date.
2829
$current_date = $start_date;
2830
while( $current_date <= $end_date ){
2831
$matching_days[] = $current_date;
2832
+ $current_date = $current_date + (DAY_IN_SECONDS * $this->recurrence_interval);
2833
}
2834
break;
2835
case 'weekly':
2836
//sort out week one, get starting days and then days that match time span of event (i.e. remove past events in week 1)
2837
+ $current_date = $this->start()->copy()->setTime(0,0,0);
2838
$start_of_week = get_option('start_of_week'); //Start of week depends on WordPress
2839
//then get the timestamps of weekdays during this first week, regardless if within event range
2840
$start_weekday_dates = array(); //Days in week 1 where there would events, regardless of event date range
2841
for($i = 0; $i < 7; $i++){
2842
+ if( in_array( $current_date->format('w'), $weekdays) ){
2843
+ $start_weekday_dates[] = $current_date->getTimestamp(); //it's in our starting week day, so add it
2844
}
2845
+ $current_date->add('P1D'); //add a day
2846
}
2847
//for each day of eventful days in week 1, add 7 days * weekly intervals
2848
foreach ($start_weekday_dates as $weekday_date){
2851
if( $weekday_date >= $start_date && $weekday_date <= $end_date ){
2852
$matching_days[] = $weekday_date;
2853
}
2854
+ $weekday_date = $weekday_date + (WEEK_IN_SECONDS * $this->recurrence_interval);
2855
}
2856
}//done!
2857
break;
2858
case 'monthly':
2859
//loop months starting this month by intervals
2860
+ $current_date = $this->start()->copy()->modify('first day of this month')->setTime(0,0,0); //Start date on first day of month
2861
+ while( $current_date->getTimestamp() <= $this->end()->getTimestamp() ){
2862
+ $last_day_of_month = $current_date->format('t');
2863
//Now find which day we're talking about
2864
+ $current_week_day = $current_date->format('w');
2865
$matching_month_days = array();
2866
//Loop through days of this years month and save matching days to temp array
2867
for($day = 1; $day <= $last_day_of_month; $day++){
2873
//Now grab from the array the x day of the month
2874
$matching_day = false;
2875
if( $this->recurrence_byweekno > 0 ){
2876
+ //date might not exist (e.g. fifth Sunday of a month) so only add if it exists
2877
if( !empty($matching_month_days[$this->recurrence_byweekno-1]) ){
2878
$matching_day = $matching_month_days[$this->recurrence_byweekno-1];
2879
}
2880
}else{
2881
+ //last day of month, so we pop the last matching day
2882
$matching_day = array_pop($matching_month_days);
2883
}
2884
+ //if we have a matching day, get the timestamp, make sure it's within our start/end dates for the event, and add to array if it is
2885
if( !empty($matching_day) ){
2886
+ $matching_date = $current_date->modify($current_date->format('Y-m').'-'.$matching_day)->getTimestamp();
2887
if($matching_date >= $start_date && $matching_date <= $end_date){
2888
$matching_days[] = $matching_date;
2889
}
2890
}
2891
+ //add the monthly interval to the current date
2892
+ $current_date->add('P'.$this->recurrence_interval.'M')->modify('first day of this month');
2893
}
2894
break;
2895
case 'yearly':
classes/em-object.php CHANGED
@@ -521,7 +521,6 @@ class EM_Object {
521
$ignore_cancel_cond = true;
522
}
523
}
524
- if( !empty($tax_data['ms']) ) self::ms_global_switch_back(); //switch back if ms global mode
525
//create sql conditions
526
if( count($term_tax_ids) > 0 || count($term_tax_not_ids) > 0 ){
527
//figure out context - what table/field to search
521
$ignore_cancel_cond = true;
522
}
523
}
524
//create sql conditions
525
if( count($term_tax_ids) > 0 || count($term_tax_not_ids) > 0 ){
526
//figure out context - what table/field to search
em-install.php CHANGED
@@ -1051,7 +1051,22 @@ function em_upgrade_current_installation(){
1051
));
1052
EM_Admin_Notices::add($EM_Admin_Notice, is_multisite());
1053
}
1054
- }
1055
}
1056
1057
function em_set_mass_caps( $roles, $caps ){
@@ -1090,7 +1105,11 @@ function em_set_capabilities(){
1090
/* Location Capabilities */
1091
'edit_locations', 'read_private_locations', 'read_others_locations',
1092
);
1093
- em_set_mass_caps( array('administrator','editor','contributor','author','subscriber'), $loose_caps);
1094
}
1095
if( get_option('dbem_version') && get_option('dbem_version') < 5 ){
1096
//Add new caps that are similar to old ones
@@ -1448,6 +1467,8 @@ function em_migrate_uploads(){
1448
1449
function em_migrate_datetime_timezones( $reset_new_fields = true, $migrate_date_fields = true, $timezone = false ){
1450
global $wpdb;
1451
//create AND and WHERE conditions for blog IDs if we're in Multisite Glboal Mode
1452
$blog_id_where = $blog_id_and = '';
1453
if( EM_MS_GLOBAL ){
@@ -1460,13 +1481,13 @@ function em_migrate_datetime_timezones( $reset_new_fields = true, $migrate_date_
1460
$blog_id_and = ' AND '.$blog_id_cond;
1461
}
1462
//reset all the data for these purposes
1463
- if( $reset_new_fields || $migrate_date_fields ) $wpdb->query('UPDATE '. EM_EVENTS_TABLE .' SET event_start = NULL, event_end = NULL, event_timezone = NULL'.$blog_id_where);
1464
if( !$migrate_date_fields ) return true;
1465
1466
//start migration of old date formats to new datetime formats in local and UTC mode along with a declared timezone
1467
$migration_results = $migration_meta_results = $migration_errors = array();
1468
//firstly, we do a query for all-day events and reset the times, so that UTC times are correct relative to the local time
1469
- $migration_result = $wpdb->query('UPDATE '.EM_EVENTS_TABLE." SET event_start_time = '00:00:00', event_end_time = '23:59:59' WHERE event_all_day = 1".$blog_id_and);
1470
if( $migration_result === false ) $migration_errors[] = array('Local datetime allday event times modification errors', $wpdb->last_error);
1471
1472
//migration procedure depends on whether we have an actual timezone or just a manual offset of hours in the WP settings page
@@ -1492,11 +1513,11 @@ function em_migrate_datetime_timezones( $reset_new_fields = true, $migrate_date_
1492
if( empty($query_data[$t['offset']]) ){
1493
$query_data[$t['offset']] = array(
1494
'start' => array(
1495
- 'sql' => $wpdb->prepare('UPDATE '. EM_EVENTS_TABLE. ' SET event_start = DATE_SUB(TIMESTAMP(event_start_date,event_start_time), INTERVAL %d SECOND)', $t['offset']),
1496
'where' => array()
1497
),
1498
'end' => array(
1499
- 'sql' => $wpdb->prepare('UPDATE '. EM_EVENTS_TABLE. ' SET event_end = DATE_SUB(TIMESTAMP(event_end_date, event_end_time), INTERVAL %d SECOND)', $t['offset']),
1500
'where' => array()
1501
)
1502
);
@@ -1526,12 +1547,12 @@ function em_migrate_datetime_timezones( $reset_new_fields = true, $migrate_date_
1526
$EM_DateTimeZone = EM_DateTimeZone::create($timezone);
1527
$offset = $timezone == 'UTC' ? 0 : $EM_DateTimeZone->manual_offset / MINUTE_IN_SECONDS;
1528
$timezone = $EM_DateTimeZone->getName();
1529
- $migration_result = $wpdb->query($wpdb->prepare('UPDATE '. EM_EVENTS_TABLE. ' SET event_start = DATE_SUB(TIMESTAMP(event_start_date,event_start_time), INTERVAL %d MINUTE), event_end = DATE_SUB(TIMESTAMP(event_end_date, event_end_time), INTERVAL %d MINUTE) WHERE event_end IS NULL '.$blog_id_and, $offset, $offset));
1530
if( $migration_result === false ) $migration_errors[] = array('Event start/end UTC offset', $wpdb->last_error);
1531
}
1532
1533
//set the timezone (on initial migration all events have same timezone of blog)
1534
- $migration_result = $wpdb->query($wpdb->prepare('UPDATE '.EM_EVENTS_TABLE.' SET event_timezone = %s WHERE event_timezone IS NULL'.$blog_id_and, $timezone));
1535
if( $migration_result === false ) $migration_errors[] = array('Event timezone setting', $wpdb->last_error);
1536
1537
//reave meta data - at this point once we've copied over all of the dates, so we do 5 queries to postmeta, one for each field we've created above start/end times in local/utc and timezone
@@ -1543,10 +1564,10 @@ function em_migrate_datetime_timezones( $reset_new_fields = true, $migrate_date_
1543
foreach( array('event_start', 'event_end', 'event_timezone', 'start', 'end') as $field ){
1544
if( $field == 'start' || $field == 'end' ){
1545
//create a timestamp combining two given fields, which we'll now use
1546
- $sql = 'INSERT INTO '.$wpdb->postmeta." (post_id, meta_key, meta_value) SELECT post_id, '_event_{$field}_local', TIMESTAMP(event_{$field}_date, event_{$field}_time) FROM ".EM_EVENTS_TABLE. $blog_id_where;
1547
$field = "event_".$field."_local";
1548
}else{
1549
- $sql = 'INSERT INTO '.$wpdb->postmeta." (post_id, meta_key, meta_value) SELECT post_id, '_{$field}', {$field} FROM ".EM_EVENTS_TABLE. $blog_id_where;
1550
}
1551
$migration_result = $wpdb->query($sql);
1552
if( $migration_result === false ) $migration_errors[] = array('Adding new meta data key <em>_'.$field.'</em>', $wpdb->last_error);
@@ -1568,7 +1589,8 @@ function em_migrate_datetime_timezones( $reset_new_fields = true, $migrate_date_
1568
1569
function em_migrate_get_tz_transitions( $timezone, $blog_id_where = '' ){
1570
global $wpdb;
1571
- $minmax_dates = $wpdb->get_row('SELECT MIN(event_start_date) AS mindate, MAX(event_end_date) AS maxdate FROM '.EM_EVENTS_TABLE.$blog_id_where);
1572
$DTZ = new EM_DateTimeZone( $timezone );
1573
$start = strtotime($minmax_dates->mindate, current_time('timestamp')) - 60*60*24;
1574
$end = strtotime($minmax_dates->maxdate, current_time('timestamp')) + 60*60*24; //we add a day just to get the most comprehensive range possible
1051
));
1052
EM_Admin_Notices::add($EM_Admin_Notice, is_multisite());
1053
}
1054
+ }
1055
+ if( get_option('dbem_version') != '' && get_option('dbem_version') == 5.9 && is_multisite() && !EM_MS_GLOBAL && (is_network_admin() || is_main_site()) ){
1056
+ //warning just for users who upgraded to 5.9 on multisite without global tables enabled
1057
+ $message = 'Due to a bug in 5.9 when updating to new timezones in MultiSite installations, you may notice some of your events are missing from lists.<br><br>To fix this problem, visit %s choose your timezone, select %s and click %s to update all your blogs to the desired timezone.';
1058
+ $url = network_admin_url('admin.php?page=events-manager-options#general+admin-tools');
1059
+ $admin_tools_link = '<a href="'.$url.'">'.esc_html(__('Network Admin').' &gt; '.__('Events Manager','events-manager').' &gt; '.__('Admin Tools','events-manager')).'</a>';
1060
+ $message = sprintf($message, $admin_tools_link, '<em><strong>'.esc_html__('All Blogs', 'events-manager').'</strong></em>', '<em><strong>'.esc_html__('Reset Event Timezones','events-manager').'</strong></em>');
1061
+ $EM_Admin_Notice = new EM_Admin_Notice(array(
1062
+ 'name' => 'date_time_migration_5.9_multisite',
1063
+ 'who' => 'admin',
1064
+ 'what' => 'warning',
1065
+ 'where' => 'all',
1066
+ 'message' => $message
1067
+ ));
1068
+ EM_Admin_Notices::add($EM_Admin_Notice, is_multisite());
1069
+ }
1070
}
1071
1072
function em_set_mass_caps( $roles, $caps ){
1105
/* Location Capabilities */
1106
'edit_locations', 'read_private_locations', 'read_others_locations',
1107
);
1108
+ em_set_mass_caps( array('administrator','editor','contributor','author'), $loose_caps);
1109
+
1110
+ //subscribers can read private stuff, nothing else
1111
+ $wp_roles->add_cap('subscriber', 'read_private_locations');
1112
+ $wp_roles->add_cap('subscriber', 'read_private_events');
1113
}
1114
if( get_option('dbem_version') && get_option('dbem_version') < 5 ){
1115
//Add new caps that are similar to old ones
1467
1468
function em_migrate_datetime_timezones( $reset_new_fields = true, $migrate_date_fields = true, $timezone = false ){
1469
global $wpdb;
1470
+ //Table names
1471
+ $db = EM_MS_GLOBAL ? $wpdb->base_prefix : $wpdb->prefix;
1472
//create AND and WHERE conditions for blog IDs if we're in Multisite Glboal Mode
1473
$blog_id_where = $blog_id_and = '';
1474
if( EM_MS_GLOBAL ){
1481
$blog_id_and = ' AND '.$blog_id_cond;
1482
}
1483
//reset all the data for these purposes
1484
+ if( $reset_new_fields || $migrate_date_fields ) $wpdb->query('UPDATE '. $db.'em_events' .' SET event_start = NULL, event_end = NULL, event_timezone = NULL'.$blog_id_where);
1485
if( !$migrate_date_fields ) return true;
1486
1487
//start migration of old date formats to new datetime formats in local and UTC mode along with a declared timezone
1488
$migration_results = $migration_meta_results = $migration_errors = array();
1489
//firstly, we do a query for all-day events and reset the times, so that UTC times are correct relative to the local time
1490
+ $migration_result = $wpdb->query('UPDATE '. $db.'em_events'." SET event_start_time = '00:00:00', event_end_time = '23:59:59' WHERE event_all_day = 1".$blog_id_and);
1491
if( $migration_result === false ) $migration_errors[] = array('Local datetime allday event times modification errors', $wpdb->last_error);
1492
1493
//migration procedure depends on whether we have an actual timezone or just a manual offset of hours in the WP settings page
1513
if( empty($query_data[$t['offset']]) ){
1514
$query_data[$t['offset']] = array(
1515
'start' => array(
1516
+ 'sql' => $wpdb->prepare('UPDATE '. $db.'em_events'. ' SET event_start = DATE_SUB(TIMESTAMP(event_start_date,event_start_time), INTERVAL %d SECOND)', $t['offset']),
1517
'where' => array()
1518
),
1519
'end' => array(
1520
+ 'sql' => $wpdb->prepare('UPDATE '. $db.'em_events'. ' SET event_end = DATE_SUB(TIMESTAMP(event_end_date, event_end_time), INTERVAL %d SECOND)', $t['offset']),
1521
'where' => array()
1522
)
1523
);
1547
$EM_DateTimeZone = EM_DateTimeZone::create($timezone);
1548
$offset = $timezone == 'UTC' ? 0 : $EM_DateTimeZone->manual_offset / MINUTE_IN_SECONDS;
1549
$timezone = $EM_DateTimeZone->getName();
1550
+ $migration_result = $wpdb->query($wpdb->prepare('UPDATE '. $db.'em_events'. ' SET event_start = DATE_SUB(TIMESTAMP(event_start_date,event_start_time), INTERVAL %d MINUTE), event_end = DATE_SUB(TIMESTAMP(event_end_date, event_end_time), INTERVAL %d MINUTE) WHERE event_end IS NULL '.$blog_id_and, $offset, $offset));
1551
if( $migration_result === false ) $migration_errors[] = array('Event start/end UTC offset', $wpdb->last_error);
1552
}
1553
1554
//set the timezone (on initial migration all events have same timezone of blog)
1555
+ $migration_result = $wpdb->query($wpdb->prepare('UPDATE '. $db.'em_events' .' SET event_timezone = %s WHERE event_timezone IS NULL'.$blog_id_and, $timezone));
1556
if( $migration_result === false ) $migration_errors[] = array('Event timezone setting', $wpdb->last_error);
1557
1558
//reave meta data - at this point once we've copied over all of the dates, so we do 5 queries to postmeta, one for each field we've created above start/end times in local/utc and timezone
1564
foreach( array('event_start', 'event_end', 'event_timezone', 'start', 'end') as $field ){
1565
if( $field == 'start' || $field == 'end' ){
1566
//create a timestamp combining two given fields, which we'll now use
1567
+ $sql = 'INSERT INTO '.$wpdb->postmeta." (post_id, meta_key, meta_value) SELECT post_id, '_event_{$field}_local', TIMESTAMP(event_{$field}_date, event_{$field}_time) FROM ".$db . 'em_events'. $blog_id_where;
1568
$field = "event_".$field."_local";
1569
}else{
1570
+ $sql = 'INSERT INTO '.$wpdb->postmeta." (post_id, meta_key, meta_value) SELECT post_id, '_{$field}', {$field} FROM ". $db.'em_events'. $blog_id_where;
1571
}
1572
$migration_result = $wpdb->query($sql);
1573
if( $migration_result === false ) $migration_errors[] = array('Adding new meta data key <em>_'.$field.'</em>', $wpdb->last_error);
1589
1590
function em_migrate_get_tz_transitions( $timezone, $blog_id_where = '' ){
1591
global $wpdb;
1592
+ $db = EM_MS_GLOBAL ? $wpdb->base_prefix : $wpdb->prefix;
1593
+ $minmax_dates = $wpdb->get_row('SELECT MIN(event_start_date) AS mindate, MAX(event_end_date) AS maxdate FROM '. $db.'em_events' .$blog_id_where);
1594
$DTZ = new EM_DateTimeZone( $timezone );
1595
$start = strtotime($minmax_dates->mindate, current_time('timestamp')) - 60*60*24;
1596
$end = strtotime($minmax_dates->maxdate, current_time('timestamp')) + 60*60*24; //we add a day just to get the most comprehensive range possible
em-posts.php CHANGED
@@ -256,6 +256,20 @@ function wp_events_plugin_init(){
256
'yarpp_support'=>true
257
);
258
}
259
if( strstr(EM_POST_TYPE_EVENT_SLUG, EM_POST_TYPE_LOCATION_SLUG) !== FALSE ){
260
//Now register posts, but check slugs in case of conflicts and reorder registrations
261
register_post_type(EM_POST_TYPE_EVENT, $event_post_type);
256
'yarpp_support'=>true
257
);
258
}
259
+ //gutenberg support - define EM_GUTENBERG in your wp-config.php page to enable
260
+ if( defined('EM_GUTENBERG') && EM_GUTENBERG ){
261
+ $event_post_type['show_in_rest'] = true;
262
+ if ( get_option('dbem_recurrence_enabled') ) $event_recurring_post_type['show_in_rest'] = true;
263
+ if( get_option('dbem_locations_enabled', true) ) $location_post_type['show_in_rest'] = true;
264
+ function em_gutenberg_support( $can_edit, $post_type ){
265
+ $recurrences = $post_type == 'event-recurring' && get_option('dbem_recurrence_enabled');
266
+ $locations = $post_type == EM_POST_TYPE_LOCATION && get_option('dbem_locations_enabled', true);
267
+ if( $post_type == EM_POST_TYPE_EVENT || $recurrences || $locations ) $can_edit = true;
268
+ return $can_edit;
269
+ }
270
+ add_filter('gutenberg_can_edit_post_type', 'em_gutenberg_support', 10, 2 ); //Gutenberg
271
+ }
272
+
273
if( strstr(EM_POST_TYPE_EVENT_SLUG, EM_POST_TYPE_LOCATION_SLUG) !== FALSE ){
274
//Now register posts, but check slugs in case of conflicts and reorder registrations
275
register_post_type(EM_POST_TYPE_EVENT, $event_post_type);
em-rss.php DELETED
@@ -1,41 +0,0 @@
1
- <?php
2
- function em_rss() {
3
- global $post, $wp_query;
4
- if ( !empty($_REQUEST['dbem_rss']) || (is_object($post) && $post->ID == get_option('dbem_events_page') && $wp_query->get('rss')) ) {
5
- header ( "Content-type: text/xml" );
6
- ob_start();
7
- echo "<?xml version='1.0'?>\n";
8
- ?>
9
- <rss version="2.0">
10
- <channel>
11
- <title><?php echo get_option ( 'dbem_rss_main_title' ); ?></title>
12
- <link><?php echo get_permalink ( get_option('dbem_events_page') ); ?></link>
13
- <description><?php echo get_option ( 'dbem_rss_main_description' ); ?></description>
14
- <docs>http://blogs.law.harvard.edu/tech/rss</docs>
15
- <generator>Weblog Editor 2.0</generator>
16
-
17
- <?php
18
- $description_format = str_replace ( ">", "&gt;", str_replace ( "<", "&lt;", get_option ( 'dbem_rss_description_format' ) ) );
19
- $events = EM_Events::get( array('limit'=>5, 'owner'=>false) );
20
- foreach ( $events as $event ) {
21
- $description = $event->output( get_option ( 'dbem_rss_description_format' ), "rss");
22
- $description = ent2ncr(convert_chars(strip_tags($description))); //Some RSS filtering
23
- ?>
24
- <item>
25
- <title><?php echo $event->output( get_option('dbem_rss_title_format'), "rss" ); ?></title>
26
- <link><?php echo $event->output('#_EVENTURL'); ?></link>
27
- <description><?php echo $description; ?></description>
28
- </item>
29
- <?php
30
- }
31
- ?>
32
-
33
- </channel>
34
- </rss>
35
- <?php
36
- echo apply_filters('em_rss', ob_get_clean());
37
- die ();
38
- }
39
- }
40
- add_action ( 'template_redirect', 'em_rss' );
41
- ?>
events-manager.php CHANGED
@@ -1,7 +1,7 @@
1
<?php
2
/*
3
Plugin Name: Events Manager
4
- Version: 5.9
5
Plugin URI: http://wp-events-plugin.com
6
Description: Event registration and booking management for WordPress. Recurring events, locations, google maps, rss, ical, booking registration and more!
7
Author: Marcus Sykes
@@ -28,7 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
28
*/
29
30
// Setting constants
31
- define('EM_VERSION', 5.9); //self expanatory
32
define('EM_PRO_MIN_VERSION', 2.392); //self expanatory
33
define('EM_PRO_MIN_VERSION_CRITICAL', 2.377); //self expanatory
34
define('EM_DIR', dirname( __FILE__ )); //an absolute path to this directory
1
<?php
2
/*
3
Plugin Name: Events Manager
4
+ Version: 5.9.1
5
Plugin URI: http://wp-events-plugin.com
6
Description: Event registration and booking management for WordPress. Recurring events, locations, google maps, rss, ical, booking registration and more!
7
Author: Marcus Sykes
28
*/
29
30
// Setting constants
31
+ define('EM_VERSION', 5.91); //self expanatory
32
define('EM_PRO_MIN_VERSION', 2.392); //self expanatory
33
define('EM_PRO_MIN_VERSION_CRITICAL', 2.377); //self expanatory
34
define('EM_DIR', dirname( __FILE__ )); //an absolute path to this directory
includes/js/events-manager.min.js DELETED
@@ -1,3 +0,0 @@
1
- function em_load_jquery_css(){if(EM.ui_css&&0==jQuery("script#jquery-ui-css").length){var e=document.createElement("link");e.id="jquery-ui-css",e.rel="stylesheet",e.href=EM.ui_css,document.body.appendChild(e)}}function em_setup_datepicker(e){e=jQuery(e);var t={altFormat:"yy-mm-dd",changeMonth:!0,changeYear:!0,firstDay:EM.firstDay,yearRange:"-100:+10"};EM.dateFormat&&(t.dateFormat=EM.dateFormat),EM.yearRange&&(t.yearRange=EM.yearRange),jQuery(document).triggerHandler("em_datepicker",t),dateDivs=e.find(".em-date-single, .em-date-range"),dateDivs.length>0&&(dateDivs.find("input.em-date-input-loc").each(function(e,a){var a=jQuery(a),n=a.nextAll("input.em-date-input").first(),o=n.val();if(a.datepicker(t),a.datepicker("option","altField",n),o){var i=jQuery.datepicker.formatDate(EM.dateFormat,jQuery.datepicker.parseDate("yy-mm-dd",o));a.val(i),n.val(o)}a.change(function(){""==jQuery(this).val()&&jQuery(this).nextAll(".em-date-input").first().val("")})}),dateDivs.filter(".em-date-range").find("input.em-date-input-loc").each(function(e,t){if(t=jQuery(t),t.hasClass("em-date-start"))t.datepicker("option","onSelect",function(e){var t=jQuery(this),a=t.parents(".em-date-range").find(".em-date-end").first();t.val()>a.val()&&""!=a.val()&&(a.datepicker("setDate",e),a.trigger("change")),a.datepicker("option","minDate",e)});else if(t.hasClass("em-date-end")){var a=t.parents(".em-date-range").find(".em-date-start").first();""!=a.val()&&t.datepicker("option","minDate",a.val())}}))}function em_setup_timepicker(e){e=jQuery(e),e.find(".em-time-input").timePicker({show24Hours:1==EM.show24hours,step:15}),e.find(".em-time-range input.em-time-start").each(function(e,t){jQuery(t).data("oldTime",jQuery.timePicker(t).getTime())}).change(function(){var e=jQuery(this),t=e.nextAll(".em-time-end");if(t.val()){var a=e.data("oldTime"),n=jQuery.timePicker(t).getTime()-a,o=jQuery.timePicker(e).getTime();jQuery.timePicker(t).getTime()>=a&&jQuery.timePicker(t).setTime(new Date(new Date(o.getTime()+n))),e.data("oldTime",o)}}),e.find(".em-time-range input.em-time-end").change(function(){var e=jQuery(this),t=e.prevAll(".em-time-start");t.val()&&(jQuery.timePicker(t).getTime()>jQuery.timePicker(this).getTime()&&(0==jQuery(".em-date-end").val().length||jQuery(".em-date-start").val()==jQuery(".em-date-end").val())?e.addClass("error"):e.removeClass("error"))}),e.find(".em-time-range input.em-time-all-day").change(function(){var e=jQuery(this);e.is(":checked")?e.siblings(".em-time-input").css("background-color","#ccc"):e.siblings(".em-time-input").css("background-color","#fff")}).trigger("change")}function em_maps_load(){if(!em_maps_loaded)if(0!=jQuery("script#google-maps").length||"object"==typeof google&&"object"==typeof google.maps)"object"!=typeof google||"object"!=typeof google.maps||em_maps_loaded?jQuery("script#google-maps").length>0&&jQuery(window).load(function(){em_maps_loaded||em_maps()}):em_maps();else{var e=document.createElement("script");e.type="text/javascript",e.id="google-maps";var t=EM.is_ssl?"https:":"http:";e.src=t+"//maps.google.com/maps/api/js?v=3.12&sensor=false&libraries=places&callback=em_maps",document.body.appendChild(e)}}function em_maps_load_locations(e){var e=jQuery(e),t=e.attr("id").replace("em-locations-map-",""),a=jQuery.parseJSON(e.nextAll(".em-locations-map-coords").first().text());if(null==a)var a=jQuery.parseJSON(jQuery("#em-locations-map-coords-"+t).text());jQuery.getJSON(document.URL,a,function(a){if(a.length>0){var n={mapTypeId:google.maps.MapTypeId.ROADMAP};jQuery(document).triggerHandler("em_maps_locations_map_options",n);var o={};jQuery(document).triggerHandler("em_maps_location_marker_options",o),maps[t]=new google.maps.Map(e[0],n),maps_markers[t]=[];for(var i=[0,0],r=[0,0],c=0;c<a.length;c++)if(0!=a[c].location_latitude||0!=a[c].location_longitude){var s=parseFloat(a[c].location_latitude),l=parseFloat(a[c].location_longitude),m=new google.maps.LatLng(s,l);jQuery.extend(o,{position:m,map:maps[t]});var d=new google.maps.Marker(o);maps_markers[t].push(d),d.setTitle(a[c].location_name);var u='<div class="em-map-balloon"><div id="em-map-balloon-'+t+'" class="em-map-balloon-content">'+a[c].location_balloon+"</div></div>";em_map_infobox(d,u,maps[t]),i[0]=s<i[0]||0==c?s:i[0],i[1]=l<i[1]||0==c?l:i[1],r[0]=s>r[0]||0==c?s:r[0],r[1]=l>r[1]||0==c?l:r[1]}var p=new google.maps.LatLng(i[0],i[1]),g=new google.maps.LatLng(r[0],r[1]),f=new google.maps.LatLngBounds(p,g);maps[t].fitBounds(f),jQuery(document).triggerHandler("em_maps_locations_hook",[maps[t],a,t])}else e.children().first().html("No locations found"),jQuery(document).triggerHandler("em_maps_locations_hook_not_found",[e])})}function em_maps_load_location(e){e=jQuery(e);var t=e.attr("id").replace("em-location-map-","");em_LatLng=new google.maps.LatLng(jQuery("#em-location-map-coords-"+t+" .lat").text(),jQuery("#em-location-map-coords-"+t+" .lng").text());var a={zoom:14,center:em_LatLng,mapTypeId:google.maps.MapTypeId.ROADMAP,mapTypeControl:!1};jQuery(document).triggerHandler("em_maps_location_map_options",a),maps[t]=new google.maps.Map(document.getElementById("em-location-map-"+t),a);var n={position:em_LatLng,map:maps[t]};jQuery(document).triggerHandler("em_maps_location_marker_options",n),maps_markers[t]=new google.maps.Marker(n),infowindow=new google.maps.InfoWindow({content:jQuery("#em-location-map-info-"+t+" .em-map-balloon").get(0)}),infowindow.open(maps[t],maps_markers[t]),maps[t].panBy(40,-70),jQuery(document).triggerHandler("em_maps_location_hook",[maps[t],infowindow,maps_markers[t],t]),jQuery(window).on("resize",function(){google.maps.event.trigger(maps[t],"resize"),maps[t].setCenter(maps_markers[t].getPosition()),maps[t].panBy(40,-70)})}function em_maps(){if(jQuery(".em-location-map").each(function(e,t){em_maps_load_location(t)}),jQuery(".em-locations-map").each(function(e,t){em_maps_load_locations(t)}),jQuery("select#location-select-id, input#location-address").length>0){var e,t,a=function(){var a=jQuery("#location-latitude").val(),n=jQuery("#location-longitude").val();if(0!=a||0!=n){var o=new google.maps.LatLng(a,n);t.setPosition(o);var i=jQuery("input#location-name").length>0?jQuery("input#location-name").val():jQuery("input#title").val();t.setTitle(jQuery("input#location-name input#title, #location-select-id").first().val()),jQuery("#em-map").show(),jQuery("#em-map-404").hide(),google.maps.event.trigger(e,"resize"),e.setCenter(o),e.panBy(40,-55),infoWindow.setContent('<div id="location-balloon-content"><strong>'+i+"</strong><br/>"+jQuery("#location-address").val()+"<br/>"+jQuery("#location-town").val()+"</div>"),infoWindow.open(e,t),jQuery(document).triggerHandler("em_maps_location_hook",[e,infowindow,t,0])}else jQuery("#em-map").hide(),jQuery("#em-map-404").show()},n=function(a){jQuery("#em-map").length>0&&jQuery.getJSON(document.URL,{em_ajax_action:"get_location",id:a},function(a){0!=a.location_latitude&&0!=a.location_longitude?(loc_latlng=new google.maps.LatLng(a.location_latitude,a.location_longitude),t.setPosition(loc_latlng),t.setTitle(a.location_name),t.setDraggable(!1),jQuery("#em-map").show(),jQuery("#em-map-404").hide(),e.setCenter(loc_latlng),e.panBy(40,-55),infoWindow.setContent('<div id="location-balloon-content">'+a.location_balloon+"</div>"),infoWindow.open(e,t),google.maps.event.trigger(e,"resize"),jQuery(document).triggerHandler("em_maps_location_hook",[e,infowindow,t,0])):(jQuery("#em-map").hide(),jQuery("#em-map-404").show())})};if(jQuery("#location-select-id, input#location-id").change(function(){n(jQuery(this).val())}),jQuery("#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country").change(function(){var e=[jQuery("#location-address").val(),jQuery("#location-town").val(),jQuery("#location-state").val(),jQuery("#location-postcode").val()],t="";return jQuery.each(e,function(e,a){""!=a&&(t=""==t?t+a:t+", "+a)}),""==t?(jQuery("#em-map").hide(),jQuery("#em-map-404").show(),!1):(0!=jQuery("#location-country option:selected").val()&&(t=""==t?t+jQuery("#location-country option:selected").text():t+", "+jQuery("#location-country option:selected").text()),void(""!=t&&jQuery("#em-map").length>0&&i.geocode({address:t},function(e,t){t==google.maps.GeocoderStatus.OK&&(jQuery("#location-latitude").val(e[0].geometry.location.lat()),jQuery("#location-longitude").val(e[0].geometry.location.lng())),a()})))}),jQuery("#em-map").length>0){var o=new google.maps.LatLng(0,0);e=new google.maps.Map(document.getElementById("em-map"),{zoom:14,center:o,mapTypeId:google.maps.MapTypeId.ROADMAP,mapTypeControl:!1});var t=new google.maps.Marker({position:o,map:e,draggable:!0});infoWindow=new google.maps.InfoWindow({content:""});var i=new google.maps.Geocoder;google.maps.event.addListener(infoWindow,"domready",function(){document.getElementById("location-balloon-content").parentNode.style.overflow="",document.getElementById("location-balloon-content").parentNode.parentNode.style.overflow=""}),google.maps.event.addListener(t,"dragend",function(){var a=t.getPosition();jQuery("#location-latitude").val(a.lat()),jQuery("#location-longitude").val(a.lng()),e.setCenter(a),e.panBy(40,-55)}),jQuery("#location-select-id").length>0?jQuery("#location-select-id").trigger("change"):a(),jQuery(document).triggerHandler("em_map_loaded",[e,infowindow,t])}jQuery(window).on("resize",function(){google.maps.event.trigger(e,"resize"),e.setCenter(t.getPosition()),e.panBy(40,-55)})}em_maps_loaded=!0,jQuery(document).triggerHandler("em_maps_loaded")}function em_map_infobox(e,t,a){var n=new google.maps.InfoWindow({content:t});google.maps.event.addListener(e,"click",function(){infowindow&&infowindow.close(),infowindow=n,n.open(a,e)})}jQuery(document).ready(function(e){function t(){e(".interval-desc").hide();var t="-plural";(1==e("input#recurrence-interval").val()||""==e("input#recurrence-interval").val())&&(t="-singular");var a="span#interval-"+e("select#recurrence-frequency").val()+t;e(a).show()}function a(){e("p.alternate-selector").hide(),e("p#"+e("select#recurrence-frequency").val()+"-selector").show()}function n(){e("input#event-recurrence").is(":checked")?(e("#event_recurrence_pattern").fadeIn(),e("#event-date-explanation").hide(),e("#recurrence-dates-explanation").show(),e("h3#recurrence-dates-title").show(),e("h3#event-date-title").hide()):(e("#event_recurrence_pattern").hide(),e("#recurrence-dates-explanation").hide(),e("#event-date-explanation").show(),e("h3#recurrence-dates-title").hide(),e("h3#event-date-title").show())}var o=!1;if(e("#start-time").each(function(t,a){e(a).addClass("em-time-input em-time-start").next("#end-time").addClass("em-time-input em-time-end").parent().addClass("em-time-range")}),e(".em-time-input").length>0&&em_setup_timepicker("body"),e(".em-calendar-wrapper a").unbind("click"),e(".em-calendar-wrapper a").undelegate("click"),e(".em-calendar-wrapper").delegate("a.em-calnav, a.em-calnav","click",function(t){t.preventDefault(),e(this).closest(".em-calendar-wrapper").prepend('<div class="loading" id="em-loading"></div>');var a=em_ajaxify(e(this).attr("href"));e(this).closest(".em-calendar-wrapper").load(a,function(){e(this).trigger("em_calendar_load")})}),e(document).delegate(".em-toggle","click change",function(t){t.preventDefault();var a=e(this),n=a.attr("rel").split(":");a.hasClass("show-search")?(n.length>1?a.closest(n[1]).find(n[0]).slideUp():e(n[0]).slideUp(),a.find(".show, .show-advanced").show(),a.find(".hide, .hide-advanced").hide(),a.removeClass("show-search")):(n.length>1?a.closest(n[1]).find(n[0]).slideDown():e(n[0]).slideDown(),a.find(".show, .show-advanced").hide(),a.find(".hide, .hide-advanced").show(),a.addClass("show-search"))}),EM.search_term_placeholder&&("placeholder"in document.createElement("input")?e("input.em-events-search-text, input.em-search-text").attr("placeholder",EM.search_term_placeholder):e("input.em-events-search-text, input.em-search-text").blur(function(){""==this.value&&(this.value=EM.search_term_placeholder)}).focus(function(){this.value==EM.search_term_placeholder&&(this.value="")}).trigger("blur")),e(".em-search-form select[name=country]").change(function(){var t=e(this);if(e(".em-search select[name=state]").html('<option value="">'+EM.txt_loading+"</option>"),e(".em-search select[name=region]").html('<option value="">'+EM.txt_loading+"</option>"),e(".em-search select[name=town]").html('<option value="">'+EM.txt_loading+"</option>"),""!=t.val()){t.closest(".em-search-location").find(".em-search-location-meta").slideDown();var a={action:"search_states",country:t.val(),return_html:!0};e(".em-search select[name=state]").load(EM.ajaxurl,a),a.action="search_regions",e(".em-search select[name=region]").load(EM.ajaxurl,a),a.action="search_towns",e(".em-search select[name=town]").load(EM.ajaxurl,a)}else t.closest(".em-search-location").find(".em-search-location-meta").slideUp()}),e(".em-search-form select[name=region]").change(function(){e(".em-search select[name=state]").html('<option value="">'+EM.txt_loading+"</option>"),e(".em-search select[name=town]").html('<option value="">'+EM.txt_loading+"</option>");var t={action:"search_states",region:e(this).val(),country:e(".em-search-form select[name=country]").val(),return_html:!0};e(".em-search select[name=state]").load(EM.ajaxurl,t),t.action="search_towns",e(".em-search select[name=town]").load(EM.ajaxurl,t)}),e(".em-search-form select[name=state]").change(function(){e(".em-search select[name=town]").html('<option value="">'+EM.txt_loading+"</option>");var t={action:"search_towns",state:e(this).val(),region:e(".em-search-form select[name=region]").val(),country:e(".em-search-form select[name=country]").val(),return_html:!0};e(".em-search select[name=town]").load(EM.ajaxurl,t)}),e(document).delegate(".em-search-form, .em-events-search-form","submit",function(t){var a=e(this);this.em_search&&this.em_search.value==EM.txt_search&&(this.em_search.value="");var n=a.closest(".em-search-wrapper").find(".em-search-ajax");if(0==n.length&&(n=e(".em-search-ajax")),n.length>0){n.append('<div class="loading" id="em-loading"></div>');var o=a.find(".em-search-submit");o.data("buttonText",o.val()).val(EM.txt_searching);var i=o.children("img");i.length>0&&i.attr("src",i.attr("src").replace("search-mag.png","search-loading.gif"));var r=a.serialize();return e.ajax(EM.ajaxurl,{type:"POST",dataType:"html",data:r,success:function(c){o.val(o.data("buttonText")),i.length>0&&i.attr("src",i.attr("src").replace("search-loading.gif","search-mag.png")),n.replaceWith(c),""==a.find("input[name=em_search]").val()&&a.find("input[name=em_search]").val(EM.txt_search),n=a.closest(".em-search-wrapper").find(".em-search-ajax"),0==n.length&&(n=e(".em-search-ajax")),jQuery(document).triggerHandler("em_search_ajax",[r,n,t])}}),t.preventDefault(),!1}}),e(".em-search-ajax").length>0&&e(document).delegate(".em-search-ajax a.page-numbers","click",function(t){var a=e(this),n=a.closest(".em-pagination").attr("data-em-ajax"),o=a.closest(".em-search-ajax"),i=o.parent(),r=a.attr("href").split("?"),c=r[1];return""!=n&&(c=""!=c?c+"&"+n:n),o.append('<div class="loading" id="em-loading"></div>'),e.ajax(EM.ajaxurl,{type:"POST",dataType:"html",data:c,success:function(e){o.replaceWith(e),o=i.find(".em-search-ajax"),jQuery(document).triggerHandler("em_search_ajax",[c,o,t])}}),t.preventDefault(),!1}),e(".events-table").on("click",".em-event-delete",function(){return confirm("Are you sure you want to delete?")?void(window.location.href=this.href):!1}),e("#event-form #event-image-delete, #location-form #location-image-delete").on("click",function(){var t=e(this);t.is(":checked")?t.closest(".event-form-image, .location-form-image").find("#event-image-img, #location-image-img").hide():t.closest(".event-form-image, .location-form-image").find("#event-image-img, #location-image-img").show()}),e("#em-tickets-form").length>0){e("#event-rsvp").click(function(t){this.checked?e("#event-rsvp-options").fadeIn():(confirmation=confirm(EM.disable_bookings_warning),0==confirmation?t.preventDefault():e("#event-rsvp-options").hide())}),e("input#event-rsvp").is(":checked")?e("div#rsvp-data").fadeIn():e("div#rsvp-data").hide();var i=function(){e("#em-tickets-form table tbody tr.em-tickets-row").show(),e("#em-tickets-form table tbody tr.em-tickets-row-form").hide()};e("#em-recurrence-checkbox").length>0?e("#em-recurrence-checkbox").change(function(){e("#em-recurrence-checkbox").is(":checked")?(e("#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring").show(),e("#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal, #em-tickets-form .hidden").hide()):(e("#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal").show(),e("#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring, #em-tickets-form .hidden").hide())}).trigger("change"):e("#em-form-recurrence").length>0?(e("#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring").show(),e("#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal, #em-tickets-form .hidden").hide()):e("#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring, #em-tickets-form .hidden").hide(),e("#em-tickets-add").click(function(t){t.preventDefault(),i();var a=e("#em-tickets-form table tbody"),n=a.length+1,o=a.first().clone(!0).attr("id","em-ticket-"+n).appendTo(e("#em-tickets-form table"));o.find("*[name]").each(function(t,a){a=e(a),a.attr("name",a.attr("name").replace("em_tickets[0]","em_tickets["+n+"]"))}),o.show().find(".ticket-actions-edit").trigger("click"),o.find(".em-date-input-loc").datepicker("destroy").removeAttr("id"),o.find(".em-time-input").unbind().each(function(){this.timePicker=!1}),em_setup_datepicker(o),em_setup_timepicker(o),e("html, body").animate({scrollTop:o.offset().top-30})}),e(document).delegate(".ticket-actions-edit","click",function(t){t.preventDefault(),i();var a=e(this).closest("tbody");return a.find("tr.em-tickets-row").hide(),a.find("tr.em-tickets-row-form").fadeIn(),!1}),e(document).delegate(".ticket-actions-edited","click",function(t){t.preventDefault();var a=e(this).closest("tbody"),n=a.attr("id").replace("em-ticket-","");return a.find(".em-tickets-row").fadeIn(),a.find(".em-tickets-row-form").hide(),a.find("*[name]").each(function(t,o){if(o=e(o),"ticket_start_pub"==o.attr("name"))a.find("span.ticket_start").text(o.attr("value"));else if("ticket_end_pub"==o.attr("name"))a.find("span.ticket_end").text(o.attr("value"));else if(o.attr("name")=="em_tickets["+n+"][ticket_type]")"members"==o.find(":selected").val()&&a.find("span.ticket_name").prepend("* ");else if(o.attr("name")=="em_tickets["+n+"][ticket_start_recurring_days]"){var i="before"==a.find("select.ticket-dates-from-recurring-when").val()?"-"+o.attr("value"):o.attr("value");""!=o.attr("value")?(a.find("span.ticket_start_recurring_days").text(i),a.find("span.ticket_start_recurring_days_text, span.ticket_start_time").removeClass("hidden").show()):(a.find("span.ticket_start_recurring_days").text(" - "),a.find("span.ticket_start_recurring_days_text, span.ticket_start_time").removeClass("hidden").hide())}else if(o.attr("name")=="em_tickets["+n+"][ticket_end_recurring_days]"){var i="before"==a.find("select.ticket-dates-to-recurring-when").val()?"-"+o.attr("value"):o.attr("value");""!=o.attr("value")?(a.find("span.ticket_end_recurring_days").text(i),a.find("span.ticket_end_recurring_days_text, span.ticket_end_time").removeClass("hidden").show()):(a.find("span.ticket_end_recurring_days").text(" - "),a.find("span.ticket_end_recurring_days_text, span.ticket_end_time").removeClass("hidden").hide())}else a.find("."+o.attr("name").replace("em_tickets["+n+"][","").replace("]","").replace("[]","")).text(o.attr("value"))}),e(document).triggerHandler("em_maps_tickets_edit",[a,n,!0]),e("html, body").animate({scrollTop:a.parent().offset().top-30}),!1}),e(document).delegate(".em-ticket-form select.ticket_type","change",function(){var t=e(this);"members"==t.find("option:selected").val()?t.closest(".em-ticket-form").find(".ticket-roles").fadeIn():t.closest(".em-ticket-form").find(".ticket-roles").hide()}),e(document).delegate(".em-ticket-form .ticket-options-advanced","click",function(t){t.preventDefault();var a=e(this);a.hasClass("show")?(a.closest(".em-ticket-form").find(".em-ticket-form-advanced").fadeIn(),a.find(".show").hide(),a.find(".hide").show()):(a.closest(".em-ticket-form").find(".em-ticket-form-advanced").hide(),a.find(".show").show(),a.find(".hide").hide()),a.toggleClass("show").toggleClass("hide")}),e(".em-ticket-form").each(function(){var t=!1,a=e(this);a.find('.em-ticket-form-advanced input[type="text"]').each(function(){""!=this.value&&(t=!0)}),a.find('.em-ticket-form-advanced input[type="checkbox"]:checked').length>0&&(t=!0),a.find(".em-ticket-form-advanced option:selected").each(function(){""!=this.value&&(t=!0)}),t&&a.find(".ticket-options-advanced").trigger("click")}),e(document).delegate(".ticket-actions-delete","click",function(t){t.preventDefault();var a=e(this),n=a.closest("tbody");return n.find("input.ticket_id").val()>0?(a.text("Deleting..."),e.getJSON(e(this).attr("href"),{em_ajax_action:"delete_ticket",id:n.find("input.ticket_id").val()},function(e){e.result?n.remove():(a.text("Delete"),alert(e.error))})):n.remove(),!1})}if(e("#em-bookings-table").length>0){e(document).delegate("#em-bookings-table .tablenav-pages a","click",function(){var t=e(this),a=t.parents("#em-bookings-table form.bookings-filter"),n=t.attr("href").match(/#[0-9]+/);if(null!=n&&n.length>0){var o=n[0].replace("#","");a.find("input[name=pno]").val(o)}else a.find("input[name=pno]").val(1);return a.trigger("submit"),!1});var r={modal:!0,autoOpen:!1,minWidth:500,height:"auto",buttons:[{text:EM.bookings_settings_save,click:function(t){t.preventDefault();var a=e("#em-bookings-table form.bookings-filter [name=cols]").val(""),n=e("form#em-bookings-table-settings-form input.em-bookings-col-item");e.each(n,function(e,t){1==t.value&&a.val(""!=a.val()?a.val()+","+t.name:t.name)}),e("#em-bookings-table-settings").trigger("submitted"),e("#em-bookings-table form.bookings-filter").trigger("submit"),e(this).dialog("close")}}]},c={modal:!0,autoOpen:!1,minWidth:500,height:"auto",buttons:[{text:EM.bookings_export_save,click:function(){e(this).children("form").submit(),e(this).dialog("close")}}]};if(e("#em-bookings-table-settings").length>0){e("#em-bookings-table-settings").dialog(r),e(document).delegate("#em-bookings-table-settings-trigger","click",function(t){t.preventDefault(),e("#em-bookings-table-settings").dialog("open")}),e("#em-bookings-table-export").dialog(c),e(document).delegate("#em-bookings-table-export-trigger","click",function(t){t.preventDefault(),e("#em-bookings-table-export").dialog("open")});var s=function(){e("#em-bookings-table-export-form input[name=show_tickets]").is(":checked")?(e("#em-bookings-table-export-form .em-bookings-col-item-ticket").show(),e("#em-bookings-table-export-form #em-bookings-export-cols-active .em-bookings-col-item-ticket input").val(1)):e("#em-bookings-table-export-form .em-bookings-col-item-ticket").hide().find("input").val(0)};e("#em-bookings-table form select").each(function(t,a){e(a).change(function(){var t=e(this),a=e("#em-bookings-table-export-form input[name="+t.attr("name")+"]"),n=t.find("option:selected");a.val(n.val())})}),s(),e("#em-bookings-table-export-form input[name=show_tickets]").click(s),e(".em-bookings-cols-sortable").sortable({connectWith:".em-bookings-cols-sortable",update:function(e,t){t.item.parents("ul#em-bookings-cols-active, ul#em-bookings-export-cols-active").length>0?t.item.addClass("ui-state-highlight").removeClass("ui-state-default").children("input").val(1):t.item.addClass("ui-state-default").removeClass("ui-state-highlight").children("input").val(0)}}).disableSelection(),o=!0}e(document).delegate("#em-bookings-table form.bookings-filter","submit",function(){var t=e(this);return t.parents("#em-bookings-table").find(".table-wrap").first().append('<div id="em-loading" />'),e.post(EM.ajaxurl,t.serializeArray(),function(a){var n=t.parents("#em-bookings-table").first();n.replaceWith(a),e("#em-bookings-table-export input[name=scope]").val(n.find("select[name=scope]").val()),e("#em-bookings-table-export input[name=status]").val(n.find("select[name=status]").val()),jQuery(document).triggerHandler("em_bookings_filtered",[a,n,t])}),!1}),e(document).delegate(".em-bookings-approve,.em-bookings-reject,.em-bookings-unapprove,.em-bookings-delete","click",function(){var t=e(this);if(t.hasClass("em-bookings-delete")&&!confirm(EM.booking_delete))return!1;var a=em_ajaxify(t.attr("href")),n=t.parents("td").first();return n.html(EM.txt_loading),n.load(a),!1})}e(".em_bookings_events_table").length>0&&(e(document).delegate(".em_bookings_events_table form","submit",function(){var t=e(this),a=em_ajaxify(t.attr("action"));return t.parents(".em_bookings_events_table").find(".table-wrap").first().append('<div id="em-loading" />'),e.get(a,t.serializeArray(),function(e){t.parents(".em_bookings_events_table").first().replaceWith(e)}),!1}),e(document).delegate(".em_bookings_events_table .tablenav-pages a","click",function(){var t=e(this),a=em_ajaxify(t.attr("href"));return t.parents(".em_bookings_events_table").find(".table-wrap").first().append('<div id="em-loading" />'),e.get(a,function(e){t.parents(".em_bookings_events_table").first().replaceWith(e)}),!1})),e("a.em-booking-button").click(function(t){t.preventDefault();var a=e(this);if(a.text()!=EM.bb_booked&&e(this).text()!=EM.bb_booking){a.text(EM.bb_booking);var n=a.attr("id").split("_");e.ajax({url:EM.ajaxurl,dataType:"jsonp",data:{event_id:n[1],_wpnonce:n[2],action:"booking_add_one"},success:function(e){a.text(e.result?EM.bb_booked:EM.bb_error),""!=e.message&&alert(e.message)},error:function(){a.text(EM.bb_error)}})}return!1}),e("a.em-cancel-button").click(function(t){t.preventDefault();var a=e(this);if(a.text()!=EM.bb_cancelled&&a.text()!=EM.bb_canceling){a.text(EM.bb_canceling);var n=a.attr("id").split("_");e.ajax({url:EM.ajaxurl,dataType:"jsonp",data:{booking_id:n[1],_wpnonce:n[2],action:"booking_cancel"},success:function(e){a.text(e.result?EM.bb_cancelled:EM.bb_cancel_error)},error:function(){a.text(EM.bb_cancel_error)}})}return!1}),e(".em-date-single, .em-date-range, #em-date-start").length>0&&("en"!=EM.locale&&EM.locale_data&&e.datepicker.setDefaults(EM.locale_data),o=!0,em_setup_datepicker("body")),o&&em_load_jquery_css(),e("#recurrence-dates-explanation").hide(),e("#date-to-submit").hide(),e("#end-date-to-submit").hide(),e("#localised-date").show(),e("#localised-end-date").show(),e("#em-wrapper input.select-all").change(function(){e(this).is(":checked")?(e("input.row-selector").prop("checked",!0),e("input.select-all").prop("checked",!0)):(e("input.row-selector").prop("checked",!1),e("input.select-all").prop("checked",!1))}),t(),a(),n(),e("input#event-recurrence").change(n),e("input#recurrence-interval").keyup(t),e("select#recurrence-frequency").change(t),e("select#recurrence-frequency").change(a),(e(".em-location-map").length>0||e(".em-locations-map").length>0||e("#em-map").length>0||e(".em-search-geo").length>0)&&em_maps_load(),jQuery("div.em-location-data input#location-name").length>0&&(jQuery("div.em-location-data input#location-name").autocomplete({source:EM.locationajaxurl,minLength:2,focus:function(e,t){return jQuery("input#location-id").val(t.item.value),!1},select:function(e,t){return jQuery("input#location-id").val(t.item.id).trigger("change"),jQuery("input#location-name").val(t.item.value),jQuery("input#location-address").val(t.item.address),jQuery("input#location-town").val(t.item.town),jQuery("input#location-state").val(t.item.state),jQuery("input#location-region").val(t.item.region),jQuery("input#location-postcode").val(t.item.postcode),""==t.item.country?jQuery("select#location-country option:selected").removeAttr("selected"):jQuery('select#location-country option[value="'+t.item.country+'"]').attr("selected","selected"),jQuery("div.em-location-data input, div.em-location-data select").css("background-color","#ccc").attr("readonly","readonly"),jQuery("#em-location-reset").show(),jQuery("#em-location-search-tip").hide(),jQuery(document).triggerHandler("em_locations_autocomplete_selected",[e,t]),!1}}).data("ui-autocomplete")._renderItem=function(e,t){return html_val="<a>"+t.label+'<br><span style="font-size:11px"><em>'+t.address+", "+t.town+"</em></span></a>",jQuery("<li></li>").data("item.autocomplete",t).append(html_val).appendTo(e)},jQuery("#em-location-reset a").click(function(){return jQuery("div.em-location-data input").css("background-color","#fff").val("").removeAttr("readonly"),jQuery("div.em-location-data select").css("background-color","#fff"),jQuery("div.em-location-data option:selected").removeAttr("selected"),jQuery("input#location-id").val(""),jQuery("#em-location-reset").hide(),jQuery("#em-location-search-tip").show(),jQuery("#em-map").hide(),jQuery("#em-map-404").show(),"undefined"!=typeof marker&&(marker.setPosition(new google.maps.LatLng(0,0)),infoWindow.close(),marker.setDraggable(!0)),!1}),"0"!=jQuery("input#location-id").val()&&""!=jQuery("input#location-id").val()&&(jQuery("div.em-location-data input, div.em-location-data select").css("background-color","#ccc").attr("readonly","readonly"),jQuery("#em-location-reset").show(),jQuery("#em-location-search-tip").hide()))});var em_ajaxify=function(e){return-1!=e.search("em_ajax=0")?e=e.replace("em_ajax=0","em_ajax=1"):e+=-1!=e.search(/\?/)?"&em_ajax=1":"?em_ajax=1",e},em_maps_loaded=!1,maps={},maps_markers={},infowindow;jQuery(document).bind("em_search_ajax",function(e,t,a){em_maps_loaded&&(a.find(".em-location-map").each(function(e,t){em_maps_load_location(t)}),a.find(".em-locations-map").each(function(e,t){em_maps_load_locations(t)}))});
2
- /* jQuery timePicker - http://labs.perifer.se/timedatepicker/ @ http://github.com/perifer/timePicker commit 100644 */
3
- (function(e){function t(t,n,r,i){t.value=e(n).text();e(t).change();if(!navigator.userAgent.match(/msie/i)){t.focus()}r.hide()}function n(e,t){var n=e.getHours();var i=t.show24Hours?n:(n+11)%12+1;var s=e.getMinutes();return r(i)+t.separator+r(s)+(t.show24Hours?"":n<12?" AM":" PM")}function r(e){return(e<10?"0":"")+e}function i(e,t){return typeof e=="object"?o(e):s(e,t)}function s(e,t){if(e){var n=e.split(t.separator);var r=parseFloat(n[0]);var i=parseFloat(n[1]);if(!t.show24Hours){if(r===12&&e.indexOf("AM")!==-1){r=0}else if(r!==12&&e.indexOf("PM")!==-1){r+=12}}var s=new Date(0,0,0,r,i,0);return o(s)}return null}function o(e){e.setFullYear(2001);e.setMonth(0);e.setDate(0);return e}e.fn.timePicker=function(t){var n=e.extend({},e.fn.timePicker.defaults,t);return this.each(function(){e.timePicker(this,n)})};e.timePicker=function(t,n){var r=e(t)[0];return r.timePicker||(r.timePicker=new jQuery._timePicker(r,n))};e.timePicker.version="0.3";e._timePicker=function(r,u){var a=false;var f=false;var l=i(u.startTime,u);var c=i(u.endTime,u);var h="selected";var p="li."+h;e(r).attr("autocomplete","OFF");var d=[];var v=new Date(l);while(v<=c){d[d.length]=n(v,u);v=new Date(v.setMinutes(v.getMinutes()+u.step))}var m=e('<div class="time-picker'+(u.show24Hours?"":" time-picker-12hours")+'"></div>');var g=e("<ul></ul>");for(var y=0;y<d.length;y++){g.append("<li>"+d[y]+"</li>")}m.append(g);m.appendTo("body").hide();m.mouseover(function(){a=true}).mouseout(function(){a=false});e("li",g).mouseover(function(){if(!f){e(p,m).removeClass(h);e(this).addClass(h)}}).mousedown(function(){a=true}).click(function(){t(r,this,m,u);a=false});var b=function(){if(m.is(":visible")){return false}e("li",m).removeClass(h);var t=e(r).offset();m.css({top:t.top+r.offsetHeight,left:t.left});m.show();var i=r.value?s(r.value,u):l;var a=l.getHours()*60+l.getMinutes();var f=i.getHours()*60+i.getMinutes()-a;var p=Math.round(f/u.step);var d=o(new Date(0,0,0,0,p*u.step+a,0));d=l<d&&d<=c?d:l;var v=e("li:contains("+n(d,u)+")",m);if(v.length){v.addClass(h);m[0].scrollTop=v[0].offsetTop}return true};e(r).focus(b).click(b);e(r).blur(function(){if(!a){m.hide()}});e(r)["keydown"](function(n){var i;f=true;var s=m[0].scrollTop;switch(n.keyCode){case 38:if(b()){return false}i=e(p,g);var o=i.prev().addClass(h)[0];if(o){i.removeClass(h);if(o.offsetTop<s){m[0].scrollTop=s-o.offsetHeight}}else{i.removeClass(h);o=e("li:last",g).addClass(h)[0];m[0].scrollTop=o.offsetTop-o.offsetHeight}return false;break;case 40:if(b()){return false}i=e(p,g);var a=i.next().addClass(h)[0];if(a){i.removeClass(h);if(a.offsetTop+a.offsetHeight>s+m[0].offsetHeight){m[0].scrollTop=s+a.offsetHeight}}else{i.removeClass(h);a=e("li:first",g).addClass(h)[0];m[0].scrollTop=0}return false;break;case 13:if(m.is(":visible")){var l=e(p,g)[0];t(r,l,m,u)}return false;break;case 27:m.hide();return false;break}return true});e(r).keyup(function(e){f=false});this.getTime=function(){return s(r.value,u)};this.setTime=function(t){r.value=n(i(t,u),u);e(r).change()}};e.fn.timePicker.defaults={step:30,startTime:new Date(0,0,0,0,0,0),endTime:new Date(0,0,0,23,30,0),separator:":",show24Hours:true}})(jQuery)
includes/js/i18n/jquery-ui-i18n.js DELETED
@@ -1,1199 +0,0 @@
1
- /* Afrikaans initialisation for the jQuery UI date picker plugin. */
2
- /* Written by Renier Pretorius. */
3
- jQuery(function($){
4
- $.datepicker.regional['af'] = {
5
- closeText: 'Selekteer',
6
- prevText: 'Vorige',
7
- nextText: 'Volgende',
8
- currentText: 'Vandag',
9
- monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
10
- 'Julie','Augustus','September','Oktober','November','Desember'],
11
- monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
12
- 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
13
- dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
14
- dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
15
- dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
16
- weekHeader: 'Wk',
17
- dateFormat: 'dd/mm/yy',
18
- firstDay: 1,
19
- isRTL: false,
20
- showMonthAfterYear: false,
21
- yearSuffix: ''};
22
- $.datepicker.setDefaults($.datepicker.regional['af']);
23
- });
24
- /* Arabic Translation for jQuery UI date picker plugin. */
25
- /* Khaled Al Horani -- koko.dw@gmail.com */
26
- /* خالد الحوراني -- koko.dw@gmail.com */
27
- /* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
28
- jQuery(function($){
29
- $.datepicker.regional['ar'] = {
30
- closeText: 'إغلاق',
31
- prevText: '&#x3c;السابق',
32
- nextText: 'التالي&#x3e;',
33
- currentText: 'اليوم',
34
- monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران',
35
- 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
36
- monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
37
- dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'],
38
- dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
39
- dayNamesMin: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
40
- weekHeader: 'أسبوع',
41
- dateFormat: 'dd/mm/yy',
42
- firstDay: 0,
43
- isRTL: true,
44
- showMonthAfterYear: false,
45
- yearSuffix: ''};
46
- $.datepicker.setDefaults($.datepicker.regional['ar']);
47
- });/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
48
- /* Written by Jamil Najafov (necefov33@gmail.com). */
49
- jQuery(function($) {
50
- $.datepicker.regional['az'] = {
51
- closeText: 'Bağla',
52
- prevText: '&#x3c;Geri',
53
- nextText: 'İrəli&#x3e;',
54
- currentText: 'Bugün',
55
- monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
56
- 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
57
- monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
58
- 'İyul','Avq','Sen','Okt','Noy','Dek'],
59
- dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
60
- dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
61
- dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
62
- weekHeader: 'Hf',
63
- dateFormat: 'dd.mm.yy',
64
- firstDay: 1,
65
- isRTL: false,
66
- showMonthAfterYear: false,
67
- yearSuffix: ''};
68
- $.datepicker.setDefaults($.datepicker.regional['az']);
69
- });/* Bulgarian initialisation for the jQuery UI date picker plugin. */
70
- /* Written by Stoyan Kyosev (http://svest.org). */
71
- jQuery(function($){
72
- $.datepicker.regional['bg'] = {
73
- closeText: 'затвори',
74
- prevText: '&#x3c;назад',
75
- nextText: 'напред&#x3e;',
76
- nextBigText: '&#x3e;&#x3e;',
77
- currentText: 'днес',
78
- monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
79
- 'Юли','Август','Септември','Октомври','Ноември','Декември'],
80
- monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
81
- 'Юли','Авг','Сеп','Окт','Нов','Дек'],
82
- dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
83
- dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
84
- dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
85
- weekHeader: 'Wk',
86
- dateFormat: 'dd.mm.yy',
87
- firstDay: 1,
88
- isRTL: false,
89
- showMonthAfterYear: false,
90
- yearSuffix: ''};
91
- $.datepicker.setDefaults($.datepicker.regional['bg']);
92
- });
93
- /* Bosnian i18n for the jQuery UI date picker plugin. */
94
- /* Written by Kenan Konjo. */
95
- jQuery(function($){
96
- $.datepicker.regional['bs'] = {
97
- closeText: 'Zatvori',
98
- prevText: '&#x3c;',
99
- nextText: '&#x3e;',
100
- currentText: 'Danas',
101
- monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
102
- 'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
103
- monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
104
- 'Jul','Aug','Sep','Okt','Nov','Dec'],
105
- dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
106
- dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
107
- dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
108
- weekHeader: 'Wk',
109
- dateFormat: 'dd.mm.yy',
110
- firstDay: 1,
111
- isRTL: false,
112
- showMonthAfterYear: false,
113
- yearSuffix: ''};
114
- $.datepicker.setDefaults($.datepicker.regional['bs']);
115
- });/* Inicialització en català per a l'extenció 'calendar' per jQuery. */
116
- /* Writers: (joan.leon@gmail.com). */
117
- jQuery(function($){
118
- $.datepicker.regional['ca'] = {
119
- closeText: 'Tancar',
120
- prevText: '&#x3c;Ant',
121
- nextText: 'Seg&#x3e;',
122
- currentText: 'Avui',
123
- monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
124
- 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
125
- monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
126
- 'Jul','Ago','Set','Oct','Nov','Des'],
127
- dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
128
- dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
129
- dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
130
- weekHeader: 'Sm',
131
- dateFormat: 'dd/mm/yy',
132
- firstDay: 1,
133
- isRTL: false,
134
- showMonthAfterYear: false,
135
- yearSuffix: ''};
136
- $.datepicker.setDefaults($.datepicker.regional['ca']);
137
- });/* Czech initialisation for the jQuery UI date picker plugin. */
138
- /* Written by Tomas Muller (tomas@tomas-muller.net). */
139
- jQuery(function($){
140
- $.datepicker.regional['cs'] = {
141
- closeText: 'Zavřít',
142
- prevText: '&#x3c;Dříve',
143
- nextText: 'Později&#x3e;',
144
- currentText: 'Nyní',
145
- monthNames: ['leden','únor','březen','duben','květen','červen',
146
- 'červenec','srpen','září','říjen','listopad','prosinec'],
147
- monthNamesShort: ['led','úno','bře','dub','kvě','čer',
148
- 'čvc','srp','zář','říj','lis','pro'],
149
- dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
150
- dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
151
- dayNamesMin: ['ne','po','út','st','čt','pá','so'],
152
- weekHeader: 'Týd',
153
- dateFormat: 'dd.mm.yy',
154
- firstDay: 1,
155
- isRTL: false,
156
- showMonthAfterYear: false,
157
- yearSuffix: ''};
158
- $.datepicker.setDefaults($.datepicker.regional['cs']);
159
- });
160
- /* Danish initialisation for the jQuery UI date picker plugin. */
161
- /* Written by Jan Christensen ( deletestuff@gmail.com). */
162
- jQuery(function($){
163
- $.datepicker.regional['da'] = {
164
- closeText: 'Luk',
165
- prevText: '&#x3c;Forrige',
166
- nextText: 'Næste&#x3e;',
167
- currentText: 'Idag',
168
- monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
169
- 'Juli','August','September','Oktober','November','December'],
170
- monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
171
- 'Jul','Aug','Sep','Okt','Nov','Dec'],
172
- dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
173
- dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
174
- dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
175
- weekHeader: 'Uge',
176
- dateFormat: 'dd-mm-yy',
177
- firstDay: 1,
178
- isRTL: false,
179
- showMonthAfterYear: false,
180
- yearSuffix: ''};
181
- $.datepicker.setDefaults($.datepicker.regional['da']);
182
- });
183
- /* German initialisation for the jQuery UI date picker plugin. */
184
- /* Written by Milian Wolff (mail@milianw.de). */
185
- jQuery(function($){
186
- $.datepicker.regional['de'] = {
187
- closeText: 'schließen',
188
- prevText: '&#x3c;zurück',
189
- nextText: 'Vor&#x3e;',
190
- currentText: 'heute',
191
- monthNames: ['Januar','Februar','März','April','Mai','Juni',
192
- 'Juli','August','September','Oktober','November','Dezember'],
193
- monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
194
- 'Jul','Aug','Sep','Okt','Nov','Dez'],
195
- dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
196
- dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
197
- dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
198
- weekHeader: 'Wo',
199
- dateFormat: 'dd.mm.yy',
200
- firstDay: 1,
201
- isRTL: false,
202
- showMonthAfterYear: false,
203
- yearSuffix: ''};
204
- $.datepicker.setDefaults($.datepicker.regional['de']);
205
- });
206
- /* Greek (el) initialisation for the jQuery UI date picker plugin. */
207
- /* Written by Alex Cicovic (http://www.alexcicovic.com) */
208
- jQuery(function($){
209
- $.datepicker.regional['el'] = {
210
- closeText: 'Κλείσιμο',
211
- prevText: 'Προηγούμενος',
212
- nextText: 'Επόμενος',
213
- currentText: 'Τρέχων Μήνας',
214
- monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
215
- 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
216
- monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
217
- 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
218
- dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
219
- dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
220
- dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
221
- weekHeader: 'Εβδ',
222
- dateFormat: 'dd/mm/yy',
223
- firstDay: 1,
224
- isRTL: false,
225
- showMonthAfterYear: false,
226
- yearSuffix: ''};
227
- $.datepicker.setDefaults($.datepicker.regional['el']);
228
- });/* English/UK initialisation for the jQuery UI date picker plugin. */
229
- /* Written by Stuart. */
230
- jQuery(function($){
231
- $.datepicker.regional['en-GB'] = {
232
- closeText: 'Done',
233
- prevText: 'Prev',
234
- nextText: 'Next',
235
- currentText: 'Today',
236
- monthNames: ['January','February','March','April','May','June',
237
- 'July','August','September','October','November','December'],
238
- monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
239
- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
240
- dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
241
- dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
242
- dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
243
- weekHeader: 'Wk',
244
- dateFormat: 'dd/mm/yy',
245
- firstDay: 1,
246
- isRTL: false,
247
- showMonthAfterYear: false,
248
- yearSuffix: ''};
249
- $.datepicker.setDefaults($.datepicker.regional['en-GB']);
250
- });
251
- /* Esperanto initialisation for the jQuery UI date picker plugin. */
252
- /* Written by Olivier M. (olivierweb@ifrance.com). */
253
- jQuery(function($){
254
- $.datepicker.regional['eo'] = {
255
- closeText: 'Fermi',
256
- prevText: '&lt;Anta',
257
- nextText: 'Sekv&gt;',
258
- currentText: 'Nuna',
259
- monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
260
- 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
261
- monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
262
- 'Jul','Aŭg','Sep','Okt','Nov','Dec'],
263
- dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
264
- dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
265
- dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
266
- weekHeader: 'Sb',
267
- dateFormat: 'dd/mm/yy',
268
- firstDay: 0,
269
- isRTL: false,
270
- showMonthAfterYear: false,
271
- yearSuffix: ''};
272
- $.datepicker.setDefaults($.datepicker.regional['eo']);
273
- });
274
- /* Inicialización en español para la extensión 'UI date picker' para jQuery. */
275
- /* Traducido por Vester (xvester@gmail.com). */
276
- jQuery(function($){
277
- $.datepicker.regional['es'] = {
278
- closeText: 'Cerrar',
279
- prevText: '&#x3c;Ant',
280
- nextText: 'Sig&#x3e;',
281
- currentText: 'Hoy',
282
- monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
283
- 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
284
- monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
285
- 'Jul','Ago','Sep','Oct','Nov','Dic'],
286
- dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
287
- dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
288
- dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
289
- weekHeader: 'Sm',
290
- dateFormat: 'dd/mm/yy',
291
- firstDay: 1,
292
- isRTL: false,
293
- showMonthAfterYear: false,
294
- yearSuffix: ''};
295
- $.datepicker.setDefaults($.datepicker.regional['es']);
296
- });/* Estonian initialisation for the jQuery UI date picker plugin. */
297
- /* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
298
- jQuery(function($){
299
- $.datepicker.regional['et'] = {
300
- closeText: 'Sulge',
301
- prevText: 'Eelnev',
302
- nextText: 'Järgnev',
303
- currentText: 'Täna',
304
- monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
305
- 'Juuli','August','September','Oktoober','November','Detsember'],
306
- monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
307
- 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
308
- dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
309
- dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
310
- dayNamesMin: ['P','E','T','K','N','R','L'],
311
- weekHeader: 'Sm',
312
- dateFormat: 'dd.mm.yy',
313
- firstDay: 1,
314
- isRTL: false,
315
- showMonthAfterYear: false,
316
- yearSuffix: ''};
317
- $.datepicker.setDefaults($.datepicker.regional['et']);
318
- }); /* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
319
- /* Karrikas-ek itzulia (karrikas@karrikas.com) */
320
- jQuery(function($){
321
- $.datepicker.regional['eu'] = {
322
- closeText: 'Egina',
323
- prevText: '&#x3c;Aur',
324
- nextText: 'Hur&#x3e;',
325
- currentText: 'Gaur',
326
- monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina',
327
- 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'],
328
- monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka',
329
- 'Uzt','Abu','Ira','Urr','Aza','Abe'],
330
- dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'],
331
- dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'],
332
- dayNamesMin: ['Ig','As','As','As','Os','Os','La'],
333
- weekHeader: 'Wk',
334
- dateFormat: 'yy/mm/dd',
335
- firstDay: 1,
336
- isRTL: false,
337
- showMonthAfterYear: false,
338
- yearSuffix: ''};
339
- $.datepicker.setDefaults($.datepicker.regional['eu']);
340
- });/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
341
- /* Javad Mowlanezhad -- jmowla@gmail.com */
342
- /* Jalali calendar should supported soon! (Its implemented but I have to test it) */
343
- jQuery(function($) {
344
- $.datepicker.regional['fa'] = {
345
- closeText: 'بستن',
346
- prevText: '&#x3c;قبلي',
347
- nextText: 'بعدي&#x3e;',
348
- currentText: 'امروز',
349
- monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور',
350
- 'مهر','آبان','آذر','دي','بهمن','اسفند'],
351
- monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
352
- dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'],
353
- dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'],
354
- dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'],
355
- weekHeader: 'هف',
356
- dateFormat: 'yy/mm/dd',
357
- firstDay: 6,
358
- isRTL: true,
359
- showMonthAfterYear: false,
360
- yearSuffix: ''};
361
- $.datepicker.setDefaults($.datepicker.regional['fa']);
362
- });/* Finnish initialisation for the jQuery UI date picker plugin. */
363
- /* Written by Harri Kilpi� (harrikilpio@gmail.com). */
364
- jQuery(function($){
365
- $.datepicker.regional['fi'] = {
366
- closeText: 'Sulje',
367
- prevText: '&laquo;Edellinen',
368
- nextText: 'Seuraava&raquo;',
369
- currentText: 'T&auml;n&auml;&auml;n',
370
- monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kes&auml;kuu',
371
- 'Hein&auml;kuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
372
- monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kes&auml;',
373
- 'Hein&auml;','Elo','Syys','Loka','Marras','Joulu'],
374
- dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'],
375
- dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
376
- dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
377
- weekHeader: 'Vk',
378
- dateFormat: 'dd.mm.yy',
379
- firstDay: 1,
380
- isRTL: false,
381
- showMonthAfterYear: false,
382
- yearSuffix: ''};
383
- $.datepicker.setDefaults($.datepicker.regional['fi']);
384
- });
385
- /* Faroese initialisation for the jQuery UI date picker plugin */
386
- /* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
387
- jQuery(function($){
388
- $.datepicker.regional['fo'] = {
389
- closeText: 'Lat aftur',
390
- prevText: '&#x3c;Fyrra',
391
- nextText: 'Næsta&#x3e;',
392
- currentText: 'Í dag',
393
- monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
394
- 'Juli','August','September','Oktober','November','Desember'],
395
- monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
396
- 'Jul','Aug','Sep','Okt','Nov','Des'],
397
- dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
398
- dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
399
- dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
400
- weekHeader: 'Vk',
401
- dateFormat: 'dd-mm-yy',
402
- firstDay: 0,
403
- isRTL: false,
404
- showMonthAfterYear: false,
405
- yearSuffix: ''};
406
- $.datepicker.setDefaults($.datepicker.regional['fo']);
407
- });
408
- /* Swiss-French initialisation for the jQuery UI date picker plugin. */
409
- /* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
410
- jQuery(function($){
411
- $.datepicker.regional['fr-CH'] = {
412
- closeText: 'Fermer',
413
- prevText: '&#x3c;Préc',
414
- nextText: 'Suiv&#x3e;',
415
- currentText: 'Courant',
416
- monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
417
- 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
418
- monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
419
- 'Jul','Aoû','Sep','Oct','Nov','Déc'],
420
- dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
421
- dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
422
- dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
423
- weekHeader: 'Sm',
424
- dateFormat: 'dd.mm.yy',
425
- firstDay: 1,
426
- isRTL: false,
427
- showMonthAfterYear: false,
428
- yearSuffix: ''};
429
- $.datepicker.setDefaults($.datepicker.regional['fr-CH']);
430
- });/* French initialisation for the jQuery UI date picker plugin. */
431
- /* Written by Keith Wood (kbwood{at}iinet.com.au) and Stéphane Nahmani (sholby@sholby.net). */
432
- jQuery(function($){
433
- $.datepicker.regional['fr'] = {
434
- closeText: 'Fermer',
435
- prevText: '&#x3c;Préc',
436
- nextText: 'Suiv&#x3e;',
437
- currentText: 'Courant',
438
- monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
439
- 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
440
- monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
441
- 'Jul','Aoû','Sep','Oct','Nov','Déc'],
442
- dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
443
- dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
444
- dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
445
- weekHeader: 'Sm',
446
- dateFormat: 'dd/mm/yy',
447
- firstDay: 1,
448
- isRTL: false,
449
- showMonthAfterYear: false,
450
- yearSuffix: ''};
451
- $.datepicker.setDefaults($.datepicker.regional['fr']);
452
- });/* Hebrew initialisation for the UI Datepicker extension. */
453
- /* Written by Amir Hardon (ahardon at gmail dot com). */
454
- jQuery(function($){
455
- $.datepicker.regional['he'] = {
456
- closeText: 'סגור',
457
- prevText: '&#x3c;הקודם',
458
- nextText: 'הבא&#x3e;',
459
- currentText: 'היום',
460
- monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
461
- 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
462
- monthNamesShort: ['1','2','3','4','5','6',
463
- '7','8','9','10','11','12'],
464
- dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
465
- dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
466
- dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
467
- weekHeader: 'Wk',
468
- dateFormat: 'dd/mm/yy',
469
- firstDay: 0,
470
- isRTL: true,
471
- showMonthAfterYear: false,
472
- yearSuffix: ''};
473
- $.datepicker.setDefaults($.datepicker.regional['he']);
474
- });
475
- /* Croatian i18n for the jQuery UI date picker plugin. */
476
- /* Written by Vjekoslav Nesek. */
477
- jQuery(function($){
478
- $.datepicker.regional['hr'] = {
479
- closeText: 'Zatvori',
480
- prevText: '&#x3c;',
481
- nextText: '&#x3e;',
482
- currentText: 'Danas',
483
- monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
484
- 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
485
- monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
486
- 'Srp','Kol','Ruj','Lis','Stu','Pro'],
487
- dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
488
- dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
489
- dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
490
- weekHeader: 'Tje',
491
- dateFormat: 'dd.mm.yy.',
492
- firstDay: 1,
493
- isRTL: false,
494
- showMonthAfterYear: false,
495
- yearSuffix: ''};
496
- $.datepicker.setDefaults($.datepicker.regional['hr']);
497
- });/* Hungarian initialisation for the jQuery UI date picker plugin. */
498
- /* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
499
- jQuery(function($){
500
- $.datepicker.regional['hu'] = {
501
- closeText: 'bezárás',
502
- prevText: '&laquo;&nbsp;vissza',
503
- nextText: 'előre&nbsp;&raquo;',
504
- currentText: 'ma',
505
- monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
506
- 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
507
- monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
508
- 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
509
- dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
510
- dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
511
- dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
512
- weekHeader: 'Hé',
513
- dateFormat: 'yy-mm-dd',
514
- firstDay: 1,
515
- isRTL: false,
516
- showMonthAfterYear: false,
517
- yearSuffix: ''};
518
- $.datepicker.setDefaults($.datepicker.regional['hu']);
519
- });
520
- /* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
521
- /* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
522
- jQuery(function($){
523
- $.datepicker.regional['hy'] = {
524
- closeText: 'Փակել',
525
- prevText: '&#x3c;Նախ.',
526
- nextText: 'Հաջ.&#x3e;',
527
- currentText: 'Այսօր',
528
- monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
529
- 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
530
- monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
531
- 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
532
- dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
533
- dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
534
- dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
535
- weekHeader: 'ՇԲՏ',
536
- dateFormat: 'dd.mm.yy',
537
- firstDay: 1,
538
- isRTL: false,
539
- showMonthAfterYear: false,
540
- yearSuffix: ''};
541
- $.datepicker.setDefaults($.datepicker.regional['hy']);
542
- });/* Indonesian initialisation for the jQuery UI date picker plugin. */
543
- /* Written by Deden Fathurahman (dedenf@gmail.com). */
544
- jQuery(function($){
545
- $.datepicker.regional['id'] = {
546
- closeText: 'Tutup',
547
- prevText: '&#x3c;mundur',
548
- nextText: 'maju&#x3e;',
549
- currentText: 'hari ini',
550
- monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
551
- 'Juli','Agustus','September','Oktober','Nopember','Desember'],
552
- monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
553
- 'Jul','Agus','Sep','Okt','Nop','Des'],
554
- dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
555
- dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
556
- dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
557
- weekHeader: 'Mg',
558
- dateFormat: 'dd/mm/yy',
559
- firstDay: 0,
560
- isRTL: false,
561
- showMonthAfterYear: false,
562
- yearSuffix: ''};
563
- $.datepicker.setDefaults($.datepicker.regional['id']);
564
- });/* Icelandic initialisation for the jQuery UI date picker plugin. */
565
- /* Written by Haukur H. Thorsson (haukur@eskill.is). */
566
- jQuery(function($){
567
- $.datepicker.regional['is'] = {
568
- closeText: 'Loka',
569
- prevText: '&#x3c; Fyrri',
570
- nextText: 'N&aelig;sti &#x3e;',
571
- currentText: '&Iacute; dag',
572
- monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
573
- 'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
574
- monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
575
- 'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
576
- dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
577
- dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
578
- dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
579
- weekHeader: 'Vika',
580
- dateFormat: 'dd/mm/yy',
581
- firstDay: 0,
582
- isRTL: false,
583
- showMonthAfterYear: false,
584
- yearSuffix: ''};
585
- $.datepicker.setDefaults($.datepicker.regional['is']);
586
- });/* Italian initialisation for the jQuery UI date picker plugin. */
587
- /* Written by Antonello Pasella (antonello.pasella@gmail.com). */
588
- jQuery(function($){
589
- $.datepicker.regional['it'] = {
590
- closeText: 'Chiudi',
591
- prevText: '&#x3c;Prec',
592
- nextText: 'Succ&#x3e;',
593
- currentText: 'Oggi',
594
- monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
595
- 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
596
- monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
597
- 'Lug','Ago','Set','Ott','Nov','Dic'],
598
- dayNames: ['Domenica','Luned&#236','Marted&#236','Mercoled&#236','Gioved&#236','Venerd&#236','Sabato'],
599
- dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
600
- dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
601
- weekHeader: 'Sm',
602
- dateFormat: 'dd/mm/yy',
603
- firstDay: 1,
604
- isRTL: false,
605
- showMonthAfterYear: false,
606
- yearSuffix: ''};
607
- $.datepicker.setDefaults($.datepicker.regional['it']);
608
- });
609
- /* Japanese initialisation for the jQuery UI date picker plugin. */
610
- /* Written by Kentaro SATO (kentaro@ranvis.com). */
611
- jQuery(function($){
612
- $.datepicker.regional['ja'] = {
613
- closeText: '閉じる',
614
- prevText: '&#x3c;前',
615
- nextText: '次&#x3e;',
616
- currentText: '今日',
617
- monthNames: ['1月','2月','3月','4月','5月','6月',
618
- '7月','8月','9月','10月','11月','12月'],
619
- monthNamesShort: ['1月','2月','3月','4月','5月','6月',
620
- '7月','8月','9月','10月','11月','12月'],
621
- dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
622
- dayNamesShort: ['日','月','火','水','木','金','土'],
623
- dayNamesMin: ['日','月','火','水','木','金','土'],
624
- weekHeader: '週',
625
- dateFormat: 'yy/mm/dd',
626
- firstDay: 0,
627
- isRTL: false,
628
- showMonthAfterYear: true,
629
- yearSuffix: '年'};
630
- $.datepicker.setDefaults($.datepicker.regional['ja']);
631
- });/* Korean initialisation for the jQuery calendar extension. */
632
- /* Written by DaeKwon Kang (ncrash.dk@gmail.com). */
633
- jQuery(function($){
634
- $.datepicker.regional['ko'] = {
635
- closeText: '닫기',
636
- prevText: '이전달',
637
- nextText: '다음달',
638
- currentText: '오늘',
639
- monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
640
- '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
641
- monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
642
- '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
643
- dayNames: ['일','월','화','수','목','금','토'],
644
- dayNamesShort: ['일','월','화','수','목','금','토'],
645
- dayNamesMin: ['일','월','화','수','목','금','토'],
646
- weekHeader: 'Wk',
647
- dateFormat: 'yy-mm-dd',
648
- firstDay: 0,
649
- isRTL: false,
650
- showMonthAfterYear: false,
651
- yearSuffix: '년'};
652
- $.datepicker.setDefaults($.datepicker.regional['ko']);
653
- });/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
654
- /* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
655
- jQuery(function($){
656
- $.datepicker.regional['kz'] = {
657
- closeText: 'Жабу',
658
- prevText: '&#x3c;Алдыңғы',
659
- nextText: 'Келесі&#x3e;',
660
- currentText: 'Бүгін',
661
- monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым',
662
- 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'],
663
- monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау',
664
- 'Шіл','Там','Қыр','Қаз','Қар','Жел'],
665
- dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'],
666
- dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'],
667
- dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'],
668
- weekHeader: 'Не',
669
- dateFormat: 'dd.mm.yy',
670
- firstDay: 1,
671
- isRTL: false,
672
- showMonthAfterYear: false,
673
- yearSuffix: ''};
674
- $.datepicker.setDefaults($.datepicker.regional['kz']);
675
- });
676
- /* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
677
- /* @author Arturas Paleicikas <arturas@avalon.lt> */
678
- jQuery(function($){
679
- $.datepicker.regional['lt'] = {
680
- closeText: 'Uždaryti',
681
- prevText: '&#x3c;Atgal',
682
- nextText: 'Pirmyn&#x3e;',
683
- currentText: 'Šiandien',
684
- monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
685
- 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
686
- monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
687
- 'Lie','Rugp','Rugs','Spa','Lap','Gru'],
688
- dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
689
- dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
690
- dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
691
- weekHeader: 'Wk',
692
- dateFormat: 'yy-mm-dd',
693
- firstDay: 1,
694
- isRTL: false,
695
- showMonthAfterYear: false,
696
- yearSuffix: ''};
697
- $.datepicker.setDefaults($.datepicker.regional['lt']);
698
- });/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
699
- /* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
700
- jQuery(function($){
701
- $.datepicker.regional['lv'] = {
702
- closeText: 'Aizvērt',
703
- prevText: 'Iepr',
704
- nextText: 'Nāka',
705
- currentText: 'Šodien',
706
- monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
707
- 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
708
- monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
709
- 'Jūl','Aug','Sep','Okt','Nov','Dec'],
710
- dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
711
- dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
712
- dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
713
- weekHeader: 'Nav',
714
- dateFormat: 'dd-mm-yy',
715
- firstDay: 1,
716
- isRTL: false,
717
- showMonthAfterYear: false,
718
- yearSuffix: ''};
719
- $.datepicker.setDefaults($.datepicker.regional['lv']);
720
- });/* Malaysian initialisation for the jQuery UI date picker plugin. */
721
- /* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
722
- jQuery(function($){
723
- $.datepicker.regional['ms'] = {
724
- closeText: 'Tutup',
725
- prevText: '&#x3c;Sebelum',
726
- nextText: 'Selepas&#x3e;',
727
- currentText: 'hari ini',
728
- monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
729
- 'Julai','Ogos','September','Oktober','November','Disember'],
730
- monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
731
- 'Jul','Ogo','Sep','Okt','Nov','Dis'],
732
- dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
733
- dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
734
- dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
735
- weekHeader: 'Mg',
736
- dateFormat: 'dd/mm/yy',
737
- firstDay: 0,
738
- isRTL: false,
739
- showMonthAfterYear: false,
740
- yearSuffix: ''};
741
- $.datepicker.setDefaults($.datepicker.regional['ms']);
742
- });/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
743
- /* Written by Mathias Bynens <http://mathiasbynens.be/> */
744
- jQuery(function($){
745
- $.datepicker.regional.nl = {
746
- closeText: 'Sluiten',
747
- prevText: '←',
748
- nextText: '→',
749
- currentText: 'Vandaag',
750
- monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
751
- 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
752
- monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',
753
- 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
754
- dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
755
- dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
756
- dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
757
- weekHeader: 'Wk',
758
- dateFormat: 'dd/mm/yy',
759
- firstDay: 1,
760
- isRTL: false,
761
- showMonthAfterYear: false,
762
- yearSuffix: ''};
763
- $.datepicker.setDefaults($.datepicker.regional.nl);
764
- });/* Norwegian initialisation for the jQuery UI date picker plugin. */
765
- /* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
766
- jQuery(function($){
767
- $.datepicker.regional['no'] = {
768
- closeText: 'Lukk',
769
- prevText: '&laquo;Forrige',
770
- nextText: 'Neste&raquo;',
771
- currentText: 'I dag',
772
- monthNames: ['Januar','Februar','Mars','April','Mai','Juni',
773
- 'Juli','August','September','Oktober','November','Desember'],
774
- monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun',
775
- 'Jul','Aug','Sep','Okt','Nov','Des'],
776
- dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
777
- dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
778
- dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
779
- weekHeader: 'Uke',
780
- dateFormat: 'yy-mm-dd',
781
- firstDay: 0,
782
- isRTL: false,
783
- showMonthAfterYear: false,
784
- yearSuffix: ''};
785
- $.datepicker.setDefaults($.datepicker.regional['no']);
786
- });
787
- /* Polish initialisation for the jQuery UI date picker plugin. */
788
- /* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
789
- jQuery(function($){
790
- $.datepicker.regional['pl'] = {
791
- closeText: 'Zamknij',
792
- prevText: '&#x3c;Poprzedni',
793
- nextText: 'Następny&#x3e;',
794
- currentText: 'Dziś',
795
- monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
796
- 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
797
- monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
798
- 'Lip','Sie','Wrz','Pa','Lis','Gru'],
799
- dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
800
- dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
801
- dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
802
- weekHeader: 'Tydz',
803
- dateFormat: 'dd.mm.yy',
804
- firstDay: 1,
805
- isRTL: false,
806
- showMonthAfterYear: false,
807
- yearSuffix: ''};
808
- $.datepicker.setDefaults($.datepicker.regional['pl']);
809
- });
810
- /* Brazilian initialisation for the jQuery UI date picker plugin. */
811
- /* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
812
- jQuery(function($){
813
- $.datepicker.regional['pt-BR'] = {
814
- closeText: 'Fechar',
815
- prevText: '&#x3c;Anterior',
816
- nextText: 'Pr&oacute;ximo&#x3e;',
817
- currentText: 'Hoje',
818
- monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
819
- 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
820
- monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
821
- 'Jul','Ago','Set','Out','Nov','Dez'],
822
- dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
823
- dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
824
- dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
825
- weekHeader: 'Sm',
826
- dateFormat: 'dd/mm/yy',
827
- firstDay: 0,
828
- isRTL: false,
829
- showMonthAfterYear: false,
830
- yearSuffix: ''};
831
- $.datepicker.setDefaults($.datepicker.regional['pt-BR']);
832
- });/* Romanian initialisation for the jQuery UI date picker plugin.
833
- *
834
- * Written by Edmond L. (ll_edmond@walla.com)
835
- * and Ionut G. Stan (ionut.g.stan@gmail.com)
836
- */
837
- jQuery(function($){
838
- $.datepicker.regional['ro'] = {
839
- closeText: 'Închide',
840
- prevText: '&laquo; Luna precedentă',
841
- nextText: 'Luna următoare &raquo;',
842
- currentText: 'Azi',
843
- monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
844
- 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
845
- monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
846
- 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
847
- dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
848
- dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
849
- dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
850
- weekHeader: 'Săpt',
851
- dateFormat: 'dd.mm.yy',
852
- firstDay: 1,
853
- isRTL: false,
854
- showMonthAfterYear: false,
855
- yearSuffix: ''};
856
- $.datepicker.setDefaults($.datepicker.regional['ro']);
857
- });
858
- /* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
859
- /* Written by Andrew Stromnov (stromnov@gmail.com). */
860
- jQuery(function($){
861
- $.datepicker.regional['ru'] = {
862
- closeText: 'Закрыть',
863
- prevText: '&#x3c;Пред',
864
- nextText: 'След&#x3e;',
865
- currentText: 'Сегодня',
866
- monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
867
- 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
868
- monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
869
- 'Июл','Авг','Сен','Окт','Ноя','Дек'],
870
- dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
871
- dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
872
- dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
873
- weekHeader: 'Не',
874
- dateFormat: 'dd.mm.yy',
875
- firstDay: 1,
876
- isRTL: false,
877
- showMonthAfterYear: false,
878
- yearSuffix: ''};
879
- $.datepicker.setDefaults($.datepicker.regional['ru']);
880
- });/* Slovak initialisation for the jQuery UI date picker plugin. */
881
- /* Written by Vojtech Rinik (vojto@hmm.sk). */
882
- jQuery(function($){
883
- $.datepicker.regional['sk'] = {
884
- closeText: 'Zavrieť',
885
- prevText: '&#x3c;Predchádzajúci',
886
- nextText: 'Nasledujúci&#x3e;',
887
- currentText: 'Dnes',
888
- monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
889
- 'Júl','August','September','Október','November','December'],
890
- monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
891
- 'Júl','Aug','Sep','Okt','Nov','Dec'],
892
- dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
893
- dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
894
- dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
895
- weekHeader: 'Ty',
896
- dateFormat: 'dd.mm.yy',
897
- firstDay: 1,
898
- isRTL: false,
899
- showMonthAfterYear: false,
900
- yearSuffix: ''};
901
- $.datepicker.setDefaults($.datepicker.regional['sk']);
902
- });
903
- /* Slovenian initialisation for the jQuery UI date picker plugin. */
904
- /* Written by Jaka Jancar (jaka@kubje.org). */
905
- /* c = &#x10D;, s = &#x161; z = &#x17E; C = &#x10C; S = &#x160; Z = &#x17D; */
906
- jQuery(function($){
907
- $.datepicker.regional['sl'] = {
908
- closeText: 'Zapri',
909
- prevText: '&lt;Prej&#x161;nji',
910
- nextText: 'Naslednji&gt;',
911
- currentText: 'Trenutni',
912
- monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
913
- 'Julij','Avgust','September','Oktober','November','December'],
914
- monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
915
- 'Jul','Avg','Sep','Okt','Nov','Dec'],
916
- dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','&#x10C;etrtek','Petek','Sobota'],
917
- dayNamesShort: ['Ned','Pon','Tor','Sre','&#x10C;et','Pet','Sob'],
918
- dayNamesMin: ['Ne','Po','To','Sr','&#x10C;e','Pe','So'],
919
- weekHeader: 'Teden',
920
- dateFormat: 'dd.mm.yy',
921
- firstDay: 1,
922
- isRTL: false,
923
- showMonthAfterYear: false,
924
- yearSuffix: ''};
925
- $.datepicker.setDefaults($.datepicker.regional['sl']);
926
- });
927
- /* Albanian initialisation for the jQuery UI date picker plugin. */
928
- /* Written by Flakron Bytyqi (flakron@gmail.com). */
929
- jQuery(function($){
930
- $.datepicker.regional['sq'] = {
931
- closeText: 'mbylle',
932
- prevText: '&#x3c;mbrapa',
933
- nextText: 'Përpara&#x3e;',
934
- currentText: 'sot',
935
- monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
936
- 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
937
- monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
938
- 'Kor','Gus','Sht','Tet','Nën','Dhj'],
939
- dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
940
- dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
941
- dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
942
- weekHeader: 'Ja',
943
- dateFormat: 'dd.mm.yy',
944
- firstDay: 1,
945
- isRTL: false,
946
- showMonthAfterYear: false,
947
- yearSuffix: ''};
948
- $.datepicker.setDefaults($.datepicker.regional['sq']);
949
- });
950
- /* Serbian i18n for the jQuery UI date picker plugin. */
951
- /* Written by Dejan Dimić. */
952
- jQuery(function($){
953
- $.datepicker.regional['sr-SR'] = {
954
- closeText: 'Zatvori',
955
- prevText: '&#x3c;',
956
- nextText: '&#x3e;',
957
- currentText: 'Danas',
958
- monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
959
- 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
960
- monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
961
- 'Jul','Avg','Sep','Okt','Nov','Dec'],
962
- dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
963
- dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
964
- dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
965
- weekHeader: 'Sed',
966
- dateFormat: 'dd/mm/yy',
967
- firstDay: 1,
968
- isRTL: false,
969
- showMonthAfterYear: false,
970
- yearSuffix: ''};
971
- $.datepicker.setDefaults($.datepicker.regional['sr-SR']);
972
- });
973
- /* Serbian i18n for the jQuery UI date picker plugin. */
974
- /* Written by Dejan Dimić. */
975
- jQuery(function($){
976
- $.datepicker.regional['sr'] = {
977
- closeText: 'Затвори',
978
- prevText: '&#x3c;',
979
- nextText: '&#x3e;',
980
- currentText: 'Данас',
981
- monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
982
- 'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
983
- monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
984
- 'Јул','Авг','Сеп','Окт','Нов','Дец'],
985
- dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
986
- dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
987
- dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
988
- weekHeader: 'Сед',
989
- dateFormat: 'dd/mm/yy',
990
- firstDay: 1,
991
- isRTL: false,
992
- showMonthAfterYear: false,
993
- yearSuffix: ''};
994
- $.datepicker.setDefaults($.datepicker.regional['sr']);
995
- });
996
- /* Swedish initialisation for the jQuery UI date picker plugin. */
997
- /* Written by Anders Ekdahl ( anders@nomadiz.se). */
998
- jQuery(function($){
999
- $.datepicker.regional['sv'] = {
1000
- closeText: 'Stäng',
1001
- prevText: '&laquo;Förra',
1002
- nextText: 'Nästa&raquo;',
1003
- currentText: 'Idag',
1004
- monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
1005
- 'Juli','Augusti','September','Oktober','November','December'],
1006
- monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
1007
- 'Jul','Aug','Sep','Okt','Nov','Dec'],
1008
- dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
1009
- dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
1010
- dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
1011
- weekHeader: 'Ve',
1012
- dateFormat: 'yy-mm-dd',
1013
- firstDay: 1,
1014
- isRTL: false,
1015
- showMonthAfterYear: false,
1016
- yearSuffix: ''};
1017
- $.datepicker.setDefaults($.datepicker.regional['sv']);
1018
- });
1019
- /* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
1020
- /* Written by S A Sureshkumar (saskumar@live.com). */
1021
- jQuery(function($){
1022
- $.datepicker.regional['ta'] = {
1023
- closeText: 'மூடு',
1024
- prevText: 'முன்னையது',
1025
- nextText: 'அடுத்தது',
1026
- currentText: 'இன்று',
1027
- monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி',
1028
- 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'],
1029
- monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி',
1030
- 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'],
1031
- dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'],
1032
- dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'],
1033
- dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'],
1034
- weekHeader: 'Не',
1035
- dateFormat: 'dd/mm/yy',
1036
- firstDay: 1,
1037
- isRTL: false,
1038
- showMonthAfterYear: false,
1039
- yearSuffix: ''};
1040
- $.datepicker.setDefaults($.datepicker.regional['ta']);
1041
- });
1042
- /* Thai initialisation for the jQuery UI date picker plugin. */
1043
- /* Written by pipo (pipo@sixhead.com). */
1044
- jQuery(function($){
1045
- $.datepicker.regional['th'] = {
1046
- closeText: 'ปิด',
1047
- prevText: '&laquo;&nbsp;ย้อน',
1048
- nextText: 'ถัดไป&nbsp;&raquo;',
1049
- currentText: 'วันนี้',
1050
- monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
1051
- 'กรกฏาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
1052
- monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
1053
- 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
1054
- dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
1055
- dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
1056
- dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
1057
- weekHeader: 'Wk',
1058
- dateFormat: 'dd/mm/yy',
1059
- firstDay: 0,
1060
- isRTL: false,
1061
- showMonthAfterYear: false,
1062
- yearSuffix: ''};
1063
- $.datepicker.setDefaults($.datepicker.regional['th']);
1064
- });/* Turkish initialisation for the jQuery UI date picker plugin. */
1065
- /* Written by Izzet Emre Erkan (kara@karalamalar.net). */
1066
- jQuery(function($){
1067
- $.datepicker.regional['tr'] = {
1068
- closeText: 'kapat',
1069
- prevText: '&#x3c;geri',
1070
- nextText: 'ileri&#x3e',
1071
- currentText: 'bugün',
1072
- monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
1073
- 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
1074
- monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
1075
- 'Tem','Ağu','Eyl','Eki','Kas','Ara'],
1076
- dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
1077
- dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
1078
- dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
1079
- weekHeader: 'Hf',
1080
- dateFormat: 'dd.mm.yy',
1081
- firstDay: 1,
1082
- isRTL: false,
1083
- showMonthAfterYear: false,
1084
- yearSuffix: ''};
1085
- $.datepicker.setDefaults($.datepicker.regional['tr']);
1086
- });/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
1087
- /* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
1088
- jQuery(function($){
1089
- $.datepicker.regional['uk'] = {
1090
- closeText: 'Закрити',
1091
- prevText: '&#x3c;',
1092
- nextText: '&#x3e;',
1093
- currentText: 'Сьогодні',
1094
- monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
1095
- 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
1096
- monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
1097
- 'Лип','Сер','Вер','Жов','Лис','Гру'],
1098
- dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
1099
- dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
1100
- dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
1101
- weekHeader: 'Не',
1102
- dateFormat: 'dd/mm/yy',
1103
- firstDay: 1,
1104
- isRTL: false,
1105
- showMonthAfterYear: false,
1106
- yearSuffix: ''};
1107
- $.datepicker.setDefaults($.datepicker.regional['uk']);
1108
- });/* Vietnamese initialisation for the jQuery UI date picker plugin. */
1109
- /* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
1110
- jQuery(function($){
1111
- $.datepicker.regional['vi'] = {
1112
- closeText: 'Đóng',
1113
- prevText: '&#x3c;Trước',
1114
- nextText: 'Tiếp&#x3e;',
1115
- currentText: 'Hôm nay',
1116
- monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
1117
- 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
1118
- monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
1119
- 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
1120
- dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
1121
- dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
1122
- dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
1123
- weekHeader: 'Tu',
1124
- dateFormat: 'dd/mm/yy',
1125
- firstDay: 0,
1126
- isRTL: false,
1127
- showMonthAfterYear: false,
1128
- yearSuffix: ''};
1129
- $.datepicker.setDefaults($.datepicker.regional['vi']);
1130
- });
1131
- /* Chinese initialisation for the jQuery UI date picker plugin. */
1132
- /* Written by Cloudream (cloudream@gmail.com). */
1133
- jQuery(function($){
1134
- $.datepicker.regional['zh-CN'] = {
1135
- closeText: '关闭',
1136
- prevText: '&#x3c;上月',
1137
- nextText: '下月&#x3e;',
1138
- currentText: '今天',
1139
- monthNames: ['一月','二月','三月','四月','五月','六月',
1140
- '七月','八月','九月','十月','十一月','十二月'],
1141
- monthNamesShort: ['一','二','三','四','五','六',
1142
- '七','八','九','十','十一','十二'],
1143
- dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
1144
- dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
1145
- dayNamesMin: ['日','一','二','三','四','五','六'],
1146
- weekHeader: '周',
1147
- dateFormat: 'yy-mm-dd',
1148
- firstDay: 1,
1149
- isRTL: false,
1150
- showMonthAfterYear: true,
1151
- yearSuffix: '年'};
1152
- $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
1153
- });
1154
- /* Chinese initialisation for the jQuery UI date picker plugin. */
1155
- /* Written by SCCY (samuelcychan@gmail.com). */
1156
- jQuery(function($){
1157
- $.datepicker.regional['zh-HK'] = {
1158
- closeText: '關閉',
1159
- prevText: '&#x3c;上月',
1160
- nextText: '下月&#x3e;',
1161
- currentText: '今天',
1162
- monthNames: ['一月','二月','三月','四月','五月','六月',
1163
- '七月','八月','九月','十月','十一月','十二月'],
1164
- monthNamesShort: ['一','二','三','四','五','六',
1165
- '七','八','九','十','十一','十二'],
1166
- dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
1167
- dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
1168
- dayNamesMin: ['日','一','二','三','四','五','六'],
1169
- weekHeader: '周',
1170
- dateFormat: 'dd-mm-yy',
1171
- firstDay: 0,
1172
- isRTL: false,
1173
- showMonthAfterYear: true,
1174
- yearSuffix: '年'};
1175
- $.datepicker.setDefaults($.datepicker.regional['zh-HK']);
1176
- });
1177
- /* Chinese initialisation for the jQuery UI date picker plugin. */
1178
- /* Written by Ressol (ressol@gmail.com). */
1179
- jQuery(function($){
1180
- $.datepicker.regional['zh-TW'] = {
1181
- closeText: '關閉',
1182
- prevText: '&#x3c;上月',
1183
- nextText: '下月&#x3e;',
1184
- currentText: '今天',
1185
- monthNames: ['一月','二月','三月','四月','五月','六月',
1186
- '七月','八月','九月','十月','十一月','十二月'],
1187
- monthNamesShort: ['一','二','三','四','五','六',
1188
- '七','八','九','十','十一','十二'],
1189
- dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
1190
- dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
1191
- dayNamesMin: ['日','一','二','三','四','五','六'],
1192
- weekHeader: '周',
1193
- dateFormat: 'yy/mm/dd',
1194
- firstDay: 1,
1195
- isRTL: false,
1196
- showMonthAfterYear: true,
1197
- yearSuffix: '年'};
1198
- $.datepicker.setDefaults($.datepicker.regional['zh-TW']);
1199
- });
<