ink_ui_rails 2.1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +21 -0
  3. data/README.md +39 -0
  4. data/lib/ink_ui_rails.rb +8 -0
  5. data/lib/ink_ui_rails/version.rb +3 -0
  6. data/vendor/assets/fonts/font/FontAwesome.otf +0 -0
  7. data/vendor/assets/fonts/font/fontawesome-webfont.eot +0 -0
  8. data/vendor/assets/fonts/font/fontawesome-webfont.svg +399 -0
  9. data/vendor/assets/fonts/font/fontawesome-webfont.ttf +0 -0
  10. data/vendor/assets/fonts/font/fontawesome-webfont.woff +0 -0
  11. data/vendor/assets/fonts/font/ubuntu-b-webfont.eot +0 -0
  12. data/vendor/assets/fonts/font/ubuntu-b-webfont.svg +245 -0
  13. data/vendor/assets/fonts/font/ubuntu-b-webfont.ttf +0 -0
  14. data/vendor/assets/fonts/font/ubuntu-b-webfont.woff +0 -0
  15. data/vendor/assets/fonts/font/ubuntu-bi-webfont.eot +0 -0
  16. data/vendor/assets/fonts/font/ubuntu-bi-webfont.svg +245 -0
  17. data/vendor/assets/fonts/font/ubuntu-bi-webfont.ttf +0 -0
  18. data/vendor/assets/fonts/font/ubuntu-bi-webfont.woff +0 -0
  19. data/vendor/assets/fonts/font/ubuntu-c-webfont.eot +0 -0
  20. data/vendor/assets/fonts/font/ubuntu-c-webfont.svg +245 -0
  21. data/vendor/assets/fonts/font/ubuntu-c-webfont.ttf +0 -0
  22. data/vendor/assets/fonts/font/ubuntu-c-webfont.woff +0 -0
  23. data/vendor/assets/fonts/font/ubuntu-l-webfont.eot +0 -0
  24. data/vendor/assets/fonts/font/ubuntu-l-webfont.svg +245 -0
  25. data/vendor/assets/fonts/font/ubuntu-l-webfont.ttf +0 -0
  26. data/vendor/assets/fonts/font/ubuntu-l-webfont.woff +0 -0
  27. data/vendor/assets/fonts/font/ubuntu-li-webfont.eot +0 -0
  28. data/vendor/assets/fonts/font/ubuntu-li-webfont.svg +245 -0
  29. data/vendor/assets/fonts/font/ubuntu-li-webfont.ttf +0 -0
  30. data/vendor/assets/fonts/font/ubuntu-li-webfont.woff +0 -0
  31. data/vendor/assets/fonts/font/ubuntu-m-webfont.eot +0 -0
  32. data/vendor/assets/fonts/font/ubuntu-m-webfont.svg +245 -0
  33. data/vendor/assets/fonts/font/ubuntu-m-webfont.ttf +0 -0
  34. data/vendor/assets/fonts/font/ubuntu-m-webfont.woff +0 -0
  35. data/vendor/assets/fonts/font/ubuntu-mi-webfont.eot +0 -0
  36. data/vendor/assets/fonts/font/ubuntu-mi-webfont.svg +245 -0
  37. data/vendor/assets/fonts/font/ubuntu-mi-webfont.ttf +0 -0
  38. data/vendor/assets/fonts/font/ubuntu-mi-webfont.woff +0 -0
  39. data/vendor/assets/fonts/font/ubuntu-r-webfont.eot +0 -0
  40. data/vendor/assets/fonts/font/ubuntu-r-webfont.svg +245 -0
  41. data/vendor/assets/fonts/font/ubuntu-r-webfont.ttf +0 -0
  42. data/vendor/assets/fonts/font/ubuntu-r-webfont.woff +0 -0
  43. data/vendor/assets/fonts/font/ubuntu-ri-webfont.eot +0 -0
  44. data/vendor/assets/fonts/font/ubuntu-ri-webfont.svg +245 -0
  45. data/vendor/assets/fonts/font/ubuntu-ri-webfont.ttf +0 -0
  46. data/vendor/assets/fonts/font/ubuntu-ri-webfont.woff +0 -0
  47. data/vendor/assets/fonts/font/ubuntumono-b-webfont.eot +0 -0
  48. data/vendor/assets/fonts/font/ubuntumono-b-webfont.svg +242 -0
  49. data/vendor/assets/fonts/font/ubuntumono-b-webfont.ttf +0 -0
  50. data/vendor/assets/fonts/font/ubuntumono-b-webfont.woff +0 -0
  51. data/vendor/assets/fonts/font/ubuntumono-bi-webfont.eot +0 -0
  52. data/vendor/assets/fonts/font/ubuntumono-bi-webfont.svg +242 -0
  53. data/vendor/assets/fonts/font/ubuntumono-bi-webfont.ttf +0 -0
  54. data/vendor/assets/fonts/font/ubuntumono-bi-webfont.woff +0 -0
  55. data/vendor/assets/fonts/font/ubuntumono-r-webfont.eot +0 -0
  56. data/vendor/assets/fonts/font/ubuntumono-r-webfont.svg +242 -0
  57. data/vendor/assets/fonts/font/ubuntumono-r-webfont.ttf +0 -0
  58. data/vendor/assets/fonts/font/ubuntumono-r-webfont.woff +0 -0
  59. data/vendor/assets/fonts/font/ubuntumono-ri-webfont.eot +0 -0
  60. data/vendor/assets/fonts/font/ubuntumono-ri-webfont.svg +242 -0
  61. data/vendor/assets/fonts/font/ubuntumono-ri-webfont.ttf +0 -0
  62. data/vendor/assets/fonts/font/ubuntumono-ri-webfont.woff +0 -0
  63. data/vendor/assets/images/img/SAPOlogo.png +0 -0
  64. data/vendor/assets/images/img/favicon.ico +0 -0
  65. data/vendor/assets/images/img/home_bkg.png +0 -0
  66. data/vendor/assets/images/img/home_logo_IE.jpg +0 -0
  67. data/vendor/assets/images/img/icon_Sprite.png +0 -0
  68. data/vendor/assets/images/img/ink-favicon.ico +0 -0
  69. data/vendor/assets/images/img/logo_home.png +0 -0
  70. data/vendor/assets/images/img/shot_ink.png +0 -0
  71. data/vendor/assets/images/img/shot_intra.png +0 -0
  72. data/vendor/assets/images/img/shot_livebots.png +0 -0
  73. data/vendor/assets/images/img/shot_meo.png +0 -0
  74. data/vendor/assets/images/img/shot_musicbox.png +0 -0
  75. data/vendor/assets/images/img/shot_pessoa.png +0 -0
  76. data/vendor/assets/images/img/splash.1024x748.png +0 -0
  77. data/vendor/assets/images/img/splash.320x460.png +0 -0
  78. data/vendor/assets/images/img/splash.768x1004.png +0 -0
  79. data/vendor/assets/images/img/touch-icon.114.png +0 -0
  80. data/vendor/assets/images/img/touch-icon.16.png +0 -0
  81. data/vendor/assets/images/img/touch-icon.256.png +0 -0
  82. data/vendor/assets/images/img/touch-icon.57.png +0 -0
  83. data/vendor/assets/images/img/touch-icon.72.png +0 -0
  84. data/vendor/assets/javascripts/autoload.js +85 -0
  85. data/vendor/assets/javascripts/example.json +1174 -0
  86. data/vendor/assets/javascripts/holder.js +440 -0
  87. data/vendor/assets/javascripts/html5shiv-printshiv.js +496 -0
  88. data/vendor/assets/javascripts/html5shiv.js +298 -0
  89. data/vendor/assets/javascripts/ink-all.js +18015 -0
  90. data/vendor/assets/javascripts/ink-ui.js +7737 -0
  91. data/vendor/assets/javascripts/ink.aux.js +506 -0
  92. data/vendor/assets/javascripts/ink.close.js +54 -0
  93. data/vendor/assets/javascripts/ink.datepicker.js +1194 -0
  94. data/vendor/assets/javascripts/ink.datepicker.pt.js +32 -0
  95. data/vendor/assets/javascripts/ink.draggable.js +437 -0
  96. data/vendor/assets/javascripts/ink.droppable.js +193 -0
  97. data/vendor/assets/javascripts/ink.formvalidator.js +712 -0
  98. data/vendor/assets/javascripts/ink.gallery.js +757 -0
  99. data/vendor/assets/javascripts/ink.imagequery.js +259 -0
  100. data/vendor/assets/javascripts/ink.js +10278 -0
  101. data/vendor/assets/javascripts/ink.modal.js +628 -0
  102. data/vendor/assets/javascripts/ink.pagination.js +473 -0
  103. data/vendor/assets/javascripts/ink.progressbar.js +110 -0
  104. data/vendor/assets/javascripts/ink.smoothscroller.js +234 -0
  105. data/vendor/assets/javascripts/ink.sortablelist.js +338 -0
  106. data/vendor/assets/javascripts/ink.spy.js +123 -0
  107. data/vendor/assets/javascripts/ink.sticky.js +254 -0
  108. data/vendor/assets/javascripts/ink.table.js +621 -0
  109. data/vendor/assets/javascripts/ink.tabs.js +426 -0
  110. data/vendor/assets/javascripts/ink.toggle.js +218 -0
  111. data/vendor/assets/javascripts/ink.treeview.js +179 -0
  112. data/vendor/assets/javascripts/ink_ui.js +1 -0
  113. data/vendor/assets/javascripts/modernizr.js +815 -0
  114. data/vendor/assets/javascripts/prettify.js +28 -0
  115. data/vendor/assets/stylesheets/ink/_ink-ie7.css +1662 -0
  116. data/vendor/assets/stylesheets/ink/_ink.css +7496 -0
  117. data/vendor/assets/stylesheets/ink/ink_ui.scss.css +2 -0
  118. data/vendor/assets/stylesheets/ink_ui.scss.css +1 -0
  119. metadata +203 -0
@@ -0,0 +1,32 @@
1
+ Ink.requireModules(['Ink.UI.DatePicker_1'],function(DatePicker){
2
+ DatePicker.prototype.lang({
3
+ closeText: 'Fechar',
4
+ cleanText: 'Limpar',
5
+ prevLinkText: '«',
6
+ nextLinkText: '»',
7
+ ofText: ' de ',
8
+ month: {
9
+ 1:'Janeiro',
10
+ 2:'Fevereiro',
11
+ 3:'Março',
12
+ 4:'Abril',
13
+ 5:'Maio',
14
+ 6:'Junho',
15
+ 7:'Julho',
16
+ 8:'Agosto',
17
+ 9:'Setembro',
18
+ 10:'Outubro',
19
+ 11:'Novembro',
20
+ 12:'Dezembro'
21
+ },
22
+ wDay: {
23
+ 0:'Domingo',
24
+ 1:'Segunda',
25
+ 2:'Terça',
26
+ 3:'Quarta',
27
+ 4:'Quinta',
28
+ 5:'Sexta',
29
+ 6:'Sábado'
30
+ }
31
+ });
32
+ })
@@ -0,0 +1,437 @@
1
+ /**
2
+ * @module Ink.UI.Draggable_1
3
+ * @author inkdev AT sapo.pt
4
+ * @version 1
5
+ */
6
+ Ink.createModule("Ink.UI.Draggable","1",["Ink.Dom.Element_1", "Ink.Dom.Event_1", "Ink.Dom.Css_1", "Ink.Dom.Browser_1", "Ink.UI.Droppable_1"],function( Element, Event, Css, Browser, Droppable) {
7
+
8
+ /**
9
+ * @class Ink.UI.Draggable
10
+ * @version 1
11
+ * @constructor
12
+ * @param {String|DOMElement} selector Either a CSS Selector string, or the form's DOMElement
13
+ * @param {Object} [opptions] Optional object for configuring the component
14
+ * @param {String} [options.constraint] - Movement constraint. None by default. Can be either vertical or horizontal.
15
+ * @param {Number} [options.top] - top limit for the draggable area
16
+ * @param {Number} [options.right] - right limit for the draggable area
17
+ * @param {Number} [options.bottom] - bottom limit for the draggable area
18
+ * @param {Number} [options.left] - left limit for the draggable area
19
+ * @param {String|DOMElement} [options.handler] - if specified, only this element will be used for dragging instead of the whole target element
20
+ * @param {Boolean} [options.revert] - if true, reverts the draggable to the original position when dragging stops
21
+ * @param {String} [options.cursor] - cursor type used over the draggable object
22
+ * @param {Number} [options.zindex] - zindex applied to the draggable element while dragged
23
+ * @param {Number} [options.fps] - if defined, on drag will run every n frames per second only
24
+ * @param {DomElement} [options.droppableProxy] - if set, a shallow copy of the droppableProxy will be put on document.body with transparent bg
25
+ * @param {String} [options.mouseAnchor] - defaults to mouse cursor. can be 'left|center|right top|center|bottom'
26
+ * @param {Function} [options.onStart] - callback called when dragging starts
27
+ * @param {Function} [options.onEnd] - callback called when dragging stops
28
+ * @param {Function} [options.onDrag] - callback called while dragging, prior to position updates
29
+ * @param {Function} [options.onChange] - callback called while dragging, after position updates
30
+ * @example
31
+ * Ink.requireModules( ['Ink.UI.Draggable_1'], function( Draggable ){
32
+ * new Draggable( 'myElementId' );
33
+ * });
34
+ */
35
+ var Draggable = function(element, options) {
36
+ this.init(element, options);
37
+ };
38
+
39
+ Draggable.prototype = {
40
+
41
+ /**
42
+ * Init function called by the constructor
43
+ *
44
+ * @method _init
45
+ * @param {String|DOMElement} element ID of the element or DOM Element.
46
+ * @param {Object} [options] Options object for configuration of the module.
47
+ * @private
48
+ */
49
+ init: function(element, options) {
50
+ var o = Ink.extendObj( {
51
+ constraint: false,
52
+ top: 0,
53
+ right: Element.pageWidth(),
54
+ bottom: Element.pageHeight(),
55
+ left: 0,
56
+ handler: false,
57
+ revert: false,
58
+ cursor: 'move',
59
+ zindex: 9999,
60
+ onStart: false,
61
+ onEnd: false,
62
+ onDrag: false,
63
+ onChange: false,
64
+ droppableProxy: false,
65
+ mouseAnchor: undefined,
66
+ skipChildren: true,
67
+ debug: false
68
+ }, options || {});
69
+
70
+ this.options = o;
71
+ this.element = Ink.i(element);
72
+
73
+ this.handle = false;
74
+ this.elmStartPosition = false;
75
+ this.active = false;
76
+ this.dragged = false;
77
+ this.prevCoords = false;
78
+ this.placeholder = false;
79
+
80
+ this.position = false;
81
+ this.zindex = false;
82
+ this.firstDrag = true;
83
+
84
+ if (o.fps) {
85
+ this.deltaMs = 1000 / o.fps;
86
+ this.lastRanAt = 0;
87
+ }
88
+
89
+ this.handlers = {};
90
+ this.handlers.start = Ink.bindEvent(this._onStart,this);
91
+ this.handlers.dragFacade = Ink.bindEvent(this._onDragFacade,this);
92
+ this.handlers.drag = Ink.bindEvent(this._onDrag,this);
93
+ this.handlers.end = Ink.bindEvent(this._onEnd,this);
94
+ this.handlers.selectStart = function(event) { Event.stop(event); return false; };
95
+
96
+ // set handler
97
+ this.handle = (this.options.handler) ? Ink.i(this.options.handler) : this.element;
98
+ this.handle.style.cursor = o.cursor;
99
+
100
+ if (o.right !== false) { this.options.right = o.right - Element.elementWidth( element); }
101
+ if (o.bottom !== false) { this.options.bottom = o.bottom - Element.elementHeight(element); }
102
+
103
+ Event.observe(this.handle, 'touchstart', this.handlers.start);
104
+ Event.observe(this.handle, 'mousedown', this.handlers.start);
105
+
106
+ if (Browser.IE) {
107
+ Event.observe(this.element, 'selectstart', this.handlers.selectStart);
108
+ }
109
+ },
110
+
111
+ /**
112
+ * Removes the ability of the element of being dragged
113
+ *
114
+ * @method destroy
115
+ * @public
116
+ */
117
+ destroy: function() {
118
+ Event.stopObserving(this.handle, 'touchstart', this.handlers.start);
119
+ Event.stopObserving(this.handle, 'mousedown', this.handlers.start);
120
+
121
+ if (Browser.IE) {
122
+ Event.stopObserving(this.element, 'selectstart', this.handlers.selectStart);
123
+ }
124
+ },
125
+
126
+ /**
127
+ * Browser-independant implementation of page scroll
128
+ *
129
+ * @method _getPageScroll
130
+ * @return {Array} Array where the first position is the scrollLeft and the second position is the scrollTop
131
+ * @private
132
+ */
133
+ _getPageScroll: function() {
134
+
135
+ if (typeof self.pageXOffset !== "undefined") {
136
+ return [ self.pageXOffset, self.pageYOffset ];
137
+ }
138
+ if (typeof document.documentElement !== "undefined" && typeof document.documentElement.scrollLeft !== "undefined") {
139
+ return [ document.documentElement.scrollLeft, document.documentElement.scrollTop ];
140
+ }
141
+ return [ document.body.scrollLeft, document.body.scrollTop ];
142
+ },
143
+
144
+ /**
145
+ * Gets coordinates for a given event (with added page scroll)
146
+ *
147
+ * @method _getCoords
148
+ * @param {Object} e window.event object.
149
+ * @return {Array} Array where the first position is the x coordinate, the second is the y coordinate
150
+ * @private
151
+ */
152
+ _getCoords: function(e) {
153
+ var ps = this._getPageScroll();
154
+ return {
155
+ x: (e.touches ? e.touches[0].clientX : e.clientX) + ps[0],
156
+ y: (e.touches ? e.touches[0].clientY : e.clientY) + ps[1]
157
+ };
158
+ },
159
+
160
+ /**
161
+ * Clones src element's relevant properties to dst
162
+ *
163
+ * @method _cloneStyle
164
+ * @param {DOMElement} src Element from where we're getting the styles
165
+ * @param {DOMElement} dst Element where we're placing the styles.
166
+ * @private
167
+ */
168
+ _cloneStyle: function(src, dst) {
169
+ dst.className = src.className;
170
+ dst.style.borderWidth = '0';
171
+ dst.style.padding = '0';
172
+ dst.style.position = 'absolute';
173
+ dst.style.width = Element.elementWidth(src) + 'px';
174
+ dst.style.height = Element.elementHeight(src) + 'px';
175
+ dst.style.left = Element.elementLeft(src) + 'px';
176
+ dst.style.top = Element.elementTop(src) + 'px';
177
+ dst.style.cssFloat = Css.getStyle(src, 'float');
178
+ dst.style.display = Css.getStyle(src, 'display');
179
+ },
180
+
181
+ /**
182
+ * onStart event handler
183
+ *
184
+ * @method _onStart
185
+ * @param {Object} e window.event object
186
+ * @return {Boolean|void} In some cases return false. Otherwise is void
187
+ * @private
188
+ */
189
+ _onStart: function(e) {
190
+ if (!this.active && Event.isLeftClick(e) || typeof e.button === 'undefined') {
191
+
192
+ var tgtEl = e.target || e.srcElement;
193
+ if (this.options.skipChildren && tgtEl !== this.element) { return; }
194
+
195
+ Event.stop(e);
196
+
197
+ this.elmStartPosition = [
198
+ Element.elementLeft(this.element),
199
+ Element.elementTop( this.element)
200
+ ];
201
+
202
+ var pos = [
203
+ parseInt(Css.getStyle(this.element, 'left'), 10),
204
+ parseInt(Css.getStyle(this.element, 'top'), 10)
205
+ ];
206
+
207
+ var dims = [
208
+ Element.elementWidth( this.element),
209
+ Element.elementHeight(this.element)
210
+ ];
211
+
212
+ this.originalPosition = [ pos[0] ? pos[0]: null, pos[1] ? pos[1] : null ];
213
+ this.delta = this._getCoords(e); // mouse coords at beginning of drag
214
+
215
+ this.active = true;
216
+ this.position = Css.getStyle(this.element, 'position');
217
+ this.zindex = Css.getStyle(this.element, 'zIndex');
218
+
219
+ var div = document.createElement('div');
220
+ div.style.position = this.position;
221
+ div.style.width = dims[0] + 'px';
222
+ div.style.height = dims[1] + 'px';
223
+ div.style.marginTop = Css.getStyle(this.element, 'margin-top');
224
+ div.style.marginBottom = Css.getStyle(this.element, 'margin-bottom');
225
+ div.style.marginLeft = Css.getStyle(this.element, 'margin-left');
226
+ div.style.marginRight = Css.getStyle(this.element, 'margin-right');
227
+ div.style.borderWidth = '0';
228
+ div.style.padding = '0';
229
+ div.style.cssFloat = Css.getStyle(this.element, 'float');
230
+ div.style.display = Css.getStyle(this.element, 'display');
231
+ div.style.visibility = 'hidden';
232
+
233
+ this.delta2 = [ this.delta.x - this.elmStartPosition[0], this.delta.y - this.elmStartPosition[1] ]; // diff between top-left corner of obj and mouse
234
+ if (this.options.mouseAnchor) {
235
+ var parts = this.options.mouseAnchor.split(' ');
236
+ var ad = [dims[0], dims[1]]; // starts with 'right bottom'
237
+ if (parts[0] === 'left') { ad[0] = 0; } else if(parts[0] === 'center') { ad[0] = parseInt(ad[0]/2, 10); }
238
+ if (parts[1] === 'top') { ad[1] = 0; } else if(parts[1] === 'center') { ad[1] = parseInt(ad[1]/2, 10); }
239
+ this.applyDelta = [this.delta2[0] - ad[0], this.delta2[1] - ad[1]];
240
+ }
241
+
242
+ this.placeholder = div;
243
+
244
+ if (this.options.onStart) { this.options.onStart(this.element, e); }
245
+
246
+ if (this.options.droppableProxy) { // create new transparent div to optimize DOM traversal during drag
247
+ this.proxy = document.createElement('div');
248
+ dims = [
249
+ window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
250
+ window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
251
+ ];
252
+ var fs = this.proxy.style;
253
+ fs.width = dims[0] + 'px';
254
+ fs.height = dims[1] + 'px';
255
+ fs.position = 'fixed';
256
+ fs.left = '0';
257
+ fs.top = '0';
258
+ fs.zIndex = this.options.zindex + 1;
259
+ fs.backgroundColor = '#FF0000';
260
+ Css.setOpacity(this.proxy, 0);
261
+
262
+ var firstEl = document.body.firstChild;
263
+ while (firstEl && firstEl.nodeType !== 1) { firstEl = firstEl.nextSibling; }
264
+ document.body.insertBefore(this.proxy, firstEl);
265
+
266
+ Event.observe(this.proxy, 'mousemove', this.handlers[this.options.fps ? 'dragFacade' : 'drag']);
267
+ Event.observe(this.proxy, 'touchmove', this.handlers[this.options.fps ? 'dragFacade' : 'drag']);
268
+ }
269
+ else {
270
+ Event.observe(document, 'mousemove', this.handlers[this.options.fps ? 'dragFacade' : 'drag']);
271
+ }
272
+
273
+ this.element.style.position = 'absolute';
274
+ this.element.style.zIndex = this.options.zindex;
275
+ this.element.parentNode.insertBefore(this.placeholder, this.element);
276
+
277
+ this._onDrag(e);
278
+
279
+ Event.observe(document, 'mouseup', this.handlers.end);
280
+ Event.observe(document, 'touchend', this.handlers.end);
281
+
282
+ return false;
283
+ }
284
+ },
285
+
286
+ /**
287
+ * Function that gets the timestamp of the current run from time to time. (FPS)
288
+ *
289
+ * @method _onDragFacade
290
+ * @param {Object} window.event object.
291
+ * @private
292
+ */
293
+ _onDragFacade: function(e) {
294
+ var now = new Date().getTime();
295
+ if (!this.lastRanAt || now > this.lastRanAt + this.deltaMs) {
296
+ this.lastRanAt = now;
297
+ this._onDrag(e);
298
+ }
299
+ },
300
+
301
+ /**
302
+ * Function that handles the dragging movement
303
+ *
304
+ * @method _onDrag
305
+ * @param {Object} window.event object.
306
+ * @private
307
+ */
308
+ _onDrag: function(e) {
309
+ if (this.active) {
310
+ Event.stop(e);
311
+ this.dragged = true;
312
+ var mouseCoords = this._getCoords(e),
313
+ mPosX = mouseCoords.x,
314
+ mPosY = mouseCoords.y,
315
+ o = this.options,
316
+ newX = false,
317
+ newY = false;
318
+
319
+ if (!this.prevCoords) { this.prevCoords = {x: 0, y: 0}; }
320
+
321
+ if (mPosX !== this.prevCoords.x || mPosY !== this.prevCoords.y) {
322
+ if (o.onDrag) { o.onDrag(this.element, e); }
323
+ this.prevCoords = mouseCoords;
324
+
325
+ newX = this.elmStartPosition[0] + mPosX - this.delta.x;
326
+ newY = this.elmStartPosition[1] + mPosY - this.delta.y;
327
+
328
+ if (o.constraint === 'horizontal' || o.constraint === 'both') {
329
+ if (o.right !== false && newX > o.right) { newX = o.right; }
330
+ if (o.left !== false && newX < o.left) { newX = o.left; }
331
+ }
332
+ if (o.constraint === 'vertical' || o.constraint === 'both') {
333
+ if (o.bottom !== false && newY > o.bottom) { newY = o.bottom; }
334
+ if (o.top !== false && newY < o.top) { newY = o.top; }
335
+ }
336
+
337
+ if (this.firstDrag) {
338
+ if (Droppable) { Droppable.updateAll(); }
339
+ /*this.element.style.position = 'absolute';
340
+ this.element.style.zIndex = this.options.zindex;
341
+ this.element.parentNode.insertBefore(this.placeholder, this.element);*/
342
+ this.firstDrag = false;
343
+ }
344
+
345
+ if (newX) { this.element.style.left = newX + 'px'; }
346
+ if (newY) { this.element.style.top = newY + 'px'; }
347
+
348
+ if (Droppable) {
349
+ // apply applyDelta defined on drag init
350
+ var mouseCoords2 = this.options.mouseAnchor ? {x: mPosX - this.applyDelta[0], y: mPosY - this.applyDelta[1]} : mouseCoords;
351
+
352
+ // for debugging purposes
353
+ // if (this.options.debug) {
354
+ // if (!this.pt) {
355
+ // this.pt = Debug.addPoint(document.body, [mouseCoords2.x, mouseCoords2.y], '#0FF', 9);
356
+ // this.pt.style.zIndex = this.options.zindex + 1;
357
+ // }
358
+ // else {
359
+ // Debug.movePoint(this.pt, [mouseCoords2.x, mouseCoords2.y]);
360
+ // }
361
+ // }
362
+
363
+ Droppable.action(mouseCoords2, 'drag', e, this.element);
364
+ }
365
+ if (o.onChange) { o.onChange(this); }
366
+ }
367
+ }
368
+ },
369
+
370
+ /**
371
+ * Function that handles the end of the dragging process
372
+ *
373
+ * @method _onEnd
374
+ * @param {Object} window.event object.
375
+ * @private
376
+ */
377
+ _onEnd: function(e) {
378
+ Event.stopObserving(document, 'mousemove', this.handlers.drag);
379
+ Event.stopObserving(document, 'touchmove', this.handlers.drag);
380
+
381
+ if (this.options.fps) {
382
+ this._onDrag(e);
383
+ }
384
+
385
+ if (this.active && this.dragged) {
386
+
387
+ if (this.options.droppableProxy) { // remove transparent div...
388
+ document.body.removeChild(this.proxy);
389
+ }
390
+
391
+ if (this.pt) { // remove debugging element...
392
+ this.pt.parentNode.removeChild(this.pt);
393
+ this.pt = undefined;
394
+ }
395
+
396
+ /*if (this.options.revert) {
397
+ this.placeholder.parentNode.removeChild(this.placeholder);
398
+ }*/
399
+
400
+ if(this.placeholder) {
401
+ this.placeholder.parentNode.removeChild(this.placeholder);
402
+ }
403
+
404
+ if (this.options.revert) {
405
+ this.element.style.position = this.position;
406
+ if (this.zindex !== null) {
407
+ this.element.style.zIndex = this.zindex;
408
+ }
409
+ else {
410
+ this.element.style.zIndex = 'auto';
411
+ } // restore default zindex of it had none
412
+
413
+ this.element.style.left = (this.originalPosition[0]) ? this.originalPosition[0] + 'px' : '';
414
+ this.element.style.top = (this.originalPosition[1]) ? this.originalPosition[1] + 'px' : '';
415
+ }
416
+
417
+ if (this.options.onEnd) {
418
+ this.options.onEnd(this.element, e);
419
+ }
420
+
421
+ if (Droppable) {
422
+ Droppable.action(this._getCoords(e), 'drop', e, this.element);
423
+ }
424
+
425
+ this.position = false;
426
+ this.zindex = false;
427
+ this.firstDrag = true;
428
+ }
429
+
430
+ this.active = false;
431
+ this.dragged = false;
432
+ }
433
+ };
434
+
435
+ return Draggable;
436
+
437
+ });