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.
- data/.gitignore +3 -1
- data/.rspec +1 -2
- data/.travis.yml +11 -0
- data/.yardopts +0 -1
- data/Gemfile +1 -2
- data/README.md +14 -0
- data/alchemy_cms.gemspec +4 -2
- data/app/controllers/admin/clipboard_controller.rb +8 -9
- data/app/controllers/admin/contents_controller.rb +4 -2
- data/app/controllers/admin/essence_pictures_controller.rb +2 -2
- data/app/controllers/admin/layoutpages_controller.rb +2 -0
- data/app/controllers/admin/pages_controller.rb +5 -5
- data/app/controllers/admin/pictures_controller.rb +2 -1
- data/app/controllers/admin/trash_controller.rb +2 -0
- data/app/controllers/alchemy_controller.rb +10 -4
- data/app/controllers/elements_controller.rb +1 -1
- data/app/helpers/admin/elements_helper.rb +32 -1
- data/app/helpers/alchemy_helper.rb +15 -818
- data/app/helpers/contents_helper.rb +69 -0
- data/app/helpers/elements_helper.rb +161 -0
- data/app/helpers/essences_helper.rb +167 -0
- data/app/helpers/pages_helper.rb +401 -19
- data/app/models/attachment.rb +4 -0
- data/app/models/element.rb +27 -14
- data/app/models/page.rb +75 -38
- data/app/views/admin/essence_pictures/destroy.js.erb +1 -1
- data/app/views/admin/pages/_create_language_form.html.erb +2 -1
- data/app/views/admin/pages/new.html.erb +1 -1
- data/app/views/admin/pages/update.js.erb +1 -1
- data/app/views/admin/partials/_upload_form.html.erb +2 -2
- data/app/views/admin/pictures/index.html.erb +7 -4
- data/app/views/essences/_essence_picture_editor.html.erb +1 -3
- data/app/views/layouts/alchemy.html.erb +59 -59
- data/app/views/layouts/pages.html.erb +2 -4
- data/app/views/{partials/_navigation_image_link.html.erb → navigation/_image_link.html.erb} +0 -0
- data/app/views/{partials/_navigation_link.html.erb → navigation/_link.html.erb} +1 -1
- data/app/views/{partials/_navigation_renderer.html.erb → navigation/_renderer.html.erb} +0 -0
- data/app/views/page_layouts/_contact.html.erb +1 -1
- data/app/views/page_layouts/_external.html.erb +0 -1
- data/app/views/page_layouts/_intro.html.erb +1 -1
- data/app/views/page_layouts/_news.html.erb +1 -1
- data/app/views/page_layouts/_search.html.erb +1 -1
- data/app/views/page_layouts/_standard.html.erb +1 -1
- data/assets/images/icons.png +0 -0
- data/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +49 -31
- data/assets/stylesheets/alchemy.css +111 -91
- data/assets/stylesheets/elements.css +12 -16
- data/bin/alchemy +1 -1
- data/config/alchemy/config.yml +4 -0
- data/config/initializers/tinymce_hammer.rb +1 -0
- data/config/locales/de.yml +3 -1
- data/config/locales/en.yml +2 -0
- data/config/routes.rb +6 -4
- data/lib/alchemy/capistrano.rb +4 -7
- data/lib/alchemy/page_layout.rb +12 -8
- data/lib/alchemy/version.rb +1 -1
- data/spec/controllers/admin/clipboard_controller_spec.rb +23 -0
- data/spec/dummy/db/schema.rb +9 -9
- data/spec/factories.rb +24 -6
- data/spec/helpers/admin/elements_helper_spec.rb +20 -0
- data/spec/helpers/alchemy_helper_spec.rb +41 -0
- data/spec/helpers/contents_helper_spec.rb +27 -0
- data/spec/helpers/elements_helper_spec.rb +39 -0
- data/spec/helpers/essences_helper_spec.rb +49 -0
- data/spec/helpers/pages_helper_spec.rb +140 -0
- data/spec/integration/security_spec.rb +1 -1
- data/spec/integration/standardset_spec.rb +29 -0
- data/spec/models/element_spec.rb +49 -0
- data/spec/{language_spec.rb → models/language_spec.rb} +0 -0
- data/spec/models/page_spec.rb +139 -0
- data/spec/{user_spec.rb → models/user_spec.rb} +0 -0
- data/spec/page_layout_spec.rb +21 -0
- data/spec/routing_spec.rb +53 -0
- data/spec/spec_helper.rb +12 -11
- metadata +54 -303
- data/spec/dummy/config/alchemy/config.yml +0 -199
- data/spec/dummy/config/alchemy/elements.yml +0 -91
- data/spec/dummy/config/alchemy/page_layouts.yml +0 -29
- data/spec/dummy/public/images/alchemy/ajax_loader.gif +0 -0
- data/spec/dummy/public/images/alchemy/alchemy-logo.png +0 -0
- data/spec/dummy/public/images/alchemy/flags.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/navi-tab.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/shading.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/shading_90.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/toggle.png +0 -0
- data/spec/dummy/public/images/alchemy/icons.png +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-ui/ui-icons_666666_256x240.png +0 -0
- data/spec/dummy/public/images/alchemy/placeholder.png +0 -0
- data/spec/dummy/public/images/alchemy/swfupload/browse_button.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/alchemy.element_editor_selector.js +0 -88
- data/spec/dummy/public/javascripts/alchemy/alchemy.growler.js +0 -44
- data/spec/dummy/public/javascripts/alchemy/alchemy.image_cropper.js +0 -56
- data/spec/dummy/public/javascripts/alchemy/alchemy.js +0 -892
- data/spec/dummy/public/javascripts/alchemy/alchemy.link_overlay.js +0 -221
- data/spec/dummy/public/javascripts/alchemy/alchemy.page_sorter.js +0 -42
- data/spec/dummy/public/javascripts/alchemy/alchemy.preview.js +0 -145
- data/spec/dummy/public/javascripts/alchemy/jquery-ui.js +0 -428
- data/spec/dummy/public/javascripts/alchemy/jquery.Jcrop.min.js +0 -246
- data/spec/dummy/public/javascripts/alchemy/jquery.dialogextend.min.js +0 -8
- data/spec/dummy/public/javascripts/alchemy/jquery.in-place-edit.js +0 -171
- data/spec/dummy/public/javascripts/alchemy/jquery.js +0 -18
- data/spec/dummy/public/javascripts/alchemy/jquery.rails.js +0 -315
- data/spec/dummy/public/javascripts/alchemy/jquery.sb.min.js +0 -14
- data/spec/dummy/public/javascripts/alchemy/jquery.scrollTo-1.4.2-min.js +0 -11
- data/spec/dummy/public/javascripts/alchemy/jquery.ui.nestedSortable.js +0 -291
- data/spec/dummy/public/javascripts/alchemy/jquery.ui.tabspaging.js +0 -281
- data/spec/dummy/public/javascripts/alchemy/swfupload/fileprogress.js +0 -203
- data/spec/dummy/public/javascripts/alchemy/swfupload/handlers.js +0 -171
- data/spec/dummy/public/javascripts/alchemy/swfupload/queue.js +0 -98
- data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.js +0 -980
- data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.swf +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/jquery.tinymce.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/en.js +0 -223
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/license.txt +0 -504
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -43
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/de.js +0 -4
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/en.js +0 -4
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -109
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +0 -402
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/template.htm +0 -387
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/lists/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pastetext.js +0 -36
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pasteword.js +0 -51
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/en_dlg.js +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pastetext.htm +0 -27
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pasteword.htm +0 -21
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/cell.htm +0 -180
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/cell.css +0 -17
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/row.css +0 -25
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/table.css +0 -13
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/cell.js +0 -319
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/merge_cells.js +0 -27
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/row.js +0 -237
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/table.js +0 -450
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/en_dlg.js +0 -75
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/merge_cells.htm +0 -32
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/row.htm +0 -158
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/table.htm +0 -188
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/about.htm +0 -52
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/anchor.htm +0 -26
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/charmap.htm +0 -51
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/color_picker.htm +0 -74
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/editor_template.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/image.htm +0 -80
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/about.js +0 -73
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/anchor.js +0 -42
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/charmap.js +0 -355
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/color_picker.js +0 -329
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/image.js +0 -247
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/link.js +0 -153
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/source_editor.js +0 -56
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en.js +0 -68
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en_dlg.js +0 -54
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/link.htm +0 -57
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/shortcuts.htm +0 -47
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/content.css +0 -47
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/dialog.css +0 -117
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/ui.css +0 -214
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/content.css +0 -23
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +0 -105
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/ui.css +0 -102
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/content.css +0 -46
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/dialog.css +0 -117
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui.css +0 -217
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +0 -8
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/source_editor.htm +0 -25
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/simple/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce_popup.js +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/editable_selects.js +0 -70
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/form_utils.js +0 -210
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/mctabs.js +0 -162
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/validate.js +0 -252
- data/spec/dummy/public/stylesheets/alchemy/Jcrop.gif +0 -0
- data/spec/dummy/public/stylesheets/alchemy/alchemy.css +0 -3653
- data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_content.css +0 -94
- data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_dialog.css +0 -415
- data/spec/dummy/public/stylesheets/alchemy/default/img/tabs.gif +0 -0
- data/spec/dummy/public/stylesheets/alchemy/elements.css +0 -900
- data/spec/dummy/public/stylesheets/alchemy/flags.css +0 -1
- data/spec/dummy/public/stylesheets/alchemy/ie6.css +0 -18
- data/spec/dummy/public/stylesheets/alchemy/jquery-ui-1.8.7.alchemy.css +0 -2023
- data/spec/dummy/public/stylesheets/alchemy/jquery.Jcrop.css +0 -35
- data/spec/dummy/public/stylesheets/alchemy/jquery.sb.css +0 -244
- data/spec/dummy/public/stylesheets/alchemy/standard_set.css +0 -374
- 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):" ";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=''> </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: '»',
|
30
|
-
prevButton: '«',
|
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);
|