isortables.js
上传用户:shjgzm
上传日期:2017-08-31
资源大小:2757k
文件大小:8k
源码类别:

Ajax

开发平台:

Java

  1. /**
  2.  * Interface Elements for jQuery
  3.  * Sortables
  4.  * 
  5.  * http://interface.eyecon.ro
  6.  * 
  7.  * Copyright (c) 2006 Stefan Petre
  8.  * Dual licensed under the MIT (MIT-LICENSE.txt) 
  9.  * and GPL (GPL-LICENSE.txt) licenses.
  10.  *   
  11.  *
  12.  */
  13. jQuery.iSort = {
  14. changed : [],
  15. collected : {},
  16. helper : false,
  17. inFrontOf: null,
  18. start : function ()
  19. {
  20. if (jQuery.iDrag.dragged == null) {
  21. return;
  22. }
  23. var i;
  24. jQuery.iSort.helper.get(0).className = jQuery.iDrag.dragged.dragCfg.hpc;
  25. shs = jQuery.iSort.helper.get(0).style;
  26. shs.display = 'block';
  27. jQuery.iSort.helper.oC = jQuery.iUtil.getPos(jQuery.iSort.helper.get(0));
  28. shs.width = jQuery.iDrag.dragged.dragCfg.oC.wb + 'px';
  29. shs.height = jQuery.iDrag.dragged.dragCfg.oC.hb + 'px';
  30. //shs.cssFloat = jQuery.iDrag.dragged.dragCfg.oF;
  31. margins = jQuery.iUtil.getMargins(jQuery.iDrag.dragged);
  32. shs.marginTop = margins.t;
  33. shs.marginRight = margins.r;
  34. shs.marginBottom = margins.b;
  35. shs.marginLeft = margins.l;
  36. if (jQuery.iDrag.dragged.dragCfg.ghosting == true) {
  37. c = jQuery.iDrag.dragged.cloneNode(true);
  38. cs = c.style;
  39. cs.marginTop = '0px';
  40. cs.marginRight = '0px';
  41. cs.marginBottom = '0px';
  42. cs.marginLeft = '0px';
  43. cs.display = 'block';
  44. jQuery.iSort.helper.empty().append(c);
  45. }
  46. jQuery(jQuery.iDrag.dragged).after(jQuery.iSort.helper.get(0));
  47. jQuery.iDrag.dragged.style.display = 'none';
  48. },
  49. check : function (e)
  50. {
  51. if (!e.dragCfg.so && jQuery.iDrop.overzone.sortable) {
  52. if (e.dragCfg.onStop)
  53. e.dragCfg.onStop.apply(dragged);
  54. jQuery(e).css('position', e.dragCfg.initialPosition || e.dragCfg.oP);
  55. jQuery(e).DraggableDestroy();
  56. jQuery(jQuery.iDrop.overzone).SortableAddItem(e);
  57. }
  58. jQuery.iSort.helper.removeClass(e.dragCfg.hpc).html(' ');
  59. jQuery.iSort.inFrontOf = null;
  60. shs = jQuery.iSort.helper.get(0).style;
  61. shs.display = 'none';
  62. ts = [];
  63. fnc = false;
  64. for(i in jQuery.iSort.changed){
  65. iEL = jQuery.iDrop.zones[jQuery.iSort.changed[i]].get(0);
  66. id = jQuery.attr(iEL, 'id');
  67. ser = jQuery.iSort.serialize(id);
  68. if (iEL.dropCfg.os != ser.hash) {
  69. iEL.dropCfg.os = ser.hash;
  70. if (fnc == false && iEL.dropCfg.onchange) {
  71. fnc = iEL.dropCfg.onchange;
  72. }
  73. ser.id = id;
  74. ts[ts.length] = ser;
  75. }
  76. }
  77. if (fnc != false && ts.length > 0) {
  78. fnc(ts);
  79. }
  80. jQuery.iSort.changed = [];
  81. },
  82. checkhover : function(e,o)
  83. {
  84. if (!jQuery.iDrag.dragged)
  85. return;
  86. jQuery.iSort.helper.get(0).style.display = 'block';
  87. var cur = false;
  88. var i = 0;
  89. if ( e.dropCfg.el.size() > 0) {
  90. for (i = e.dropCfg.el.size(); i >0; i--) {
  91. if (e.dropCfg.el.get(i-1) != jQuery.iDrag.dragged) {
  92. if (!e.sortCfg.floats) {
  93. if ( 
  94. (e.dropCfg.el.get(i-1).pos.y + e.dropCfg.el.get(i-1).pos.hb/2) > jQuery.iDrag.dragged.dragCfg.ny  
  95. ) {
  96. cur = e.dropCfg.el.get(i-1);
  97. } else {
  98. break;
  99. }
  100. } else {
  101. if (
  102. (e.dropCfg.el.get(i-1).pos.x + e.dropCfg.el.get(i-1).pos.wb/2) > jQuery.iDrag.dragged.dragCfg.nx && 
  103. (e.dropCfg.el.get(i-1).pos.y + e.dropCfg.el.get(i-1).pos.hb/2) > jQuery.iDrag.dragged.dragCfg.ny  
  104. ) {
  105. cur = e.dropCfg.el.get(i-1);
  106. }
  107. }
  108. }
  109. }
  110. }
  111. //helpos = jQuery.iUtil.getPos(jQuery.iSort.helper.get(0));
  112. if (cur && jQuery.iSort.inFrontOf != cur) {
  113. jQuery.iSort.inFrontOf = cur;
  114. jQuery(cur).before(jQuery.iSort.helper.get(0));
  115. } else if(!cur && (jQuery.iSort.inFrontOf != null || jQuery.iSort.helper.get(0).parentNode != e) ) {
  116. jQuery.iSort.inFrontOf = null;
  117. jQuery(e).append(jQuery.iSort.helper.get(0));
  118. }
  119. },
  120. measure : function (e)
  121. {
  122. if (jQuery.iDrag.dragged == null) {
  123. return;
  124. }
  125. var i;
  126. e.dropCfg.el.each (
  127. function ()
  128. {
  129. this.pos = jQuery.extend(
  130. jQuery.iUtil.getSize(this),
  131. jQuery.iUtil.getPosition(this)
  132. /*{
  133. x: this.offsetLeft||0 - this.parentNode.scrollLeft||0, 
  134. y: this.offsetTop||0 - this.parentNode.scrollTop||0
  135. }*/
  136. );
  137. }
  138. );
  139. },
  140. serialize : function(s)
  141. {
  142. var i;
  143. var h = '';
  144. var o = {};
  145. if (s) {
  146. if (jQuery.iSort.collected[s] ) {
  147. o[s] = [];
  148. jQuery('#' + s + ' .' + jQuery.iSort.collected[s]).each(
  149. function ()
  150. {
  151. if (h.length > 0) {
  152. h += '&';
  153. }
  154. h += s + '[]=' + jQuery.attr(this,'id');
  155. o[s][o[s].length] = jQuery.attr(this,'id');
  156. }
  157. );
  158. } else {
  159. for ( a in s) {
  160. if (jQuery.iSort.collected[s[a]] ) {
  161. o[s[a]] = [];
  162. jQuery('#' + s[a] + ' .' + jQuery.iSort.collected[s[a]]).each(
  163. function ()
  164. {
  165. if (h.length > 0) {
  166. h += '&';
  167. }
  168. h += s[a] + '[]=' + jQuery.attr(this,'id');
  169. o[s[a]][o[s[a]].length] = jQuery.attr(this,'id');
  170. }
  171. );
  172. }
  173. }
  174. }
  175. } else {
  176. for ( i in jQuery.iSort.collected){
  177. o[i] = [];
  178. jQuery('#' + i + ' .' + jQuery.iSort.collected[i]).each(
  179. function ()
  180. {
  181. if (h.length > 0) {
  182. h += '&';
  183. }
  184. h += i + '[]=' + jQuery.attr(this,'id');
  185. o[i][o[i].length] = jQuery.attr(this,'id');
  186. }
  187. );
  188. }
  189. }
  190. return {hash:h, o:o};
  191. },
  192. addItem : function (e)
  193. {
  194. if ( !e.childNodes ) {
  195. return;
  196. }
  197. return this.each(
  198. function ()
  199. {
  200. if(!this.sortCfg || !jQuery.className.has(e, this.sortCfg.accept))
  201. jQuery(e).addClass(this.sortCfg.accept);
  202. jQuery(e).Draggable(this.sortCfg.dragCfg);
  203. }
  204. );
  205. },
  206. build : function (o)
  207. {
  208. if (o.accept && jQuery.iUtil && jQuery.iDrag && jQuery.iDrop) {
  209. if (!jQuery.iSort.helper) {
  210. jQuery('body',document).append('<div id="sortHelper">&nbsp;</div>');
  211. jQuery.iSort.helper = jQuery('#sortHelper');
  212. jQuery.iSort.helper.get(0).style.display = 'none';
  213. }
  214. this.Droppable(
  215. {
  216. accept :  o.accept,
  217. activeclass : o.activeclass ? o.activeclass : false,
  218. hoverclass : o.hoverclass ? o.hoverclass : false,
  219. helperclass : o.helperclass ? o.helperclass : false,
  220. onDrop: function (drag, fx) 
  221. {
  222. jQuery.iSort.helper.after(drag);
  223. if (fx > 0) {
  224. jQuery(drag).fadeIn(fx);
  225. }
  226. },
  227. onHover: o.onHover||o.onhover,
  228. onOut: o.onOut||o.onout,
  229. sortable : true,
  230. onChange :  o.onChange||o.onchange,
  231. fx : o.fx ? o.fx : false,
  232. ghosting : o.ghosting ? true : false,
  233. tolerance: o.tolerance ? o.tolerance : 'pointer'
  234. }
  235. );
  236. return this.each(
  237. function()
  238. {
  239. dragCfg = {
  240. revert : o.revert? true : false,
  241. zindex : 3000,
  242. opacity : o.opacity ? parseFloat(o.opacity) : false,
  243. hpc : o.helperclass ? o.helperclass : false,
  244. fx : o.fx ? o.fx : false,
  245. so : true,
  246. ghosting : o.ghosting ? true : false,
  247. handle: o.handle ? o.handle : null,
  248. containment: o.containment ? o.containment : null,
  249. onStart : o.onStart && o.onStart.constructor == Function ? o.onStart : false,
  250. onStop : o.onStop && o.onStop.constructor == Function ? o.onStop : false,
  251. axis : /vertically|horizontally/.test(o.axis) ? o.axis : false,
  252. snapDistance : o.snapDistance ? parseInt(o.snapDistance)||0 : false,
  253. cursorAt: o.cursorAt ? o.cursorAt : false
  254. };
  255. jQuery('.' + o.accept, this).Draggable(dragCfg);
  256. this.isSortable = true;
  257. this.sortCfg = {
  258. accept :  o.accept,
  259. revert : o.revert? true : false,
  260. zindex : 3000,
  261. opacity : o.opacity ? parseFloat(o.opacity) : false,
  262. hpc : o.helperclass ? o.helperclass : false,
  263. fx : o.fx ? o.fx : false,
  264. so : true,
  265. ghosting : o.ghosting ? true : false,
  266. handle: o.handle ? o.handle : null,
  267. containment: o.containment ? o.containment : null,
  268. floats: o.floats ? true : false,
  269. dragCfg : dragCfg
  270. }
  271. }
  272. );
  273. }
  274. }
  275. };
  276. jQuery.fn.extend(
  277. {
  278. Sortable : jQuery.iSort.build,
  279. SortableAddItem : jQuery.iSort.addItem
  280. }
  281. );
  282. jQuery.SortSerialize = jQuery.iSort.serialize;