fb59359ad280f66aa8212080bb9d7f512041c27e.svn-base 8.1 KB
Newer Older
1
(function(e){function a(t){var n=e(this);var r={selectClass:"selected",unSelectClass:"un-selected",currentClass:"selected-current",lastClass:"selected-last",shiftClass:"selected-shift",ctrlClass:"selected-ctrl",triggerUpdate:"finderSelectUpdate",children:false,event:"mousedown",cursor:"pointer",dragEvent:"mouseenter",enableClickDrag:true,enableShiftClick:true,enableCtrlClick:true,enableSingleClick:true,enableSelectAll:true,enableDisableSelection:true,enableTouchCtrlDefault:true,enableDesktopCtrlDefault:false,totalSelector:false,menuSelector:false,menuXOffset:0,menuYOffset:0};e.extend(r,t);o=r;if(!o.children){o.children=u.detect.children(n)}u.h.off(u.get.siblings(n,o),o);if(o.cursor){u.set.cursor(n,o)}if(o.enableDisableSelection){u.core.disableSelection(n,o)}if(o.enableClickDrag){u.core.clickDrag(n,o)}if(o.enableSelectAll){u.core.selectAll(n,o)}if(o.enableShiftClick||o.enableCtrlClick||o.enableSingleClick){u.core.click(n,o)}if(o.totalSelector){u.core.totalUpdate(n,o)}if(o.menuSelector){u.core.loadMenu(n,o)}}function f(e){u.h.on(e,o);return this}function l(e){u.h.off(e,o);return this}function c(){var t=e(this);u.h.on(t.find(o.children),o);return this}function h(){var t=e(this);u.h.off(t.find(o.children),o);return this}function p(){var t=e(this);return t.find(o.children+"."+o.selectClass)}function d(){var t=e(this);return t.find(o.children)}function v(){var t=e(this);u.t.update(t,o);return this}function m(e,t){if(typeof e=="object"){var n;for(n=0;n<e.length;n++){var r=e[n];if(!s[r]){s[r]=[]}s[r].push(t)}}else{if(!s[e]){s[e]=[]}s[e].push(t)}return this}var t=e(document);var n=e("body");var r={highlight:f,unHighlight:l,highlightAll:c,unHighlightAll:h,selected:p,children:d,update:v,addHook:m};var s={};var o={};var u=e.fn.finderSelect=function(){if(typeof arguments[0]==="string"){var e=Array.prototype.slice.call(arguments);e.splice(0,1);return r[arguments[0]].apply(this,e)}else{a.apply(this,arguments);return this}};u.core={clickDrag:function(t,r){u.set.mouseDown(false);n.mousedown(function(e){if(u.detect.leftMouse(e)){u.set.mouseDown(true)}});n.mouseup(function(e){if(u.detect.leftMouse(e)){u.set.mouseDown(false)}});t.on(r.dragEvent,r.children,function(n){var i=u.get.clicks(t,r,e(this));if(u.get.mouseDown()&&u.detect.ctrl(n)){u.t.deleteSelection(r);u.t.toggleDrag(t,i,r)}});return t},click:function(t,n){t.on(n.event,n.children,function(r){if(u.detect.leftMouse(r)){var i=u.get.clicks(t,n,e(this));if(!(u.detect.ctrl(r)&&n.enableCtrlClick)&&u.detect.shift(r)&&n.enableShiftClick){u.t.deleteSelection(n);u.t.shiftClick(t,i,n)}if((u.detect.ctrl(r)&&n.enableCtrlClick||u.detect.touch()&&n.enableTouchCtrlDefault||n.enableDesktopCtrlDefault)&&!(u.detect.shift(r)&&n.enableShiftClick)){u.t.toggleClick(t,i,n)}if(!(u.detect.ctrl(r)&&n.enableCtrlClick)&&!(u.detect.shift(r)&&n.enableShiftClick)&&n.enableSingleClick&&!n.enableDesktopCtrlDefault){u.t.singleClick(t,i,n)}}})},selectAll:function(e,n){function r(t){if(u.detect.ctrl(t)){if(t.keyCode==65){t.preventDefault();if(u.detect.alt(t)){u.t.unHAll(e,n)}else{u.t.hAll(e,n)}}}}e.on("mouseover",function(){t.on("keydown",r)});e.on("mouseout",function(){t.off("keydown",r)})},totalUpdate:function(t,n){t.on(n.triggerUpdate,function(){e(n.totalSelector).html(e(this).find(n.children).filter("."+n.selectClass).length)})},loadMenu:function(t,n){t.bind("contextmenu",function(t){e(n.menuSelector).css({left:t.pageX+n.menuXOffset,top:t.pageY+n.menuYOffset}).show();return false}).bind("mousedown",function(){e(n.menuSelector).hide()});e(n.menuSelector).bind("click",function(){e(this).hide()})},disableSelection:function(e,n){function r(e){e.preventDefault()}t.on("keydown",function(){e.on("selectstart",r)}).on("keyup",function(){e.off("selectstart",r)})}};u.h={on:function(e,t){u.get.hook("highlight:before",[e,t]);e.removeClass(t.unSelectClass);e.addClass(t.selectClass);u.get.hook("highlight:after",[e,t])},off:function(e,t){u.get.hook("unHighlight:before",[e,t]);e.removeClass(t.selectClass);e.addClass(t.unSelectClass);u.get.hook("unHighlight:after",[e,t])},tog:function(t,n){t.each(function(){var t=e(this);if(u.detect.h(t,n)){u.h.off(t,n)}else{u.h.on(t,n)}})},reset:function(t,n){t.each(function(){var t=e(this);if(u.detect.lastH(t,n)){u.h.on(t,n)}else{u.h.off(t,n)}})},state:function(t,n){t.each(function(){var t=e(this);if(u.detect.h(t,n)){t.removeClass("stateUnSelected");t.addClass("stateSelected")}else{t.removeClass("stateSelected");t.addClass("stateUnSelected")}})}};u.detect={leftMouse:function(e){return e.which==1},shift:function(e){return e.shiftKey},alt:function(e){return e.altKey},ctrl:function(e){return e.ctrlKey||e.metaKey},h:function(e,t){return e.hasClass(t.selectClass)},lastH:function(e,t){return e.hasClass("stateSelected")},touch:function(){return!!("ontouchstart"in window)||!!("onmsgesturechange"in window)},children:function(e){return e.children().get(0).tagName}};u.set={clicks:function(e,t,n,r,i){u.set.click(r,false,i.currentClass);u.set.click(r,e,i.lastClass);u.set.click(r,t,i.shiftClass);u.set.click(r,n,i.ctrlClass);u.t.update(r,i)},click:function(e,t,n){u.get.click(e,n).removeClass(n);if(t){t.addClass(n)}},mouseDown:function(e){return n.data("down",e)},cursor:function(e,t){var n=u.get.siblings(e,t);return n.css("cursor",t.cursor)}};u.get={clicks:function(e,t,n){var r={};u.set.click(e,n,t.currentClass);r.current={v:n,c:t.currentClass};r.hard={v:u.get.click(e,t.lastClass),c:t.lastClass};r.shift={v:u.get.click(e,t.shiftClass),c:t.shiftClass};r.ctrl={v:u.get.click(e,t.ctrlClass),c:t.ctrlClass};return r},click:function(e,t){return e.find("."+t)},mouseDown:function(){return n.data("down")},siblings:function(e,t){return e.find(t.children)},between:function(e,t,n){if(e.index(t.v)<e.index(n.v)){return u.get.elem(true,t.v,false,n.c)}else{return u.get.elem(false,t.v,false,n.c)}},elem:function(t,n,r,i){var s=[],o=t?n.next():n.prev();while(o.length){if(typeof i==="undefined"||!i||!o.hasClass(i)){if(typeof r==="undefined"||!r||o.hasClass(r)){s.push(o[0])}o=t?o.next():o.prev()}else{o={}}}return e(s)},hook:function(e,t){var n=s[e];if(n){for(i=0;i<n.length;i++){n[i].apply(undefined,t)}}}};u.t={update:function(e,t){return e.trigger(t.triggerUpdate)},deleteSelection:function(e){if(e.enableDisableSelection){if(document.getSelection){var t=document.getSelection();if(t.removeAllRanges){t.removeAllRanges()}}}},singleClick:function(e,t,n){var r=u.get.siblings(e,n);u.h.off(r,n);u.h.on(t.current.v,n);u.set.clicks(t.current.v,null,null,e,n)},toggleClick:function(e,t,n){var r=u.get.siblings(e,n);u.h.tog(t.current.v,n);u.h.state(r,n);u.set.clicks(t.current.v,null,null,e,n)},toggleDrag:function(e,t,n){var r=u.get.siblings(e,n);u.h.reset(r,n);if(r.index(t.current.v)!=r.index(t.hard.v)){u.h.tog(u.get.between(r,t.current,t.hard),n);u.h.tog(t.current.v,n)}u.set.clicks(t.hard.v,null,null,e,n)},shiftClick:function(t,n,r){var i=u.get.siblings(t,r);var s=i.index(n.current.v);var o=i.index(n.hard.v);if(n.hard.v.length!=0&&!u.detect.h(n.hard.v,r)){var a=u.get.elem(true,n.hard.v,r.selectClass);if(a.length>0){n.hard.v=e(a[0]);u.set.click(t,n.hard.v,r.lastClass)}else{var a=u.get.elem(s<o,n.hard.v,r.selectClass);if(a.length>0){a=s>o?e(a[0]):e(a[a.length-1]);n.hard.v=a;u.set.click(t,n.hard.v,r.lastClass)}else{n.hard.v=i.first();u.set.click(t,n.hard.v,r.lastClass);u.t.singleClick(i,{current:{v:i.first()}},r)}}}var o=i.index(n.hard.v);var f=i.index(n.shift.v);var s=i.index(n.current.v);if(n.hard.v.length==0){u.t.singleClick(i,{current:{v:i.first()}},r)}if(n.shift.v.length!=0){if(o<f&&o<s&&s<f||o>f&&o>s&&s>f){u.h.off(u.get.between(i,n.shift,n.current),r)}if(o<f&&o>s&&s<f||o>f&&o<s&&s>f){u.h.off(u.get.between(i,n.shift,n.hard),r);u.h.on(u.get.between(i,n.current,n.hard),r)}if(o>f&&o>s&&s<f||o<f&&o<s&&s>f||o==f){u.h.on(u.get.between(i,n.shift,n.current),r)}else{u.h.off(n.shift.v,r);u.t.unHExist(s>f,n.shift.v,r)}}else{u.t.unHExist(s>o,n.hard.v,r);u.h.on(u.get.between(i,n.current,n.hard),r)}u.h.on(n.current.v,r);u.set.clicks(n.hard.v,n.current.v,null,t,r)},unHAll:function(e,t){u.h.off(e.find(t.children),t);u.t.update(e,t)},hAll:function(e,t){u.h.on(e.find(t.children),t);u.t.update(e,t)},unHExist:function(e,t,n){if(e){u.h.off(u.get.elem(false,t,false,n.unSelectClass),n)}else{u.h.off(u.get.elem(true,t,false,n.unSelectClass),n)}}}})(window.jQuery||window.Zepto)