right-rails 0.3.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/MIT-LICENSE +20 -0
- data/README.textile +50 -0
- data/Rakefile +23 -0
- data/generators/right_rails/right_rails_generator.rb +41 -0
- data/generators/right_rails/templates/iframed.html.erb +10 -0
- data/generators/right_scaffold/right_scaffold_generator.rb +53 -0
- data/generators/right_scaffold/templates/controller.rb +99 -0
- data/generators/right_scaffold/templates/helper.rb +2 -0
- data/generators/right_scaffold/templates/layout.html.erb +18 -0
- data/generators/right_scaffold/templates/style.css +54 -0
- data/generators/right_scaffold/templates/view__form.html.erb +16 -0
- data/generators/right_scaffold/templates/view__item.html.erb +13 -0
- data/generators/right_scaffold/templates/view_edit.html.erb +6 -0
- data/generators/right_scaffold/templates/view_index.html.erb +9 -0
- data/generators/right_scaffold/templates/view_new.html.erb +5 -0
- data/generators/right_scaffold/templates/view_show.html.erb +10 -0
- data/init.rb +12 -0
- data/javascripts/right-autocompleter-src.js +303 -0
- data/javascripts/right-autocompleter.js +9 -0
- data/javascripts/right-behavior-src.js +240 -0
- data/javascripts/right-behavior.js +8 -0
- data/javascripts/right-calendar-src.js +855 -0
- data/javascripts/right-calendar.js +9 -0
- data/javascripts/right-dnd-src.js +555 -0
- data/javascripts/right-dnd.js +9 -0
- data/javascripts/right-effects-src.js +425 -0
- data/javascripts/right-effects.js +6 -0
- data/javascripts/right-events-src.js +369 -0
- data/javascripts/right-events.js +6 -0
- data/javascripts/right-json-src.js +176 -0
- data/javascripts/right-json.js +6 -0
- data/javascripts/right-lightbox-src.js +597 -0
- data/javascripts/right-lightbox.js +9 -0
- data/javascripts/right-rails-src.js +269 -0
- data/javascripts/right-rails.js +9 -0
- data/javascripts/right-rater-src.js +248 -0
- data/javascripts/right-rater.js +9 -0
- data/javascripts/right-selectable-src.js +507 -0
- data/javascripts/right-selectable.js +7 -0
- data/javascripts/right-slider-src.js +291 -0
- data/javascripts/right-slider.js +7 -0
- data/javascripts/right-sortable-src.js +221 -0
- data/javascripts/right-sortable.js +9 -0
- data/javascripts/right-src.js +4939 -0
- data/javascripts/right-tabs-src.js +776 -0
- data/javascripts/right-tabs.js +6 -0
- data/javascripts/right-tooltips-src.js +130 -0
- data/javascripts/right-tooltips.js +9 -0
- data/javascripts/right-ui-i18n-de.js +29 -0
- data/javascripts/right-ui-i18n-en-us.js +11 -0
- data/javascripts/right-ui-i18n-es.js +29 -0
- data/javascripts/right-ui-i18n-fr.js +29 -0
- data/javascripts/right-ui-i18n-jp.js +33 -0
- data/javascripts/right-ui-i18n-ru.js +29 -0
- data/javascripts/right-ui-i18n-uk.js +29 -0
- data/javascripts/right.js +10 -0
- data/lib/right-rails.rb +11 -0
- data/lib/right_rails/controller_extensions.rb +85 -0
- data/lib/right_rails/helpers/basic.rb +111 -0
- data/lib/right_rails/helpers/forms.rb +239 -0
- data/lib/right_rails/helpers/misc.rb +164 -0
- data/lib/right_rails/helpers/rails.rb +166 -0
- data/lib/right_rails/helpers.rb +5 -0
- data/lib/right_rails/java_script_generator.rb +313 -0
- data/lib/right_rails.rb +6 -0
- data/spec/lib/right_rails/controller_extensions_spec.rb +60 -0
- data/spec/lib/right_rails/helpers/basic_spec.rb +74 -0
- data/spec/lib/right_rails/helpers/forms_spec.rb +51 -0
- data/spec/lib/right_rails/helpers/misc_spec.rb +120 -0
- data/spec/lib/right_rails/helpers/rails_spec.rb +149 -0
- data/spec/lib/right_rails/java_script_generator_spec.rb +317 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +15 -0
- metadata +128 -0
@@ -0,0 +1,9 @@
|
|
1
|
+
/**
|
2
|
+
* The calendar widget implemented with RightJS
|
3
|
+
*
|
4
|
+
* Home page: http://rightjs.org/ui/calendar
|
5
|
+
*
|
6
|
+
* @copyright (C) 2009 Nikolay V. Nemshilov aka St.
|
7
|
+
*/
|
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})("19 36=71 Class(Observer,{extend:{EVENTS:$w('show 102 44 100'),163:{67:'ISO',104:73,166:false,min47:73,max47:73,151:1,178:'fade',129:200,52:1,41:1,checkTags:'*',rel186:'14',43:73,135:false},Formats:{ISO:'%Y-%m-%d',POSIX:'%Y/%m/%d',EUR:'%d-%m-%Y',US:'%m/%d/%Y'},57:{Done:'Done',Now:'Now',Next:'Next 169',184:'184ious 169',Next181:'Next 181',184181:'184 181',91:$w('Sun121 Mon121 Tues121 Wednes121 Thurs121 Fri121 Satur121'),91183:$w('Sun Mon Tue Wed Thu Fri Sat'),91Min:$w('Su Mo Tu We Th Fr Sa'),59182:$w('January February March April May June July August September October November December'),59182183:$w('Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec')},rescan:16(){19 k=36.163.rel186;19 a=71 177(k+'\\\\[(.+?)\\\\]');$$(36.163.checkTags+'[rel*='+k+']').127(16(e){19 d=e.get('data-'+k+'-21');19 c=71 36(eval('('+d+')')||{});19 r=e.get('rel').159(a);if(r){19 i=$(r[1]);if(i)c.153(i,e)}92 c.153(e)})}},initialize:16(o){11.$super(o);11.29=$E('30',{'69':'17-14'});11.build().143().set47(71 47())},set163:16(u){11.$super(u);19 a=11.constructor;19 o=11.21;with(11.21){o.57={};146(19 k in a.57)57[k]=isArray(a.57[k])?a.57[k].clone():a.57[k];$ext(57,(u||{}).57);o.91=57.91Min;if(151)91.push(91.112());if(!isArray(52))52=[52,1];if(min47)min47=11.119(min47);if(max47){max47=11.119(max47);max47.set47(max47.get47()+1)}67=(a.Formats[67]||67).trim();if(104===73)104=67.search(/%[HkIl]/)>-1;if(43===73)43=67.search(/%[Il]/)<0;if(41>60&&12 %(41/60).134())43=true}25 11},set47:16(d){11.42=11.15547=11.119(d);25 11.up42()},get47:16(){25 11.42},102:16(){11.29.102(11.21.178,{duration:11.21.129});36.95=73;25 11},show:16(p){11.29.show(11.21.178,{duration:11.21.129});36.95=11;25 11},31:16(e,p){11.29.89('17-14-83').31(e,p);25 11}});36.131({up42:16(d){19 d=71 47(d||11.42),o=11.21;19 a=11.29.44('30.17-14-59');19 b=a.length;146(19 i=-(b-b/2).134()+1;i<(b-b/2).floor()+1;i++){19 m=71 47(d);m.76(d.61()+i);11.up42169(a.112(),m)}11.up42Next184169185s(d,b);if(o.104){11.94.72=o.41<60?d.152():(d.152()/(o.41/60)).round()*(o.41/60);11.113.72=(d.173()/(o.41 % 60)).round()*o.41}25 11},up42169:16(g,d){d.set47(32);19 f=32-d.get47();d.76(d.61()-1);19 b=(11.42.getTime()/86400000).134();19 r=g.44('90 tr');19 a=r.112().44('td');g.44('90 td').127(16(t){t.139='';t.69186='17-14-121-blank'});19 o=11.21;146(19 i=1;i<=f;i++){d.set47(i);19 e=d.get187();if(11.21.151)e=e?e-1:6;a[e].139=''+i;a[e].69186=b==(d.getTime()/86400000).134()?'17-14-121-44ed':'';if((o.min47&&o.min47>d)||(o.max47&&o.max47<d))a[e].69186='17-14-121-70';a[e].42=71 47(d);if(e==6)a=r.112().44('td')}19 c=(o.135?o.57.59182183[d.61()]+',':o.57.59182[d.61()])+' '+d.79();g.first('30.17-14-59-162').up42(c)},up42Next184169185s:16(a,f){19 o=11.21;if(o.min47){19 b=71 47(a.79(),0,1,0,0,0);19 c=71 47(o.min47.79(),0,1,0,0,0);11.122=b>c;b.76(a.61()-(f-f/2).134());c.76(o.min47.61());11.118=b>=c}92 11.118=11.122=true;if(o.max47){19 e=71 47(a);19 m=71 47(o.max47);[e,m].127(16(d){d.set47(32);d.76(d.61()-1);d.set47(32-d.get47());d.setHours(0);d.175(0);d.setSeconds(0);d.setMilliseconds(0)});11.117=e<m;[e,m].127('76',0);11.125=e<m}92 11.117=11.125=true;11.105[11.117?'78':'89']('17-ui-26-70');11.108[11.118?'78':'89']('17-ui-26-70');if(11.68){11.68[11.125?'78':'89']('17-ui-26-70');11.98[11.122?'78':'89']('17-ui-26-70')}},build:16(){11.174();19 g=90=$E('51',{'69':'17-14-157'}).31(11.29);19 o=11.21;if(Browser.OLD)90=$E('90').31(g);146(19 y=0;y<o.52[1];y++){19 r=$E('tr').31(90);146(19 x=0;x<o.52[0];x++)$E('td').31(r).93(11.build169())}if(o.104)11.buildTime();11.154();25 11},174:16(){19 i=11.21.57;11.108=$E('30',{'69':'17-ui-26 17-14-155-26',84:'‹',156:i.184}).31(11.29);11.105=$E('30',{'69':'17-ui-26 17-14-136-26',84:'›',156:i.Next}).31(11.29);if(11.21.135){11.98=$E('30',{'69':'17-ui-26 17-14-155-138-26',84:'«',156:i.184181}).31(11.108,'after');11.68=$E('30',{'69':'17-ui-26 17-14-136-138-26',84:'»',156:i.Next181}).31(11.105,'be146e')}},build169:16(){25 $E('30',{'69':'17-14-59'}).93('<30 69=\"17-14-59-162\"></30>'+'<51><thead><tr>'+11.21.91.map(16(n){25 '<th>'+n+'</th>'}).join('')+'</tr></thead><90>'+'123456'.split('').map(16(){25 '<tr><td><td><td><td><td><td><td></tr>'}).join('')+'</90></51>')},buildTime:16(){19 o=11.21;19 t=$E('30',{'69':'17-14-time',84:':'}).31(11.29);11.94=$E('44').31(t,'116');11.113=$E('44').31(t);19 m=o.41<60?o.41:60;19 h=o.41<60?1:(o.41/60).134();(60).times(16(a){19 c=(a<10?'0':'')+a;if(a<24&&a % h==0){if(o.43)11.94.93($E('145',{72:a,84:c}));92 if(a<12)11.94.93($E('145',{72:a,84:a==0?12:a}))}if(a % m==0)11.113.93($E('145',{72:a,84:c}))},11);if(!o.43){11.124=$E('44').31(t);(o.67.131s(/%P/)?['am','pm']:['AM','PM']).127(16(v){11.124.93($E('145',{72:v.96(),84:v}))},11)}},154:16(){if(!11.21.166)25;11.115=$E('30',{'69':'17-ui-26 17-14-now-26',84:11.21.57.Now});11.100185=$E('30',{'69':'17-ui-26 17-14-100-26',84:11.21.57.Done});$E('30',{'69':'17-ui-26s 17-14-26s'}).93([11.100185,11.115]).31(11.29)}});101.onKeydown(16(e){if(36.95){19 n;switch(e.keyCode){50 27:n='102';58;50 37:n='155187';58;50 39:n='136187';58;50 38:n='155Week';58;50 40:n='136Week';58;50 34:n='136169';58;50 33:n='141';58;50 13:36.95.44(36.95.42);n='100';58}if(n){36.95[n]();e.s116()}}});36.131({44:16(d){11.42=d;25 11.fire('44',d)},100:16(){if(!11.29.hasClass('17-14-83'))11.102();25 11.fire('100',11.42)},136187:16(){25 11.17647({'47':1})},155187:16(){25 11.17647({'47':-1})},136Week:16(){25 11.17647({'47':7})},155Week:16(){25 11.17647({'47':-7})},136169:16(){25 11.17647({169:1})},141:16(){25 11.17647({169:-1})},136181:16(){25 11.17647({Full181:1})},155181:16(){25 11.17647({Full181:-1})},17647:16(h){19 d=71 47(11.42);146(19 k in h)d['set'+k](d['get'+k]()+h[k]);if(!((11.21.min47&&11.21.min47>d)||(11.21.max47&&11.21.max47<d)))11.42=d;25 11.up42(11.42)},143:16(){11.108.63(11.141.65(11));11.105.63(11.136169.65(11));if(11.68){11.98.63(11.155181.65(11));11.68.63(11.136181.65(11))}11.29.44('30.17-14-59 51 90 td').127(16(c){c.63(16(){if(c.139!=''){19 p=11.29.first('.17-14-121-44ed');if(p)p.78('17-14-121-44ed');c.89('17-14-121-44ed');11.114(c.42)}}.65(11))},11);if(11.94){11.94.on('176',11.114.65(11));11.113.on('176',11.114.65(11));if(!11.21.43)11.124.on('176',11.114.65(11))}if(11.115){11.115.63(11.set47.65(11,71 47()));11.100185.63(11.100.65(11))}11.29.63(16(a){a.s116()});25 11},114:16(d){if(d 172 47){11.42.set181(d.79());11.42.76(d.61());11.42.set47(d.get47())}if(11.94){11.42.setHours(11.94.72.toInt()+(!11.21.43&&11.124.72=='pm'?12:0));11.42.175(11.113.72)}25 11.44(11.42)}});36.131({153:16(i,t){19 i=$(i),t=$(t);if(t)t.63(16(a){a.s116();11.128(i.focus())}.65(11));92 i.on({focus:11.128.65(11,i),click:16(a){a.s116();if(11.29.hidden())11.128(i)}.65(11),keyDown:16(a){if(a.keyCode==9&&11.29.visible())11.102()}.65(11)});101.63(11.102.65(11));25 11},128:16(e){19 e=$(e),d=e.dimensions();11.set47(11.119(e.72));11.29.setStyle({87:'120',81:'0',left:(d.left)+'px',116:(d.116+d.111)+'px'}).31(101.body);11.s116Observing('44').s116Observing('100');11.on(11.100185?'100':'44',16(){e.72=11.67()}.65(11));25 11.102Others().show()},toggleAt:16(i){if(11.29.parentNode&&11.29.visible())11.102();92 11.128(i);25 11},102Others:16(){$$('30.17-14').127(16(e){if(!e.hasClass('17-14-83')){if(e!=11.29)e.102()}});25 11}});36.131({119:16(g){19 d;if(g 172 47||47.119(g))d=71 47(g);92 if(isString(g)&&g){19 t=177.escape(11.21.67);19 h=t.159(/%[a-z]/ig).map('159',/[a-z]$/i).map('first').without('%');19 r=71 177('^'+t.161(/%p/i,'(pm|PM|am|AM)').161(/(%[a-z])/ig,'(.+?)')+'$');19 m=g.trim().159(r);if(m){m.112();19 y=73,f=73,d=73,b=73,e=73,s=73,c;while(m.length){19 v=m.112();19 k=h.112();if(k.96()=='b')f=11.21.57[k=='b'?'59182183':'59182'].indexOf(v);92 if(k.96()=='p')c=v.96();92{v=v.toInt();switch(k){50 'd':50 'e':d=v;58;50 'm':f=v-1;58;50 'y':50 'Y':y=v;58;50 'H':50 'k':50 'I':50 'l':b=v;58;50 'M':e=v;58;50 'S':s=v;58}}}if(c){b=b==12?0:b;b=(c=='pm'?b+12:b)}d=71 47(y,f,d,b,e,s)}}92 d=71 47();25 d},67:16(g){19 j=11.21.57;19 f=11.42.get187();19 q=11.42.61();19 c=11.42.get47();19 t=11.42.79();19 h=11.42.152();19 o=11.42.173();19 s=11.42.getSeconds();19 i=(h==0?12:h<13?h:h-12);19 v={a:j.91183[f],A:j.91[f],b:j.59182183[q],B:j.59182[q],d:(c<10?'0':'')+c,e:''+c,m:(q<9?'0':'')+(q+1),y:(''+t).substring(2,4),Y:''+t,H:(h<10?'0':'')+h,k:''+h,I:(h>0&&(h<10||(h>12&&h<22))?'0':'')+i,l:''+i,p:h<12?'AM':'PM',P:h<12?'am':'pm',M:(o<10?'0':'')+o,S:(s<10?'0':'')+s,'%':'%'};19 r=g||11.21.67;146(19 n in v)r=r.161('%'+n,v[n]);25 r}});101.onReady(36.rescan);101.write(\"<style type=\\\"137/css\\\">*.17-ui-26{132:83-block;*132:83;*zoom:1;111:1em;line-111:1em;53:.82 .160;137-109:149;28:1px 168 #164;28-75:.82;-180-28-75:.82;-126-28-75:.82;110:pointer;46:#555;35-46:#FFF}*.17-ui-26:hover{46:#222;28-46:#999;35-46:#164}*.17-ui-26-70,*.17-ui-26-70:hover{46:#888;35:#EEE;28-46:#164;110:130}*.17-ui-26s{81-116:.160}30.17-14{87:120;111:auto;28:1px 168 #BBB;87:relative;53:.160;28-75:.179;-180-28-75:.179;-126-28-75:.179;110:130;35-46:#EEE;-180-box-150:.82 .4em .8em #666;-126-box-150:.82 .4em .8em #666}30.17-14-83{87:relative;132:83-block;vertical-109:116;*132:83;*zoom:1;-180-box-150:80;-126-box-150:80}30.17-14-155-26,30.17-14-136-26,30.17-14-155-138-26,30.17-14-136-138-26{87:120;float:left;158:1em;53:.1160 .4em}30.17-14-136-26{17:.160}30.17-14-155-138-26{left:2.5160}30.17-14-136-138-26{17:2.5160}30.17-14-59-162{137-109:149;111:1.82;line-111:1.82}51.17-14-157{28-spacing:0px;28:80;35:80;158:auto}51.17-14-157 td{vertical-109:116;28:80;35:80;81:0;53:0;53-17:.4em}51.17-14-157 td:last-child{53:0}30.17-14-59 51{81:0;53:0;28:80;158:auto;81-116:.82;28-spacing:1px;28-collapse:separate;28:80;35:80}30.17-14-59 51 th{46:#777;137-109:149;28:80;35:80;53:0;81:0}30.17-14-59 51 td,30.17-14-59 51 td:last-child{137-109:17;53:.1em .179;35-46:#FFF;28:1px 168 #164;110:pointer;46:#555;28-75:.82;-180-28-75:.82;-126-28-75:.82}30.17-14-59 51 td:hover{35-46:#164;28-46:#AAA;46:#000}30.17-14-59 51 td.17-14-121-blank{35:transparent;110:130;28:80}30.17-14-59 51 td.17-14-121-44ed{35-46:#BBB;28-46:#AAA;46:#222;font-weight:bold;53:.1em .82}30.17-14-59 51 td.17-14-121-70{46:#888;35:#EEE;28-46:#164;110:130}30.17-14-time{28-116:1px 168 #ccc;81-116:.179;53-116:.160;137-109:149}30.17-14-time 44{81:0 .4em}30.17-14-26s 30.17-ui-26{158:3.82}30.17-14-100-26{87:120;17:.160}</style>\");",",,,,,,,,,,,this,,,calendar,,function,right,,var,,options,,,,return,button,,border,element,div,insertTo,,,,background,Calendar,,,,,timePeriod,date,twentyFourHour,select,,color,Date,changeDate,maxDate,case,table,numberOfMonths,padding,minDate,,,i18n,break,month,,getMonth,setDate,onClick,,bind,,format,nextYearButton,class,disabled,new,value,null,monthNamesShort,radius,setMonth,,removeClass,getFullYear,none,margin,2em,inline,html,updateNextPrevMonthButtons,,position,,addClass,tbody,dayNames,else,insert,hours,current,toLowerCase,getDate,prevYearButton,,done,document,hide,selected,showTime,nextButton,monthNames,doneButton,prevButton,align,cursor,height,shift,minutes,setTime,nowButton,top,hasNextMonth,hasPrevMonth,parse,absolute,day,hasPrevYear,,meridian,hasNextYear,webkit,each,showAt,fxDuration,default,include,display,buttons,ceil,listYears,next,text,year,innerHTML,className,prevMonth,nextMonth,connectEvents,stopObserving,option,for,update,dayNamesShort,center,shadow,firstDay,getHours,assignTo,buildButtons,prev,title,greed,width,match,5em,replace,caption,Options,CCC,updateMonth,showButtons,dayNamesMin,solid,Month,buildMonth,hideOthers,instanceof,getMinutes,buildSwaps,setMinutes,change,RegExp,fxName,3em,moz,Year,Names,Short,Prev,Button,Name,Day".split(",")));
|
@@ -0,0 +1,555 @@
|
|
1
|
+
/**
|
2
|
+
* Drag'n'Drop module for RightJS
|
3
|
+
*
|
4
|
+
* See http://rightjs.org/goods/drag-n-drop
|
5
|
+
*
|
6
|
+
* Copyright (C) Nikolay V. Nemshilov aka St.
|
7
|
+
*/
|
8
|
+
if (!RightJS) throw "Gimme RightJS";
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Draggable unit
|
12
|
+
*
|
13
|
+
* Copyright (C) Nikolay V. Nemshilov aka St.
|
14
|
+
*/
|
15
|
+
var Draggable = new Class(Observer, {
|
16
|
+
extend: {
|
17
|
+
EVENTS: $w('before start drag stop drop'),
|
18
|
+
|
19
|
+
Options: {
|
20
|
+
handle: null, // a handle element that will start the drag
|
21
|
+
|
22
|
+
snap: 0, // a number in pixels or [x,y]
|
23
|
+
axis: null, // null or 'x' or 'y' or 'vertical' or 'horizontal'
|
24
|
+
range: null, // {x: [min, max], y:[min, max]} or reference to another element
|
25
|
+
|
26
|
+
dragClass: 'dragging', // the in-process class name
|
27
|
+
|
28
|
+
clone: false, // if should keep a clone in place
|
29
|
+
revert: false, // marker if the object should be moved back on finish
|
30
|
+
revertDuration: 'normal', // the moving back fx duration
|
31
|
+
|
32
|
+
scroll: true, // if it should automatically scroll
|
33
|
+
scrollSensitivity: 32, // the scrolling area size in pixels
|
34
|
+
|
35
|
+
zIndex: 10000000, // the element's z-index
|
36
|
+
moveOut: false, // marker if the draggable should be moved out of it's context (for overflown elements)
|
37
|
+
|
38
|
+
relName: 'draggable' // the audodiscovery feature key
|
39
|
+
},
|
40
|
+
|
41
|
+
// referenece to the currently active draggable
|
42
|
+
current: null,
|
43
|
+
|
44
|
+
// scans the document for auto-processed draggables with the rel="draggable" attribute
|
45
|
+
rescan: function() {
|
46
|
+
var key = this.Options.relName;
|
47
|
+
$$('*[rel^="'+key+'"]').each(function(element) {
|
48
|
+
if (!element._draggable) {
|
49
|
+
var data = element.get('data-'+key+'-options');
|
50
|
+
new this(element, eval('('+data+')') || {});
|
51
|
+
}
|
52
|
+
}, this);
|
53
|
+
}
|
54
|
+
},
|
55
|
+
|
56
|
+
/**
|
57
|
+
* Basic controller
|
58
|
+
*
|
59
|
+
* @param mixed element reference
|
60
|
+
* @param Object options
|
61
|
+
*/
|
62
|
+
initialize: function(element, options) {
|
63
|
+
this.element = $(element);
|
64
|
+
this.$super(options);
|
65
|
+
|
66
|
+
this.element._draggable = this.init();
|
67
|
+
},
|
68
|
+
|
69
|
+
/**
|
70
|
+
* detaches the mouse observers out of the draggable element
|
71
|
+
*
|
72
|
+
* @return this
|
73
|
+
*/
|
74
|
+
destroy: function() {
|
75
|
+
this.handle.stopObserving('mousedown', this._dragStart);
|
76
|
+
delete(this.element._draggable);
|
77
|
+
|
78
|
+
return this;
|
79
|
+
},
|
80
|
+
|
81
|
+
// additional options processing
|
82
|
+
setOptions: function(options) {
|
83
|
+
this.$super(options);
|
84
|
+
|
85
|
+
// checking the handle
|
86
|
+
this.handle = this.options.handle ? $(this.options.handle) : this.element;
|
87
|
+
|
88
|
+
// checking the spappings
|
89
|
+
if (isArray(this.options.snap)) {
|
90
|
+
this.snapX = this.options.snap[0];
|
91
|
+
this.snapY = this.options.snap[1];
|
92
|
+
} else {
|
93
|
+
this.snapX = this.snapY = this.options.snap;
|
94
|
+
}
|
95
|
+
|
96
|
+
return this;
|
97
|
+
},
|
98
|
+
|
99
|
+
/**
|
100
|
+
* Moves the element back to the original position
|
101
|
+
*
|
102
|
+
* @return this
|
103
|
+
*/
|
104
|
+
revert: function() {
|
105
|
+
var position = this.clone.position();
|
106
|
+
var end_style = {
|
107
|
+
top: (position.y + this.ryDiff) + 'px',
|
108
|
+
left: (position.x + this.rxDiff) + 'px'
|
109
|
+
};
|
110
|
+
|
111
|
+
if (this.options.revertDuration && this.element.morph) {
|
112
|
+
this.element.morph(end_style, {
|
113
|
+
duration: this.options.revertDuration,
|
114
|
+
onFinish: this.swapBack.bind(this)
|
115
|
+
});
|
116
|
+
} else {
|
117
|
+
this.element.setStyle(end_style);
|
118
|
+
this.swapBack();
|
119
|
+
}
|
120
|
+
|
121
|
+
return this;
|
122
|
+
},
|
123
|
+
|
124
|
+
// protected
|
125
|
+
|
126
|
+
init: function() {
|
127
|
+
// caching the callback so that we could detach it later
|
128
|
+
this._dragStart = this.dragStart.bind(this);
|
129
|
+
|
130
|
+
this.handle.onMousedown(this._dragStart);
|
131
|
+
|
132
|
+
return this;
|
133
|
+
},
|
134
|
+
|
135
|
+
// handles the event start
|
136
|
+
dragStart: function(event) {
|
137
|
+
this.fire('before', this, event.stop());
|
138
|
+
|
139
|
+
// calculating the positions diff
|
140
|
+
var position = position = this.element.position();
|
141
|
+
|
142
|
+
this.xDiff = event.pageX - position.x;
|
143
|
+
this.yDiff = event.pageY - position.y;
|
144
|
+
|
145
|
+
// grabbing the relative position diffs
|
146
|
+
var relative_position = {
|
147
|
+
y: this.element.getStyle('top').toFloat(),
|
148
|
+
x: this.element.getStyle('left').toFloat()
|
149
|
+
};
|
150
|
+
|
151
|
+
this.rxDiff = isNaN(relative_position.x) ? 0 : (relative_position.x - position.x);
|
152
|
+
this.ryDiff = isNaN(relative_position.y) ? 0 : (relative_position.y - position.y);
|
153
|
+
|
154
|
+
// preserving the element sizes
|
155
|
+
var size = {
|
156
|
+
x: this.element.getStyle('width'),
|
157
|
+
y: this.element.getStyle('height')
|
158
|
+
};
|
159
|
+
|
160
|
+
if (size.x == 'auto') size.x = this.element.offsetWidth + 'px';
|
161
|
+
if (size.y == 'auto') size.y = this.element.offsetHeight + 'px';
|
162
|
+
|
163
|
+
// building a clone element if necessary
|
164
|
+
if (this.options.clone || this.options.revert) {
|
165
|
+
this.clone = $(this.element.cloneNode(true)).setStyle({
|
166
|
+
visibility: this.options.clone ? 'visible' : 'hidden'
|
167
|
+
}).insertTo(this.element, 'before');
|
168
|
+
}
|
169
|
+
|
170
|
+
// reinserting the element to the body so it was over all the other elements
|
171
|
+
this.element.setStyle({
|
172
|
+
position: 'absolute',
|
173
|
+
zIndex: Draggable.Options.zIndex++,
|
174
|
+
top: (position.y + this.ryDiff) + 'px',
|
175
|
+
left: (position.x + this.rxDiff) + 'px',
|
176
|
+
width: size.x,
|
177
|
+
height: size.y
|
178
|
+
}).addClass(this.options.dragClass);
|
179
|
+
|
180
|
+
if (this.options.moveOut) this.element.insertTo(document.body);
|
181
|
+
|
182
|
+
|
183
|
+
// caching the window scrolls
|
184
|
+
this.winScrolls = window.scrolls();
|
185
|
+
this.winSizes = window.sizes();
|
186
|
+
|
187
|
+
Draggable.current = this.calcConstraints().fire('start', this, event);
|
188
|
+
},
|
189
|
+
|
190
|
+
// catches the mouse move event
|
191
|
+
dragProcess: function(event) {
|
192
|
+
var page_x = event.pageX, page_y = event.pageY, x = page_x - this.xDiff, y = page_y - this.yDiff;
|
193
|
+
|
194
|
+
// checking the range
|
195
|
+
if (this.ranged) {
|
196
|
+
if (this.minX > x) x = this.minX;
|
197
|
+
if (this.maxX < x) x = this.maxX;
|
198
|
+
if (this.minY > y) y = this.minY;
|
199
|
+
if (this.maxY < y) y = this.maxY;
|
200
|
+
}
|
201
|
+
|
202
|
+
// checking the scrolls
|
203
|
+
if (this.options.scroll) {
|
204
|
+
var scrolls = {x: this.winScrolls.x, y: this.winScrolls.y},
|
205
|
+
sensitivity = this.options.scrollSensitivity;
|
206
|
+
|
207
|
+
if ((page_y - scrolls.y) < sensitivity) {
|
208
|
+
scrolls.y = page_y - sensitivity;
|
209
|
+
} else if ((scrolls.y + this.winSizes.y - page_y) < sensitivity){
|
210
|
+
scrolls.y = page_y - this.winSizes.y + sensitivity;
|
211
|
+
}
|
212
|
+
|
213
|
+
if ((page_x - scrolls.x) < sensitivity) {
|
214
|
+
scrolls.x = page_x - sensitivity;
|
215
|
+
} else if ((scrolls.x + this.winSizes.x - page_x) < sensitivity){
|
216
|
+
scrolls.x = page_x - this.winSizes.x + sensitivity;
|
217
|
+
}
|
218
|
+
|
219
|
+
if (scrolls.y < 0) scrolls.y = 0;
|
220
|
+
if (scrolls.x < 0) scrolls.x = 0;
|
221
|
+
|
222
|
+
if (scrolls.y < this.winScrolls.y || scrolls.y > this.winScrolls.y ||
|
223
|
+
scrolls.x < this.winScrolls.x || scrolls.x > this.winScrolls.x) {
|
224
|
+
|
225
|
+
window.scrollTo(this.winScrolls = scrolls);
|
226
|
+
}
|
227
|
+
}
|
228
|
+
|
229
|
+
// checking the snaps
|
230
|
+
if (this.snapX) x = x - x % this.snapX;
|
231
|
+
if (this.snapY) y = y - y % this.snapY;
|
232
|
+
|
233
|
+
// checking the constraints
|
234
|
+
if (!this.axisY) this.element.style.left = (x + this.rxDiff) + 'px';
|
235
|
+
if (!this.axisX) this.element.style.top = (y + this.ryDiff) + 'px';
|
236
|
+
|
237
|
+
this.fire('drag', this, event);
|
238
|
+
},
|
239
|
+
|
240
|
+
// handles the event stop
|
241
|
+
dragStop: function(event) {
|
242
|
+
this.element.removeClass(this.options.dragClass);
|
243
|
+
|
244
|
+
// notifying the droppables for the drop
|
245
|
+
Droppable.checkDrop(event, this);
|
246
|
+
|
247
|
+
if (this.options.revert) {
|
248
|
+
this.revert();
|
249
|
+
}
|
250
|
+
|
251
|
+
Draggable.current = null;
|
252
|
+
|
253
|
+
this.fire('stop', this, event);
|
254
|
+
},
|
255
|
+
|
256
|
+
// swaps the clone element to the actual element back
|
257
|
+
swapBack: function() {
|
258
|
+
if (this.clone) {
|
259
|
+
this.clone.insert(
|
260
|
+
this.element.setStyle({
|
261
|
+
width: this.clone.getStyle('width'),
|
262
|
+
height: this.clone.getStyle('height'),
|
263
|
+
position: this.clone.getStyle('position'),
|
264
|
+
zIndex: this.clone.getStyle('zIndex')
|
265
|
+
}), 'before'
|
266
|
+
).remove();
|
267
|
+
}
|
268
|
+
},
|
269
|
+
|
270
|
+
// calculates the constraints
|
271
|
+
calcConstraints: function() {
|
272
|
+
var axis = this.options.axis;
|
273
|
+
this.axisX = ['x', 'horizontal'].include(axis);
|
274
|
+
this.axisY = ['y', 'vertical'].include(axis);
|
275
|
+
|
276
|
+
this.ranged = false;
|
277
|
+
var range = this.options.range;
|
278
|
+
if (range) {
|
279
|
+
this.ranged = true;
|
280
|
+
|
281
|
+
// if the range is defined by another element
|
282
|
+
var element = $(range);
|
283
|
+
if (isElement(element)) {
|
284
|
+
var dims = element.dimensions();
|
285
|
+
|
286
|
+
range = {
|
287
|
+
x: [dims.left, dims.left + dims.width],
|
288
|
+
y: [dims.top, dims.top + dims.height]
|
289
|
+
};
|
290
|
+
}
|
291
|
+
|
292
|
+
if (isHash(range)) {
|
293
|
+
var size = this.element.sizes();
|
294
|
+
|
295
|
+
if (range.x) {
|
296
|
+
this.minX = range.x[0];
|
297
|
+
this.maxX = range.x[1] - size.x;
|
298
|
+
}
|
299
|
+
if (range.y) {
|
300
|
+
this.minY = range.y[0];
|
301
|
+
this.maxY = range.y[1] - size.y;
|
302
|
+
}
|
303
|
+
}
|
304
|
+
}
|
305
|
+
|
306
|
+
return this;
|
307
|
+
}
|
308
|
+
});
|
309
|
+
/**
|
310
|
+
* Droppable unit
|
311
|
+
*
|
312
|
+
* Copyright (C) Nikolay V. Nemshilov aka St.
|
313
|
+
*/
|
314
|
+
var Droppable = new Class(Observer, {
|
315
|
+
extend: {
|
316
|
+
EVENTS: $w('drop hover leave'),
|
317
|
+
|
318
|
+
Options: {
|
319
|
+
accept: '*',
|
320
|
+
containment: null, // the list of elements (or ids) that should to be accepted
|
321
|
+
|
322
|
+
overlap: null, // 'x', 'y', 'horizontal', 'vertical', 'both' makes it respond only if the draggable overlaps the droppable
|
323
|
+
overlapSize: 0.5, // the overlapping level 0 for nothing 1 for the whole thing
|
324
|
+
|
325
|
+
allowClass: 'droppable-allow',
|
326
|
+
denyClass: 'droppable-deny',
|
327
|
+
|
328
|
+
relName: 'droppable' // automatically discovered feature key
|
329
|
+
},
|
330
|
+
|
331
|
+
// See the Draggable rescan method, case we're kinda hijacking it in here
|
332
|
+
rescan: eval('({f:'+Draggable.rescan.toString().replace(/\._draggable/g, '._droppable')+'})').f,
|
333
|
+
|
334
|
+
/**
|
335
|
+
* Checks for hoverting draggable
|
336
|
+
*
|
337
|
+
* @param Event mouse event
|
338
|
+
* @param Draggable draggable
|
339
|
+
*/
|
340
|
+
checkHover: function(event, draggable) {
|
341
|
+
for (var i=0, length = this.active.length; i < length; i++)
|
342
|
+
this.active[i].checkHover(event, draggable);
|
343
|
+
},
|
344
|
+
|
345
|
+
/**
|
346
|
+
* Checks for a drop
|
347
|
+
*
|
348
|
+
* @param Event mouse event
|
349
|
+
* @param Draggable draggable
|
350
|
+
*/
|
351
|
+
checkDrop: function(event, draggable) {
|
352
|
+
for (var i=0, length = this.active.length; i < length; i++)
|
353
|
+
this.active[i].checkDrop(event, draggable);
|
354
|
+
},
|
355
|
+
|
356
|
+
active: []
|
357
|
+
},
|
358
|
+
|
359
|
+
/**
|
360
|
+
* Basic cosntructor
|
361
|
+
*
|
362
|
+
* @param mixed the draggable element reference
|
363
|
+
* @param Object options
|
364
|
+
*/
|
365
|
+
initialize: function(element, options) {
|
366
|
+
this.element = $(element);
|
367
|
+
this.$super(options);
|
368
|
+
|
369
|
+
Droppable.active.push(this.element._droppable = this);
|
370
|
+
},
|
371
|
+
|
372
|
+
/**
|
373
|
+
* Detaches the attached events
|
374
|
+
*
|
375
|
+
* @return self
|
376
|
+
*/
|
377
|
+
destroy: function() {
|
378
|
+
Droppable.active = Droppable.active.without(this);
|
379
|
+
delete(this.element._droppable);
|
380
|
+
return this;
|
381
|
+
},
|
382
|
+
|
383
|
+
/**
|
384
|
+
* checks the event for hovering
|
385
|
+
*
|
386
|
+
* @param Event mouse event
|
387
|
+
* @param Draggable the draggable object
|
388
|
+
*/
|
389
|
+
checkHover: function(event, draggable) {
|
390
|
+
if (this.hoveredBy(event, draggable)) {
|
391
|
+
if (!this._hovered) {
|
392
|
+
this._hovered = true;
|
393
|
+
this.element.addClass(this.options[this.allows(draggable) ? 'allowClass' : 'denyClass']);
|
394
|
+
this.fire('hover', draggable, this, event);
|
395
|
+
}
|
396
|
+
} else if (this._hovered) {
|
397
|
+
this._hovered = false;
|
398
|
+
this.reset().fire('leave', draggable, this, event);
|
399
|
+
}
|
400
|
+
},
|
401
|
+
|
402
|
+
/**
|
403
|
+
* Checks if it should process the drop from draggable
|
404
|
+
*
|
405
|
+
* @param Event mouse event
|
406
|
+
* @param Draggable draggable
|
407
|
+
*/
|
408
|
+
checkDrop: function(event, draggable) {
|
409
|
+
this.reset();
|
410
|
+
if (this.hoveredBy(event, draggable) && this.allows(draggable)) {
|
411
|
+
draggable.fire('drop', this, draggable, event);
|
412
|
+
this.fire('drop', draggable, this, event);
|
413
|
+
}
|
414
|
+
},
|
415
|
+
|
416
|
+
/**
|
417
|
+
* resets the element state
|
418
|
+
*
|
419
|
+
* @return self
|
420
|
+
*/
|
421
|
+
reset: function() {
|
422
|
+
this.element.removeClass(this.options.allowClass).removeClass(this.options.denyClass);
|
423
|
+
return this;
|
424
|
+
},
|
425
|
+
|
426
|
+
// protected
|
427
|
+
|
428
|
+
// checks if the element is hovered by the event
|
429
|
+
hoveredBy: function(event, draggable) {
|
430
|
+
var dims = this.element.dimensions(),
|
431
|
+
t_top = dims.top,
|
432
|
+
t_left = dims.left,
|
433
|
+
t_right = dims.left + dims.width,
|
434
|
+
t_bottom = dims.top + dims.height,
|
435
|
+
event_x = event.pageX,
|
436
|
+
event_y = event.pageY;
|
437
|
+
|
438
|
+
// checking the overlapping
|
439
|
+
if (this.options.overlap) {
|
440
|
+
var drag_dims = draggable.element.dimensions(),
|
441
|
+
level = this.options.overlapSize,
|
442
|
+
top = drag_dims.top,
|
443
|
+
left = drag_dims.left,
|
444
|
+
right = drag_dims.left + drag_dims.width,
|
445
|
+
bottom = drag_dims.top + drag_dims.height;
|
446
|
+
|
447
|
+
|
448
|
+
switch (this.options.overlap) {
|
449
|
+
// horizontal overlapping only check
|
450
|
+
case 'x':
|
451
|
+
case 'horizontal':
|
452
|
+
return (
|
453
|
+
(top > t_top && top < t_bottom) ||
|
454
|
+
(bottom > t_top && bottom < t_bottom)
|
455
|
+
) && (
|
456
|
+
(left > t_left && left < (t_right - dims.width * level)) ||
|
457
|
+
(right < t_right && right > (t_left + dims.width * level))
|
458
|
+
);
|
459
|
+
|
460
|
+
// vertical overlapping only check
|
461
|
+
case 'y':
|
462
|
+
case 'vertical':
|
463
|
+
return (
|
464
|
+
(left > t_left && left < t_right) ||
|
465
|
+
(right > t_left && right < t_right)
|
466
|
+
) && (
|
467
|
+
(top > t_top && top < (t_bottom - dims.height * level)) ||
|
468
|
+
(bottom < t_bottom && bottom > (t_top + dims.height * level))
|
469
|
+
);
|
470
|
+
|
471
|
+
// both overlaps check
|
472
|
+
default:
|
473
|
+
return (
|
474
|
+
(left > t_left && left < (t_right - dims.width * level)) ||
|
475
|
+
(right < t_right && right > (t_left + dims.width * level))
|
476
|
+
) && (
|
477
|
+
(top > t_top && top < (t_bottom - dims.height * level)) ||
|
478
|
+
(bottom < t_bottom && bottom > (t_top + dims.height * level))
|
479
|
+
);
|
480
|
+
}
|
481
|
+
|
482
|
+
} else {
|
483
|
+
// simple check agains the event position
|
484
|
+
return event_x > t_left && event_x < t_right && event_y > t_top && event_y < t_bottom;
|
485
|
+
}
|
486
|
+
},
|
487
|
+
|
488
|
+
// checks if the object accepts the draggable
|
489
|
+
allows: function(draggable) {
|
490
|
+
if (this.options.containment && !this._scanned) {
|
491
|
+
this.options.containment.walk($);
|
492
|
+
this._scanned = true;
|
493
|
+
}
|
494
|
+
|
495
|
+
// checking the invitations list
|
496
|
+
var welcomed = this.options.containment ? this.options.containment.includes(draggable.element) : true;
|
497
|
+
|
498
|
+
return welcomed && (this.options.accept == '*' ? true : draggable.element.match(this.options.accept));
|
499
|
+
}
|
500
|
+
|
501
|
+
});
|
502
|
+
/**
|
503
|
+
* The document events hooker
|
504
|
+
*
|
505
|
+
* Copyright (C) 2009 Nikolay V. Nemshilov aka St.
|
506
|
+
*/
|
507
|
+
document.on({
|
508
|
+
// parocesses the automatically discovered elements
|
509
|
+
ready: function() {
|
510
|
+
Draggable.rescan();
|
511
|
+
Droppable.rescan();
|
512
|
+
},
|
513
|
+
|
514
|
+
// watch the draggables moving arond
|
515
|
+
mousemove: function(event) {
|
516
|
+
if (Draggable.current) {
|
517
|
+
Draggable.current.dragProcess(event);
|
518
|
+
Droppable.checkHover(event, Draggable.current);
|
519
|
+
}
|
520
|
+
},
|
521
|
+
|
522
|
+
// releases the current draggable on mouse up
|
523
|
+
mouseup: function(event) {
|
524
|
+
if (Draggable.current) {
|
525
|
+
Draggable.current.dragStop(event);
|
526
|
+
}
|
527
|
+
}
|
528
|
+
});
|
529
|
+
/**
|
530
|
+
* Element level hooks for drag'n'drops
|
531
|
+
*
|
532
|
+
* Copyright (C) Nikolay V. Nemshilov aka St.
|
533
|
+
*/
|
534
|
+
Element.addMethods({
|
535
|
+
|
536
|
+
makeDraggable: function(options) {
|
537
|
+
new Draggable(this, options);
|
538
|
+
return this;
|
539
|
+
},
|
540
|
+
|
541
|
+
undoDraggable: function() {
|
542
|
+
if (this._draggable) this._draggable.destroy();
|
543
|
+
return this;
|
544
|
+
},
|
545
|
+
|
546
|
+
makeDroppable: function(options) {
|
547
|
+
new Droppable(this, options);
|
548
|
+
return this;
|
549
|
+
},
|
550
|
+
|
551
|
+
undoDroppable: function() {
|
552
|
+
if (this._droppable) this._droppable.destroy();
|
553
|
+
return this;
|
554
|
+
}
|
555
|
+
});
|
@@ -0,0 +1,9 @@
|
|
1
|
+
/**
|
2
|
+
* Drag'n'Drop module for RightJS
|
3
|
+
*
|
4
|
+
* See http://rightjs.org/goods/drag-n-drop
|
5
|
+
*
|
6
|
+
* Copyright (C) Nikolay V. Nemshilov aka St.
|
7
|
+
*/
|
8
|
+
if (!RightJS) throw "Gimme RightJS";
|
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})("13 9=73 111(83,{97:{96:$w('57 110 118 s31 76'),46:{29:38,59:0,114:38,108:38,53:'118ging',18:54,42:54,27:'normal',95:39,36:32,41:10000000,89:54,62:'118gable'},20:38,40:8(){13 k=4.46.62;$$('*[rel^=\"'+k+'\"]').each(8(e){if(!e.19){13 d=e.get('data-'+k+'-7');73 4(e,116('('+d+')')||{})}},4)}},67:8(e,o){4.6=$(e);4.69(o);4.6.19=4.119()},47:8(){4.29.s31Observing('mousedown',4.44);99(4.6.19);11 4},set46:8(o){4.69(o);4.29=4.7.29?$(4.7.29):4.6;if(isArray(4.7.59)){4.59X=4.7.59[0];4.59Y=4.7.59[1]}50 4.59X=4.59Y=4.7.59;11 4},42:8(){13 p=4.18.25();13 e={31:(p.y+4.56)+'px',24:(p.x+4.55)+'px'};if(4.7.27&&4.6.109)4.6.109(e,{duration:4.7.27,onFinish:4.58.115(4)});50{4.6.34(e);4.58()}11 4},119:8(){4.44=4.75.115(4);4.29.onMousedown(4.44);11 4},75:8(e){4.30('57',4,e.s31());13 p=p=4.6.25();4.103=e.77-p.x;4.113=e.78-p.y;13 r={y:4.6.16('31').88(),x:4.6.16('24').88()};4.55=104(r.x)?0:(r.x-p.x);4.56=104(r.y)?0:(r.y-p.y);13 s={x:4.6.16('17'),y:4.6.16('15')};if(s.x=='117')s.x=4.6.offsetWidth+'px';if(s.y=='117')s.y=4.6.offsetHeight+'px';if(4.7.18||4.7.42)4.18=$(4.6.18Node(39)).34({visibility:4.7.18?'visible':'hidden'}).84(4.6,'57');4.6.34({25:'absolute',41:9.46.41++,31:(p.y+4.56)+'px',24:(p.x+4.55)+'px',17:s.x,15:s.y}).86(4.7.53);if(4.7.89)4.6.84(79.body);4.12=72.95s();4.26=72.106();9.20=4.48().30('110',4,e)},63:8(e){13 p=e.77,a=e.78,x=p-4.103,y=a-4.113;if(4.68){if(4.92>x)x=4.92;if(4.94<x)x=4.94;if(4.91>y)y=4.91;if(4.93<y)y=4.93}if(4.7.95){13 s={x:4.12.x,y:4.12.y},b=4.7.36;if((a-s.y)<b)s.y=a-b;50 if((s.y+4.26.y-a)<b)s.y=a-4.26.y+b;if((p-s.x)<b)s.x=p-b;50 if((s.x+4.26.x-p)<b)s.x=p-4.26.x+b;if(s.y<0)s.y=0;if(s.x<0)s.x=0;if(s.y<4.12.y||s.y>4.12.y||s.x<4.12.x||s.x>4.12.x)72.95To(4.12=s)}if(4.59X)x=x-x % 4.59X;if(4.59Y)y=y-y % 4.59Y;if(!4.105)4.6.101.24=(x+4.55)+'px';if(!4.112)4.6.101.31=(y+4.56)+'px';4.30('118',4,e)},118S31:8(e){4.6.37(4.7.53);14.33(e,4);if(4.7.42)4.42();9.20=38;4.30('s31',4,e)},58:8(){if(4.18)4.18.insert(4.6.34({17:4.18.16('17'),15:4.18.16('15'),25:4.18.16('25'),41:4.18.16('41')}),'57').remove()},48:8(){13 a=4.7.114;4.112=['x','66'].87(a);4.105=['y','85'].87(a);4.68=54;13 r=4.7.108;if(r){4.68=39;13 e=$(r);if(is121(e)){13 d=e.45();r={x:[d.24,d.24+d.17],y:[d.31,d.31+d.15]}}if(isHash(r)){13 s=4.6.106();if(r.x){4.92=r.x[0];4.94=r.x[1]-s.x}if(r.y){4.91=r.y[0];4.93=r.y[1]-s.y}}}11 4}});13 14=73 111(83,{97:{96:$w('76 102 107'),46:{71:'*',21:38,61:38,60:0.5,43:'49-allow',51:'49-deny',62:'49'},40:116('({f:'+9.40.toString().replace(/\\.19/g,'.23')+'})').f,28:8(e,d){120(13 i=0,l=4.22.98;i<l;i++)4.22[i].28(e,d)},33:8(e,d){120(13 i=0,l=4.22.98;i<l;i++)4.22[i].33(e,d)},22:[]},67:8(e,o){4.6=$(e);4.69(o);14.22.push(4.6.23=4)},47:8(){14.22=14.22.without(4);99(4.6.23);11 4},28:8(e,d){if(4.52(e,d)){if(!4.35){4.35=39;4.6.86(4.7[4.70(d)?'43':'51']);4.30('102',d,4,e)}}50 if(4.35){4.35=54;4.80().30('107',d,4,e)}},33:8(e,d){4.80();if(4.52(e,d)&&4.70(d)){d.30('76',4,d,e);4.30('76',d,4,e)}},80:8(){4.6.37(4.7.43).37(4.7.51);11 4},52:8(e,c){13 d=4.6.45(),k=d.31,i=d.24,j=d.24+d.17,t=d.31+d.15,f=e.77,g=e.78;if(4.7.61){13 a=c.6.45(),h=4.7.60,m=a.31,l=a.24,r=a.24+a.17,b=a.31+a.15;switch(4.7.61){74 'x':74 '66':11((m>k&&m<t)||(b>k&&b<t))&&((l>i&&l<(j-d.17*h))||(r<j&&r>(i+d.17*h)));74 'y':74 '85':11((l>i&&l<j)||(r>i&&r<j))&&((m>k&&m<(t-d.15*h))||(b<t&&b>(k+d.15*h)));default:11((l>i&&l<(j-d.17*h))||(r<j&&r>(i+d.17*h)))&&((m>k&&m<(t-d.15*h))||(b<t&&b>(k+d.15*h)))}}50 11 f>i&&f<j&&g>k&&g<t},70:8(d){if(4.7.21&&!4.81){4.7.21.walk($);4.81=39}13 w=4.7.21?4.7.21.87s(d.6):39;11 w&&(4.7.71=='*'?39:d.6.match(4.7.71))}});79.on({ready:8(){9.40();14.40()},mousemove:8(e){if(9.20){9.20.63(e);14.28(e,9.20)}},mouseup:8(e){if(9.20)9.20.118S31(e)}});121.addMethods({make9:8(o){73 9(4,o);11 4},undo9:8(){if(4.19)4.19.47();11 4},make14:8(o){73 14(4,o);11 4},undo14:8(){if(4.23)4.23.47();11 4}});",",,,,this,,element,options,function,Draggable,,return,winScrolls,var,Droppable,height,getStyle,width,clone,_draggable,current,containment,active,_droppable,left,position,winSizes,revertDuration,checkHover,handle,fire,top,,checkDrop,setStyle,_hovered,scrollSensitivity,removeClass,null,true,rescan,zIndex,revert,allowClass,_dragStart,dimensions,Options,destroy,calcConstraints,droppable,else,denyClass,hoveredBy,dragClass,false,rxDiff,ryDiff,before,swapBack,snap,overlapSize,overlap,relName,dragProcess,snapY,snapX,horizontal,initialize,ranged,$super,allows,accept,window,new,case,dragStart,drop,pageX,pageY,document,reset,_scanned,dragStop,Observer,insertTo,vertical,addClass,include,toFloat,moveOut,stop,minY,minX,maxY,maxX,scroll,EVENTS,extend,length,delete,,style,hover,xDiff,isNaN,axisY,sizes,leave,range,morph,start,Class,axisX,yDiff,axis,bind,eval,auto,drag,init,for,Element".split(",")));
|