alchemy_cms 2.0.rc3 → 2.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (219) hide show
  1. data/.gitignore +3 -1
  2. data/.rspec +1 -2
  3. data/.travis.yml +11 -0
  4. data/.yardopts +0 -1
  5. data/Gemfile +1 -2
  6. data/README.md +14 -0
  7. data/alchemy_cms.gemspec +4 -2
  8. data/app/controllers/admin/clipboard_controller.rb +8 -9
  9. data/app/controllers/admin/contents_controller.rb +4 -2
  10. data/app/controllers/admin/essence_pictures_controller.rb +2 -2
  11. data/app/controllers/admin/layoutpages_controller.rb +2 -0
  12. data/app/controllers/admin/pages_controller.rb +5 -5
  13. data/app/controllers/admin/pictures_controller.rb +2 -1
  14. data/app/controllers/admin/trash_controller.rb +2 -0
  15. data/app/controllers/alchemy_controller.rb +10 -4
  16. data/app/controllers/elements_controller.rb +1 -1
  17. data/app/helpers/admin/elements_helper.rb +32 -1
  18. data/app/helpers/alchemy_helper.rb +15 -818
  19. data/app/helpers/contents_helper.rb +69 -0
  20. data/app/helpers/elements_helper.rb +161 -0
  21. data/app/helpers/essences_helper.rb +167 -0
  22. data/app/helpers/pages_helper.rb +401 -19
  23. data/app/models/attachment.rb +4 -0
  24. data/app/models/element.rb +27 -14
  25. data/app/models/page.rb +75 -38
  26. data/app/views/admin/essence_pictures/destroy.js.erb +1 -1
  27. data/app/views/admin/pages/_create_language_form.html.erb +2 -1
  28. data/app/views/admin/pages/new.html.erb +1 -1
  29. data/app/views/admin/pages/update.js.erb +1 -1
  30. data/app/views/admin/partials/_upload_form.html.erb +2 -2
  31. data/app/views/admin/pictures/index.html.erb +7 -4
  32. data/app/views/essences/_essence_picture_editor.html.erb +1 -3
  33. data/app/views/layouts/alchemy.html.erb +59 -59
  34. data/app/views/layouts/pages.html.erb +2 -4
  35. data/app/views/{partials/_navigation_image_link.html.erb → navigation/_image_link.html.erb} +0 -0
  36. data/app/views/{partials/_navigation_link.html.erb → navigation/_link.html.erb} +1 -1
  37. data/app/views/{partials/_navigation_renderer.html.erb → navigation/_renderer.html.erb} +0 -0
  38. data/app/views/page_layouts/_contact.html.erb +1 -1
  39. data/app/views/page_layouts/_external.html.erb +0 -1
  40. data/app/views/page_layouts/_intro.html.erb +1 -1
  41. data/app/views/page_layouts/_news.html.erb +1 -1
  42. data/app/views/page_layouts/_search.html.erb +1 -1
  43. data/app/views/page_layouts/_standard.html.erb +1 -1
  44. data/assets/images/icons.png +0 -0
  45. data/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +49 -31
  46. data/assets/stylesheets/alchemy.css +111 -91
  47. data/assets/stylesheets/elements.css +12 -16
  48. data/bin/alchemy +1 -1
  49. data/config/alchemy/config.yml +4 -0
  50. data/config/initializers/tinymce_hammer.rb +1 -0
  51. data/config/locales/de.yml +3 -1
  52. data/config/locales/en.yml +2 -0
  53. data/config/routes.rb +6 -4
  54. data/lib/alchemy/capistrano.rb +4 -7
  55. data/lib/alchemy/page_layout.rb +12 -8
  56. data/lib/alchemy/version.rb +1 -1
  57. data/spec/controllers/admin/clipboard_controller_spec.rb +23 -0
  58. data/spec/dummy/db/schema.rb +9 -9
  59. data/spec/factories.rb +24 -6
  60. data/spec/helpers/admin/elements_helper_spec.rb +20 -0
  61. data/spec/helpers/alchemy_helper_spec.rb +41 -0
  62. data/spec/helpers/contents_helper_spec.rb +27 -0
  63. data/spec/helpers/elements_helper_spec.rb +39 -0
  64. data/spec/helpers/essences_helper_spec.rb +49 -0
  65. data/spec/helpers/pages_helper_spec.rb +140 -0
  66. data/spec/integration/security_spec.rb +1 -1
  67. data/spec/integration/standardset_spec.rb +29 -0
  68. data/spec/models/element_spec.rb +49 -0
  69. data/spec/{language_spec.rb → models/language_spec.rb} +0 -0
  70. data/spec/models/page_spec.rb +139 -0
  71. data/spec/{user_spec.rb → models/user_spec.rb} +0 -0
  72. data/spec/page_layout_spec.rb +21 -0
  73. data/spec/routing_spec.rb +53 -0
  74. data/spec/spec_helper.rb +12 -11
  75. metadata +54 -303
  76. data/spec/dummy/config/alchemy/config.yml +0 -199
  77. data/spec/dummy/config/alchemy/elements.yml +0 -91
  78. data/spec/dummy/config/alchemy/page_layouts.yml +0 -29
  79. data/spec/dummy/public/images/alchemy/ajax_loader.gif +0 -0
  80. data/spec/dummy/public/images/alchemy/alchemy-logo.png +0 -0
  81. data/spec/dummy/public/images/alchemy/flags.png +0 -0
  82. data/spec/dummy/public/images/alchemy/gui/navi-tab.png +0 -0
  83. data/spec/dummy/public/images/alchemy/gui/shading.png +0 -0
  84. data/spec/dummy/public/images/alchemy/gui/shading_90.png +0 -0
  85. data/spec/dummy/public/images/alchemy/gui/toggle.png +0 -0
  86. data/spec/dummy/public/images/alchemy/icons.png +0 -0
  87. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow.gif +0 -0
  88. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
  89. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
  90. data/spec/dummy/public/images/alchemy/jquery-ui/ui-icons_666666_256x240.png +0 -0
  91. data/spec/dummy/public/images/alchemy/placeholder.png +0 -0
  92. data/spec/dummy/public/images/alchemy/swfupload/browse_button.png +0 -0
  93. data/spec/dummy/public/javascripts/alchemy/alchemy.element_editor_selector.js +0 -88
  94. data/spec/dummy/public/javascripts/alchemy/alchemy.growler.js +0 -44
  95. data/spec/dummy/public/javascripts/alchemy/alchemy.image_cropper.js +0 -56
  96. data/spec/dummy/public/javascripts/alchemy/alchemy.js +0 -892
  97. data/spec/dummy/public/javascripts/alchemy/alchemy.link_overlay.js +0 -221
  98. data/spec/dummy/public/javascripts/alchemy/alchemy.page_sorter.js +0 -42
  99. data/spec/dummy/public/javascripts/alchemy/alchemy.preview.js +0 -145
  100. data/spec/dummy/public/javascripts/alchemy/jquery-ui.js +0 -428
  101. data/spec/dummy/public/javascripts/alchemy/jquery.Jcrop.min.js +0 -246
  102. data/spec/dummy/public/javascripts/alchemy/jquery.dialogextend.min.js +0 -8
  103. data/spec/dummy/public/javascripts/alchemy/jquery.in-place-edit.js +0 -171
  104. data/spec/dummy/public/javascripts/alchemy/jquery.js +0 -18
  105. data/spec/dummy/public/javascripts/alchemy/jquery.rails.js +0 -315
  106. data/spec/dummy/public/javascripts/alchemy/jquery.sb.min.js +0 -14
  107. data/spec/dummy/public/javascripts/alchemy/jquery.scrollTo-1.4.2-min.js +0 -11
  108. data/spec/dummy/public/javascripts/alchemy/jquery.ui.nestedSortable.js +0 -291
  109. data/spec/dummy/public/javascripts/alchemy/jquery.ui.tabspaging.js +0 -281
  110. data/spec/dummy/public/javascripts/alchemy/swfupload/fileprogress.js +0 -203
  111. data/spec/dummy/public/javascripts/alchemy/swfupload/handlers.js +0 -171
  112. data/spec/dummy/public/javascripts/alchemy/swfupload/queue.js +0 -98
  113. data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.js +0 -980
  114. data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.swf +0 -0
  115. data/spec/dummy/public/javascripts/alchemy/tiny_mce/jquery.tinymce.js +0 -1
  116. data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/de.js +0 -1
  117. data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/en.js +0 -223
  118. data/spec/dummy/public/javascripts/alchemy/tiny_mce/license.txt +0 -504
  119. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -43
  120. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/de.js +0 -4
  121. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/en.js +0 -4
  122. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -1
  123. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -109
  124. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -1
  125. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +0 -402
  126. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/template.htm +0 -387
  127. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/lists/editor_plugin.js +0 -1
  128. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/editor_plugin.js +0 -1
  129. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pastetext.js +0 -36
  130. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pasteword.js +0 -51
  131. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/de_dlg.js +0 -1
  132. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/en_dlg.js +0 -5
  133. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pastetext.htm +0 -27
  134. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pasteword.htm +0 -21
  135. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/cell.htm +0 -180
  136. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/cell.css +0 -17
  137. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/row.css +0 -25
  138. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/table.css +0 -13
  139. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/editor_plugin.js +0 -1
  140. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/cell.js +0 -319
  141. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/merge_cells.js +0 -27
  142. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/row.js +0 -237
  143. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/table.js +0 -450
  144. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/de_dlg.js +0 -1
  145. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/en_dlg.js +0 -75
  146. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/merge_cells.htm +0 -32
  147. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/row.htm +0 -158
  148. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/table.htm +0 -188
  149. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/about.htm +0 -52
  150. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/anchor.htm +0 -26
  151. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/charmap.htm +0 -51
  152. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/color_picker.htm +0 -74
  153. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/editor_template.js +0 -1
  154. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/image.htm +0 -80
  155. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  156. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/flash.gif +0 -0
  157. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/icons.gif +0 -0
  158. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  159. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  160. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  161. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  162. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  163. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/trans.gif +0 -0
  164. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/video.gif +0 -0
  165. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  166. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/about.js +0 -73
  167. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/anchor.js +0 -42
  168. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/charmap.js +0 -355
  169. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/color_picker.js +0 -329
  170. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/image.js +0 -247
  171. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/link.js +0 -153
  172. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/source_editor.js +0 -56
  173. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de.js +0 -1
  174. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de_dlg.js +0 -1
  175. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en.js +0 -68
  176. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en_dlg.js +0 -54
  177. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/link.htm +0 -57
  178. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/shortcuts.htm +0 -47
  179. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/content.css +0 -47
  180. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/dialog.css +0 -117
  181. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  182. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  183. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  184. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  185. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  186. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  187. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/ui.css +0 -214
  188. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/content.css +0 -23
  189. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +0 -105
  190. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/ui.css +0 -102
  191. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/content.css +0 -46
  192. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/dialog.css +0 -117
  193. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  194. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  195. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  196. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui.css +0 -217
  197. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +0 -8
  198. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +0 -5
  199. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/source_editor.htm +0 -25
  200. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/simple/langs/de.js +0 -1
  201. data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce.js +0 -1
  202. data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce_popup.js +0 -5
  203. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/editable_selects.js +0 -70
  204. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/form_utils.js +0 -210
  205. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/mctabs.js +0 -162
  206. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/validate.js +0 -252
  207. data/spec/dummy/public/stylesheets/alchemy/Jcrop.gif +0 -0
  208. data/spec/dummy/public/stylesheets/alchemy/alchemy.css +0 -3653
  209. data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_content.css +0 -94
  210. data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_dialog.css +0 -415
  211. data/spec/dummy/public/stylesheets/alchemy/default/img/tabs.gif +0 -0
  212. data/spec/dummy/public/stylesheets/alchemy/elements.css +0 -900
  213. data/spec/dummy/public/stylesheets/alchemy/flags.css +0 -1
  214. data/spec/dummy/public/stylesheets/alchemy/ie6.css +0 -18
  215. data/spec/dummy/public/stylesheets/alchemy/jquery-ui-1.8.7.alchemy.css +0 -2023
  216. data/spec/dummy/public/stylesheets/alchemy/jquery.Jcrop.css +0 -35
  217. data/spec/dummy/public/stylesheets/alchemy/jquery.sb.css +0 -244
  218. data/spec/dummy/public/stylesheets/alchemy/standard_set.css +0 -374
  219. data/spec/page_spec.rb +0 -50
@@ -1,14 +0,0 @@
1
- /*
2
- jQuery-SelectBox
3
-
4
- Traditional select elements are very difficult to style by themselves,
5
- but they are also very usable and feature rich. This plugin attempts to
6
- recreate all selectbox functionality and appearance while adding
7
- animation and stylability.
8
-
9
- This product includes software developed
10
- by RevSystems, Inc (http://www.revsystems.com/) and its contributors
11
-
12
- Please see the accompanying LICENSE.txt for licensing information.
13
- */
14
- (function(e,d,g){e.fn.borderWidth=function(){return e(this).outerWidth()-e(this).innerWidth()};e.fn.paddingWidth=function(){return e(this).innerWidth()-e(this).width()};e.fn.extraWidth=function(){return e(this).outerWidth(true)-e(this).width()};e.fn.offsetFrom=function(i){var h=e(i);return{left:e(this).offset().left-h.offset().left,top:e(this).offset().top-h.offset().top}};e.fn.maxWidth=function(){var h=0;e(this).each(function(){if(e(this).width()>h){h=e(this).width()}});return h};e.fn.triggerAll=function(h,i){return e(this).each(function(){e(this).triggerHandler(h,i)})};var c=Array.prototype.slice,a=function(){return Math.floor(Math.random()*999999999)};e.proto=function(){var i=arguments[0],h=arguments[1],j=h,l={},k;opts=e.extend({elem:"elem",access:"access",init:"init",instantAccess:false},arguments[2]);if(h._super){l[opts.init]=function(){};j=h.extend(l)}e.fn[i]=function(){var m,n=arguments;e(this).each(function(){var p=e(this),q=p.data(i),o=!q;if(o){q=new j();if(h._super){q[opts.init]=h.prototype.init}q[opts.elem]=p[0];if(q[opts.init]){q[opts.init].apply(q,opts.instantAccess?[]:c.call(n,0))}p.data(i,q)}if(!o||opts.instantAccess){if(q[opts.access]){q[opts.access].apply(q,c.call(n,0))}if(n.length>0){if(e.isFunction(q[n[0]])){m=q[n[0]].apply(q,c.call(n,1))}else{if(n.length===1){if(e.getObject){m=e.getObject(n[0],q)}else{m=q[n[0]]}}else{if(e.setObject){e.setObject(n[0],n[1],q)}else{q[n[0]]=n[1]}}}}else{if(m===k){m=p.data(i)}}}});if(m===k){return e(this)}return m}};var b=function(){return false},f=function(){var q=this,U={},m=null,C=null,u=null,v=null,l=null,ac=null,W="",G=null,V=null,i=null,T,Z,n,af,s,ad,Y,M,aa,w,ae,h,ab,S,Q,L,y,z,j,X,R,J,I,P,H,O,E,B,k,N,p,A,F,x,t,r,K,D;T=function(){u=e("<div class='sb "+U.selectboxClass+" "+m.attr("class")+"' id='sb"+a()+"'></div>").attr("role","listbox").attr("aria-has-popup","true").attr("aria-labelledby",C.attr("id")?C.attr("id"):"");e("body").append(u);var ag=m.children().size()>0?U.displayFormat.call(m.find("option:selected")[0],0,0):"&nbsp;";v=e("<div class='display "+m.attr("class")+"' id='sbd"+a()+"'></div>").append(e("<div class='text'></div>").append(ag)).append(U.arrowMarkup);u.append(v);l=e("<ul class='"+U.selectboxClass+" items "+m.attr("class")+"' role='menu' id='sbdd"+a()+"'></ul>").attr("aria-hidden","true");u.append(l).attr("aria-owns",l.attr("id"));if(m.children().size()===0){l.append(Z().addClass("selected"))}else{m.children().each(function(ah){var ai,aj,ak,al;if(e(this).is("optgroup")){aj=e(this);ak=e("<li class='optgroup'>"+U.optgroupFormat.call(aj[0],ah+1)+"</li>").addClass(aj.is(":disabled")?"disabled":"").attr("aria-disabled",aj.is(":disabled")?"true":"");al=e("<ul class='items'></ul>");ak.append(al);l.append(ak);aj.children("option").each(function(){ai=Z(e(this),ah).addClass(aj.is(":disabled")?"disabled":"").attr("aria-disabled",aj.is(":disabled")?"true":"");al.append(ai)})}else{l.append(Z(e(this),ah))}})}ac=l.find("li").not(".optgroup");u.attr("aria-active-descendant",ac.filter(".selected").attr("id"));l.children(":first").addClass("first");l.children(":last").addClass("last");if(!U.fixedWidth){var o=l.find(".text, .optgroup").maxWidth()+v.extraWidth()+1;u.width(U.maxWidth?Math.min(U.maxWidth,o):o)}else{if(U.maxWidth&&u.width()>U.maxWidth){u.width(U.maxWidth)}}m.before(u).addClass("has_sb").hide().show();ae();K();l.hide();if(!m.is(":disabled")){m.bind("blur.sb",af).bind("focus.sb",n);v.mouseup(J).mouseup(S).click(b).focus(z).blur(j).hover(X,R);O().click(Q).hover(X,R);l.find(".optgroup").hover(X,R).click(b);ac.filter(".disabled").click(b);if(!e.browser.msie||e.browser.version>=9){e(d).resize(e.throttle?e.throttle(100,h):ab)}}else{u.addClass("disabled").attr("aria-disabled");v.click(function(ah){ah.preventDefault()})}u.bind("close.sb",w).bind("destroy.sb",s);m.bind("reload.sb",ad);if(e.fn.tie&&U.useTie){m.bind("domupdate.sb",Y)}};ab=function(){clearTimeout(i);i=setTimeout(h,50)};h=function(){if(u.is(".open")){ae();M(true)}};Z=function(ah,o){if(!ah){ah=e("<option value=''>&nbsp;</option>");o=0}var aj=e("<li id='sbo"+a()+"'></li>").attr("role","option").data("orig",ah[0]).data("value",ah?ah.attr("value"):"").addClass(ah.is(":selected")?"selected":"").addClass(ah.is(":disabled")?"disabled":"").attr("aria-disabled",ah.is(":disabled")?"true":""),ai=e("<div class='item'></div>"),ag=e("<div class='text'></div>").html(U.optionFormat.call(ah[0],0,o+1));return aj.append(ai.append(ag))};n=function(){t();v.triggerHandler("focus")};af=function(){if(!u.is(".open")){v.triggerHandler("blur")}};s=function(o){u.remove();m.unbind(".sb").removeClass("has_sb");e(d).unbind("resize",ab);if(!o){m.removeData("sb")}};ad=function(){var ag=u.is(".open"),o=v.is(".focused");w(true);s(true);q.init(U);if(ag){m.focus();M(true)}else{if(o){m.focus()}}};Y=function(){clearTimeout(V);V=setTimeout(ad,30)};x=function(){u.removeClass("focused");w();D()};D=function(){e(document).unbind("click",x).unbind("keyup",L).unbind("keypress",r).unbind("keydown",r).unbind("keydown",y)};A=function(){e(".sb.open."+U.selectboxClass).triggerAll("close")};t=function(){e(".sb.focused."+U.selectboxClass).not(u[0]).find(".display").blur()};F=function(){e(".sb.open."+U.selectboxClass).not(u[0]).triggerAll("close")};w=function(o){if(u.is(".open")){v.blur();ac.removeClass("hover");D();l.attr("aria-hidden","true");if(o===true){l.hide();u.removeClass("open");u.append(l)}else{l.fadeOut(U.animDuration,function(){u.removeClass("open");u.append(l)})}}};P=function(){var o=null;if(U.ddCtx==="self"){o=u}else{if(e.isFunction(U.ddCtx)){o=e(U.ddCtx.call(m[0]))}else{o=e(U.ddCtx)}}return o};H=function(){return ac.filter(".selected")};O=function(){return ac.not(".disabled")};aa=function(){l.scrollTop(l.scrollTop()+H().offsetFrom(l).top-l.height()/2+H().outerHeight(true)/2)};K=function(){if(e.browser.msie&&e.browser.version<8){e("."+U.selectboxClass+" .display").hide().show()}};M=function(ag){var o,ah=P();t();u.addClass("open");ah.append(l);o=ae();l.attr("aria-hidden","false");if(ag===true){l.show();aa()}else{if(o==="down"){l.slideDown(U.animDuration,aa)}else{l.fadeIn(U.animDuration,aa)}}m.focus()};ae=function(){var aj=P(),aq=0,ah=v.offsetFrom(aj).left,ag=0,ak="",an,o,ap,ao,ai,ar,am,al;l.removeClass("above");l.show().css({maxHeight:"none",position:"relative",visibility:"hidden"});if(!U.fixedWidth){l.width(v.outerWidth()-l.extraWidth()+1)}ap=e(d).scrollTop()+e(d).height()-v.offset().top-v.outerHeight();ao=v.offset().top-e(d).scrollTop();ai=v.offsetFrom(aj).top+v.outerHeight();ar=ap-ao+U.dropupThreshold;if(l.outerHeight()<ap){aq=U.maxHeight?U.maxHeight:ap;ag=ai;ak="down"}else{if(l.outerHeight()<ao){aq=U.maxHeight?U.maxHeight:ao;ag=v.offsetFrom(aj).top-Math.min(aq,l.outerHeight());ak="up"}else{if(ar>=0){aq=U.maxHeight?U.maxHeight:ap;ag=ai;ak="down"}else{if(ar<0){aq=U.maxHeight?U.maxHeight:ao;ag=v.offsetFrom(aj).top-Math.min(aq,l.outerHeight());ak="up"}else{aq=U.maxHeight?U.maxHeight:"none";ag=ai;ak="down"}}}}an=(""+e("body").css("margin-left")).match(/^\d+/)?e("body").css("margin-left"):0;o=(""+e("body").css("margin-top")).match(/^\d+/)?e("body").css("margin-top"):0;am=e().jquery>="1.4.2"?parseInt(an):e("body").offset().left;al=e().jquery>="1.4.2"?parseInt(o):e("body").offset().top;l.hide().css({left:ah+(aj.is("body")?am:0),maxHeight:aq,position:"absolute",top:ag+(aj.is("body")?al:0),visibility:"visible"});if(ak==="up"){l.addClass("above")}return ak};S=function(o){if(u.is(".open")){w()}else{M()}return false};E=function(){var ag=e(this),o=m.val(),ah=ag.data("value");m.find("option").each(function(){this.selected=false});e(ag.data("orig")).each(function(){this.selected=true});ac.removeClass("selected");ag.addClass("selected");u.attr("aria-active-descendant",ag.attr("id"));v.find(".text").attr("title",ag.find(".text").html());v.find(".text").html(U.displayFormat.call(ag.data("orig")));if(o!==ah){m.change()}};Q=function(o){x();m.focus();E.call(this);return false};B=function(){W=""};k=function(aj){var ai,ah,o,ag=O();for(ai=0;ai<ag.size();ai++){o=ag.eq(ai).find(".text");ah=o.children().size()==0?o.text():o.find("*").text();if(aj.length>0&&ah.toLowerCase().match("^"+aj.toLowerCase())){return ag.eq(ai)}}return null};N=function(ag){var o=k(ag);if(o!==null){E.call(o[0]);return true}return false};r=function(o){if(o.ctrlKey||o.altKey){return}if(o.which===38||o.which===40||o.which===8||o.which===32){o.preventDefault()}};p=function(aj){var ai,ah,o=H(),ag=O();for(ai=ag.index(o)+1;ai<ag.size();ai++){ah=ag.eq(ai).find(".text").text();if(ah!==""&&ah.substring(0,1).toLowerCase()===aj.toLowerCase()){E.call(ag.eq(ai)[0]);return true}}return false};y=function(ah){if(ah.altKey||ah.ctrlKey){return false}var ag=H(),o=O();switch(ah.which){case 9:w();j();break;case 35:if(ag.size()>0){ah.preventDefault();E.call(o.filter(":last")[0]);aa()}break;case 36:if(ag.size()>0){ah.preventDefault();E.call(o.filter(":first")[0]);aa()}break;case 38:if(ag.size()>0){if(o.filter(":first")[0]!==ag[0]){ah.preventDefault();E.call(o.eq(o.index(ag)-1)[0])}aa()}break;case 40:if(ag.size()>0){if(o.filter(":last")[0]!==ag[0]){ah.preventDefault();E.call(o.eq(o.index(ag)+1)[0]);aa()}}else{if(ac.size()>1){ah.preventDefault();E.call(ac.eq(0)[0])}}break;default:break}};L=function(o){if(o.altKey||o.ctrlKey){return false}if(o.which!==38&&o.which!==40){W+=String.fromCharCode(o.keyCode);if(N(W)){clearTimeout(G);G=setTimeout(B,U.acTimeout)}else{if(p(String.fromCharCode(o.keyCode))){aa();clearTimeout(G);G=setTimeout(B,U.acTimeout)}else{B();clearTimeout(G)}}}};z=function(){F();u.addClass("focused");e(document).click(x).keyup(L).keypress(r).keydown(r).keydown(y)};j=function(){u.removeClass("focused");v.removeClass("active");e(document).unbind("keyup",L).unbind("keydown",r).unbind("keypress",r).unbind("keydown",y)};X=function(){e(this).addClass("hover")};R=function(){e(this).removeClass("hover")};J=function(){v.addClass("active");e(document).bind("mouseup",I)};I=function(){v.removeClass("active");e(document).unbind("mouseup",I)};this.init=function(o){if(e.browser.msie&&e.browser.version<7){return}m=e(this.elem);if(m.attr("id")){C=e("label[for='"+m.attr("id")+"']:first")}if(!C||C.size()===0){C=m.closest("label")}if(m.hasClass("has_sb")){return}U=e.extend({acTimeout:800,animDuration:200,ddCtx:"body",dropupThreshold:150,fixedWidth:false,maxHeight:false,maxWidth:false,selectboxClass:"selectbox",useTie:false,arrowMarkup:"<div class='arrow_btn'><span class='arrow'></span></div>",displayFormat:g,optionFormat:function(ag,ai){if(e(this).size()>0){var ah=e(this).attr("label");if(ah&&ah.length>0){return ah}return e(this).text()}else{return""}},optgroupFormat:function(ag){return"<span class='label'>"+e(this).attr("label")+"</span>"}},o);U.displayFormat=U.displayFormat||U.optionFormat;T()};this.open=M;this.close=w;this.refresh=ad;this.destroy=s;this.options=function(o){U=e.extend(U,o);ad()}};e.proto("sb",f)}(jQuery,window));
@@ -1,11 +0,0 @@
1
- /**
2
- * jQuery.ScrollTo - Easy element scrolling using jQuery.
3
- * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
4
- * Dual licensed under MIT and GPL.
5
- * Date: 5/25/2009
6
- * @author Ariel Flesler
7
- * @version 1.4.2
8
- *
9
- * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
10
- */
11
- ;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
@@ -1,291 +0,0 @@
1
- /*
2
- * jQuery UI Nested Sortable 1.2.1
3
- *
4
- * Copyright 2010, Manuele J Sarfatti
5
- *
6
- * http://mjsarfatti.com/sandbox/nestedSortable
7
- *
8
- * Depends:
9
- * jquery.ui.core.js 1.8+
10
- * jquery.ui.widget.js 1.8+
11
- * jquery.ui.sortable.js 1.8+
12
- */
13
- (function($) {
14
-
15
- $.widget("ui.nestedSortable", $.extend({}, $.ui.sortable.prototype, {
16
-
17
- options: {
18
- tabSize: 20,
19
- disableNesting: 'ui-nestedSortable-no-nesting',
20
- errorClass: 'ui-nestedSortable-error',
21
- listType: 'ol'
22
- },
23
-
24
- _create: function(){
25
- this.element.data('sortable', this.element.data('sortableTree'));
26
- return $.ui.sortable.prototype._create.apply(this, arguments);
27
- },
28
-
29
- _mouseDrag: function(event) {
30
-
31
- //Compute the helpers position
32
- this.position = this._generatePosition(event);
33
- this.positionAbs = this._convertPositionTo("absolute");
34
-
35
- if (!this.lastPositionAbs) {
36
- this.lastPositionAbs = this.positionAbs;
37
- }
38
-
39
- //Do scrolling
40
- if(this.options.scroll) {
41
- var o = this.options, scrolled = false;
42
- if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
43
-
44
- if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
45
- this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
46
- else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
47
- this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
48
-
49
- if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
50
- this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
51
- else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
52
- this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
53
-
54
- } else {
55
-
56
- if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
57
- scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
58
- else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
59
- scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
60
-
61
- if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
62
- scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
63
- else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
64
- scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
65
-
66
- }
67
-
68
- if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
69
- $.ui.ddmanager.prepareOffsets(this, event);
70
- }
71
-
72
- //Regenerate the absolute position used for position checks
73
- this.positionAbs = this._convertPositionTo("absolute");
74
-
75
- //Set the helper position
76
- if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
77
- if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
78
-
79
- //Rearrange
80
- for (var i = this.items.length - 1; i >= 0; i--) {
81
-
82
- //Cache variables and intersection, continue if no intersection
83
- var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
84
- if (!intersection) continue;
85
-
86
- if(itemElement != this.currentItem[0] //cannot intersect with itself
87
- && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
88
- && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
89
- && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
90
- //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
91
- ) {
92
-
93
- this.direction = intersection == 1 ? "down" : "up";
94
-
95
- if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
96
- this._rearrange(event, item);
97
- } else {
98
- break;
99
- }
100
-
101
- // Clear emtpy ul's/ol's
102
- this._clearEmpty(itemElement);
103
-
104
- this._trigger("change", event, this._uiHash());
105
- break;
106
- }
107
- }
108
-
109
- // Get the real previous item
110
- itemBefore = this.placeholder[0].previousSibling;
111
- while (itemBefore != null) {
112
- if (itemBefore.nodeType == 1 && itemBefore != this.currentItem[0]) {
113
- break;
114
- } else {
115
- itemBefore = itemBefore.previousSibling;
116
- }
117
- }
118
-
119
- parentItem = this.placeholder[0].parentNode.parentNode;
120
- newList = document.createElement(o.listType);
121
-
122
- // Make/delete nested ul's/ol's
123
- if (parentItem != null && parentItem.nodeName == 'LI' && this.positionAbs.left < $(parentItem).offset().left) {
124
- $(parentItem).after(this.placeholder[0]);
125
- this._clearEmpty(parentItem);
126
- } else if (itemBefore != null && itemBefore.nodeName == 'LI' && this.positionAbs.left > $(itemBefore).offset().left + this.options.tabSize) {
127
- if (!($(itemBefore).hasClass(this.options.disableNesting))) {
128
- if ($(this.placeholder[0]).hasClass(this.options.errorClass)) {
129
- $(this.placeholder[0]).css('marginLeft', 0).removeClass(this.options.errorClass);
130
- }
131
- if (itemBefore.children[1] == null) {
132
- itemBefore.appendChild(newList);
133
- }
134
- itemBefore.children[1].appendChild(this.placeholder[0]);
135
- } else {
136
- $(this.placeholder[0]).addClass(this.options.errorClass).css('marginLeft', this.options.tabSize);
137
- }
138
- } else if (itemBefore != null) {
139
- if ($(this.placeholder[0]).hasClass(this.options.errorClass)) {
140
- $(this.placeholder[0]).css('marginLeft', 0).removeClass(this.options.errorClass);
141
- }
142
- $(itemBefore).after(this.placeholder[0]);
143
- } else {
144
- if ($(this.placeholder[0]).hasClass(this.options.errorClass)) {
145
- $(this.placeholder[0]).css('marginLeft', 0).removeClass(this.options.errorClass);
146
- }
147
- }
148
-
149
- //Post events to containers
150
- this._contactContainers(event);
151
-
152
- //Interconnect with droppables
153
- if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
154
-
155
- //Call callbacks
156
- this._trigger('sort', event, this._uiHash());
157
-
158
- this.lastPositionAbs = this.positionAbs;
159
- return false;
160
-
161
- },
162
-
163
- serialize: function(o) {
164
-
165
- var items = this._getItemsAsjQuery(o && o.connected);
166
- var str = []; o = o || {};
167
-
168
- $(items).each(function() {
169
- var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
170
- var pid = ($(o.item || this).parent(o.listType).parent('li').attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
171
- if(res) str.push((o.key || res[1]+'['+(o.key && o.expression ? res[1] : res[2])+']')+'='+(pid ? (o.key && o.expression ? pid[1] : pid[2]) : 'root'));
172
- });
173
-
174
- if(!str.length && o.key) {
175
- str.push(o.key + '=');
176
- }
177
-
178
- return str.join('&');
179
-
180
- },
181
-
182
- toArray: function(o) {
183
-
184
- o = o || {};
185
- var sDepth = o.startDepthCount || 0;
186
- var ret = [];
187
- var left = 2;
188
-
189
- ret.push({"item_id": 'root', "parent_id": 'none', "depth": sDepth, "left": '1', "right": ($('li', this.element).length + 1) * 2});
190
-
191
- $(this.element).children('li').each(function() {
192
- left = _recursiveArray($(this), sDepth + 1, left);
193
- });
194
-
195
- return ret;
196
-
197
- function _recursiveArray(item, depth, left) {
198
-
199
- right = left + 1;
200
-
201
- if ($(item).children(o.listType).children('li').length > 0) {
202
- depth ++;
203
- $(item).children(o.listType).children('li').each(function() {
204
- right = _recursiveArray($(this), depth, right);
205
- });
206
- depth --;
207
- }
208
-
209
- id = $(item).attr('id').match(o.expression || (/(.+)[-=_](.+)/));
210
-
211
- if (depth === sDepth + 1) pid = 'root';
212
- else {
213
- parentItem = $(item).parent(o.listType).parent('li').attr('id').match(o.expression || (/(.+)[-=_](.+)/));
214
- pid = parentItem[2];
215
- }
216
-
217
- ret.push({"item_id": id[2], "parent_id": pid, "depth": depth, "left": left, "right": right});
218
-
219
- return left = right + 1;
220
- }
221
-
222
- },
223
-
224
- _createPlaceholder: function(that) {
225
-
226
- var self = that || this, o = self.options;
227
-
228
- if(!o.placeholder || o.placeholder.constructor == String) {
229
- var className = o.placeholder;
230
- o.placeholder = {
231
- element: function() {
232
-
233
- var el = $(document.createElement(self.currentItem[0].nodeName))
234
- .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
235
- .removeClass("ui-sortable-helper")[0];
236
-
237
- if(!className)
238
- el.style.visibility = "hidden";
239
-
240
- return el;
241
- },
242
- update: function(container, p) {
243
-
244
- // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
245
- // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
246
- if(className && !o.forcePlaceholderSize) return;
247
-
248
- //If the element doesn't have an actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
249
- if(!p.height() || p.css('height') == 'auto') { p.height(self.currentItem.height()); };
250
- if(!p.width()) { p.width(self.currentItem.width()); };
251
- }
252
- };
253
- }
254
-
255
- //Create the placeholder
256
- self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
257
-
258
- //Append it after the actual current item
259
- self.currentItem.after(self.placeholder);
260
-
261
- //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
262
- o.placeholder.update(self, self.placeholder);
263
-
264
- },
265
-
266
- _clear: function(event, noPropagation) {
267
-
268
- $.ui.sortable.prototype._clear.apply(this, arguments);
269
-
270
- // Clean last empty ul/ol
271
- for (var i = this.items.length - 1; i >= 0; i--) {
272
- var item = this.items[i].item[0];
273
- this._clearEmpty(item);
274
- }
275
- return true;
276
-
277
- },
278
-
279
- _clearEmpty: function(item) {
280
-
281
- if (item.children[1] && item.children[1].children.length == 0) {
282
- item.removeChild(item.children[1]);
283
- }
284
-
285
- }
286
-
287
- }));
288
-
289
- $.ui.nestedSortable.prototype.options = $.extend({}, $.ui.sortable.prototype.options, $.ui.nestedSortable.prototype.options);
290
-
291
- })(jQuery);
@@ -1,281 +0,0 @@
1
- /*
2
- Copyright (c) 2009, http://seyfertdesign.com/jquery/ui-tabs-paging.html
3
-
4
- Permission is hereby granted, free of charge, to any person obtaining a copy
5
- of this software and associated documentation files (the "Software"), to deal
6
- in the Software without restriction, including without limitation the rights
7
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- copies of the Software, and to permit persons to whom the Software is
9
- furnished to do so, subject to the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be included in
12
- all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- THE SOFTWARE.
21
- */
22
-
23
- (function($) {
24
-
25
- $.extend($.ui.tabs.prototype, {
26
- paging: function(options) {
27
- var opts = {
28
- tabsPerPage: 0,
29
- nextButton: '&#187;',
30
- prevButton: '&#171;',
31
- follow: false,
32
- cycle: false,
33
- selectOnAdd: false,
34
- followOnSelect: false
35
- };
36
-
37
- opts = $.extend(opts, options);
38
-
39
- var self = this, initialized = false, currentPage,
40
- buttonWidth, containerWidth, allTabsWidth, tabWidths,
41
- maxPageWidth, pages, resizeTimer = null,
42
- windowHeight = $(window).height(), windowWidth = $(window).width();
43
-
44
- function init() {
45
- destroy();
46
-
47
- allTabsWidth = 0, currentPage = 0, maxPageWidth = 0, buttonWidth = 0,
48
- pages = new Array(), tabWidths = new Array(), selectedTabWidths = new Array();
49
-
50
- containerWidth = self.element.width();
51
-
52
- // loops through LIs, get width of each tab when selected and unselected.
53
- var maxDiff = 0; // the max difference between a selected and unselected tab
54
- self.lis.each(function(i) {
55
- if (i == self.options.selected) {
56
- selectedTabWidths[i] = $(this).outerWidth({ margin: true });
57
- tabWidths[i] = self.lis.eq(i).removeClass('ui-tabs-selected').outerWidth({ margin: true });
58
- self.lis.eq(i).addClass('ui-tabs-selected');
59
- maxDiff = Math.min(maxDiff, Math.abs(selectedTabWidths[i] - tabWidths[i]));
60
- allTabsWidth += tabWidths[i];
61
- } else {
62
- tabWidths[i] = $(this).outerWidth({ margin: true });
63
- selectedTabWidths[i] = self.lis.eq(i).addClass('ui-tabs-selected').outerWidth({ margin: true });
64
- self.lis.eq(i).removeClass('ui-tabs-selected');
65
- maxDiff = Math.max(maxDiff, Math.abs(selectedTabWidths[i] - tabWidths[i]));
66
- allTabsWidth += tabWidths[i];
67
- }
68
- });
69
- // fix padding issues with buttons
70
- // TODO determine a better way to handle this
71
- allTabsWidth += maxDiff + ($.browser.msie?4:0) + 9;
72
-
73
- // if the width of all tables is greater than the container's width, calculate the pages
74
- if (allTabsWidth > containerWidth) {
75
- // create next button
76
- li = $('<li></li>')
77
- .addClass('ui-state-default ui-tabs-paging-next')
78
- .append($('<a href="#"></a>')
79
- .click(function() { page('next'); return false; })
80
- .html(opts.nextButton));
81
-
82
- self.lis.eq(self.length()-1).after(li);
83
- buttonWidth = li.outerWidth({ margin: true });
84
-
85
- // create prev button
86
- li = $('<li></li>')
87
- .addClass('ui-state-default ui-tabs-paging-prev')
88
- .append($('<a href="#"></a>')
89
- .click(function() { page('prev'); return false; })
90
- .html(opts.prevButton));
91
- self.lis.eq(0).before(li);
92
- buttonWidth += li.outerWidth({ margin: true });
93
-
94
- // TODO determine fix for padding issues to next button
95
- buttonWidth += 19;
96
-
97
- var pageIndex = 0, pageWidth = 0, maxTabPadding = 0;
98
-
99
- // start calculating pageWidths
100
- for (var i = 0; i < tabWidths.length; i++) {
101
- // if first tab of page or selected tab's padding larger than the current max, set the maxTabPadding
102
- if (pageWidth == 0 || selectedTabWidths[i] - tabWidths[i] > maxTabPadding)
103
- maxTabPadding = (selectedTabWidths[i] - tabWidths[i]);
104
-
105
- // if first tab of page, initialize pages variable for page
106
- if (pages[pageIndex] == null) {
107
- pages[pageIndex] = { start: i };
108
-
109
- } else if ((i > 0 && (i % opts.tabsPerPage) == 0) || (tabWidths[i] + pageWidth + buttonWidth + 12) > containerWidth) {
110
- if ((pageWidth + maxTabPadding) > maxPageWidth)
111
- maxPageWidth = (pageWidth + maxTabPadding);
112
- pageIndex++;
113
- pages[pageIndex] = { start: i };
114
- pageWidth = 0;
115
- }
116
- pages[pageIndex].end = i+1;
117
- pageWidth += tabWidths[i];
118
- if (i == self.options.selected) currentPage = pageIndex;
119
- }
120
- if ((pageWidth + maxTabPadding) > maxPageWidth)
121
- maxPageWidth = (pageWidth + maxTabPadding);
122
-
123
- // hide all tabs then show tabs for current page
124
- self.lis.hide().slice(pages[currentPage].start, pages[currentPage].end).show();
125
- if (currentPage == (pages.length - 1) && !opts.cycle)
126
- disableButton('next');
127
- if (currentPage == 0 && !opts.cycle)
128
- disableButton('prev');
129
-
130
- // calculate the right padding for the next button
131
- buttonPadding = containerWidth - maxPageWidth - buttonWidth;
132
- if (buttonPadding > 0)
133
- $('.ui-tabs-paging-next', self.element).css({ paddingRight: buttonPadding + 'px' });
134
-
135
- initialized = true;
136
- } else {
137
- destroy();
138
- }
139
-
140
- $(window).bind('resize', handleResize);
141
- }
142
-
143
- function page(direction) {
144
- currentPage = currentPage + (direction == 'prev'?-1:1);
145
-
146
- if ((direction == 'prev' && currentPage < 0 && opts.cycle) ||
147
- (direction == 'next' && currentPage >= pages.length && !opts.cycle))
148
- currentPage = pages.length - 1;
149
- else if ((direction == 'prev' && currentPage < 0) ||
150
- (direction == 'next' && currentPage >= pages.length && opts.cycle))
151
- currentPage = 0;
152
-
153
- var start = pages[currentPage].start;
154
- var end = pages[currentPage].end;
155
- self.lis.hide().slice(start, end).show();
156
-
157
- if (direction == 'prev') {
158
- enableButton('next');
159
- if (opts.follow && (self.options.selected < start || self.options.selected > (end-1))) self.select(end-1);
160
- if (!opts.cycle && start <= 0) disableButton('prev');
161
- } else {
162
- enableButton('prev');
163
- if (opts.follow && (self.options.selected < start || self.options.selected > (end-1))) self.select(start);
164
- if (!opts.cycle && end >= self.length()) disableButton('next');
165
- }
166
- }
167
-
168
- function disableButton(direction) {
169
- $('.ui-tabs-paging-'+direction, self.element).addClass('ui-tabs-paging-disabled');
170
- }
171
-
172
- function enableButton(direction) {
173
- $('.ui-tabs-paging-'+direction, self.element).removeClass('ui-tabs-paging-disabled');
174
- }
175
-
176
- // special function defined to handle IE6 and IE7 resize issues
177
- function handleResize() {
178
- if (resizeTimer) clearTimeout(resizeTimer);
179
-
180
- if (windowHeight != $(window).height() || windowWidth != $(window).width())
181
- resizeTimer = setTimeout(reinit, 100);
182
- }
183
-
184
- function reinit() {
185
- windowHeight = $(window).height();
186
- windowWidth = $(window).width();
187
- init();
188
- }
189
-
190
- function destroy() {
191
- // remove buttons
192
- $('.ui-tabs-paging-next', self.element).remove();
193
- $('.ui-tabs-paging-prev', self.element).remove();
194
-
195
- // show all tabs
196
- self.lis.show();
197
-
198
- initialized = false;
199
-
200
- $(window).unbind('resize', handleResize);
201
- }
202
-
203
- // reconfigure "ui.tabs" add/remove events to reinit paging
204
- var tabsAdd = self.add;
205
- self.add = function(url, label, index) {
206
- // remove paging buttons before adding a tab
207
- if (initialized)
208
- destroy();
209
-
210
- tabsAdd.apply(this, [url, label, index]);
211
-
212
- if (opts.selectOnAdd) {
213
- if (index == undefined) index = this.lis.length-1;
214
- this.select(index);
215
- }
216
- // re-initialize paging buttons
217
- init();
218
- };
219
- var tabsRemove = self.remove;
220
- self.remove = function(index) {
221
- // remove paging buttons before removing a tab
222
- if (initialized)
223
- destroy();
224
-
225
- tabsRemove.apply(this, [index]);
226
-
227
- // re-initialize paging buttons
228
- init();
229
- };
230
- // reconfigure "ui.tabs" select event to change pages if new tab is selected
231
- var tabsSelect = self.select;
232
- self.select = function(index) {
233
- var $panel;
234
- var $parent;
235
- if (typeof(index) === 'string') {
236
- $panel = $('#' + index);
237
- $parent = $panel.parent();
238
- // getting my index
239
- index = $parent.children('.ui-tabs-panel').index($panel);
240
- }
241
- tabsSelect.apply(this, [index]);
242
- // if paging is not initialized or it is not configured to
243
- // change pages when a new tab is selected, then do nothing
244
- if (!initialized || !opts.followOnSelect)
245
- return;
246
-
247
- // find the new page based on index of the tab selected
248
- for (i in pages) {
249
- var start = pages[i].start;
250
- var end = pages[i].end;
251
- if (index >= start && index < end) {
252
- // if the the tab selected is not within the currentPage of tabs, then change pages
253
- if (i != currentPage) {
254
- self.lis.hide().slice(start, end).show();
255
-
256
- currentPage = parseInt(i);
257
- if (currentPage == 0) {
258
- enableButton('next');
259
- if (!opts.cycle && start <= 0) disableButton('prev');
260
- } else {
261
- enableButton('prev');
262
- if (!opts.cycle && end >= self.length()) disableButton('next');
263
- }
264
- }
265
- break;
266
- }
267
- }
268
- };
269
-
270
- // add, remove, and destroy functions specific for paging
271
- $.extend($.ui.tabs.prototype, {
272
- pagingDestroy: function() {
273
- destroy();
274
- }
275
- });
276
-
277
- init();
278
- }
279
- });
280
-
281
- })(jQuery);