right-rails 1.0.3 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/CHANGELOG +8 -2
  2. data/Rakefile +28 -28
  3. data/lib/right_rails/java_script_generator.rb +59 -51
  4. data/public/images/{colorpicker.png → rightjs-ui/colorpicker.png} +0 -0
  5. data/public/images/{resizable.png → rightjs-ui/resizable.png} +0 -0
  6. data/public/javascripts/right-olds-src.js +47 -46
  7. data/public/javascripts/right-safe-src.js +103 -102
  8. data/public/javascripts/right-safe.js +1 -1
  9. data/public/javascripts/right-src.js +611 -541
  10. data/public/javascripts/right.js +86 -85
  11. data/public/javascripts/right/autocompleter-src.js +81 -77
  12. data/public/javascripts/right/autocompleter.js +1 -1
  13. data/public/javascripts/right/calendar-src.js +209 -197
  14. data/public/javascripts/right/calendar.js +6 -6
  15. data/public/javascripts/right/colorpicker-src.js +127 -117
  16. data/public/javascripts/right/colorpicker.js +6 -6
  17. data/public/javascripts/right/dnd-src.js +63 -63
  18. data/public/javascripts/right/dnd.js +2 -2
  19. data/public/javascripts/right/in-edit-src.js +53 -48
  20. data/public/javascripts/right/in-edit.js +2 -2
  21. data/public/javascripts/right/lightbox-src.js +107 -99
  22. data/public/javascripts/right/lightbox.js +2 -2
  23. data/public/javascripts/right/rater-src.js +48 -46
  24. data/public/javascripts/right/rater.js +3 -3
  25. data/public/javascripts/right/resizable-src.js +53 -61
  26. data/public/javascripts/right/resizable.js +4 -4
  27. data/public/javascripts/right/selectable-src.js +97 -95
  28. data/public/javascripts/right/selectable.js +2 -2
  29. data/public/javascripts/right/slider-src.js +47 -45
  30. data/public/javascripts/right/slider.js +8 -8
  31. data/public/javascripts/right/sortable-src.js +54 -52
  32. data/public/javascripts/right/tabs-src.js +181 -171
  33. data/public/javascripts/right/tooltip-src.js +39 -37
  34. data/public/javascripts/right/uploader-src.js +21 -19
  35. data/spec/lib/right_rails/java_script_generator_spec.rb +61 -56
  36. metadata +9 -7
@@ -10,7 +10,7 @@ u=c.isArray,p=new c.Wrapper(c.Element,{initialize:function(a){this.$super("div",
10
10
  e;var h=[{"class":"rui-"+e}];this instanceof c.Input||this instanceof c.Form||h.unshift(a);this.$super.apply(this,h);if(c.isString(f))f=c.$(f);if(f instanceof c.Element){this._=f._;if("$listeners"in f)f.$listeners=f.$listeners;f={}}this.setOptions(f,this);return this},setOptions:function(e,f){f=f||this;c.Options.setOptions.call(this,c.Object.merge(e,eval("("+(f.get("data-"+this.key)||"{}")+")")));return this}});d=new c.Wrapper(d,b);c.Observer.createShortcuts(d.prototype,d.EVENTS||[]);return d})("UL",
11
11
  {include:{show:function(a,b){this.constructor.current=this;return l.call(this,this,"show",a,b)},hide:function(a,b){this.constructor.current=null;return l.call(this,this,"hide",a,b)},showAt:function(a,b,d){this.hide(null).shownAt=a=c.$(a);m.call(this,a,b,d);return this.show()},toggleAt:function(a,b,d){return this.hidden()?this.showAt(a,b,d):this.hide()}},extend:{version:"2.0.0",EVENTS:s("show hide update load select done"),Options:{url:j.location.href,param:"search",method:"get",minLength:1,threshold:200,
12
12
  cache:true,local:null,fxName:"slide",fxDuration:"short",spinner:"native",cssRule:"input[data-autocompleter]"}},initialize:function(a,b){this.input=n(a);this.$super("autocompleter",b).addClass("rui-dd-menu").onMousedown(this.clicked);this.input.autocompleter=this},destroy:function(){delete this.input.autocompleter;return this},prev:function(){return this.pick("prev")},next:function(){return this.pick("next")},done:function(a){if(a=a||this.first("li.current")){this.input.setValue(g(a.html()).stripTags());
13
- this.fire("done")}return this.hide()},setOptions:function(a){this.$super(a,this.input);a=this.options;g(a.url).includes("%{search}")||(a.url+=(g(a.url).includes("?")?"&":"?")+a.param+"=%{search}")},pick:function(a){var b=this.children(),d=b.first("hasClass","current"),e=b.indexOf(d);if(a=="prev")d=e<1?b.last():b[e<0?0:e-1];else if(a=="next")d=e<0||e==b.length-1?b.first():b[e+1];return this.fire("select",d.radioClass("current"))},clicked:function(a){this.done(a.stop().find("li"))},keypressed:function(){if(this.input.value().length>=
13
+ this.fire("done")}return this.hide()},setOptions:function(a){this.$super(a,this.input);a=this.options;g(a.url).includes("%{search}")||(a.url+=(g(a.url).includes("?")?"&":"?")+a.param+"=%{search}")},pick:function(a){var b=this.children(),d=b.first("hasClass","current"),e=b.indexOf(d);if(a=="prev")d=e<1?b.last():b[e<0?0:e-1];else if(a=="next")d=e<0||e==b.length-1?b.first():b[e+1];return this.fire("select",{item:d.radioClass("current")})},clicked:function(a){this.done(a.stop().find("li"))},keypressed:function(){if(this.input.value().length>=
14
14
  this.options.minLength){this.timeout&&this.timeout.cancel();this.timeout=g(this.trigger).bind(this).delay(this.options.threshold)}else return this.hide()},trigger:function(){this.timeout=null;this.cache=this.cache||{};var a=this.input.value(),b=this.options;if(a.length<b.minLength)return this.hide();if(this.cache[a])this.suggest(this.cache[a],a);else if(u(b.local))this.suggest(this.findLocal(a),a);else this.request=t.load(b.url.replace("%{search}",encodeURIComponent(a)),{method:b.method,spinner:this.getSpinner(),
15
15
  onComplete:g(function(d){this.fire("load").suggest(d.text,a)}).bind(this)})},suggest:function(a,b){if(this.options.cache)this.cache[b]=a;if(a.blank())this.hide();else{this.update(a.replace(/<ul[^>]*>|<\/ul>/im,""));this.fire("update").showAt(this.input,"bottom","resize")}return this},findLocal:function(a){var b=new o("("+o.escape(a)+")","ig");return g(this.options.local).map(function(d){if(d.match(b))return"<li>"+d.replace(b,"<strong>$1</strong>")+"</li>"}).compact().join("")},getSpinner:function(){var a=
16
16
  this.options,b=a.spinner;if(b=="native"){b=a.spinner=(new p(3)).insertTo(this);b.addClass("rui-autocompleter-spinner")}b instanceof p&&m.call(b,this.input,"right","resize");return b}});n(j).on({focus:function(a){if((a=a.target)&&a instanceof c.Element&&(a.autocompleter||a.match(k.Options.cssRule)))a.autocompleter||new k(a)},blur:function(a){(a=a.target?a.target.autocompleter:null)&&a.visible()&&a.hide()},keydown:function(a){var b=a.target?a.target.autocompleter:null;if(b&&b.visible()){var d={27:"hide",
@@ -49,13 +49,13 @@ var R = RightJS,
49
49
  * @param String tag-name or Object methods
50
50
  * @param Object methods
51
51
  * @return Widget wrapper
52
- */
52
+ */
53
53
  function Widget(tag_name, methods) {
54
54
  if (!methods) {
55
55
  methods = tag_name;
56
56
  tag_name = 'DIV';
57
57
  }
58
-
58
+
59
59
  /**
60
60
  * An Abstract Widget Unit
61
61
  *
@@ -72,17 +72,17 @@ function Widget(tag_name, methods) {
72
72
  initialize: function(key, options) {
73
73
  this.key = key;
74
74
  var args = [{'class': 'rui-' + key}];
75
-
75
+
76
76
  // those two have different constructors
77
77
  if (!(this instanceof RightJS.Input || this instanceof RightJS.Form)) {
78
78
  args.unshift(tag_name);
79
79
  }
80
80
  this.$super.apply(this, args);
81
-
81
+
82
82
  if (RightJS.isString(options)) {
83
83
  options = RightJS.$(options);
84
84
  }
85
-
85
+
86
86
  // if the options is another element then
87
87
  // try to dynamically rewrap it with our widget
88
88
  if (options instanceof RightJS.Element) {
@@ -115,16 +115,16 @@ function Widget(tag_name, methods) {
115
115
  return this;
116
116
  }
117
117
  });
118
-
118
+
119
119
  /**
120
120
  * Creating the actual widget class
121
121
  *
122
122
  */
123
123
  var Klass = new RightJS.Wrapper(AbstractWidget, methods);
124
-
124
+
125
125
  // creating the widget related shortcuts
126
126
  RightJS.Observer.createShortcuts(Klass.prototype, Klass.EVENTS || []);
127
-
127
+
128
128
  return Klass;
129
129
  }
130
130
 
@@ -150,7 +150,7 @@ var Button = new RightJS.Wrapper(RightJS.Element, {
150
150
  this._.innerHTML = caption;
151
151
  this.addClass('rui-button');
152
152
  },
153
-
153
+
154
154
  /**
155
155
  * Disasbles the button
156
156
  *
@@ -159,7 +159,7 @@ var Button = new RightJS.Wrapper(RightJS.Element, {
159
159
  disable: function() {
160
160
  return this.addClass('rui-button-disabled');
161
161
  },
162
-
162
+
163
163
  /**
164
164
  * Enables the button
165
165
  *
@@ -168,7 +168,7 @@ var Button = new RightJS.Wrapper(RightJS.Element, {
168
168
  enable: function() {
169
169
  return this.removeClass('rui-button-disabled');
170
170
  },
171
-
171
+
172
172
  /**
173
173
  * Checks if the button is disabled
174
174
  *
@@ -177,7 +177,7 @@ var Button = new RightJS.Wrapper(RightJS.Element, {
177
177
  disabled: function() {
178
178
  return this.hasClass('rui-button-disabled');
179
179
  },
180
-
180
+
181
181
  /**
182
182
  * Checks if the button is enabled
183
183
  *
@@ -186,7 +186,7 @@ var Button = new RightJS.Wrapper(RightJS.Element, {
186
186
  enabled: function() {
187
187
  return !this.disabled();
188
188
  },
189
-
189
+
190
190
  /**
191
191
  * Overloading the method, so it fired the events
192
192
  * only when the button is active
@@ -201,6 +201,7 @@ var Button = new RightJS.Wrapper(RightJS.Element, {
201
201
  }
202
202
  });
203
203
 
204
+
204
205
  /**
205
206
  * A shared module that toggles a widget visibility status
206
207
  * in a uniformed way according to the options settings
@@ -224,7 +225,7 @@ function toggler(element, event, fx_name, fx_options) {
224
225
  if (RightJS.Fx) {
225
226
  if (fx_name === undefined) {
226
227
  fx_name = this.options.fxName;
227
-
228
+
228
229
  if (fx_options === undefined) {
229
230
  fx_options = {
230
231
  duration: this.options.fxDuration,
@@ -239,12 +240,12 @@ function toggler(element, event, fx_name, fx_options) {
239
240
  }
240
241
  }
241
242
  }
242
-
243
+
243
244
  RightJS.Element.prototype[event].call(element, fx_name, fx_options);
244
-
245
+
245
246
  // manually trigger the event if no fx were specified
246
247
  if (!RightJS.Fx || !fx_name) { this.fire(event); }
247
-
248
+
248
249
  return this;
249
250
  }
250
251
 
@@ -261,34 +262,34 @@ function toggler(element, event, fx_name, fx_options) {
261
262
  * @return void
262
263
  */
263
264
  function re_position(element, where, resize) {
264
- var anchor = this.reAnchor || (this.reAnchor =
265
+ var anchor = this.reAnchor || (this.reAnchor =
265
266
  new RightJS.Element('div', {'class': 'rui-re-anchor'}))
266
267
  .insert(this),
267
-
268
+
268
269
  pos = anchor.insertTo(element, 'after').position(),
269
270
  dims = element.dimensions(), target = this,
270
-
271
+
271
272
  border_top = parseInt(element.getStyle('borderTopWidth')),
272
273
  border_left = parseInt(element.getStyle('borderLeftWidth')),
273
274
  border_right = parseInt(element.getStyle('borderRightWidth')),
274
275
  border_bottom = parseInt(element.getStyle('borderBottomWidth')),
275
-
276
+
276
277
  top = dims.top - pos.y + border_top,
277
278
  left = dims.left - pos.x + border_left,
278
279
  width = dims.width - border_left - border_right,
279
280
  height = dims.height - border_top - border_bottom;
280
-
281
+
281
282
  // making the element to appear so we could read it's sizes
282
283
  target.setStyle('visibility:hidden').show(null);
283
-
284
+
284
285
  if (where === 'right') {
285
286
  left += width - target.size().x;
286
287
  } else { // bottom
287
288
  top += height;
288
289
  }
289
-
290
+
290
291
  target.moveTo(left, top);
291
-
292
+
292
293
  if (resize) {
293
294
  if (['left', 'right'].include(where)) {
294
295
  target.setHeight(height);
@@ -296,7 +297,7 @@ function re_position(element, where, resize) {
296
297
  target.setWidth(width);
297
298
  }
298
299
  }
299
-
300
+
300
301
  // rolling the invisibility back
301
302
  target.setStyle('visibility:visible').hide(null);
302
303
  }
@@ -318,7 +319,7 @@ var Toggler = {
318
319
  this.constructor.current = this;
319
320
  return toggler.call(this, this, 'show', fx_name, fx_options);
320
321
  },
321
-
322
+
322
323
  /**
323
324
  * Hides the element
324
325
  *
@@ -330,7 +331,7 @@ var Toggler = {
330
331
  this.constructor.current = null;
331
332
  return toggler.call(this, this, 'hide', fx_name, fx_options);
332
333
  },
333
-
334
+
334
335
  /**
335
336
  * Toggles the widget at the given element
336
337
  *
@@ -341,13 +342,13 @@ var Toggler = {
341
342
  */
342
343
  showAt: function(element, where, resize) {
343
344
  this.hide(null).shownAt = element = RightJS.$(element);
344
-
345
+
345
346
  // moves this element at the given one
346
347
  re_position.call(this, element, where, resize);
347
-
348
+
348
349
  return this.show();
349
350
  },
350
-
351
+
351
352
  /**
352
353
  * Toggles the widget at the given element
353
354
  *
@@ -361,6 +362,7 @@ var Toggler = {
361
362
  }
362
363
  };
363
364
 
365
+
364
366
  /**
365
367
  * A shared module that provides for the widgets an ability
366
368
  * to be assigned to an input element and work in pair with it
@@ -385,35 +387,36 @@ var Assignable = {
385
387
  assignTo: function(input, trigger) {
386
388
  input = RightJS.$(input);
387
389
  trigger = RightJS.$(trigger);
388
-
390
+
389
391
  if (trigger) {
390
392
  trigger[this.key] = this;
391
393
  trigger.assignedInput = input;
392
394
  } else {
393
395
  input[this.key] = this;
394
396
  }
395
-
397
+
396
398
  var on_change = RightJS(function() {
397
399
  if (this.visible() && (!this.showAt || this.shownAt === input)) {
398
400
  this.setValue(input.value());
399
401
  }
400
402
  }).bind(this);
401
-
403
+
402
404
  input.on({
403
405
  keyup: on_change,
404
406
  change: on_change
405
407
  });
406
-
408
+
407
409
  this.onChange(function() {
408
410
  if (!this.showAt || this.shownAt === input) {
409
411
  input.setValue(this.getValue());
410
412
  }
411
413
  });
412
-
414
+
413
415
  return this;
414
416
  }
415
417
  };
416
418
 
419
+
417
420
  /**
418
421
  * Converts a number into a string with leading zeros
419
422
  *
@@ -424,6 +427,7 @@ function zerofy(number) {
424
427
  return (number < 10 ? '0' : '') + number;
425
428
  }
426
429
 
430
+
427
431
  /**
428
432
  * The calendar widget for RightJS
429
433
  *
@@ -431,46 +435,46 @@ function zerofy(number) {
431
435
  */
432
436
  var Calendar = new Widget({
433
437
  include: [Toggler, Assignable],
434
-
438
+
435
439
  extend: {
436
440
  version: '2.0.0',
437
-
441
+
438
442
  EVENTS: $w('show hide change done'),
439
-
443
+
440
444
  Options: {
441
445
  format: 'ISO', // a key out of the predefined formats or a format string
442
-
446
+
443
447
  showTime: null, // null for automatic, or true|false to enforce
444
448
  showButtons: false, // show the bottom buttons
445
-
449
+
446
450
  minDate: false, // the minimal date available
447
451
  maxDate: false, // the maximal date available
448
-
452
+
449
453
  fxName: 'fade', // set to null if you don't wanna any fx
450
454
  fxDuration: 'short', // the fx-duration
451
-
455
+
452
456
  firstDay: 1, // 1 for Monday, 0 for Sunday
453
457
  numberOfMonths: 1, // a number or [x, y] greed definition
454
458
  timePeriod: 1, // the timepicker minimal periods (in minutes, might be bigger than 60)
455
-
459
+
456
460
  twentyFourHour: null, // null for automatic, or true|false to enforce
457
461
  listYears: false, // show/hide the years listing buttons
458
-
462
+
459
463
  hideOnPick: false, // hides the popup when the user changes a day
460
-
464
+
461
465
  update: null, // a reference to an input element to assign to
462
466
  trigger: null, // a reference to a trigger element that would be paired too
463
-
467
+
464
468
  cssRule: '*[data-calendar]' // css rule for calendar related elements
465
469
  },
466
-
470
+
467
471
  Formats: {
468
472
  ISO: '%Y-%m-%d',
469
473
  POSIX: '%Y/%m/%d',
470
474
  EUR: '%d-%m-%Y',
471
475
  US: '%m/%d/%Y'
472
476
  },
473
-
477
+
474
478
  i18n: {
475
479
  Done: 'Done',
476
480
  Now: 'Now',
@@ -478,16 +482,16 @@ var Calendar = new Widget({
478
482
  PrevMonth: 'Previous Month',
479
483
  NextYear: 'Next Year',
480
484
  PrevYear: 'Previous Year',
481
-
485
+
482
486
  dayNames: $w('Sunday Monday Tuesday Wednesday Thursday Friday Saturday'),
483
487
  dayNamesShort: $w('Sun Mon Tue Wed Thu Fri Sat'),
484
488
  dayNamesMin: $w('Su Mo Tu We Th Fr Sa'),
485
489
  monthNames: $w('January February March April May June July August September October November December'),
486
490
  monthNamesShort: $w('Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec')
487
491
  },
488
-
492
+
489
493
  current: null,
490
-
494
+
491
495
  // hides all the popup calendars
492
496
  hideAll: function(that_one) {
493
497
  $$('div.rui-calendar').each(function(element) {
@@ -497,7 +501,7 @@ var Calendar = new Widget({
497
501
  });
498
502
  }
499
503
  },
500
-
504
+
501
505
  /**
502
506
  * Basic constructor
503
507
  *
@@ -506,25 +510,25 @@ var Calendar = new Widget({
506
510
  initialize: function(options) {
507
511
  this.$super('calendar', options);
508
512
  this.addClass('rui-panel');
509
-
513
+
510
514
  options = this.options;
511
-
515
+
512
516
  this.insert([
513
517
  this.swaps = new Swaps(options),
514
518
  this.greed = new Greed(options)
515
519
  ]);
516
-
520
+
517
521
  if (options.showTime) {
518
522
  this.insert(this.timepicker = new Timepicker(options));
519
523
  }
520
-
524
+
521
525
  if (options.showButtons) {
522
526
  this.insert(this.buttons = new Buttons(options));
523
527
  }
524
-
528
+
525
529
  this.setDate(new Date()).initEvents();
526
530
  },
527
-
531
+
528
532
  /**
529
533
  * Sets the date on the calendar
530
534
  *
@@ -563,13 +567,13 @@ var Calendar = new Widget({
563
567
  }
564
568
 
565
569
  if (date != this.date) {
566
- this.fire('change', this.date = date);
570
+ this.fire('change', {date: this.date = date});
567
571
  }
568
572
  }
569
-
573
+
570
574
  return this;
571
575
  },
572
-
576
+
573
577
  /**
574
578
  * Returns the current date on the calendar
575
579
  *
@@ -578,7 +582,7 @@ var Calendar = new Widget({
578
582
  getDate: function() {
579
583
  return this.date;
580
584
  },
581
-
585
+
582
586
  /**
583
587
  * Sets the value as a string
584
588
  *
@@ -588,7 +592,7 @@ var Calendar = new Widget({
588
592
  setValue: function(value) {
589
593
  return this.setDate(value);
590
594
  },
591
-
595
+
592
596
  /**
593
597
  * Returns the value as a string
594
598
  *
@@ -598,7 +602,7 @@ var Calendar = new Widget({
598
602
  getValue: function(format) {
599
603
  return this.format(format);
600
604
  },
601
-
605
+
602
606
  /**
603
607
  * Inserts the calendar into the element making it inlined
604
608
  *
@@ -610,7 +614,7 @@ var Calendar = new Widget({
610
614
  this.addClass('rui-calendar-inline');
611
615
  return this.$super(element, position);
612
616
  },
613
-
617
+
614
618
  /**
615
619
  * Marks it done
616
620
  *
@@ -620,10 +624,10 @@ var Calendar = new Widget({
620
624
  if (!this.inlined()) {
621
625
  this.hide();
622
626
  }
623
-
624
- this.fire('done', this.date);
627
+
628
+ this.fire('done', {date: this.date});
625
629
  },
626
-
630
+
627
631
  /**
628
632
  * Checks if the calendar is inlined
629
633
  *
@@ -632,9 +636,9 @@ var Calendar = new Widget({
632
636
  inlined: function() {
633
637
  return this.hasClass('rui-calendar-inline');
634
638
  },
635
-
639
+
636
640
  // protected
637
-
641
+
638
642
  /**
639
643
  * additional options processing
640
644
  *
@@ -644,28 +648,28 @@ var Calendar = new Widget({
644
648
  setOptions: function(user_options) {
645
649
  user_options = user_options || {};
646
650
  this.$super(user_options, $(user_options.trigger || user_options.update));
647
-
651
+
648
652
  var klass = this.constructor, options = this.options;
649
-
653
+
650
654
  // merging the i18n tables
651
655
  options.i18n = {};
652
-
656
+
653
657
  for (var key in klass.i18n) {
654
658
  options.i18n[key] = isArray(klass.i18n[key]) ? klass.i18n[key].clone() : klass.i18n[key];
655
659
  }
656
660
  $ext(options.i18n, user_options.i18n);
657
-
661
+
658
662
  // defining the current days sequence
659
663
  options.dayNames = options.i18n.dayNamesMin;
660
664
  if (options.firstDay) {
661
665
  options.dayNames.push(options.dayNames.shift());
662
666
  }
663
-
667
+
664
668
  // the monthes table cleaning up
665
669
  if (!isArray(options.numberOfMonths)) {
666
670
  options.numberOfMonths = [options.numberOfMonths, 1];
667
671
  }
668
-
672
+
669
673
  // min/max dates preprocessing
670
674
  if (options.minDate) {
671
675
  options.minDate = this.parse(options.minDate);
@@ -674,32 +678,32 @@ var Calendar = new Widget({
674
678
  options.maxDate = this.parse(options.maxDate);
675
679
  options.maxDate.setDate(options.maxDate.getDate() + 1);
676
680
  }
677
-
681
+
678
682
  // format catching up
679
683
  options.format = R(klass.Formats[options.format] || options.format).trim();
680
-
684
+
681
685
  // setting up the showTime option
682
686
  if (options.showTime === null) {
683
687
  options.showTime = options.format.search(/%[HkIl]/) > -1;
684
688
  }
685
-
689
+
686
690
  // setting up the 24-hours format
687
691
  if (options.twentyFourHour === null) {
688
692
  options.twentyFourHour = options.format.search(/%[Il]/) < 0;
689
693
  }
690
-
694
+
691
695
  // enforcing the 24 hours format if the time threshold is some weird number
692
696
  if (options.timePeriod > 60 && 12 % Math.ceil(options.timePeriod/60)) {
693
697
  options.twentyFourHour = true;
694
698
  }
695
-
699
+
696
700
  if (options.update) {
697
701
  this.assignTo(options.update, options.trigger);
698
702
  }
699
703
 
700
704
  return this;
701
705
  },
702
-
706
+
703
707
  /**
704
708
  * hides all the other calendars on the page
705
709
  *
@@ -727,26 +731,26 @@ var Swaps = new Wrapper(Element, {
727
731
  initialize: function(options) {
728
732
  this.$super('div', {'class': 'swaps'});
729
733
  this.options = options;
730
-
734
+
731
735
  var i18n = options.i18n;
732
-
736
+
733
737
  this.insert([
734
738
  this.prevMonth = new Button('&lsaquo;', {title: i18n.PrevMonth, 'class': 'prev-month'}),
735
739
  this.nextMonth = new Button('&rsaquo;', {title: i18n.NextMonth, 'class': 'next-month'})
736
740
  ]);
737
-
741
+
738
742
  if (options.listYears) {
739
743
  this.insert([
740
744
  this.prevYear = new Button('&laquo;', {title: i18n.PrevYear, 'class': 'prev-year'}),
741
745
  this.nextYear = new Button('&raquo;', {title: i18n.NextYear, 'class': 'next-year'})
742
746
  ]);
743
747
  }
744
-
748
+
745
749
  this.buttons = R([this.prevMonth, this.nextMonth, this.prevYear, this.nextYear]).compact();
746
-
750
+
747
751
  this.onClick(this.clicked);
748
752
  },
749
-
753
+
750
754
  /**
751
755
  * Changes the swapping buttons state depending on the options and the current date
752
756
  *
@@ -756,19 +760,19 @@ var Swaps = new Wrapper(Element, {
756
760
  setDate: function(date) {
757
761
  var options = this.options, months_num = options.numberOfMonths[0] * options.numberOfMonths[1],
758
762
  has_prev_year = true, has_next_year = true, has_prev_month = true, has_next_month = true;
759
-
763
+
760
764
  if (options.minDate) {
761
765
  var beginning = new Date(date.getFullYear(),0,1,0,0,0);
762
766
  var min_date = new Date(options.minDate.getFullYear(),0,1,0,0,0);
763
-
767
+
764
768
  has_prev_year = beginning > min_date;
765
-
769
+
766
770
  beginning.setMonth(date.getMonth() - Math.ceil(months_num - months_num/2));
767
771
  min_date.setMonth(options.minDate.getMonth());
768
-
772
+
769
773
  has_prev_month = beginning >= min_date;
770
774
  }
771
-
775
+
772
776
  if (options.maxDate) {
773
777
  var end = new Date(date);
774
778
  var max_date = new Date(options.maxDate);
@@ -782,26 +786,26 @@ var Swaps = new Wrapper(Element, {
782
786
  date.setSeconds(0);
783
787
  date.setMilliseconds(0);
784
788
  });
785
-
789
+
786
790
  has_next_month = end < max_date;
787
-
791
+
788
792
  // checking the next year
789
793
  dates.each('setMonth', 0);
790
794
  has_next_year = end < max_date;
791
795
  }
792
-
796
+
793
797
  this.nextMonth[has_next_month ? 'enable':'disable']();
794
798
  this.prevMonth[has_prev_month ? 'enable':'disable']();
795
-
799
+
796
800
  if (this.nextYear) {
797
801
  this.nextYear[has_next_year ? 'enable':'disable']();
798
802
  this.prevYear[has_prev_year ? 'enable':'disable']();
799
803
  }
800
804
  },
801
-
805
+
802
806
  // protected
803
807
 
804
- // handles the clicks on the
808
+ // handles the clicks on the
805
809
  clicked: function(event) {
806
810
  var target = event.target;
807
811
  if (target && this.buttons.include(target)) {
@@ -812,6 +816,7 @@ var Swaps = new Wrapper(Element, {
812
816
  }
813
817
  });
814
818
 
819
+
815
820
  /**
816
821
  * Represents a single month block
817
822
  *
@@ -827,30 +832,30 @@ var Month = new Wrapper(Element, {
827
832
  initialize: function(options) {
828
833
  this.$super('table', {'class': 'month'});
829
834
  this.options = options;
830
-
835
+
831
836
  // the caption (for the month name)
832
837
  this.insert(this.caption = new Element('caption'));
833
-
838
+
834
839
  // the headline for the day-names
835
840
  this.insert('<thead><tr>'+
836
841
  options.dayNames.map(function(name) {return '<th>'+ name +'</th>';}).join('') +
837
842
  '</tr></thead>');
838
-
843
+
839
844
  // the body with the day-cells
840
845
  this.days = [];
841
-
846
+
842
847
  var tbody = new Element('tbody').insertTo(this), x, y, row;
843
-
848
+
844
849
  for (y=0; y < 6; y++) {
845
850
  row = new Element('tr').insertTo(tbody);
846
851
  for (x=0; x < 7; x++) {
847
852
  this.days.push(new Element('td').insertTo(row));
848
853
  }
849
854
  }
850
-
855
+
851
856
  this.onClick(this.clicked);
852
857
  },
853
-
858
+
854
859
  /**
855
860
  * Initializes the month values by the date
856
861
  *
@@ -862,56 +867,56 @@ var Month = new Wrapper(Element, {
862
867
  date.setDate(32);
863
868
  var days_number = 32 - date.getDate();
864
869
  date.setMonth(date.getMonth()-1);
865
-
870
+
866
871
  var cur_day = Math.ceil(current_date.getTime() / 86400000),
867
872
  options = this.options, i18n = options.i18n, days = this.days;
868
-
873
+
869
874
  // resetting the first and last two weeks cells
870
875
  // because there will be some empty cells over there
871
876
  for (var i=0, len = days.length-1, one, two, tre; i < 7; i++) {
872
877
  one = days[i]._;
873
878
  two = days[len - i]._;
874
879
  tre = days[len - i - 7]._;
875
-
880
+
876
881
  one.innerHTML = two.innerHTML = tre.innerHTML = '';
877
882
  one.className = two.className = tre.className = 'blank';
878
883
  }
879
-
884
+
880
885
  // putting the actual day numbers in place
881
886
  for (var i=1, row=0, week, cell; i <= days_number; i++) {
882
887
  date.setDate(i);
883
888
  var day_num = date.getDay();
884
-
889
+
885
890
  if (options.firstDay === 1) { day_num = day_num > 0 ? day_num-1 : 6; }
886
891
  if (i === 1 || day_num === 0) {
887
892
  week = days.slice(row*7, row*7 + 7); row ++;
888
893
  }
889
-
894
+
890
895
  cell = week[day_num]._;
891
-
896
+
892
897
  if (Browser.OLD) { // IE6 has a nasty glitch with that
893
898
  cell.innerHTML = '';
894
899
  cell.appendChild(document.createTextNode(i));
895
900
  } else {
896
901
  cell.innerHTML = ''+i;
897
902
  }
898
-
903
+
899
904
  cell.className = cur_day === Math.ceil(date.getTime() / 86400000) ? 'selected' : '';
900
-
905
+
901
906
  if ((options.minDate && options.minDate > date) || (options.maxDate && options.maxDate < date)) {
902
907
  cell.className = 'disabled';
903
908
  }
904
-
909
+
905
910
  week[day_num].date = new Date(date);
906
911
  }
907
-
912
+
908
913
  // setting up the caption with the month name
909
914
  var caption = (options.listYears ?
910
915
  i18n.monthNamesShort[date.getMonth()] + ',' :
911
916
  i18n.monthNames[date.getMonth()])+
912
917
  ' '+date.getFullYear(),
913
918
  element = this.caption._;
914
-
919
+
915
920
  if (Browser.OLD) {
916
921
  element.innerHTML = '';
917
922
  element.appendChild(document.createTextNode(caption));
@@ -919,7 +924,7 @@ var Month = new Wrapper(Element, {
919
924
  element.innerHTML = caption;
920
925
  }
921
926
  },
922
-
927
+
923
928
  // protected
924
929
 
925
930
  /**
@@ -930,10 +935,10 @@ var Month = new Wrapper(Element, {
930
935
  */
931
936
  clicked: function(event) {
932
937
  var target = event.target, date = target.date;
933
-
938
+
934
939
  if (target && date && !target.hasClass('disabled') && !target.hasClass('blank')) {
935
940
  target.addClass('selected');
936
-
941
+
937
942
  this.fire('date-set', {
938
943
  date: date.getDate(),
939
944
  month: date.getMonth(),
@@ -943,6 +948,7 @@ var Month = new Wrapper(Element, {
943
948
  }
944
949
  });
945
950
 
951
+
946
952
  /**
947
953
  * The calendar months greed unit
948
954
  *
@@ -957,11 +963,11 @@ var Greed = new Wrapper(Element, {
957
963
  */
958
964
  initialize: function(options) {
959
965
  this.$super('table', {'class': 'greed'});
960
-
966
+
961
967
  this.months = [];
962
-
968
+
963
969
  var tbody = new Element('tbody').insertTo(this), month;
964
-
970
+
965
971
  for (var y=0; y < options.numberOfMonths[1]; y++) {
966
972
  var row = new Element('tr').insertTo(tbody);
967
973
  for (var x=0; x < options.numberOfMonths[0]; x++) {
@@ -970,7 +976,7 @@ var Greed = new Wrapper(Element, {
970
976
  }
971
977
  }
972
978
  },
973
-
979
+
974
980
  /**
975
981
  * Sets the months to the date
976
982
  *
@@ -980,9 +986,9 @@ var Greed = new Wrapper(Element, {
980
986
  */
981
987
  setDate: function(date, current_date) {
982
988
  var months = this.months, months_num = months.length;
983
-
989
+
984
990
  current_date = current_date || date;
985
-
991
+
986
992
  for (var i=-Math.ceil(months_num - months_num/2)+1,j=0; i < Math.floor(months_num - months_num/2)+1; i++,j++) {
987
993
  var month_date = new Date(date);
988
994
  month_date.setMonth(date.getMonth() + i);
@@ -991,6 +997,7 @@ var Greed = new Wrapper(Element, {
991
997
  }
992
998
  });
993
999
 
1000
+
994
1001
  /**
995
1002
  * The time-picker block unit
996
1003
  *
@@ -1006,20 +1013,20 @@ var Timepicker = new Wrapper(Element, {
1006
1013
  initialize: function(options) {
1007
1014
  this.$super('div', {'class': 'timepicker'});
1008
1015
  this.options = options;
1009
-
1016
+
1010
1017
  var on_change = R(this.timeChanged).bind(this);
1011
-
1018
+
1012
1019
  this.insert([
1013
1020
  this.hours = new Element('select').onChange(on_change),
1014
1021
  this.minutes = new Element('select').onChange(on_change)
1015
1022
  ]);
1016
-
1023
+
1017
1024
  var minutes_threshold = options.timePeriod < 60 ? options.timePeriod : 60;
1018
1025
  var hours_threshold = options.timePeriod < 60 ? 1 : Math.ceil(options.timePeriod / 60);
1019
-
1026
+
1020
1027
  for (var i=0; i < 60; i++) {
1021
1028
  var caption = zerofy(i);
1022
-
1029
+
1023
1030
  if (i < 24 && i % hours_threshold == 0) {
1024
1031
  if (options.twentyFourHour) {
1025
1032
  this.hours.insert(new Element('option', {value: i, html: caption}));
@@ -1027,23 +1034,23 @@ var Timepicker = new Wrapper(Element, {
1027
1034
  this.hours.insert(new Element('option', {value: i, html: i == 0 ? 12 : i}));
1028
1035
  }
1029
1036
  }
1030
-
1037
+
1031
1038
  if (i % minutes_threshold == 0) {
1032
1039
  this.minutes.insert(new Element('option', {value: i, html: caption}));
1033
1040
  }
1034
1041
  }
1035
-
1036
-
1042
+
1043
+
1037
1044
  // adding the meridian picker if it's a 12 am|pm picker
1038
1045
  if (!options.twentyFourHour) {
1039
1046
  this.meridian = new Element('select').onChange(on_change).insertTo(this);
1040
-
1047
+
1041
1048
  R(R(options.format).includes(/%P/) ? ['am', 'pm'] : ['AM', 'PM']).each(function(value) {
1042
1049
  this.meridian.insert(new Element('option', {value: value.toLowerCase(), html: value}));
1043
1050
  }, this);
1044
1051
  }
1045
1052
  },
1046
-
1053
+
1047
1054
  /**
1048
1055
  * Sets the time-picker values by the data
1049
1056
  *
@@ -1055,18 +1062,18 @@ var Timepicker = new Wrapper(Element, {
1055
1062
  var hour = options.timePeriod < 60 ? date.getHours() :
1056
1063
  Math.round(date.getHours()/(options.timePeriod/60)) * (options.timePeriod/60);
1057
1064
  var minute = Math.round(date.getMinutes() / (options.timePeriod % 60)) * options.timePeriod;
1058
-
1065
+
1059
1066
  if (this.meridian) {
1060
1067
  this.meridian.setValue(hour < 12 ? 'am' : 'pm');
1061
1068
  hour = (hour == 0 || hour == 12) ? 12 : hour > 12 ? (hour - 12) : hour;
1062
1069
  }
1063
-
1070
+
1064
1071
  this.hours.setValue(hour);
1065
1072
  this.minutes.setValue(minute);
1066
1073
  },
1067
-
1074
+
1068
1075
  // protected
1069
-
1076
+
1070
1077
  /**
1071
1078
  * Handles the time-picking events
1072
1079
  *
@@ -1074,10 +1081,10 @@ var Timepicker = new Wrapper(Element, {
1074
1081
  */
1075
1082
  timeChanged: function(event) {
1076
1083
  event.stopPropagation();
1077
-
1084
+
1078
1085
  var hours = parseInt(this.hours.value());
1079
1086
  var minutes = parseInt(this.minutes.value());
1080
-
1087
+
1081
1088
  if (this.meridian) {
1082
1089
  if (hours == 12) {
1083
1090
  hours = 0;
@@ -1086,11 +1093,12 @@ var Timepicker = new Wrapper(Element, {
1086
1093
  hours += 12;
1087
1094
  }
1088
1095
  }
1089
-
1096
+
1090
1097
  this.fire('time-set', {hours: hours, minutes: minutes});
1091
1098
  }
1092
1099
  });
1093
1100
 
1101
+
1094
1102
  /**
1095
1103
  * The bottom-buttons block unit
1096
1104
  *
@@ -1105,7 +1113,7 @@ var Buttons = new Wrapper(Element, {
1105
1113
  */
1106
1114
  initialize: function(options) {
1107
1115
  this.$super('div', {'class': 'buttons'});
1108
-
1116
+
1109
1117
  this.insert([
1110
1118
  new Button(options.i18n.Now, {'class': 'now'}).onClick('fire', 'now-clicked'),
1111
1119
  new Button(options.i18n.Done, {'class': 'done'}).onClick('fire', 'done-clicked')
@@ -1113,6 +1121,7 @@ var Buttons = new Wrapper(Element, {
1113
1121
  }
1114
1122
  });
1115
1123
 
1124
+
1116
1125
  /**
1117
1126
  * This module handles the dates parsing/formatting processes
1118
1127
  *
@@ -1150,60 +1159,60 @@ Calendar.include({
1150
1159
  */
1151
1160
  parse: function(string) {
1152
1161
  var date;
1153
-
1162
+
1154
1163
  if (isString(string) && string) {
1155
1164
  var tpl = RegExp.escape(this.options.format);
1156
1165
  var holders = R(tpl.match(/%[a-z]/ig)).map('match', /[a-z]$/i).map('first').without('%');
1157
1166
  var re = new RegExp('^'+tpl.replace(/%p/i, '(pm|PM|am|AM)').replace(/(%[a-z])/ig, '(.+?)')+'$');
1158
-
1167
+
1159
1168
  var match = R(string).trim().match(re);
1160
-
1169
+
1161
1170
  if (match) {
1162
1171
  match.shift();
1163
-
1172
+
1164
1173
  var year = null, month = null, hour = null, minute = null, second = null, meridian;
1165
-
1174
+
1166
1175
  while (match.length) {
1167
1176
  var value = match.shift();
1168
1177
  var key = holders.shift();
1169
-
1178
+
1170
1179
  if (key.toLowerCase() == 'b') {
1171
1180
  month = this.options.i18n[key=='b' ? 'monthNamesShort' : 'monthNames'].indexOf(value);
1172
1181
  } else if (key.toLowerCase() == 'p') {
1173
1182
  meridian = value.toLowerCase();
1174
1183
  } else {
1175
- value = parseInt(value);
1184
+ value = parseInt(value, 10);
1176
1185
  switch(key) {
1177
- case 'd':
1186
+ case 'd':
1178
1187
  case 'e': date = value; break;
1179
1188
  case 'm': month = value-1; break;
1180
- case 'y':
1189
+ case 'y':
1181
1190
  case 'Y': year = value; break;
1182
- case 'H':
1183
- case 'k':
1184
- case 'I':
1191
+ case 'H':
1192
+ case 'k':
1193
+ case 'I':
1185
1194
  case 'l': hour = value; break;
1186
1195
  case 'M': minute = value; break;
1187
1196
  case 'S': second = value; break;
1188
1197
  }
1189
1198
  }
1190
1199
  }
1191
-
1200
+
1192
1201
  // converting 1..12am|pm into 0..23 hours marker
1193
1202
  if (meridian) {
1194
1203
  hour = hour == 12 ? 0 : hour;
1195
1204
  hour = (meridian == 'pm' ? hour + 12 : hour);
1196
1205
  }
1197
-
1206
+
1198
1207
  date = new Date(year, month, date, hour, minute, second);
1199
1208
  }
1200
1209
  } else if (string instanceof Date || Date.parse(string)) {
1201
1210
  date = new Date(string);
1202
1211
  }
1203
-
1212
+
1204
1213
  return (!date || isNaN(date.getTime())) ? null : date;
1205
- },
1206
-
1214
+ },
1215
+
1207
1216
  /**
1208
1217
  * Formats the current date into a string depend on the current or given format
1209
1218
  *
@@ -1219,9 +1228,9 @@ Calendar.include({
1219
1228
  var hour = this.date.getHours();
1220
1229
  var minute = this.date.getMinutes();
1221
1230
  var second = this.date.getSeconds();
1222
-
1231
+
1223
1232
  var hour_ampm = (hour == 0 ? 12 : hour < 13 ? hour : hour - 12);
1224
-
1233
+
1225
1234
  var values = {
1226
1235
  a: i18n.dayNamesShort[day],
1227
1236
  A: i18n.dayNames[day],
@@ -1242,29 +1251,30 @@ Calendar.include({
1242
1251
  S: zerofy(second),
1243
1252
  '%': '%'
1244
1253
  };
1245
-
1254
+
1246
1255
  var result = format || this.options.format;
1247
1256
  for (var key in values) {
1248
1257
  result = result.replace('%'+key, values[key]);
1249
1258
  }
1250
-
1259
+
1251
1260
  return result;
1252
1261
  }
1253
1262
  });
1254
1263
 
1264
+
1255
1265
  /**
1256
1266
  * This module handles the events connection
1257
1267
  *
1258
1268
  * Copyright (C) 2009-2010 Nikolay Nemshilov
1259
- */
1269
+ */
1260
1270
  Calendar.include({
1261
-
1271
+
1262
1272
  // protected
1263
-
1273
+
1264
1274
  // connects the events with handlers
1265
1275
  initEvents: function() {
1266
1276
  var shift = '_shiftDate', terminate = this._terminate;
1267
-
1277
+
1268
1278
  this.on({
1269
1279
  // the dates/months/etc listing events
1270
1280
  'prev-day': [shift, {Date: -1}],
@@ -1275,15 +1285,15 @@ Calendar.include({
1275
1285
  'next-month': [shift, {Month: 1}],
1276
1286
  'prev-year': [shift, {FullYear: -1}],
1277
1287
  'next-year': [shift, {FullYear: 1}],
1278
-
1288
+
1279
1289
  // the date/time picking events
1280
1290
  'date-set': this._changeDate,
1281
1291
  'time-set': this._changeTime,
1282
-
1292
+
1283
1293
  // the bottom buttons events
1284
1294
  'now-clicked': this._setNow,
1285
1295
  'done-clicked': this.done,
1286
-
1296
+
1287
1297
  // handling the clicks
1288
1298
  'click': terminate,
1289
1299
  'mousedown': terminate,
@@ -1291,49 +1301,49 @@ Calendar.include({
1291
1301
  'blur': terminate
1292
1302
  });
1293
1303
  },
1294
-
1304
+
1295
1305
  // shifts the date according to the params
1296
1306
  _shiftDate: function(params) {
1297
1307
  var date = new Date(this.date), options = this.options;
1298
-
1308
+
1299
1309
  // shifting the date according to the params
1300
1310
  for (var key in params) {
1301
1311
  date['set'+key](date['get'+key]() + params[key]);
1302
1312
  }
1303
-
1313
+
1304
1314
  this.setDate(date);
1305
1315
  },
1306
-
1316
+
1307
1317
  // changes the current date (not the time)
1308
1318
  _changeDate: function(event) {
1309
1319
  var date = new Date(this.date);
1310
-
1320
+
1311
1321
  date.setDate(event.date);
1312
1322
  date.setMonth(event.month);
1313
1323
  date.setFullYear(event.year);
1314
-
1324
+
1315
1325
  this.setDate(date, true); // <- `true` means just change the date without shifting the list
1316
-
1326
+
1317
1327
  if (this.options.hideOnPick) {
1318
1328
  this.done();
1319
1329
  }
1320
1330
  },
1321
-
1331
+
1322
1332
  // changes the current time (not the date)
1323
1333
  _changeTime: function(event) {
1324
1334
  var date = new Date(this.date);
1325
-
1335
+
1326
1336
  date.setHours(event.hours);
1327
1337
  date.setMinutes(event.minutes);
1328
-
1338
+
1329
1339
  this.setDate(date);
1330
1340
  },
1331
-
1341
+
1332
1342
  // resets the calendar to the current time
1333
1343
  _setNow: function() {
1334
1344
  this.setDate(new Date());
1335
1345
  },
1336
-
1346
+
1337
1347
  /** simply stops the event so we didn't bother the things outside of the object
1338
1348
  *
1339
1349
  * @param {Event} event
@@ -1350,6 +1360,7 @@ Calendar.include({
1350
1360
  }
1351
1361
  });
1352
1362
 
1363
+
1353
1364
  /**
1354
1365
  * Document level event listeners for navigation and lazy initialization
1355
1366
  *
@@ -1364,16 +1375,16 @@ $(document).on({
1364
1375
  * @return void
1365
1376
  */
1366
1377
  focus: function(event) {
1367
- var target = event.target instanceof Input ? event.target : null;
1368
-
1378
+ var target = event.target instanceof Input && event.target.get('type') == 'text' ? event.target : null;
1379
+
1369
1380
  Calendar.hideAll();
1370
-
1381
+
1371
1382
  if (target && (target.calendar || target.match(Calendar.Options.cssRule))) {
1372
1383
  (target.calendar || new Calendar({update: target}))
1373
1384
  .setValue(target.value()).showAt(target);
1374
1385
  }
1375
1386
  },
1376
-
1387
+
1377
1388
  /**
1378
1389
  * Watches the input elements blur events
1379
1390
  * and hides shown popups
@@ -1383,7 +1394,7 @@ $(document).on({
1383
1394
  */
1384
1395
  blur: function(event) {
1385
1396
  var target = event.target, calendar = target.calendar;
1386
-
1397
+
1387
1398
  if (calendar) {
1388
1399
  // we use the delay so it didn't get hidden when the user clicks the calendar itself
1389
1400
  calendar._hide_delay = R(function() {
@@ -1391,7 +1402,7 @@ $(document).on({
1391
1402
  }).delay(200);
1392
1403
  }
1393
1404
  },
1394
-
1405
+
1395
1406
  /**
1396
1407
  * Catches clicks on trigger elements
1397
1408
  *
@@ -1400,9 +1411,9 @@ $(document).on({
1400
1411
  */
1401
1412
  click: function(event) {
1402
1413
  var target = (event.target instanceof Element) ? event.target : null;
1403
-
1414
+
1404
1415
  if (target && (target.calendar || target.match(Calendar.Options.cssRule))) {
1405
- if (!(target instanceof Input)) {
1416
+ if (!(target instanceof Input) || target.get('type') != 'text') {
1406
1417
  event.stop();
1407
1418
  (target.calendar || new Calendar({trigger: target}))
1408
1419
  .hide(null).toggleAt(target.assignedInput);
@@ -1411,7 +1422,7 @@ $(document).on({
1411
1422
  Calendar.hideAll();
1412
1423
  }
1413
1424
  },
1414
-
1425
+
1415
1426
  /**
1416
1427
  * Catching the key-downs to navigate in the currently
1417
1428
  * opened Calendar hover
@@ -1430,7 +1441,7 @@ $(document).on({
1430
1441
  34: 'next-month', // Page Down
1431
1442
  13: 'done' // Enter
1432
1443
  })[event.keyCode];
1433
-
1444
+
1434
1445
  if (name && calendar && calendar.visible()) {
1435
1446
  event.stop();
1436
1447
  if (isFunction(calendar[name])) {
@@ -1442,7 +1453,8 @@ $(document).on({
1442
1453
  }
1443
1454
  });
1444
1455
 
1456
+
1445
1457
  document.write("<style type=\"text/css\">.rui-panel{margin:0;padding:.5em;position:relative;background-color:#EEE;border:1px solid #BBB;border-radius:.3em;-moz-border-radius:.3em;-webkit-border-radius:.3em;box-shadow:.15em .3em .5em #BBB;-moz-box-shadow:.15em .3em .5em #BBB;-webkit-box-shadow:.15em .3em .5em #BBB;cursor:default} *.rui-button{display:inline-block; *display:inline; *zoom:1;height:1em;line-height:1em;margin:0;padding:.2em .5em;text-align:center;border:1px solid #CCC;border-radius:.2em;-moz-border-radius:.2em;-webkit-border-radius:.2em;cursor:pointer;color:#333;background-color:#FFF;user-select:none;-moz-user-select:none;-webkit-user-select:none} *.rui-button:hover{color:#111;border-color:#999;background-color:#DDD;box-shadow:#888 0 0 .1em;-moz-box-shadow:#888 0 0 .1em;-webkit-box-shadow:#888 0 0 .1em} *.rui-button:active{color:#000;border-color:#777;text-indent:1px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none} *.rui-button-disabled, *.rui-button-disabled:hover, *.rui-button-disabled:active{color:#888;background:#DDD;border-color:#CCC;cursor:default;text-indent:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}div.rui-re-anchor{margin:0;padding:0;background:none;border:none;float:none;display:inline;position:absolute;z-index:9999}div.rui-calendar .swaps,div.rui-calendar .greed,div.rui-calendar .timepicker,div.rui-calendar .buttons,div.rui-calendar table,div.rui-calendar table tr,div.rui-calendar table th,div.rui-calendar table td,div.rui-calendar table tbody,div.rui-calendar table thead,div.rui-calendar table caption{background:none;border:none;width:auto;height:auto;margin:0;padding:0}div.rui-calendar-inline{position:relative;display:inline-block; *display:inline; *zoom:1;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}div.rui-calendar .swaps{position:relative}div.rui-calendar .swaps .rui-button{position:absolute;float:left;width:1em;padding:.15em .4em}div.rui-calendar .swaps .next-month{right:0em;_right:.5em}div.rui-calendar .swaps .prev-year{left:2.05em}div.rui-calendar .swaps .next-year{right:2.05em;_right:2.52em}div.rui-calendar .greed{border-spacing:0px;border-collapse:collapse;border-size:0}div.rui-calendar .greed td{vertical-align:top;padding-left:.4em}div.rui-calendar .greed>tbody>tr>td:first-child{padding:0}div.rui-calendar .month{margin-top:.2em;border-spacing:1px;border-collapse:separate}div.rui-calendar .month caption{text-align:center}div.rui-calendar .month th{color:#666;text-align:center}div.rui-calendar .month td{text-align:right;padding:.1em .3em;background-color:#FFF;border:1px solid #CCC;cursor:pointer;color:#555;border-radius:.2em;-moz-border-radius:.2em;-webkit-border-radius:.2em}div.rui-calendar .month td:hover{background-color:#CCC;border-color:#AAA;color:#000}div.rui-calendar .month td.blank{background:transparent;cursor:default;border:none}div.rui-calendar .month td.selected{background-color:#BBB;border-color:#AAA;color:#222;font-weight:bold;padding:.1em .2em}div.rui-calendar .month td.disabled{color:#888;background:#EEE;border-color:#CCC;cursor:default}div.rui-calendar .timepicker{border-top:1px solid #ccc;margin-top:.3em;padding-top:.5em;text-align:center}div.rui-calendar .timepicker select{margin:0 .4em}div.rui-calendar .buttons{position:relative;margin-top:.5em}div.rui-calendar .buttons div.rui-button{width:4em;padding:.25em .5em}div.rui-calendar .buttons .done{position:absolute;right:0em;top:0}</style>");
1446
1458
 
1447
1459
  return Calendar;
1448
- })(document, parseInt, RightJS);
1460
+ })(document, parseInt, RightJS);