right-rails 0.4.4 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/init.rb +37 -8
- data/javascripts/right-autocompleter-src.js +55 -41
- data/javascripts/right-autocompleter.js +2 -2
- data/javascripts/right-behavior-src.js +5 -5
- data/javascripts/right-behavior.js +2 -2
- data/javascripts/right-calendar-src.js +139 -67
- data/javascripts/right-calendar.js +2 -2
- data/javascripts/right-dnd-src.js +7 -7
- data/javascripts/right-dnd.js +2 -2
- data/javascripts/right-effects-src.js +9 -9
- data/javascripts/right-effects.js +2 -2
- data/javascripts/right-events-src.js +8 -8
- data/javascripts/right-events.js +2 -2
- data/javascripts/right-in-edit-src.js +10 -8
- data/javascripts/right-in-edit.js +2 -2
- data/javascripts/right-json-src.js +14 -15
- data/javascripts/right-json.js +2 -2
- data/javascripts/right-lightbox-src.js +141 -86
- data/javascripts/right-lightbox.js +3 -3
- data/javascripts/right-olds-src.js +26 -48
- data/javascripts/right-olds.js +2 -2
- data/javascripts/right-rails-src.js +109 -31
- data/javascripts/right-rails.js +2 -2
- data/javascripts/right-rater-src.js +20 -12
- data/javascripts/right-rater.js +2 -2
- data/javascripts/right-selectable-src.js +3 -3
- data/javascripts/right-selectable.js +1 -1
- data/javascripts/right-slider-src.js +3 -3
- data/javascripts/right-slider.js +1 -1
- data/javascripts/right-sortable-src.js +28 -28
- data/javascripts/right-sortable.js +2 -2
- data/javascripts/right-src.js +612 -405
- data/javascripts/right-tabs-src.js +115 -44
- data/javascripts/right-tabs.js +2 -2
- data/javascripts/right-tooltips-src.js +131 -74
- data/javascripts/right-tooltips.js +2 -2
- data/javascripts/right-ui-i18n-fr.js +4 -4
- data/javascripts/right-uploader-src.js +170 -0
- data/javascripts/right-uploader.js +9 -0
- data/javascripts/right.js +2 -4
- data/lib/right_rails.rb +1 -1
- data/lib/right_rails/helpers/basic.rb +10 -2
- data/lib/right_rails/helpers/misc.rb +16 -17
- data/lib/right_rails/helpers/rails.rb +0 -7
- data/spec/lib/right_rails/helpers/basic_spec.rb +0 -1
- data/spec/lib/right_rails/helpers/rails_spec.rb +24 -0
- data/spec/spec_helper.rb +9 -1
- metadata +14 -5
    
        data/init.rb
    CHANGED
    
    | @@ -1,12 +1,41 @@ | |
| 1 1 | 
             
            # Include hook code here
         | 
| 2 | 
            +
            if defined?(Rails)
         | 
| 3 | 
            +
              if Rails::VERSION::MAJOR == 2
         | 
| 4 | 
            +
                # Rails 2.x.x initalizer
         | 
| 5 | 
            +
                
         | 
| 6 | 
            +
                if defined?(ActionController)
         | 
| 7 | 
            +
                  class ActionController::Base
         | 
| 8 | 
            +
                    include RightRails::ControllerExtensions
         | 
| 9 | 
            +
                
         | 
| 10 | 
            +
                    helper RightRails::Helpers::Basic,
         | 
| 11 | 
            +
                           RightRails::Helpers::Rails,
         | 
| 12 | 
            +
                           RightRails::Helpers::Forms,
         | 
| 13 | 
            +
                           RightRails::Helpers::Misc
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 2 16 |  | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
                 | 
| 6 | 
            -
                
         | 
| 7 | 
            -
                 | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 17 | 
            +
              else
         | 
| 18 | 
            +
                # Rails 3 initializer
         | 
| 19 | 
            +
                require 'action_controller/railtie'
         | 
| 20 | 
            +
                
         | 
| 21 | 
            +
                if defined?(ActionController)
         | 
| 22 | 
            +
                  require 'right_rails'
         | 
| 23 | 
            +
                  require 'right_rails/controller_extensions'
         | 
| 24 | 
            +
                  require 'right_rails/java_script_generator'
         | 
| 25 | 
            +
                  require 'right_rails/helpers'
         | 
| 26 | 
            +
                  require 'right_rails/helpers/basic'
         | 
| 27 | 
            +
                  require 'right_rails/helpers/forms'
         | 
| 28 | 
            +
                  require 'right_rails/helpers/misc'
         | 
| 29 | 
            +
                  require 'right_rails/helpers/rails'
         | 
| 30 | 
            +
                  
         | 
| 31 | 
            +
                  class ActionController::Base
         | 
| 32 | 
            +
                    include RightRails::ControllerExtensions
         | 
| 33 | 
            +
                
         | 
| 34 | 
            +
                    helper RightRails::Helpers::Basic,
         | 
| 35 | 
            +
                           RightRails::Helpers::Forms,
         | 
| 36 | 
            +
                           RightRails::Helpers::Misc,
         | 
| 37 | 
            +
                           RightRails::Helpers::Rails
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
                end
         | 
| 11 40 | 
             
              end
         | 
| 12 41 | 
             
            end
         | 
| @@ -3,14 +3,14 @@ | |
| 3 3 | 
             
             *
         | 
| 4 4 | 
             
             * Home page: http://rightjs.org/ui/autocompleter
         | 
| 5 5 | 
             
             *
         | 
| 6 | 
            -
             * @copyright (C) 2009 Nikolay V. Nemshilov | 
| 6 | 
            +
             * @copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 7 7 | 
             
             */
         | 
| 8 8 | 
             
            if (!RightJS) { throw "Gimme RightJS. Please." };
         | 
| 9 9 |  | 
| 10 10 | 
             
            /**
         | 
| 11 11 | 
             
             * The RightJS UI Autocompleter unit base class
         | 
| 12 12 | 
             
             *
         | 
| 13 | 
            -
             * Copyright (C) Nikolay V. Nemshilov | 
| 13 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 14 14 | 
             
             */
         | 
| 15 15 | 
             
            var Autocompleter = new Class(Observer, {
         | 
| 16 16 | 
             
              extend: {
         | 
| @@ -27,40 +27,29 @@ var Autocompleter = new Class(Observer, { | |
| 27 27 | 
             
                  cache:      true,      // the use the results cache
         | 
| 28 28 | 
             
                  local:      null,      // an optional local search results list
         | 
| 29 29 |  | 
| 30 | 
            -
                  fxName:     'slide',
         | 
| 31 | 
            -
                  fxDuration: 'short',
         | 
| 30 | 
            +
                  fxName:     'slide',   // list appearance fx name
         | 
| 31 | 
            +
                  fxDuration: 'short',   // list appearance fx duration
         | 
| 32 32 |  | 
| 33 | 
            -
                  spinner:    'native',
         | 
| 33 | 
            +
                  spinner:    'native',  // spinner element reference
         | 
| 34 34 |  | 
| 35 | 
            -
                   | 
| 35 | 
            +
                  cssRule:    '[rel^=autocompleter]'
         | 
| 36 36 | 
             
                },
         | 
| 37 37 |  | 
| 38 | 
            -
                //  | 
| 39 | 
            -
                 | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
                   | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
                       | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
                        if (url.match(/^['"].*?['"]$/)) {
         | 
| 54 | 
            -
                          options.local = eval('['+url+']');
         | 
| 55 | 
            -
                        } else if (!url.blank()) {
         | 
| 56 | 
            -
                          options.url = url;
         | 
| 57 | 
            -
                        }
         | 
| 58 | 
            -
                      }
         | 
| 59 | 
            -
                      
         | 
| 60 | 
            -
                      new Autocompleter(input, options);
         | 
| 61 | 
            -
                    }
         | 
| 62 | 
            -
                  });
         | 
| 63 | 
            -
                }
         | 
| 38 | 
            +
                current: null, // reference to the currently active options list
         | 
| 39 | 
            +
                instances: {}, // the input <-> instance map
         | 
| 40 | 
            +
                
         | 
| 41 | 
            +
                // finds/instances an autocompleter for the event
         | 
| 42 | 
            +
                find: function(event) {
         | 
| 43 | 
            +
                  var input = event.target;
         | 
| 44 | 
            +
                  if (input.match(Autocompleter.Options.cssRule)) {
         | 
| 45 | 
            +
                    var uid = $uid(input);
         | 
| 46 | 
            +
                    if (!Autocompleter.instances[uid])
         | 
| 47 | 
            +
                      new Autocompleter(input);
         | 
| 48 | 
            +
                  }
         | 
| 49 | 
            +
                },
         | 
| 50 | 
            +
                
         | 
| 51 | 
            +
                // DEPRECATED scans the document for autocompletion fields
         | 
| 52 | 
            +
                rescan: function(scope) { }
         | 
| 64 53 | 
             
              },
         | 
| 65 54 |  | 
| 66 55 | 
             
              /**
         | 
| @@ -70,16 +59,17 @@ var Autocompleter = new Class(Observer, { | |
| 70 59 | 
             
               * @param Object options
         | 
| 71 60 | 
             
               */
         | 
| 72 61 | 
             
              initialize: function(input, options) {
         | 
| 62 | 
            +
                this.input = $(input); // don't low it down!
         | 
| 73 63 | 
             
                this.$super(options);
         | 
| 74 64 |  | 
| 75 65 | 
             
                // storing the callbacks so we could detach them later
         | 
| 76 66 | 
             
                this._watch = this.watch.bind(this);
         | 
| 77 67 | 
             
                this._hide  = this.hide.bind(this);
         | 
| 78 68 |  | 
| 79 | 
            -
                this.input | 
| 69 | 
            +
                this.input.onKeyup(this._watch).onBlur(this._hide);
         | 
| 80 70 | 
             
                this.container = $E('div', {'class': 'autocompleter'}).insertTo(this.input, 'after');
         | 
| 81 71 |  | 
| 82 | 
            -
                this.input.autocompleter = this;
         | 
| 72 | 
            +
                this.input.autocompleter = Autocompleter.instances[$uid(input)] = this;
         | 
| 83 73 | 
             
              },
         | 
| 84 74 |  | 
| 85 75 | 
             
              // kills the autocompleter
         | 
| @@ -91,7 +81,7 @@ var Autocompleter = new Class(Observer, { | |
| 91 81 |  | 
| 92 82 | 
             
              // catching up with some additonal options
         | 
| 93 83 | 
             
              setOptions: function(options) {
         | 
| 94 | 
            -
                this.$super(options);
         | 
| 84 | 
            +
                this.$super(this.grabOptions(options));
         | 
| 95 85 |  | 
| 96 86 | 
             
                // building the correct url template with a placeholder
         | 
| 97 87 | 
             
                if (!this.options.url.includes('%{search}')) {
         | 
| @@ -151,6 +141,28 @@ var Autocompleter = new Class(Observer, { | |
| 151 141 |  | 
| 152 142 | 
             
            // protected
         | 
| 153 143 |  | 
| 144 | 
            +
              // trying to extract the input element options
         | 
| 145 | 
            +
              grabOptions: function(options) {
         | 
| 146 | 
            +
                var input = this.input;
         | 
| 147 | 
            +
                var options = options || eval('('+input.get('data-autocompleter-options')+')') || {};
         | 
| 148 | 
            +
                var keys = Autocompleter.Options.cssRule.split('[').last().split(']')[0].split('^='),
         | 
| 149 | 
            +
                    key = keys[1], value = input.get(keys[0]), match;
         | 
| 150 | 
            +
                    
         | 
| 151 | 
            +
                // trying to extract options
         | 
| 152 | 
            +
                if (value && (match = value.match(new RegExp('^'+ key +'+\\[(.*?)\\]$')))) {
         | 
| 153 | 
            +
                  match = match[1];
         | 
| 154 | 
            +
                  
         | 
| 155 | 
            +
                  // deciding whether it's a list of local options or an url
         | 
| 156 | 
            +
                  if (match.match(/^['"].*?['"]$/)) {
         | 
| 157 | 
            +
                    options.local = eval('['+ match +']');
         | 
| 158 | 
            +
                  } else if (!match.blank()) {
         | 
| 159 | 
            +
                    options.url = match;
         | 
| 160 | 
            +
                  }
         | 
| 161 | 
            +
                }
         | 
| 162 | 
            +
                
         | 
| 163 | 
            +
                return options;
         | 
| 164 | 
            +
              },
         | 
| 165 | 
            +
             | 
| 154 166 | 
             
              // works with the 'prev' and 'next' methods
         | 
| 155 167 | 
             
              select: function(what, fallback) {
         | 
| 156 168 | 
             
                var current = this.container.first('li.current');
         | 
| @@ -163,7 +175,7 @@ var Autocompleter = new Class(Observer, { | |
| 163 175 |  | 
| 164 176 | 
             
              // receives the keyboard events out of the input element
         | 
| 165 177 | 
             
              watch: function(event) {
         | 
| 166 | 
            -
                // skip the overlaping key codes that are already watched in the  | 
| 178 | 
            +
                // skip the overlaping key codes that are already watched in the document.js
         | 
| 167 179 | 
             
                if ([27,37,38,39,40,13].include(event.keyCode)) return;
         | 
| 168 180 |  | 
| 169 181 | 
             
                if (this.input.value.length >= this.options.minLength) {
         | 
| @@ -273,15 +285,12 @@ var Autocompleter = new Class(Observer, { | |
| 273 285 | 
             
            /**
         | 
| 274 286 | 
             
             * The document events hooking
         | 
| 275 287 | 
             
             *
         | 
| 276 | 
            -
             * Copyright (C) Nikolay V. Nemshilov | 
| 288 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 277 289 | 
             
             */
         | 
| 278 290 | 
             
            document.on({
         | 
| 279 | 
            -
              ready:   function() {
         | 
| 280 | 
            -
                Autocompleter.rescan();
         | 
| 281 | 
            -
              },
         | 
| 282 | 
            -
              
         | 
| 283 291 | 
             
              // the autocompletion list navigation
         | 
| 284 292 | 
             
              keydown: function(event) {
         | 
| 293 | 
            +
                // if there is an active options list, hijacking the navigation buttons
         | 
| 285 294 | 
             
                if (Autocompleter.current) {
         | 
| 286 295 | 
             
                  var name;
         | 
| 287 296 |  | 
| @@ -299,6 +308,11 @@ document.on({ | |
| 299 308 | 
             
                    event.stop();
         | 
| 300 309 | 
             
                  }
         | 
| 301 310 | 
             
                }
         | 
| 311 | 
            +
                
         | 
| 312 | 
            +
                // otherwise trying to find/instanciate an autocompliter
         | 
| 313 | 
            +
                else {
         | 
| 314 | 
            +
                  Autocompleter.find(event);
         | 
| 315 | 
            +
                }
         | 
| 302 316 | 
             
              }
         | 
| 303 317 | 
             
            });
         | 
| 304 318 |  | 
| @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
             *
         | 
| 4 4 | 
             
             * Home page: http://rightjs.org/ui/autocompleter
         | 
| 5 5 | 
             
             *
         | 
| 6 | 
            -
             * @copyright (C) 2009 Nikolay V. Nemshilov | 
| 6 | 
            +
             * @copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 7 7 | 
             
             */
         | 
| 8 8 | 
             
            if (!RightJS) { throw "Gimme RightJS. Please." };
         | 
| 9 | 
            -
            eval((function(s,d){for(var i=d.length-1;i>-1;i--)if(d[i])s=s.replace(new RegExp(i,'g'),d[i]);return s})(" | 
| 9 | 
            +
            eval((function(s,d){for(var i=d.length-1;i>-1;i--)if(d[i])s=s.replace(new RegExp(i,'g'),d[i]);return s})("29 16=99 Class(Observer,{extend:{EVENTS:$w('48 32 55 107 33 59'),63:{69:57.location.href,116:'53',80:'117',50:1,82:200,35:true,64:81,112:'slide',72:'short',25:'78',62:'[rel^=15]'},22:81,49:{},120:11(e){29 i=e.tar117;if(i.95(16.63.62)){29 u=125(i);if(!16.49[u])99 16(i)}},rescan:11(s){}},initialize:11(i,o){5.24=$(i);5.111(o);5.76=5.113.36(5);5._32=5.32.36(5);5.24.onKeyup(5.76).onBlur(5._32);5.19=$E('26',{'90':'15'}).94(5.24,'119');5.24.15=16.49[125(i)]=5},destroy:11(){5.24.52('keyup',5.76).52('blur',5._32);delete(5.24.15);18 5},set63:11(o){5.111(5.60(o));if(!5.17.69.93('%{53}'))5.17.69+=(5.17.69.93('?')?'&':'?')+5.17.116+'=%{53}'},48:11(){if(5.19.77()){29 d=5.24.74();5.19.56({71:(d.71+d.54)+'px',46:d.46+'px',67:d.67+'px'}).48(5.17.112,{duration:5.17.72,onFinish:5.45.36(5,'48')})}18 16.22=5},32:11(){if(5.19.96()){5.19.32();5.45.36(5,'32')}16.22=81;18 5},87:11(){18 5.33('87',5.19.33('li').105())},85:11(){18 5.33('85',5.19.61('li'))},59:11(c){29 c=c||5.19.61('li.22');if(c)5.24.89=c.innerHTML.stripTags();18 5.45('59').32()},60:11(o){29 i=5.24;29 o=o||122('('+i.117('data-15-17')+')')||{};29 a=16.63.62.68('[').105().68(']')[0].68('^='),k=a[1],v=i.117(a[0]),m;if(v&&(m=v.95(99 79('^'+k+'+\\\\[(.*?)\\\\]$')))){m=m[1];if(m.95(/^['\"].*?['\"]$/))o.64=122('['+m+']');58 if(!m.blank())o.69=m}18 o},33:11(w,f){29 c=5.19.61('li.22');if(c)c=c[w]('li')||c;18 5.45('33',(c||f).73('22'))},113:11(e){if([27,37,38,39,40,13].include(e.98))18;if(5.24.89.108>=5.17.50){if(5.44)5.44.cancel();5.44=5.102.36(5).delay(5.17.82)}58 18 5.32()},102:11(){5.44=81;5.35=5.35||{};29 s=5.24.89;if(s.108<5.17.50)18 5.32();if(5.35[s])5.42(5.35[s],s);58 if(5.17.64)5.42(5.84(s),s);58 5.request=Xhr.107(5.17.69.101('%{53}',encodeURIComponent(s)),{80:5.17.80,25:5.75(),onComplete:11(r){5.45('107').42(r.responseText,s)}.36(5)})},42:11(r,s){5.19.55(r).33('li').each(11(l){l.onmouseover=11(){l.73('22')};l.onmousedown=11(){5.59(l)}.36(5)},5);if(5.17.35)5.35[s]=r;18 5.45('55').48()},84:11(s){29 r=99 79(\"(\"+79.escape(s)+\")\",'ig');18 $E('ul').insert(5.17.64.128(11(o){if(r.test(o))18 $E('li',{121:o.101(r,'<109>$1</109>')})}).compact())},75:11(){5.21=5.21||5.17.25;if(5.21=='78'){5.21=$E('26',{'90':'15-25'}).94(5.24,'119');29 c='123'.68('').128(11(a){18 $E('26',{'90':'100-'+a,121:'»'})});(11(){29 d=c.shift();c.push(d);5.21.55(d)}.36(5)).periodical(400)}if(5.17.25=='78'){29 b=5.24.74();5.21.56('visiblity: 77').48();5.21.56({visibility:'96',71:(b.71+1)+'px',54:(b.54-2)+'px',lineHeight:(b.54-2)+'px',46:(b.46+b.67-5.21.offsetWidth-1)+'px'}).32()}18 5.21}});57.on({keydown:11(e){if(16.22){29 n;switch(e.98){47 27:n='32';41;47 37:n='87';41;47 39:n='85';41;47 38:n='87';41;47 40:n='85';41;47 13:n='59';41}if(n){16.22[n]();e.s71()}}58 16.120(e)}});57.write(\"<70 type=\\\"126/css\\\">26.15{104:30;88:91;z-118:83;28:30;34:0;43:0;31:white;-moz-129-110:#130 .86 .86 .114;-webkit-129-110:#130 .86 .86 .114;overflow:77}26.15 ul{124-70:30;34:0;43:0;28:30;31:30;*28-51:103 65 #97}26.15 ul li{124-70:30;106-weight:normal;34:0;43:.86 .114;28:103 65 #97;28-71:30;28-51:30;31:30;cursor:pointer}26.15 ul li:61-115{28-71:103 65 #97}26.15 ul li:105-115{28-51:103 65 #97;*28-51:30}26.15 ul li.22{31:#127}26.15-25{88:91;z-118:83;126-align:center;106-size:140%;106-family:Georgia;31:#127;color:#666;104:30;67:1em;34:0;43:0}26.15-25 26.100-1{34-46:-131}26.15-25 26.100-2{}26.15-25 26.100-3{34-46:131}</70>\");",",,,,,this,,,,,,function,,,,autocompleter,Autocompleter,options,return,container,,_spinner,current,,input,spinner,div,,border,var,none,background,hide,select,margin,cache,bind,,,,,break,suggest,padding,timeout,fire,left,case,show,instances,minLength,bottom,stopObserving,search,height,update,setStyle,document,else,done,grabOptions,first,cssRule,Options,local,solid,,width,split,url,style,top,fxDuration,radioClass,dimensions,getSpinner,_watch,hidden,native,RegExp,method,null,threshold,100000000,findLocal,next,2em,prev,position,value,class,absolute,_hide,includes,insertTo,match,visible,CCC,keyCode,new,dot,replace,trigger,1px,display,last,font,load,length,strong,shadow,$super,fxName,watch,4em,child,param,get,index,after,find,html,eval,,list,$uid,text,DDD,map,box,BBB,4px".split(",")));
         | 
| @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
             *
         | 
| 4 4 | 
             
             * See http://rightjs.org/goods/behave for more details
         | 
| 5 5 | 
             
             *
         | 
| 6 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 6 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 7 7 | 
             
             */
         | 
| 8 8 |  | 
| 9 9 | 
             
            /**
         | 
| @@ -14,7 +14,7 @@ | |
| 14 14 | 
             
             * on the page, and will watch any updates on the page
         | 
| 15 15 | 
             
             * and refresh the behaves automatically
         | 
| 16 16 | 
             
             *
         | 
| 17 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 17 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 18 18 | 
             
             */
         | 
| 19 19 | 
             
            var Behavior = new Class({
         | 
| 20 20 | 
             
              extend: {
         | 
| @@ -207,9 +207,9 @@ document.onReady(Behavior.refresh); | |
| 207 207 | 
             
            /**
         | 
| 208 208 | 
             
             * The Element unit wrapups for automaticall behaves processing on the page updates
         | 
| 209 209 | 
             
             *
         | 
| 210 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 210 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 211 211 | 
             
             */
         | 
| 212 | 
            -
            Element. | 
| 212 | 
            +
            Element.include((function(old_methods) {
         | 
| 213 213 | 
             
              var old_insert = old_methods.insert;
         | 
| 214 214 | 
             
              var old_update = old_methods.update;
         | 
| 215 215 |  | 
| @@ -238,7 +238,7 @@ return { | |
| 238 238 | 
             
             *
         | 
| 239 239 | 
             
             *   "div#sidebar ul li".stopBehave('click', function() {...});
         | 
| 240 240 | 
             
             *
         | 
| 241 | 
            -
             * Copyright (C) 2009 Nikolay V Nemshilov | 
| 241 | 
            +
             * Copyright (C) 2009-2010 Nikolay V Nemshilov
         | 
| 242 242 | 
             
             */
         | 
| 243 243 | 
             
            $ext(String.prototype, {
         | 
| 244 244 | 
             
              /**
         | 
| @@ -3,6 +3,6 @@ | |
| 3 3 | 
             
             *
         | 
| 4 4 | 
             
             * See http://rightjs.org/goods/behave for more details
         | 
| 5 5 | 
             
             *
         | 
| 6 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 6 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 7 7 | 
             
             */
         | 
| 8 | 
            -
            eval((function(s,d){for(var i=d.length-1;i>-1;i--)if(d[i])s=s.replace(new RegExp(i,'g'),d[i]);return s})("8 4=28 Class({extend:{29:2(){8 a=$A(6);8 b=28 4(a.18());5 b.on.7(b,a).25()},16:2(r){8 b=4.10[r];if(b)b.16();5 b},delegate:2(r){5 2(a){8 e=$(a.target);24(8 s in r)if(e.match(s))5 r[s].7(3,6)}},9:2(){24(8 k in 4.10)4.10[k].9()},10:{}},12:21,17:21,14:21,initialize:2(){8 a=$A(6);3.12=a.18();3.on.7(3,a);3.14=[]},25:2(){5 4.10[3.12]=3.9()},16:2(){8 a=3.17;if(!isHash(a[0])){8 h={};h[a.18()]=a;a=h}27 a=a[0];$$(3.12).20(2(e){8 u=26(e);if(3.14[u])24(8 k in a){if(15(a[k])){a[k].20(2(o){if(15(o))e.11.7(e,[k].13(options[0]))});if(!15(a[k][0]))e.11.7(e,[k].13(a[k][0]))}27 e.11.7(e,[k].13(a[k]))}},3);3.14=[];delete(4.10[3.12]);5 3},10:2(){5 4.10[3.12]===3},on:2(){3.17=$A(6);5 3},9:2(){$$(3.12).20(2(e){8 u=26(e);if(!3.14[u]){e.on.7(e,3.17);3.14[u]=1}},3);5 3}});document.onReady(4.9);19. | 
| 8 | 
            +
            eval((function(s,d){for(var i=d.length-1;i>-1;i--)if(d[i])s=s.replace(new RegExp(i,'g'),d[i]);return s})("8 4=28 Class({extend:{29:2(){8 a=$A(6);8 b=28 4(a.18());5 b.on.7(b,a).25()},16:2(r){8 b=4.10[r];if(b)b.16();5 b},delegate:2(r){5 2(a){8 e=$(a.target);24(8 s in r)if(e.match(s))5 r[s].7(3,6)}},9:2(){24(8 k in 4.10)4.10[k].9()},10:{}},12:21,17:21,14:21,initialize:2(){8 a=$A(6);3.12=a.18();3.on.7(3,a);3.14=[]},25:2(){5 4.10[3.12]=3.9()},16:2(){8 a=3.17;if(!isHash(a[0])){8 h={};h[a.18()]=a;a=h}27 a=a[0];$$(3.12).20(2(e){8 u=26(e);if(3.14[u])24(8 k in a){if(15(a[k])){a[k].20(2(o){if(15(o))e.11.7(e,[k].13(options[0]))});if(!15(a[k][0]))e.11.7(e,[k].13(a[k][0]))}27 e.11.7(e,[k].13(a[k]))}},3);3.14=[];delete(4.10[3.12]);5 3},10:2(){5 4.10[3.12]===3},on:2(){3.17=$A(6);5 3},9:2(){$$(3.12).20(2(e){8 u=26(e);if(!3.14[u]){e.on.7(e,3.17);3.14[u]=1}},3);5 3}});document.onReady(4.9);19.include((2(a){8 o=a.23;8 b=a.22;5{23:2(){o.7(3,6);4.9();5 3},22:2(c){b.7(3,6);if(is30(c))4.9();5 3}}})(19.Methods));$ext(30.prototype,{behave:2(){5 4.29.7(4,[''+3].13($A(6)))},16Behave:2(){5 4.16.7(4,[''+3].13($A(6)))}});",",,function,this,Behavior,return,arguments,apply,var,refresh,active,stopObserving,rule,concat,regs,isArray,stop,args,shift,Element,each,null,update,insert,for,start,$uid,else,new,add,String".split(",")));
         | 
| @@ -3,15 +3,14 @@ | |
| 3 3 | 
             
             *
         | 
| 4 4 | 
             
             * Home page: http://rightjs.org/ui/calendar
         | 
| 5 5 | 
             
             *
         | 
| 6 | 
            -
             * @copyright (C) 2009 Nikolay V. Nemshilov | 
| 6 | 
            +
             * @copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 7 7 | 
             
             */
         | 
| 8 8 | 
             
            if (!RightJS) { throw "Gimme RightJS. Please." };
         | 
| 9 9 |  | 
| 10 10 | 
             
            /**
         | 
| 11 11 | 
             
             * The calendar widget for RightJS
         | 
| 12 12 | 
             
             *
         | 
| 13 | 
            -
             *
         | 
| 14 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov aka St.
         | 
| 13 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 15 14 | 
             
             */
         | 
| 16 15 | 
             
            var Calendar = new Class(Observer, {
         | 
| 17 16 | 
             
              extend: {
         | 
| @@ -28,10 +27,11 @@ var Calendar = new Class(Observer, { | |
| 28 27 | 
             
                  fxDuration:     200,
         | 
| 29 28 | 
             
                  numberOfMonths: 1,      // a number or [x, y] greed definition
         | 
| 30 29 | 
             
                  timePeriod:     1,      // the timepicker minimal periods (in minutes, might be bigger than 60)
         | 
| 31 | 
            -
                   | 
| 32 | 
            -
                  relName:        'calendar',
         | 
| 30 | 
            +
                  
         | 
| 33 31 | 
             
                  twentyFourHour: null,   // null for automatic, or true|false to enforce
         | 
| 34 | 
            -
                  listYears:      false | 
| 32 | 
            +
                  listYears:      false,  // show/hide the years listing buttons
         | 
| 33 | 
            +
                  
         | 
| 34 | 
            +
                  cssRule:        '[rel^=calendar]' // css rule for calendar related elements
         | 
| 35 35 | 
             
                },
         | 
| 36 36 |  | 
| 37 37 | 
             
                Formats: {
         | 
| @@ -47,7 +47,7 @@ var Calendar = new Class(Observer, { | |
| 47 47 | 
             
                  Next:           'Next Month',
         | 
| 48 48 | 
             
                  Prev:           'Previous Month',
         | 
| 49 49 | 
             
                  NextYear:       'Next Year',
         | 
| 50 | 
            -
                  PrevYear:       ' | 
| 50 | 
            +
                  PrevYear:       'Previous Year',
         | 
| 51 51 |  | 
| 52 52 | 
             
                  dayNames:        $w('Sunday Monday Tuesday Wednesday Thursday Friday Saturday'),
         | 
| 53 53 | 
             
                  dayNamesShort:   $w('Sun Mon Tue Wed Thu Fri Sat'),
         | 
| @@ -56,26 +56,22 @@ var Calendar = new Class(Observer, { | |
| 56 56 | 
             
                  monthNamesShort: $w('Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec')
         | 
| 57 57 | 
             
                },
         | 
| 58 58 |  | 
| 59 | 
            -
                //  | 
| 60 | 
            -
                 | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
                   | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
                    
         | 
| 68 | 
            -
                     | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
                      calendar.assignTo(element);
         | 
| 76 | 
            -
                    }
         | 
| 77 | 
            -
                  });
         | 
| 78 | 
            -
                }
         | 
| 59 | 
            +
                current: null, // marker to the currently visible calendar
         | 
| 60 | 
            +
                instances: {}, // list of registered instances
         | 
| 61 | 
            +
                
         | 
| 62 | 
            +
                // finds and/or instanciates a Calendar related to the event target
         | 
| 63 | 
            +
                find: function(event) {
         | 
| 64 | 
            +
                  var element = event.target;
         | 
| 65 | 
            +
                  
         | 
| 66 | 
            +
                  if (isElement(element) && element.match(Calendar.Options.cssRule)) {
         | 
| 67 | 
            +
                    var uid      = $uid(element);
         | 
| 68 | 
            +
                    return Calendar.instances[uid] = Calendar.instances[uid] ||
         | 
| 69 | 
            +
                      new Calendar(eval('('+element.get('data-calendar-options')+')'));
         | 
| 70 | 
            +
                  }
         | 
| 71 | 
            +
                },
         | 
| 72 | 
            +
                
         | 
| 73 | 
            +
                // DEPRECATED scans for the auto-discoverable calendar inputs
         | 
| 74 | 
            +
                rescan: function(scope) { }
         | 
| 79 75 | 
             
              },
         | 
| 80 76 |  | 
| 81 77 | 
             
              /**
         | 
| @@ -190,8 +186,7 @@ var Calendar = new Class(Observer, { | |
| 190 186 | 
             
               */
         | 
| 191 187 | 
             
              show: function(position) {
         | 
| 192 188 | 
             
                this.element.show(this.options.fxName, {duration: this.options.fxDuration});
         | 
| 193 | 
            -
                Calendar.current = this;
         | 
| 194 | 
            -
                return this;
         | 
| 189 | 
            +
                return Calendar.current = this;
         | 
| 195 190 | 
             
              },
         | 
| 196 191 |  | 
| 197 192 | 
             
              /**
         | 
| @@ -210,7 +205,7 @@ var Calendar = new Class(Observer, { | |
| 210 205 | 
             
            /**
         | 
| 211 206 | 
             
             * This module handles the calendar elemnts building/updating processes
         | 
| 212 207 | 
             
             *
         | 
| 213 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 208 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 214 209 | 
             
             */
         | 
| 215 210 | 
             
            Calendar.include({
         | 
| 216 211 |  | 
| @@ -440,35 +435,8 @@ Calendar.include({ | |
| 440 435 | 
             
            /**
         | 
| 441 436 | 
             
             * This module handles the events connection
         | 
| 442 437 | 
             
             *
         | 
| 443 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 444 | 
            -
             */
         | 
| 445 | 
            -
             
         | 
| 446 | 
            -
            // the document keybindings hookup
         | 
| 447 | 
            -
            document.onKeydown(function(event) {
         | 
| 448 | 
            -
             if (Calendar.current) {
         | 
| 449 | 
            -
               var name;
         | 
| 450 | 
            -
             | 
| 451 | 
            -
               switch(event.keyCode) {
         | 
| 452 | 
            -
                 case 27: name = 'hide';      break;
         | 
| 453 | 
            -
                 case 37: name = 'prevDay';   break;
         | 
| 454 | 
            -
                 case 39: name = 'nextDay';   break;
         | 
| 455 | 
            -
                 case 38: name = 'prevWeek';  break;
         | 
| 456 | 
            -
                 case 40: name = 'nextWeek';  break;
         | 
| 457 | 
            -
                 case 34: name = 'nextMonth'; break;
         | 
| 458 | 
            -
                 case 33: name = 'prevMonth'; break;
         | 
| 459 | 
            -
                 case 13:
         | 
| 460 | 
            -
                    Calendar.current.select(Calendar.current.date);
         | 
| 461 | 
            -
                    name = 'done';
         | 
| 462 | 
            -
                    break;
         | 
| 463 | 
            -
               }
         | 
| 464 | 
            -
             | 
| 465 | 
            -
               if (name) {
         | 
| 466 | 
            -
                 Calendar.current[name]();
         | 
| 467 | 
            -
                 event.stop();
         | 
| 468 | 
            -
               }
         | 
| 469 | 
            -
             }
         | 
| 470 | 
            -
            });
         | 
| 471 | 
            -
             
         | 
| 438 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 439 | 
            +
             */ 
         | 
| 472 440 | 
             
            Calendar.include({
         | 
| 473 441 | 
             
              /**
         | 
| 474 442 | 
             
               * Initiates the 'select' event on the object
         | 
| @@ -607,7 +575,7 @@ Calendar.include({ | |
| 607 575 | 
             
            /**
         | 
| 608 576 | 
             
             * This module handles the calendar assignment to an input field
         | 
| 609 577 | 
             
             *
         | 
| 610 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 578 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 611 579 | 
             
             */
         | 
| 612 580 | 
             
            Calendar.include({
         | 
| 613 581 | 
             
              /**
         | 
| @@ -634,7 +602,13 @@ Calendar.include({ | |
| 634 602 | 
             
                } else {
         | 
| 635 603 | 
             
                  input.on({
         | 
| 636 604 | 
             
                    focus: this.showAt.bind(this, input),
         | 
| 637 | 
            -
                     | 
| 605 | 
            +
                    
         | 
| 606 | 
            +
                    click: function(e) {
         | 
| 607 | 
            +
                      e.stop();
         | 
| 608 | 
            +
                      if (this.element.hidden())
         | 
| 609 | 
            +
                        this.showAt(input);
         | 
| 610 | 
            +
                    }.bind(this),
         | 
| 611 | 
            +
                    
         | 
| 638 612 | 
             
                    keyDown: function(e) {
         | 
| 639 613 | 
             
                      if (e.keyCode == 9 && this.element.visible())
         | 
| 640 614 | 
             
                        this.hide();
         | 
| @@ -642,8 +616,6 @@ Calendar.include({ | |
| 642 616 | 
             
                  });
         | 
| 643 617 | 
             
                }
         | 
| 644 618 |  | 
| 645 | 
            -
                document.onClick(this.hide.bind(this));
         | 
| 646 | 
            -
                
         | 
| 647 619 | 
             
                return this;
         | 
| 648 620 | 
             
              },
         | 
| 649 621 |  | 
| @@ -728,7 +700,7 @@ Calendar.include({ | |
| 728 700 | 
             
             *   %S - Second of the minute (00..60)
         | 
| 729 701 | 
             
             *   %% - Literal ``%'' character
         | 
| 730 702 | 
             
             *
         | 
| 731 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 703 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 732 704 | 
             
             */
         | 
| 733 705 | 
             
            Calendar.include({
         | 
| 734 706 |  | 
| @@ -794,7 +766,7 @@ Calendar.include({ | |
| 794 766 | 
             
                  date = new Date();
         | 
| 795 767 | 
             
                }
         | 
| 796 768 |  | 
| 797 | 
            -
                return date;
         | 
| 769 | 
            +
                return isNaN(date.getTime()) ? new Date : date;
         | 
| 798 770 | 
             
              },  
         | 
| 799 771 |  | 
| 800 772 | 
             
              /**
         | 
| @@ -848,9 +820,109 @@ Calendar.include({ | |
| 848 820 | 
             
            /**
         | 
| 849 821 | 
             
             * Calendar fields autodiscovery via the rel="calendar" attribute
         | 
| 850 822 | 
             
             *
         | 
| 851 | 
            -
             * Copyright (C) 2009 Nikolay V. Nemshilov | 
| 823 | 
            +
             * Copyright (C) 2009-2010 Nikolay V. Nemshilov
         | 
| 852 824 | 
             
             */
         | 
| 853 | 
            -
             | 
| 825 | 
            +
             | 
| 826 | 
            +
             | 
| 827 | 
            +
            (function() {
         | 
| 828 | 
            +
              // shows a calendar by an event
         | 
| 829 | 
            +
              var show_calendar = function(event) {
         | 
| 830 | 
            +
                var calendar = Calendar.find(Event.ext(event));
         | 
| 831 | 
            +
                
         | 
| 832 | 
            +
                if (calendar) {
         | 
| 833 | 
            +
                  var input     = event.target;
         | 
| 834 | 
            +
                  var rule      = Calendar.Options.cssRule.split('[').last();
         | 
| 835 | 
            +
                  var key       = rule.split('=').last().split(']').first();
         | 
| 836 | 
            +
                  var rel_id_re = new RegExp(key+'\\[(.+?)\\]');
         | 
| 837 | 
            +
                  var rel_id    = input.get(rule.split('^=')[0]);
         | 
| 838 | 
            +
                  
         | 
| 839 | 
            +
                  if (rel_id && (rel_id = rel_id.match(rel_id_re))) {
         | 
| 840 | 
            +
                    input = $(rel_id[1]);
         | 
| 841 | 
            +
                    event.stop();
         | 
| 842 | 
            +
                  }
         | 
| 843 | 
            +
                  
         | 
| 844 | 
            +
                  calendar.showAt(input);
         | 
| 845 | 
            +
                }
         | 
| 846 | 
            +
              };
         | 
| 847 | 
            +
              
         | 
| 848 | 
            +
              // on-click handler
         | 
| 849 | 
            +
              var on_mousedown = function(event) {
         | 
| 850 | 
            +
                show_calendar(event);
         | 
| 851 | 
            +
                
         | 
| 852 | 
            +
                var target = event.target;
         | 
| 853 | 
            +
                if ([target].concat(target.parents()).first('hasClass', 'right-calendar')) event.stop();
         | 
| 854 | 
            +
              };
         | 
| 855 | 
            +
              
         | 
| 856 | 
            +
              var on_click = function(event) {
         | 
| 857 | 
            +
                var target = event.target;
         | 
| 858 | 
            +
                
         | 
| 859 | 
            +
                if (Calendar.find(event)) {
         | 
| 860 | 
            +
                  if (target.tagName == 'A')
         | 
| 861 | 
            +
                    event.stop();
         | 
| 862 | 
            +
                } else if (Calendar.current) {
         | 
| 863 | 
            +
                  if (![target].concat(target.parents()).first('hasClass', 'right-calendar'))
         | 
| 864 | 
            +
                    Calendar.current.hide();
         | 
| 865 | 
            +
                }
         | 
| 866 | 
            +
              };
         | 
| 867 | 
            +
              
         | 
| 868 | 
            +
              // on-focus handler
         | 
| 869 | 
            +
              var on_focus = function(event) {
         | 
| 870 | 
            +
                show_calendar(event);
         | 
| 871 | 
            +
              };
         | 
| 872 | 
            +
              
         | 
| 873 | 
            +
              // on-blur handler
         | 
| 874 | 
            +
              var on_blur = function(event) {
         | 
| 875 | 
            +
                var calendar = Calendar.find(Event.ext(event));
         | 
| 876 | 
            +
                
         | 
| 877 | 
            +
                if (calendar)
         | 
| 878 | 
            +
                  calendar.hide();
         | 
| 879 | 
            +
              };
         | 
| 880 | 
            +
              
         | 
| 881 | 
            +
              var on_keydown = function(event) {
         | 
| 882 | 
            +
                if (Calendar.current) {
         | 
| 883 | 
            +
                  var name;
         | 
| 884 | 
            +
             | 
| 885 | 
            +
                  switch(event.keyCode) {
         | 
| 886 | 
            +
                    case 27: name = 'hide';      break;
         | 
| 887 | 
            +
                    case 37: name = 'prevDay';   break;
         | 
| 888 | 
            +
                    case 39: name = 'nextDay';   break;
         | 
| 889 | 
            +
                    case 38: name = 'prevWeek';  break;
         | 
| 890 | 
            +
                    case 40: name = 'nextWeek';  break;
         | 
| 891 | 
            +
                    case 34: name = 'nextMonth'; break;
         | 
| 892 | 
            +
                    case 33: name = 'prevMonth'; break;
         | 
| 893 | 
            +
                    case 13:
         | 
| 894 | 
            +
                       Calendar.current.select(Calendar.current.date);
         | 
| 895 | 
            +
                       name = 'done';
         | 
| 896 | 
            +
                       break;
         | 
| 897 | 
            +
                  }
         | 
| 898 | 
            +
             | 
| 899 | 
            +
                  if (name) {
         | 
| 900 | 
            +
                    Calendar.current[name]();
         | 
| 901 | 
            +
                    event.stop();
         | 
| 902 | 
            +
                  }
         | 
| 903 | 
            +
                }
         | 
| 904 | 
            +
              };
         | 
| 905 | 
            +
              
         | 
| 906 | 
            +
              
         | 
| 907 | 
            +
              document.on({
         | 
| 908 | 
            +
                mousedown: on_mousedown,
         | 
| 909 | 
            +
                click:     on_click,
         | 
| 910 | 
            +
                keydown:   on_keydown
         | 
| 911 | 
            +
              });
         | 
| 912 | 
            +
              
         | 
| 913 | 
            +
              // the focus and blur events need some extra care
         | 
| 914 | 
            +
              if (Browser.IE) {
         | 
| 915 | 
            +
                // IE version
         | 
| 916 | 
            +
                document.attachEvent('onfocusin', on_focus);
         | 
| 917 | 
            +
                document.attachEvent('onfocusout', on_blur);
         | 
| 918 | 
            +
              } else {
         | 
| 919 | 
            +
                // W3C version
         | 
| 920 | 
            +
                document.addEventListener('focus', on_focus, true);
         | 
| 921 | 
            +
                document.addEventListener('blur',  on_blur,  true);
         | 
| 922 | 
            +
              }
         | 
| 923 | 
            +
            })();
         | 
| 924 | 
            +
             | 
| 925 | 
            +
             | 
| 854 926 |  | 
| 855 927 |  | 
| 856 928 | 
             
            document.write("<style type=\"text/css\">div.right-calendar,div.right-calendar table,div.right-calendar table tr,div.right-calendar table th,div.right-calendar table td,div.right-calendar table tbody,div.right-calendar table thead{background:none;border:none;width:auto;height:auto;margin:0;padding:0}*.right-ui-button{display:inline-block;*display:inline;*zoom:1;height:1em;line-height:1em;padding:.2em .5em;text-align:center;border:1px solid #CCC;border-radius:.2em;-moz-border-radius:.2em;-webkit-border-radius:.2em;cursor:pointer;color:#555;background-color:#FFF}*.right-ui-button:hover{color:#222;border-color:#999;background-color:#CCC}*.right-ui-button-disabled,*.right-ui-button-disabled:hover{color:#888;background:#EEE;border-color:#CCC;cursor:default}*.right-ui-buttons{margin-top:.5em}div.right-calendar{position:absolute;height:auto;border:1px solid #BBB;position:relative;padding:.5em;border-radius:.3em;-moz-border-radius:.3em;-webkit-border-radius:.3em;cursor:default;background-color:#EEE;-moz-box-shadow:.2em .4em .8em #666;-webkit-box-shadow:.2em .4em .8em #666}div.right-calendar-inline{position:relative;display:inline-block;vertical-align:top;*display:inline;*zoom:1;-moz-box-shadow:none;-webkit-box-shadow:none}div.right-calendar-prev-button,div.right-calendar-next-button,div.right-calendar-prev-year-button,div.right-calendar-next-year-button{position:absolute;float:left;width:1em;padding:.15em .4em}div.right-calendar-next-button{right:.5em}div.right-calendar-prev-year-button{left:2.55em}div.right-calendar-next-year-button{right:2.55em}div.right-calendar-month-caption{text-align:center;height:1.2em;line-height:1.2em}table.right-calendar-greed{border-spacing:0px}table.right-calendar-greed td{vertical-align:top;padding-right:.4em}table.right-calendar-greed>tbody>td:last-child{padding:0}div.right-calendar-month table{margin-top:.2em;border-spacing:1px;border-collapse:separate}div.right-calendar-month table th{color:#777;text-align:center}div.right-calendar-month table 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.right-calendar-month table td:hover{background-color:#CCC;border-color:#AAA;color:#000}div.right-calendar-month table td.right-calendar-day-blank{background:transparent;cursor:default;border:none}div.right-calendar-month table td.right-calendar-day-selected{background-color:#BBB;border-color:#AAA;color:#222;font-weight:bold;padding:.1em .2em}div.right-calendar-month table td.right-calendar-day-disabled{color:#888;background:#EEE;border-color:#CCC;cursor:default}div.right-calendar-time{border-top:1px solid #ccc;margin-top:.3em;padding-top:.5em;text-align:center}div.right-calendar-time select{margin:0 .4em}div.right-calendar-buttons div.right-ui-button{width:3.2em}div.right-calendar-done-button{position:absolute;right:.5em}</style>");
         |