right-rails 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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(",")));
|