right-rails 1.0.3 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -2
- data/Rakefile +28 -28
- data/lib/right_rails/java_script_generator.rb +59 -51
- data/public/images/{colorpicker.png → rightjs-ui/colorpicker.png} +0 -0
- data/public/images/{resizable.png → rightjs-ui/resizable.png} +0 -0
- data/public/javascripts/right-olds-src.js +47 -46
- data/public/javascripts/right-safe-src.js +103 -102
- data/public/javascripts/right-safe.js +1 -1
- data/public/javascripts/right-src.js +611 -541
- data/public/javascripts/right.js +86 -85
- data/public/javascripts/right/autocompleter-src.js +81 -77
- data/public/javascripts/right/autocompleter.js +1 -1
- data/public/javascripts/right/calendar-src.js +209 -197
- data/public/javascripts/right/calendar.js +6 -6
- data/public/javascripts/right/colorpicker-src.js +127 -117
- data/public/javascripts/right/colorpicker.js +6 -6
- data/public/javascripts/right/dnd-src.js +63 -63
- data/public/javascripts/right/dnd.js +2 -2
- data/public/javascripts/right/in-edit-src.js +53 -48
- data/public/javascripts/right/in-edit.js +2 -2
- data/public/javascripts/right/lightbox-src.js +107 -99
- data/public/javascripts/right/lightbox.js +2 -2
- data/public/javascripts/right/rater-src.js +48 -46
- data/public/javascripts/right/rater.js +3 -3
- data/public/javascripts/right/resizable-src.js +53 -61
- data/public/javascripts/right/resizable.js +4 -4
- data/public/javascripts/right/selectable-src.js +97 -95
- data/public/javascripts/right/selectable.js +2 -2
- data/public/javascripts/right/slider-src.js +47 -45
- data/public/javascripts/right/slider.js +8 -8
- data/public/javascripts/right/sortable-src.js +54 -52
- data/public/javascripts/right/tabs-src.js +181 -171
- data/public/javascripts/right/tooltip-src.js +39 -37
- data/public/javascripts/right/uploader-src.js +21 -19
- data/spec/lib/right_rails/java_script_generator_spec.rb +61 -56
- metadata +9 -7
@@ -14,12 +14,12 @@ d=a.top-f.y+k;f=a.left-f.x+l;l=a.width-l-y;a=a.height-k-z;this.setStyle("visibil
|
|
14
14
|
initialize:function(a){this.$super("colorpicker",a).addClass("rui-panel").insert([this.field=new A,this.colors=new B,this.controls=new C]).on({mousedown:this.startTrack,keyup:this.recalc,blur:this.update,focus:this.cancelTimer,done:this.done});this.options.update&&this.assignTo(this.options.update,this.options.trigger);this.options.updateBg&&this.updateBg(this.options.updateBg);this.tint=j([1,0,0]);this.satur=0;this.bright=1;this.color=j([255,255,255]);this.recalc().update()},setValue:function(a){if((a=
|
15
15
|
w(a)?a:this.toColor(a))&&a.length===3){this.color=a=a.map(function(b){return this.bound(i(""+b),0,255)},this);this.color2tint().update();this.colors.size().y||this.update.bind(this).delay(20)}return this},getValue:function(a){return a?this.color:this[this.options.format==="rgb"?"toRgb":"toHex"]()},updateBg:function(a){var b=n(a);b&&this.onChange(j(function(){b._.style.backgroundColor=this.toRgb()}).bind(this));return this},insertTo:function(a,b){return this.$super(a,b).addClass("rui-colorpicker-inline")},
|
16
16
|
inlined:function(){return this.hasClass("rui-colorpicker-inline")},done:function(){this.inlined()||this.hide();return this},setOptions:function(a){a=a||{};this.$super(a,n(a.trigger||a.update))},update:function(){this.field._.style.backgroundColor="rgb("+this.tint.map(function(d){return q.round(d*255)})+")";var a=this.color,b=this.controls;b.preview._.style.backgroundColor=b.display._.value=this.toHex();b.rDisplay._.value=a[0];b.gDisplay._.value=a[1];b.bDisplay._.value=a[2];b=this.field.pointer._.style;
|
17
|
-
a=this.field.size();var c=this.satur*a.x-2;b.top=this.bound(a.y-this.bright*a.y-2,0,a.y-5)+"px";b.left=this.bound(c,0,a.x-5)+"px";b=this.tint;a=this.colors.size();b=b[1]==0?b[0]==1?b[2]:2-b[0]:b[0]==0?2+(b[2]==1?b[1]:2-b[2]):4+(b[1]==1?b[0]:2-b[1]);b=b/6*a.y;this.colors.pointer._.style.top=this.bound(b,0,a.y-4)+"px";if(this.prevColor!==""+this.color){this.fire("change",this.color);this.prevColor=""+this.color}return this},recalc:function(a){if(a){a=a.target;var b=a._.value,c=s(this.color),
|
18
|
-
if(a===this.controls.display&&/#\w{6}/.test(b))d=c=this.toColor(b);else if(/^\d+$/.test(b)){c[a._.cIndex]=b;d=true}d&&this.setValue(c)}else this.tint2color();return this},startTrack:function(a){this.stopTrack();this.cancelTimer();if(a.target===this.field.pointer)a.target=this.field;else if(a.target===this.colors.pointer)a.target=this.colors;if(a.target===this.field||a.target===this.colors){a.stop();g.tracking=this;a.target.tracking=true;this.trackMove(a)}},stopTrack:function(){g.tracking=
|
19
|
-
false;this.colors.tracking=false},trackMove:function(a){var b,c=a.position();if(this.field.tracking)b=this.field.dimensions();else if(this.colors.tracking)b=this.colors.dimensions();if(b){a=this.bound(c.y-b.top,0,b.height);c=this.bound(c.x-b.left,0,b.width);if(this.field.tracking){this.satur=c/b.width;this.bright=1-a/b.height}else if(this.colors.tracking){if(a==b.height)a=b.height-0.1;b=b.height/6;c=this.tint=[0,0,0];var d=a%b/b,f=1-d;if(a<b){c[0]=1;c[2]=d}else if(a<b*2){c[0]=
|
20
|
-
3){c[2]=1;c[1]=d}else if(a<b*4){c[2]=f;c[1]=1}else if(a<b*5){c[1]=1;c[0]=d}else{c[1]=f;c[0]=1}}this.recalc().update()}},cancelTimer:function(){j(function(){if(this._hide_delay){this._hide_delay.cancel();this._hide_delay=null}}).bind(this).delay(10)}}),A=new o(m,{initialize:function(){this.$super("div",{"class":"field"});this.insert(this.pointer=h("div",{"class":"pointer"}))}}),B=new o(m,{initialize:function(){this.$super("div",{"class":"colors"});this.insert(this.pointer=h("div",
|
21
|
-
C=new o(m,{initialize:function(){this.$super("div",{"class":"controls"});this.insert([this.preview=h("div",{"class":"preview",html:" "}),this.display=h("input",{type:"text","class":"display",maxlength:7}),h("div",{"class":"rgb-display"}).insert([h("div").insert([h("label",{html:"R:"}),this.rDisplay=h("input",{maxlength:3,cIndex:0})]),h("div").insert([h("label",{html:"G:"}),this.gDisplay=h("input",{maxlength:3,cIndex:1})]),h("div").insert([h("label",{html:"B:"}),this.bDisplay=
|
22
|
-
cIndex:2})])]),this.button=(new x(g.i18n.Done)).onClick("fire","done")])}});g.include({toRgb:function(){return"rgb("+this.color.join(",")+")"},toHex:function(){return"#"+this.color.map(function(a){return(a<16?"0":"")+a.toString(16)}).join("")},toColor:function(a){a=a.toLowerCase();var b;if(b=/rgb\((\d+),(\d+),(\d+)\)/.exec(a))return[b[1],b[2],b[3]].map(i);else if(/#[\da-f]+/.test(a)){if(b=/^#([\da-f])([\da-f])([\da-f])$/.exec(a))a="#"+b[1]+b[1]+b[2]+b[2]+b[3]+b[3];if(b=/#([\da-f]{2})([\da-f]{2})([\da-f]{2})/.exec(a))return[b[1],
|
17
|
+
a=this.field.size();var c=this.satur*a.x-2;b.top=this.bound(a.y-this.bright*a.y-2,0,a.y-5)+"px";b.left=this.bound(c,0,a.x-5)+"px";b=this.tint;a=this.colors.size();b=b[1]==0?b[0]==1?b[2]:2-b[0]:b[0]==0?2+(b[2]==1?b[1]:2-b[2]):4+(b[1]==1?b[0]:2-b[1]);b=b/6*a.y;this.colors.pointer._.style.top=this.bound(b,0,a.y-4)+"px";if(this.prevColor!==""+this.color){this.fire("change",{value:this.color});this.prevColor=""+this.color}return this},recalc:function(a){if(a){a=a.target;var b=a._.value,c=s(this.color),
|
18
|
+
d=false;if(a===this.controls.display&&/#\w{6}/.test(b))d=c=this.toColor(b);else if(/^\d+$/.test(b)){c[a._.cIndex]=b;d=true}d&&this.setValue(c)}else this.tint2color();return this},startTrack:function(a){this.stopTrack();this.cancelTimer();if(a.target===this.field.pointer)a.target=this.field;else if(a.target===this.colors.pointer)a.target=this.colors;if(a.target===this.field||a.target===this.colors){a.stop();g.tracking=this;a.target.tracking=true;this.trackMove(a)}},stopTrack:function(){g.tracking=
|
19
|
+
false;this.field.tracking=false;this.colors.tracking=false},trackMove:function(a){var b,c=a.position();if(this.field.tracking)b=this.field.dimensions();else if(this.colors.tracking)b=this.colors.dimensions();if(b){a=this.bound(c.y-b.top,0,b.height);c=this.bound(c.x-b.left,0,b.width);if(this.field.tracking){this.satur=c/b.width;this.bright=1-a/b.height}else if(this.colors.tracking){if(a==b.height)a=b.height-0.1;b=b.height/6;c=this.tint=[0,0,0];var d=a%b/b,f=1-d;if(a<b){c[0]=1;c[2]=d}else if(a<b*2){c[0]=
|
20
|
+
f;c[2]=1}else if(a<b*3){c[2]=1;c[1]=d}else if(a<b*4){c[2]=f;c[1]=1}else if(a<b*5){c[1]=1;c[0]=d}else{c[1]=f;c[0]=1}}this.recalc().update()}},cancelTimer:function(){j(function(){if(this._hide_delay){this._hide_delay.cancel();this._hide_delay=null}}).bind(this).delay(10)}}),A=new o(m,{initialize:function(){this.$super("div",{"class":"field"});this.insert(this.pointer=h("div",{"class":"pointer"}))}}),B=new o(m,{initialize:function(){this.$super("div",{"class":"colors"});this.insert(this.pointer=h("div",
|
21
|
+
{"class":"pointer"}))}}),C=new o(m,{initialize:function(){this.$super("div",{"class":"controls"});this.insert([this.preview=h("div",{"class":"preview",html:" "}),this.display=h("input",{type:"text","class":"display",maxlength:7}),h("div",{"class":"rgb-display"}).insert([h("div").insert([h("label",{html:"R:"}),this.rDisplay=h("input",{maxlength:3,cIndex:0})]),h("div").insert([h("label",{html:"G:"}),this.gDisplay=h("input",{maxlength:3,cIndex:1})]),h("div").insert([h("label",{html:"B:"}),this.bDisplay=
|
22
|
+
h("input",{maxlength:3,cIndex:2})])]),this.button=(new x(g.i18n.Done)).onClick("fire","done")])}});g.include({toRgb:function(){return"rgb("+this.color.join(",")+")"},toHex:function(){return"#"+this.color.map(function(a){return(a<16?"0":"")+a.toString(16)}).join("")},toColor:function(a){a=a.toLowerCase();var b;if(b=/rgb\((\d+),(\d+),(\d+)\)/.exec(a))return[b[1],b[2],b[3]].map(i);else if(/#[\da-f]+/.test(a)){if(b=/^#([\da-f])([\da-f])([\da-f])$/.exec(a))a="#"+b[1]+b[1]+b[2]+b[2]+b[3]+b[3];if(b=/#([\da-f]{2})([\da-f]{2})([\da-f]{2})/.exec(a))return[b[1],
|
23
23
|
b[2],b[3]].map(function(c){return i(c,16)})}},color2tint:function(){var a=s(this.color).sort(function(d,f){return d-f}),b=a[0],c=a[2];this.bright=c/255;this.satur=1-b/(c||1);this.tint.each(function(d,f){this.tint[f]=!b&&!c||b==c?f==0?1:0:(this.color[f]-b)/(c-b);return this.tint[f]},this);return this},tint2color:function(){for(var a=this.tint,b=this.color,c=0;c<3;c++){b[c]=1+this.satur*(a[c]-1);b[c]=q.round(255*b[c]*this.bright)}return this},bound:function(a,b,c){a=a;if(b<c)a=a<b?b:a>c?c:a;else{if(a>
|
24
24
|
c)a=c;if(a<b)a=b}return a}});n(p).on({mouseup:function(){g.tracking&&g.tracking.stopTrack()},mousemove:function(a){g.tracking&&g.tracking.trackMove(a)},focus:function(a){a=a.target instanceof t?a.target:null;g.hideAll();if(a&&(a.colorpicker||a.match(g.Options.cssRule)))(a.colorpicker||new g({update:a})).setValue(a.value()).showAt(a)},blur:function(a){var b=a.target.colorpicker;if(b)b._hide_delay=j(function(){b.hide()}).delay(200)},click:function(a){var b=a.target instanceof m?a.target:null;if(b&&
|
25
25
|
(b.colorpicker||b.match(g.Options.cssRule))){if(!(b instanceof t)){a.stop();(b.colorpicker||new g({trigger:b})).hide(null).toggleAt(b.assignedInput)}}else a.find("div.rui-colorpicker")||g.hideAll()},keydown:function(a){var b=g.current,c={27:"hide",13:"done"}[a.keyCode];if(c&&b&&b.visible()){a.stop();b[c]()}}});p.write('<style type="text/css"> *.rui-button{display:inline-block; *display:inline; *zoom:1;height:1em;line-height:1em;margin:0;padding:.2em .5em;text-align:center;border:1px solid #CCC;border-radius:.2em;-moz-border-radius:.2em;-webkit-border-radius:.2em;cursor:pointer;color:#333;background-color:#FFF;user-select:none;-moz-user-select:none;-webkit-user-select:none} *.rui-button:hover{color:#111;border-color:#999;background-color:#DDD;box-shadow:#888 0 0 .1em;-moz-box-shadow:#888 0 0 .1em;-webkit-box-shadow:#888 0 0 .1em} *.rui-button:active{color:#000;border-color:#777;text-indent:1px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none} *.rui-button-disabled, *.rui-button-disabled:hover, *.rui-button-disabled:active{color:#888;background:#DDD;border-color:#CCC;cursor:default;text-indent:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}div.rui-re-anchor{margin:0;padding:0;background:none;border:none;float:none;display:inline;position:absolute;z-index:9999}.rui-panel{margin:0;padding:.5em;position:relative;background-color:#EEE;border:1px solid #BBB;border-radius:.3em;-moz-border-radius:.3em;-webkit-border-radius:.3em;box-shadow:.15em .3em .5em #BBB;-moz-box-shadow:.15em .3em .5em #BBB;-webkit-box-shadow:.15em .3em .5em #BBB;cursor:default}div.rui-colorpicker .field,div.rui-colorpicker .field *,div.rui-colorpicker .colors,div.rui-colorpicker .colors *{border:none;background:none;width:auto;height:auto;position:static;float:none;top:none;left:none;right:none;bottom:none;margin:0;padding:0;display:block;font-weight:normal;vertical-align:center}div.rui-colorpicker div.field,div.rui-colorpicker div.field div.pointer,div.rui-colorpicker div.colors,div.rui-colorpicker div.colors div.pointer{background:url(/images/rightjs-ui/colorpicker.png) no-repeat 0 0}div.rui-colorpicker div.field,div.rui-colorpicker div.colors,div.rui-colorpicker div.controls{display:inline-block; *display:inline; *zoom:1;position:relative;vertical-align:top;height:150px}div.rui-colorpicker div.field div.pointer,div.rui-colorpicker div.colors div.pointer{position:absolute;top:0px;left:0;width:9px;height:9px}div.rui-colorpicker input.display,div.rui-colorpicker div.preview,div.rui-colorpicker div.rgb-display,div.rui-colorpicker input.rui-ui-button{font-size:100%;display:block;width:auto;padding:0 .2em}div.rui-colorpicker input.display,div.rui-colorpicker div.preview,div.rui-colorpicker div.rgb-display input,div.rui-colorpicker input.rui-ui-button{border:1px solid #AAA;-moz-border-radius:.2em;-webkit-border-radius:.2em}div.rui-colorpicker div.field{width:150px;background-color:red;cursor:crosshair;margin-right:1.2em}div.rui-colorpicker div.field div.pointer{background-position:-170px 0;margin-left:-2px;margin-top:-2px}div.rui-colorpicker div.colors{width:16px;background-position:-150px 0;border-color:#EEE;cursor:pointer;margin-right:.6em}div.rui-colorpicker div.colors div.pointer{cursor:default;background-position:-170px -20px;margin-left:-8px;margin-top:-3px}div.rui-colorpicker div.controls{width:5em}div.rui-colorpicker div.preview{height:2em;background:white;border-color:#BBB}div.rui-colorpicker input.display{margin-top:.5em;background:#FFF;width:4.5em}div.rui-colorpicker div.rgb-display{padding:0;text-align:right;margin-top:.5em}div.rui-colorpicker div.rgb-display label{display:inline}div.rui-colorpicker div.rgb-display label:after{content:none}div.rui-colorpicker div.rgb-display input{vertical-align:top;font-size:100%;width:2em;text-align:right;margin-left:.2em;padding:0 .2em;background:#FFF;margin-bottom:1px;display:inline}div.rui-colorpicker div.rui-button{cursor:pointer;position:absolute;bottom:0;right:0;width:4em}div.rui-colorpicker-inline{display:inline-block; *display:inline; *zoom:1;position:relative;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;z-index:auto}</style>');
|
@@ -29,45 +29,45 @@ var R = RightJS,
|
|
29
29
|
var Draggable = new Class(Observer, {
|
30
30
|
extend: {
|
31
31
|
EVENTS: $w('before start drag stop drop'),
|
32
|
-
|
32
|
+
|
33
33
|
Options: {
|
34
34
|
handle: null, // a handle element that will start the drag
|
35
|
-
|
35
|
+
|
36
36
|
snap: 0, // a number in pixels or [x,y]
|
37
37
|
axis: null, // null or 'x' or 'y' or 'vertical' or 'horizontal'
|
38
38
|
range: null, // {x: [min, max], y:[min, max]} or reference to another element
|
39
|
-
|
39
|
+
|
40
40
|
dragClass: 'dragging', // the in-process class name
|
41
|
-
|
41
|
+
|
42
42
|
clone: false, // if should keep a clone in place
|
43
43
|
revert: false, // marker if the object should be moved back on finish
|
44
44
|
revertDuration: 'normal', // the moving back fx duration
|
45
|
-
|
46
|
-
scroll: true, // if it should automatically scroll
|
45
|
+
|
46
|
+
scroll: true, // if it should automatically scroll
|
47
47
|
scrollSensitivity: 32, // the scrolling area size in pixels
|
48
|
-
|
48
|
+
|
49
49
|
zIndex: 10000000, // the element's z-index
|
50
50
|
moveOut: false, // marker if the draggable should be moved out of it's context (for overflown elements)
|
51
|
-
|
51
|
+
|
52
52
|
relName: 'draggable' // the audodiscovery feature key
|
53
53
|
},
|
54
|
-
|
54
|
+
|
55
55
|
// referenece to the currently active draggable
|
56
56
|
current: null,
|
57
|
-
|
57
|
+
|
58
58
|
// scans the document for auto-processed draggables with the rel="draggable" attribute
|
59
59
|
rescan: function(scope) {
|
60
60
|
var key = this.Options.relName;
|
61
|
-
|
61
|
+
|
62
62
|
($(scope)||$(document)).select('*[rel^="'+key+'"]').each(function(element) {
|
63
63
|
if (!element.draggable) {
|
64
|
-
var data = element.get('data-'+key
|
64
|
+
var data = element.get('data-'+key);
|
65
65
|
new this(element, eval('('+data+')') || {});
|
66
66
|
}
|
67
67
|
}, this);
|
68
68
|
}
|
69
69
|
},
|
70
|
-
|
70
|
+
|
71
71
|
/**
|
72
72
|
* Basic controller
|
73
73
|
*
|
@@ -77,10 +77,10 @@ var Draggable = new Class(Observer, {
|
|
77
77
|
initialize: function(element, options) {
|
78
78
|
this.element = $(element);
|
79
79
|
this.$super(options);
|
80
|
-
|
80
|
+
|
81
81
|
this.element.draggable = this.init();
|
82
82
|
},
|
83
|
-
|
83
|
+
|
84
84
|
/**
|
85
85
|
* detaches the mouse observers out of the draggable element
|
86
86
|
*
|
@@ -89,17 +89,17 @@ var Draggable = new Class(Observer, {
|
|
89
89
|
destroy: function() {
|
90
90
|
this.handle.stopObserving('mousedown', this._dragStart);
|
91
91
|
delete(this.element.draggable);
|
92
|
-
|
92
|
+
|
93
93
|
return this;
|
94
94
|
},
|
95
|
-
|
95
|
+
|
96
96
|
// additional options processing
|
97
97
|
setOptions: function(options) {
|
98
98
|
this.$super(options);
|
99
|
-
|
99
|
+
|
100
100
|
// checking the handle
|
101
101
|
this.handle = this.options.handle ? $(this.options.handle) : this.element;
|
102
|
-
|
102
|
+
|
103
103
|
// checking the spappings
|
104
104
|
if (isArray(this.options.snap)) {
|
105
105
|
this.snapX = this.options.snap[0];
|
@@ -107,10 +107,10 @@ var Draggable = new Class(Observer, {
|
|
107
107
|
} else {
|
108
108
|
this.snapX = this.snapY = this.options.snap;
|
109
109
|
}
|
110
|
-
|
110
|
+
|
111
111
|
return this;
|
112
112
|
},
|
113
|
-
|
113
|
+
|
114
114
|
/**
|
115
115
|
* Moves the element back to the original position
|
116
116
|
*
|
@@ -122,7 +122,7 @@ var Draggable = new Class(Observer, {
|
|
122
122
|
top: (position.y + this.ryDiff) + 'px',
|
123
123
|
left: (position.x + this.rxDiff) + 'px'
|
124
124
|
};
|
125
|
-
|
125
|
+
|
126
126
|
if (this.options.revertDuration && this.element.morph) {
|
127
127
|
this.element.morph(end_style, {
|
128
128
|
duration: this.options.revertDuration,
|
@@ -132,56 +132,56 @@ var Draggable = new Class(Observer, {
|
|
132
132
|
this.element.setStyle(end_style);
|
133
133
|
this.swapBack();
|
134
134
|
}
|
135
|
-
|
135
|
+
|
136
136
|
return this;
|
137
137
|
},
|
138
|
-
|
138
|
+
|
139
139
|
// protected
|
140
140
|
|
141
141
|
init: function() {
|
142
142
|
// caching the callback so that we could detach it later
|
143
143
|
this._dragStart = R(this.dragStart).bind(this);
|
144
|
-
|
144
|
+
|
145
145
|
this.handle.onMousedown(this._dragStart);
|
146
|
-
|
146
|
+
|
147
147
|
return this;
|
148
148
|
},
|
149
|
-
|
149
|
+
|
150
150
|
// handles the event start
|
151
151
|
dragStart: function(event) {
|
152
152
|
this.fire('before', this, event.stop());
|
153
|
-
|
153
|
+
|
154
154
|
// calculating the positions diff
|
155
155
|
var position = this.element.position();
|
156
|
-
|
156
|
+
|
157
157
|
this.xDiff = event.pageX - position.x;
|
158
158
|
this.yDiff = event.pageY - position.y;
|
159
|
-
|
159
|
+
|
160
160
|
// grabbing the relative position diffs
|
161
161
|
var relative_position = {
|
162
162
|
y: R(this.element.getStyle('top')).toFloat(),
|
163
163
|
x: R(this.element.getStyle('left')).toFloat()
|
164
164
|
};
|
165
|
-
|
165
|
+
|
166
166
|
this.rxDiff = isNaN(relative_position.x) ? 0 : (relative_position.x - position.x);
|
167
167
|
this.ryDiff = isNaN(relative_position.y) ? 0 : (relative_position.y - position.y);
|
168
|
-
|
168
|
+
|
169
169
|
// preserving the element sizes
|
170
170
|
var size = {
|
171
171
|
x: this.element.getStyle('width'),
|
172
172
|
y: this.element.getStyle('height')
|
173
173
|
};
|
174
|
-
|
174
|
+
|
175
175
|
if (size.x == 'auto') { size.x = this.element._.offsetWidth + 'px'; }
|
176
176
|
if (size.y == 'auto') { size.y = this.element._.offsetHeight + 'px'; }
|
177
|
-
|
177
|
+
|
178
178
|
// building a clone element if necessary
|
179
179
|
if (this.options.clone || this.options.revert) {
|
180
180
|
this.clone = new Element(this.element._.cloneNode(true)).setStyle({
|
181
181
|
visibility: this.options.clone ? 'visible' : 'hidden'
|
182
182
|
}).insertTo(this.element, 'before');
|
183
183
|
}
|
184
|
-
|
184
|
+
|
185
185
|
// reinserting the element to the body so it was over all the other elements
|
186
186
|
this.element.setStyle({
|
187
187
|
position: 'absolute',
|
@@ -191,25 +191,25 @@ var Draggable = new Class(Observer, {
|
|
191
191
|
width: size.x,
|
192
192
|
height: size.y
|
193
193
|
}).addClass(this.options.dragClass);
|
194
|
-
|
194
|
+
|
195
195
|
if (this.options.moveOut) {
|
196
196
|
this.element.insertTo(document.body);
|
197
197
|
}
|
198
|
-
|
199
|
-
|
198
|
+
|
199
|
+
|
200
200
|
// caching the window scrolls
|
201
201
|
this.winScrolls = $(window).scrolls();
|
202
202
|
this.winSizes = $(window).size();
|
203
|
-
|
203
|
+
|
204
204
|
Draggable.current = this.calcConstraints().fire('start', this, event);
|
205
|
-
|
205
|
+
|
206
206
|
this.style = this.element._.style;
|
207
207
|
},
|
208
|
-
|
208
|
+
|
209
209
|
// catches the mouse move event
|
210
210
|
dragProcess: function(event) {
|
211
211
|
var page_x = event.pageX, page_y = event.pageY, x = page_x - this.xDiff, y = page_y - this.yDiff;
|
212
|
-
|
212
|
+
|
213
213
|
// checking the range
|
214
214
|
if (this.ranged) {
|
215
215
|
if (this.minX > x) { x = this.minX; }
|
@@ -217,61 +217,61 @@ var Draggable = new Class(Observer, {
|
|
217
217
|
if (this.minY > y) { y = this.minY; }
|
218
218
|
if (this.maxY < y) { y = this.maxY; }
|
219
219
|
}
|
220
|
-
|
220
|
+
|
221
221
|
// checking the scrolls
|
222
222
|
if (this.options.scroll) {
|
223
223
|
var scrolls = {x: this.winScrolls.x, y: this.winScrolls.y},
|
224
224
|
sensitivity = this.options.scrollSensitivity;
|
225
|
-
|
225
|
+
|
226
226
|
if ((page_y - scrolls.y) < sensitivity) {
|
227
227
|
scrolls.y = page_y - sensitivity;
|
228
228
|
} else if ((scrolls.y + this.winSizes.y - page_y) < sensitivity){
|
229
229
|
scrolls.y = page_y - this.winSizes.y + sensitivity;
|
230
230
|
}
|
231
|
-
|
231
|
+
|
232
232
|
if ((page_x - scrolls.x) < sensitivity) {
|
233
233
|
scrolls.x = page_x - sensitivity;
|
234
234
|
} else if ((scrolls.x + this.winSizes.x - page_x) < sensitivity){
|
235
235
|
scrolls.x = page_x - this.winSizes.x + sensitivity;
|
236
236
|
}
|
237
|
-
|
237
|
+
|
238
238
|
if (scrolls.y < 0) { scrolls.y = 0; }
|
239
239
|
if (scrolls.x < 0) { scrolls.x = 0; }
|
240
|
-
|
240
|
+
|
241
241
|
if (scrolls.y < this.winScrolls.y || scrolls.y > this.winScrolls.y ||
|
242
242
|
scrolls.x < this.winScrolls.x || scrolls.x > this.winScrolls.x) {
|
243
|
-
|
243
|
+
|
244
244
|
$(window).scrollTo(this.winScrolls = scrolls);
|
245
245
|
}
|
246
246
|
}
|
247
|
-
|
247
|
+
|
248
248
|
// checking the snaps
|
249
249
|
if (this.snapX) { x = x - x % this.snapX; }
|
250
250
|
if (this.snapY) { y = y - y % this.snapY; }
|
251
|
-
|
251
|
+
|
252
252
|
// checking the constraints
|
253
253
|
if (!this.axisY) { this.style.left = (x + this.rxDiff) + 'px'; }
|
254
254
|
if (!this.axisX) { this.style.top = (y + this.ryDiff) + 'px'; }
|
255
|
-
|
255
|
+
|
256
256
|
this.fire('drag', this, event);
|
257
257
|
},
|
258
|
-
|
258
|
+
|
259
259
|
// handles the event stop
|
260
260
|
dragStop: function(event) {
|
261
261
|
this.element.removeClass(this.options.dragClass);
|
262
|
-
|
262
|
+
|
263
263
|
// notifying the droppables for the drop
|
264
264
|
Droppable.checkDrop(event, this);
|
265
|
-
|
265
|
+
|
266
266
|
if (this.options.revert) {
|
267
267
|
this.revert();
|
268
268
|
}
|
269
|
-
|
269
|
+
|
270
270
|
Draggable.current = null;
|
271
|
-
|
271
|
+
|
272
272
|
this.fire('stop', this, event);
|
273
273
|
},
|
274
|
-
|
274
|
+
|
275
275
|
// swaps the clone element to the actual element back
|
276
276
|
swapBack: function() {
|
277
277
|
if (this.clone) {
|
@@ -285,23 +285,23 @@ var Draggable = new Class(Observer, {
|
|
285
285
|
);
|
286
286
|
}
|
287
287
|
},
|
288
|
-
|
288
|
+
|
289
289
|
// calculates the constraints
|
290
290
|
calcConstraints: function() {
|
291
291
|
var axis = this.options.axis;
|
292
292
|
this.axisX = R(['x', 'horizontal']).include(axis);
|
293
293
|
this.axisY = R(['y', 'vertical']).include(axis);
|
294
|
-
|
294
|
+
|
295
295
|
this.ranged = false;
|
296
296
|
var range = this.options.range;
|
297
297
|
if (range) {
|
298
298
|
this.ranged = true;
|
299
|
-
|
299
|
+
|
300
300
|
// if the range is defined by another element
|
301
301
|
var element = $(range);
|
302
302
|
if (element instanceof Element) {
|
303
303
|
var dims = element.dimensions();
|
304
|
-
|
304
|
+
|
305
305
|
range = {
|
306
306
|
x: [dims.left, dims.left + dims.width],
|
307
307
|
y: [dims.top, dims.top + dims.height]
|
@@ -310,7 +310,7 @@ var Draggable = new Class(Observer, {
|
|
310
310
|
|
311
311
|
if (isHash(range)) {
|
312
312
|
var size = this.element.size();
|
313
|
-
|
313
|
+
|
314
314
|
if (range.x) {
|
315
315
|
this.minX = range.x[0];
|
316
316
|
this.maxX = range.x[1] - size.x;
|
@@ -321,7 +321,7 @@ var Draggable = new Class(Observer, {
|
|
321
321
|
}
|
322
322
|
}
|
323
323
|
}
|
324
|
-
|
324
|
+
|
325
325
|
return this;
|
326
326
|
}
|
327
327
|
});
|
@@ -5,8 +5,8 @@
|
|
5
5
|
* Copyright (C) 2009-2010 Nikolay Nemshilov
|
6
6
|
*/
|
7
7
|
(function(q,r,f){var k=f.$,t=f.$w,u=f.Class,w=f.isHash,x=f.isArray,s=f.Element,v=f.Observer,j=new u(v,{extend:{EVENTS:t("before start drag stop drop"),Options:{handle:null,snap:0,axis:null,range:null,dragClass:"dragging",clone:false,revert:false,revertDuration:"normal",scroll:true,scrollSensitivity:32,zIndex:1E7,moveOut:false,relName:"draggable"},current:null,rescan:function(a){var c=this.Options.relName;(k(a)||k(r)).select('*[rel^="'+c+'"]').each(function(b){if(!b.draggable){var e=b.get("data-"+
|
8
|
-
c
|
9
|
-
|
8
|
+
c);new this(b,eval("("+e+")")||{})}},this)}},initialize:function(a,c){this.element=k(a);this.$super(c);this.element.draggable=this.init()},destroy:function(){this.handle.stopObserving("mousedown",this._dragStart);delete this.element.draggable;return this},setOptions:function(a){this.$super(a);this.handle=this.options.handle?k(this.options.handle):this.element;if(x(this.options.snap)){this.snapX=this.options.snap[0];this.snapY=this.options.snap[1]}else this.snapX=this.snapY=this.options.snap;return this},
|
9
|
+
revert:function(){var a=this.clone.position();a={top:a.y+this.ryDiff+"px",left:a.x+this.rxDiff+"px"};if(this.options.revertDuration&&this.element.morph)this.element.morph(a,{duration:this.options.revertDuration,onFinish:f(this.swapBack).bind(this)});else{this.element.setStyle(a);this.swapBack()}return this},init:function(){this._dragStart=f(this.dragStart).bind(this);this.handle.onMousedown(this._dragStart);return this},dragStart:function(a){this.fire("before",this,a.stop());var c=this.element.position();
|
10
10
|
this.xDiff=a.pageX-c.x;this.yDiff=a.pageY-c.y;var b={y:f(this.element.getStyle("top")).toFloat(),x:f(this.element.getStyle("left")).toFloat()};this.rxDiff=isNaN(b.x)?0:b.x-c.x;this.ryDiff=isNaN(b.y)?0:b.y-c.y;b={x:this.element.getStyle("width"),y:this.element.getStyle("height")};if(b.x=="auto")b.x=this.element._.offsetWidth+"px";if(b.y=="auto")b.y=this.element._.offsetHeight+"px";if(this.options.clone||this.options.revert)this.clone=(new s(this.element._.cloneNode(true))).setStyle({visibility:this.options.clone?
|
11
11
|
"visible":"hidden"}).insertTo(this.element,"before");this.element.setStyle({position:"absolute",zIndex:j.Options.zIndex++,top:c.y+this.ryDiff+"px",left:c.x+this.rxDiff+"px",width:b.x,height:b.y}).addClass(this.options.dragClass);this.options.moveOut&&this.element.insertTo(r.body);this.winScrolls=k(q).scrolls();this.winSizes=k(q).size();j.current=this.calcConstraints().fire("start",this,a);this.style=this.element._.style},dragProcess:function(a){var c=a.pageX,b=a.pageY,e=c-this.xDiff,h=b-this.yDiff;
|
12
12
|
if(this.ranged){if(this.minX>e)e=this.minX;if(this.maxX<e)e=this.maxX;if(this.minY>h)h=this.minY;if(this.maxY<h)h=this.maxY}if(this.options.scroll){var d={x:this.winScrolls.x,y:this.winScrolls.y},g=this.options.scrollSensitivity;if(b-d.y<g)d.y=b-g;else if(d.y+this.winSizes.y-b<g)d.y=b-this.winSizes.y+g;if(c-d.x<g)d.x=c-g;else if(d.x+this.winSizes.x-c<g)d.x=c-this.winSizes.x+g;if(d.y<0)d.y=0;if(d.x<0)d.x=0;if(d.y<this.winScrolls.y||d.y>this.winScrolls.y||d.x<this.winScrolls.x||d.x>this.winScrolls.x)k(q).scrollTo(this.winScrolls=
|
@@ -33,19 +33,20 @@ var R = RightJS,
|
|
33
33
|
|
34
34
|
|
35
35
|
|
36
|
+
|
36
37
|
/**
|
37
38
|
* The widget units constructor
|
38
39
|
*
|
39
40
|
* @param String tag-name or Object methods
|
40
41
|
* @param Object methods
|
41
42
|
* @return Widget wrapper
|
42
|
-
*/
|
43
|
+
*/
|
43
44
|
function Widget(tag_name, methods) {
|
44
45
|
if (!methods) {
|
45
46
|
methods = tag_name;
|
46
47
|
tag_name = 'DIV';
|
47
48
|
}
|
48
|
-
|
49
|
+
|
49
50
|
/**
|
50
51
|
* An Abstract Widget Unit
|
51
52
|
*
|
@@ -62,17 +63,17 @@ function Widget(tag_name, methods) {
|
|
62
63
|
initialize: function(key, options) {
|
63
64
|
this.key = key;
|
64
65
|
var args = [{'class': 'rui-' + key}];
|
65
|
-
|
66
|
+
|
66
67
|
// those two have different constructors
|
67
68
|
if (!(this instanceof RightJS.Input || this instanceof RightJS.Form)) {
|
68
69
|
args.unshift(tag_name);
|
69
70
|
}
|
70
71
|
this.$super.apply(this, args);
|
71
|
-
|
72
|
+
|
72
73
|
if (RightJS.isString(options)) {
|
73
74
|
options = RightJS.$(options);
|
74
75
|
}
|
75
|
-
|
76
|
+
|
76
77
|
// if the options is another element then
|
77
78
|
// try to dynamically rewrap it with our widget
|
78
79
|
if (options instanceof RightJS.Element) {
|
@@ -105,16 +106,16 @@ function Widget(tag_name, methods) {
|
|
105
106
|
return this;
|
106
107
|
}
|
107
108
|
});
|
108
|
-
|
109
|
+
|
109
110
|
/**
|
110
111
|
* Creating the actual widget class
|
111
112
|
*
|
112
113
|
*/
|
113
114
|
var Klass = new RightJS.Wrapper(AbstractWidget, methods);
|
114
|
-
|
115
|
+
|
115
116
|
// creating the widget related shortcuts
|
116
117
|
RightJS.Observer.createShortcuts(Klass.prototype, Klass.EVENTS || []);
|
117
|
-
|
118
|
+
|
118
119
|
return Klass;
|
119
120
|
}
|
120
121
|
|
@@ -132,18 +133,18 @@ var Spinner = new RightJS.Wrapper(RightJS.Element, {
|
|
132
133
|
* @return void
|
133
134
|
*/
|
134
135
|
initialize: function(size) {
|
135
|
-
this.$super('div', {'class': 'rui-spinner'});
|
136
|
+
this.$super('div', {'class': 'rui-spinner'});
|
136
137
|
this.dots = [];
|
137
|
-
|
138
|
+
|
138
139
|
for (var i=0; i < (size || 4); i++) {
|
139
140
|
this.dots.push(new RightJS.Element('div'));
|
140
141
|
}
|
141
|
-
|
142
|
+
|
142
143
|
this.dots[0].addClass('glowing');
|
143
144
|
this.insert(this.dots);
|
144
145
|
RightJS(this.shift).bind(this).periodical(300);
|
145
146
|
},
|
146
|
-
|
147
|
+
|
147
148
|
/**
|
148
149
|
* Shifts the spinner elements
|
149
150
|
*
|
@@ -158,6 +159,7 @@ var Spinner = new RightJS.Wrapper(RightJS.Element, {
|
|
158
159
|
}
|
159
160
|
});
|
160
161
|
|
162
|
+
|
161
163
|
/**
|
162
164
|
* An inline editor feature
|
163
165
|
*
|
@@ -166,31 +168,31 @@ var Spinner = new RightJS.Wrapper(RightJS.Element, {
|
|
166
168
|
var InEdit = new Widget('FORM', {
|
167
169
|
extend: {
|
168
170
|
version: '2.0.0',
|
169
|
-
|
171
|
+
|
170
172
|
EVENTS: $w('show hide send update'),
|
171
|
-
|
173
|
+
|
172
174
|
Options: {
|
173
175
|
url: null, // the url address where to send the stuff
|
174
176
|
name: 'text', // the field name
|
175
177
|
method: 'put', // the method
|
176
|
-
|
178
|
+
|
177
179
|
type: 'text', // the input type, 'text', 'file', 'password' or 'textarea'
|
178
|
-
|
180
|
+
|
179
181
|
toggle: null, // a reference to an element that should get hidden when the editor is active
|
180
|
-
|
182
|
+
|
181
183
|
update: true, // a marker if the element should be updated with the response-text
|
182
|
-
|
184
|
+
|
183
185
|
Xhr: {} // additional Xhr options
|
184
186
|
},
|
185
|
-
|
187
|
+
|
186
188
|
i18n: {
|
187
189
|
Save: 'Save',
|
188
190
|
Cancel: 'Cancel'
|
189
191
|
},
|
190
|
-
|
192
|
+
|
191
193
|
current: null // currently opened editor
|
192
194
|
},
|
193
|
-
|
195
|
+
|
194
196
|
/**
|
195
197
|
* Constructor
|
196
198
|
*
|
@@ -200,7 +202,7 @@ var InEdit = new Widget('FORM', {
|
|
200
202
|
*/
|
201
203
|
initialize: function(element, options) {
|
202
204
|
this.element = $(element);
|
203
|
-
|
205
|
+
|
204
206
|
this
|
205
207
|
.$super('in-edit', options)
|
206
208
|
.set('action', this.options.url)
|
@@ -213,7 +215,7 @@ var InEdit = new Widget('FORM', {
|
|
213
215
|
.onClick(this.clicked)
|
214
216
|
.onSubmit(this.send);
|
215
217
|
},
|
216
|
-
|
218
|
+
|
217
219
|
/**
|
218
220
|
* Shows the inline-editor form
|
219
221
|
*
|
@@ -222,31 +224,31 @@ var InEdit = new Widget('FORM', {
|
|
222
224
|
show: function() {
|
223
225
|
if (InEdit.current !== this) {
|
224
226
|
if (InEdit.current) { InEdit.current.hide(); }
|
225
|
-
|
227
|
+
|
226
228
|
this.oldContent = this.element.html();
|
227
|
-
|
229
|
+
|
228
230
|
if (!R(['file', 'password']).include(this.options.type)) {
|
229
231
|
this.field.setValue(this.oldContent);
|
230
232
|
}
|
231
|
-
|
233
|
+
|
232
234
|
this.element.update(this);
|
233
|
-
|
235
|
+
|
234
236
|
this.spinner.hide();
|
235
237
|
this.submit.show();
|
236
|
-
|
238
|
+
|
237
239
|
if (this.options.toggle) {
|
238
240
|
$(this.options.toggle).hide();
|
239
241
|
}
|
240
242
|
}
|
241
|
-
|
243
|
+
|
242
244
|
if (this.options.type !== 'file') {
|
243
245
|
this.field.focus();
|
244
246
|
}
|
245
|
-
|
247
|
+
|
246
248
|
InEdit.current = this;
|
247
|
-
return this.fire('show'
|
249
|
+
return this.fire('show');
|
248
250
|
},
|
249
|
-
|
251
|
+
|
250
252
|
/**
|
251
253
|
* Hides the form and brings the content back
|
252
254
|
*
|
@@ -255,14 +257,14 @@ var InEdit = new Widget('FORM', {
|
|
255
257
|
*/
|
256
258
|
hide: function() {
|
257
259
|
this.element._.innerHTML = this.oldContent;
|
258
|
-
|
260
|
+
|
259
261
|
if (this.xhr) {
|
260
262
|
this.xhr.cancel();
|
261
263
|
}
|
262
|
-
|
264
|
+
|
263
265
|
return this.finish();
|
264
266
|
},
|
265
|
-
|
267
|
+
|
266
268
|
/**
|
267
269
|
* Triggers the form remote submit
|
268
270
|
*
|
@@ -270,19 +272,19 @@ var InEdit = new Widget('FORM', {
|
|
270
272
|
*/
|
271
273
|
send: function(event) {
|
272
274
|
if (event) { event.stop(); }
|
273
|
-
|
275
|
+
|
274
276
|
this.spinner.show().resize(this.submit.size());
|
275
277
|
this.submit.hide();
|
276
|
-
|
278
|
+
|
277
279
|
this.xhr = new Xhr(this.options.url, Object.merge(this.options.Xhr, {
|
278
280
|
method: this.options.method,
|
279
281
|
spinner: this.spinner,
|
280
282
|
onComplete: R(this.receive).bind(this)
|
281
283
|
})).send(this);
|
282
|
-
|
283
|
-
return this.fire('send'
|
284
|
+
|
285
|
+
return this.fire('send');
|
284
286
|
},
|
285
|
-
|
287
|
+
|
286
288
|
// protected
|
287
289
|
|
288
290
|
// finishes up with the form
|
@@ -290,23 +292,23 @@ var InEdit = new Widget('FORM', {
|
|
290
292
|
if (this.options.toggle) {
|
291
293
|
$(this.options.toggle).show();
|
292
294
|
}
|
293
|
-
|
295
|
+
|
294
296
|
InEdit.current = null;
|
295
|
-
return this.fire('hide'
|
297
|
+
return this.fire('hide');
|
296
298
|
},
|
297
299
|
|
298
300
|
// the xhr callback
|
299
301
|
receive: function() {
|
300
302
|
if (this.options.update) {
|
301
303
|
this.element.update(this.xhr.text);
|
302
|
-
this.fire('update'
|
304
|
+
this.fire('update');
|
303
305
|
}
|
304
|
-
|
306
|
+
|
305
307
|
this.xhr = null;
|
306
|
-
|
308
|
+
|
307
309
|
this.finish();
|
308
310
|
},
|
309
|
-
|
311
|
+
|
310
312
|
// catches clicks on the element
|
311
313
|
clicked: function(event) {
|
312
314
|
if (event.target === this.cancel) {
|
@@ -314,9 +316,10 @@ var InEdit = new Widget('FORM', {
|
|
314
316
|
this.hide();
|
315
317
|
}
|
316
318
|
}
|
317
|
-
|
319
|
+
|
318
320
|
});
|
319
321
|
|
322
|
+
|
320
323
|
/**
|
321
324
|
* The document hooks for in-edit form
|
322
325
|
*
|
@@ -329,6 +332,7 @@ $(document).onKeydown(function(event) {
|
|
329
332
|
}
|
330
333
|
});
|
331
334
|
|
335
|
+
|
332
336
|
/**
|
333
337
|
* The element level inline editor extension
|
334
338
|
*
|
@@ -346,7 +350,8 @@ Element.include({
|
|
346
350
|
}
|
347
351
|
});
|
348
352
|
|
353
|
+
|
349
354
|
document.write("<style type=\"text/css\">div.rui-spinner,div.rui-spinner div{margin:0;padding:0;border:none;background:none;list-style:none;font-weight:normal;float:none;display:inline-block; *display:inline; *zoom:1;border-radius:.12em;-moz-border-radius:.12em;-webkit-border-radius:.12em}div.rui-spinner{text-align:center;white-space:nowrap;background:#EEE;border:1px solid #DDD;height:1.2em;padding:0 .2em}div.rui-spinner div{width:.4em;height:70%;background:#BBB;margin-left:1px}div.rui-spinner div:first-child{margin-left:0}div.rui-spinner div.glowing{background:#777}form.rui-in-edit,form.rui-in-edit .cancel{margin:0;padding:0;float:none;position:static}form.rui-in-edit{display:inline-block; *display:inline; *zoom:1;border:none;background:none}form.rui-in-edit div.rui-spinner{margin-right:.2em}form.rui-in-edit div.rui-spinner div{margin-top:.2em}form.rui-in-edit textarea.field{width:100%;margin-bottom:.5em}form.rui-in-edit .field,form.rui-in-edit .submit{margin-right:.2em}form.rui-in-edit,form.rui-in-edit .field,form.rui-in-edit .submit,form.rui-in-edit div.rui-spinner,form.rui-in-edit .cancel{vertical-align:middle}</style>");
|
350
355
|
|
351
356
|
return InEdit;
|
352
|
-
})(document, RightJS);
|
357
|
+
})(document, RightJS);
|