@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines (2 loc) • 12.6 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("kendo.core.js"),require("kendo.userevents.js")):"function"==typeof define&&define.amd?define(["exports","kendo.core.min","kendo.userevents"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.Selectable={}))}(this,(function(e){!function(e,t){let n=window.kendo,i=n.ui.Widget,s=n.support,l=Math.abs,r="aria-selected",a="k-selected",o="k-selecting",c="change",d="changing",u="unselect",f="k-unselecting",g="k-hover",h="k-range-mid",v="k-range-split-end",_="k-range-split-start",p="k-range-start",m="k-range-end",b="start",k="end",y="span.k-icon.k-i-caret-alt-down,span.k-icon.k-i-caret-alt-up,.k-icon.k-i-caret-alt-down,.k-icon.k-i-caret-alt-right,.k-icon.k-i-caret-alt-left",C=y.replaceAll("k-i","k-svg-i"),S=C.split(",").map((e=>e+" *")).join(","),w=`input,a,textarea,.k-multiselect-wrap,select,button,${y},${C},${S},.k-button>span,.k-button>span *,.k-button>img,label.k-checkbox-label.k-no-text,span.k-numeric-wrap,.k-focusable`,E=n.support.browser.msie,A=!1,T=e.extend;!function(e){e('<div class="parent"><span></span></div>').on("click",">*",(function(){A=!0})).find("span").trigger("click").end().off()}(e);const x=i.extend({init:function(t,s){let l,r,a,o=this;i.fn.init.call(o,t,s),a=o.selectableClass=o.options.selectableClass||"k-selectable",o._marquee=e("<div class='k-marquee'><div class='k-marquee-color'></div></div>"),o._lastActive=null,o.element.addClass(a),o.relatedTarget=o.options.relatedTarget,l=o.options.multiple,r=o.options.dragToSelect,o.userEvents=new n.UserEvents(o.element,{global:!0,allowSelection:!0,filter:(A?"":"."+a+" ")+o.options.filter,tap:o._tap.bind(o),touchAction:l?"none":"pan-x pan-y"}),l&&(r&&o.userEvents.bind("hold",o._hold.bind(o)).bind("start",o._start.bind(o)).bind("move",o._move.bind(o)).bind("end",o._end.bind(o)),o.userEvents.bind("select",o._select.bind(o)))},events:[c,d,u],options:{name:"Selectable",filter:">*",inputSelectors:w,multiple:!1,holdToDrag:!1,dragToSelect:!0,relatedTarget:e.noop,ignoreOverlapped:!1,addIdToRanges:!1,toggleable:!1,selectableClass:""},_isElement:function(e){var t,n=this.element,i=n.length,s=!1;for(e=e[0],t=0;t<i;t++)if(n[t]===e){s=!0;break}return s},_tap:function(t){let n,i=e(t.target),s=this,l=s.options,r=t.event.ctrlKey||t.event.metaKey,o=s.options.multiple,u=o&&t.event.shiftKey,f=s.options.selectedClass||a,g=t.event.which,h=t.event.button;!s._isElement(i.closest("."+s.selectableClass))||g&&3==g||h&&2==h||this._allowSelection(t.event.target)&&(s.trigger(d,{target:i,originalEvent:t.event})||(n=i.hasClass(f),i=i.add(s.relatedTarget(i)),o?u?(s._lastRange&&O(s._lastRange,i)||(s.selectRange(s._firstSelectee(),i,t),s._notify(c,t)),s._lastRange=i):(s._lastRange=null,n&&(r||l.toggleable)?(s._unselect(i),s._notify(c,t)):r||l.toggleable?(s.value(i,t),s._notify(c,t)):(!n||s.value().length>1)&&(s.clear(),s.value(i,t),s._notify(c,t)),s._lastActive=s._downTarget=i):n&&r?(s._unselect(i),s._notify(c,t)):n||(s.clear(),s.value(i,t),s._notify(c,t))))},_hold:function(e){this.options.holdToDrag&&this._tap(e),this._activated=!0},_isActivated:function(){return!this.options.holdToDrag||this._activated},_start:function(t){let n,i=this,s=e(t.target),l=i.options.selectedClass||a,r=s.hasClass(l),o=t.event.ctrlKey||t.event.metaKey;i._isActivated()&&this._allowSelection(t.event.target)&&(i.trigger(d,{target:s,originalEvent:t.event})?i.userEvents.cancel():(i._downTarget=s,i._isElement(s.closest("."+i.selectableClass))?(i.options.useAllItems?i._items=i.element.find(i.options.filter):(n=s.closest(i.element),i._items=n.find(i.options.filter)),t.sender.capture(),i._marquee.appendTo(document.body).css({left:t.x.client+1,top:t.y.client+1,width:0,height:0}),o||i.clear(),s=s.add(i.relatedTarget(s)),r&&(i._selectElement(s,!0),o&&s.addClass(f))):i.userEvents.cancel()))},_move:function(e){var t=this,n={left:e.x.startLocation>e.x.location?e.x.location:e.x.startLocation,top:e.y.startLocation>e.y.location?e.y.location:e.y.startLocation,width:l(e.x.initialDelta),height:l(e.y.initialDelta)};t._isActivated()&&(t._marquee.css(n),t._invalidateSelectables(n,e.event.ctrlKey||e.event.metaKey),e.preventDefault())},_end:function(t){var i=this,s=n.attr("range-selected"),l=n.guid();if(i._isActivated()){i._activated=!1,i._marquee.remove(),i._unselect(i.element.find(i.options.filter+"."+f)).removeClass(f);var r=i.element.find(i.options.filter+"."+o);if(r=r.add(i.relatedTarget(r)),i.options.addIdToRanges)for(var a=0;a<i._currentlyActive.length;a++)e(i._currentlyActive[a]).attr(s,l);i._lastRange&&O(i._lastRange,r)||(i.value(r,t),i._notify(c,t)),i._lastRange=r,i._lastActive=i._downTarget,i._items=null}},_invalidateSelectables:function(e,t){var n,i,s,l,r=this._downTarget[0],c=this._items,d=this.options.selectedClass||a;for(this._currentlyActive=[],n=0,i=c.length;n<i;n++)s=(l=c.eq(n)).add(this.relatedTarget(l)),q(l,e)?(l.hasClass(d)?t&&r!==l[0]&&s.removeClass(d).addClass(f):l.hasClass(o)||l.hasClass(f)||this._collidesWithActiveElement(s,e)||s.addClass(o),this._currentlyActive.push(s[0])):l.hasClass(o)?s.removeClass(o):t&&l.hasClass(f)&&s.removeClass(f).addClass(d)},_collidesWithActiveElement:function(e,t){if(!this.options.ignoreOverlapped)return!1;var i,s=this._currentlyActive,l=e[0].getBoundingClientRect(),r=!1,a=n.support.isRtl(e)?"right":"left",o={};t.right=t.left+t.width,t.bottom=t.top+t.height;for(var c=0;c<s.length;c++)if(D(l,i=s[c].getBoundingClientRect())){if(o[a]="left"===a?i.right:i.left,(l=T({},l,o)).left>l.right)return!0;r=!D(l,t)}return r},value:function(e){var t=this,n=t._selectElement.bind(t);if(!e)return t.element.find(t.options.filter+"."+(t.options.selectedClass||a));e.each((function(){n(this)}))},selectedRanges:function(){var t=n.attr("range-selected"),i={};return this.element.find("["+t+"]").each((function(n,s){var l=e(s).attr(t),r=i[l];r||(r=i[l]=[]),r.push(e(s))})),i},selectedSingleItems:function(){var t=this,i=n.attr("range-selected");return t.element.find(t.options.filter+"."+(t.options.selectedClass||a)+":not(["+i+"])").toArray().map((function(t){return e(t)}))},_firstSelectee:function(){var e,t=this;return null!==t._lastActive?t._lastActive:(e=t.value()).length>0?e[0]:t.element.find(t.options.filter)[0]},_selectElement:function(t,n){var i=e(t),s=this.options.selectedClass||a,l=!n&&this._notify("select",{element:t});i.removeClass(o),l||(i.addClass(s),this.options.aria&&i.attr(r,!0))},_notify:function(e,t){return t=t||{},this.trigger(e,t)},_unselect:function(e){if(!this.trigger(u,{element:e})){var t=n.attr("range-selected");return e.removeClass(this.options.selectedClass||a).removeAttr(t),this.options.aria&&e.attr(r,!1),e}},_select:function(t){this._allowSelection(t.event.target)&&(!E||E&&!e(n._activeElement()).is(this.options.inputSelectors))&&this._allowPreventDefault(t.event.target)&&t.preventDefault()},_allowPreventDefault:function(t){return!e(t).is(".k-table-td")||!this.options.allowPaste},_allowSelection:function(t){return!e(t).is(this.options.inputSelectors)||(this.userEvents.cancel(),this._downTarget=null,!1)},resetTouchEvents:function(){this.userEvents.cancel()},clear:function(){var e=this.element.find(this.options.filter+"."+(this.options.selectedClass||a));this._unselect(e)},selectRange:function(t,n){var i,s,l,r=this;for(r.clear(),r.element.length>1&&(l=r.options.continuousItems()),l&&l.length||(l=r.element.find(r.options.filter)),(t=e.inArray(e(t)[0],l))>(n=e.inArray(e(n)[0],l))&&(s=t,t=n,n=s),r.options.useAllItems||(n+=r.element.length-1),i=t;i<=n;i++)r._selectElement(l[i],!0)},destroy:function(){var e=this;i.fn.destroy.call(e),e.element.off(".kendoSelectable"),e.userEvents.destroy(),e._marquee=e._lastActive=e.element=e.userEvents=null}}),R=i.extend({init:function(e,t){let l,r,a=this;i.fn.init.call(a,e,t),a.widget=t.widget,l=t.ns,r=t.filter,a.userEvents=new n.UserEvents(a.element,{global:!0,allowSelection:!0,filter:a.options.filter,tap:a._tap.bind(a),touchAction:"none"}),s.touch?e.on("touchstart"+l,r,a._mouseEnter.bind(a)).on("touchend"+l+" touchmove"+l,r,a._mouseLeave.bind(a)):e.on("mouseenter"+l,r,a._mouseEnter.bind(a)).on("mouseleave"+l,r,a._mouseLeave.bind(a))},events:[c],options:{name:"RangeSelectable",filter:">*",inputSelectors:w,resetOnStart:!1,multiple:!1,dragToSelect:!0,cellSelector:"*",ns:"",reverse:!1,relatedTarget:e.noop},destroy:function(){let e=this;i.fn.destroy.call(e),e.userEvents.destroy(),e.widget=null,e._lastActive=e.element=e.userEvents=e._start=e._end=null},_allowSelection:function(t){return!e(t).is(this.options.inputSelectors)||(this.userEvents.cancel(),!1)},_mouseEnter:function(t){let n,i=this,s=e(t.currentTarget);s.addClass(g),n=i.widget.selectRange(),i.options.resetOnStart&&n.end||(n.target===b&&i._end&&i.range(s,i._end,!0,i.options.reverse),n.target===k&&i.range(i._start,s,!0,i.options.reverse))},_mouseLeave:function(t){e(t.currentTarget).removeClass(g)},start:function(e,n){if(e===t||null===e)return this._start;e.addClass(a+" "+p).attr(r,!0),n||(this._start=e)},end:function(e,n){if(e===t||null===e)return this._start;e.addClass(a+" "+m).attr(r,!0),n||(this._end=e)},mid:function(t){let n=this.element.find("table"),i=this.options;t.addClass(h).attr(r,!0),n.each((function(){let t=e(this),n=t.find(i.cellSelectorValid).last(),s=t.find(i.cellSelectorValid).first();n.hasClass(h)&&n.addClass(v),s.hasClass(h)&&s.addClass(_)}))},clear:function(e){let t=this.options;this.element.find(t.cellSelector).removeClass(h+" "+v+" "+_),this.clearStartEnd(),e&&(this._start=this._end=null)},clearStartEnd:function(){let e=this.options;this.element.find(e.cellSelector).removeClass(p+" "+a+" "+m).removeAttr(r)},selectFrom:function(t){let n,i,s=this,l=this.options;n=s.element.find(l.cellSelector),i=e.inArray(e(t)[0],n),s.clear(),s.start(t),n=n.filter((function(e){return e>i})),s.mid(n)},selectTo:function(t){let n,i,s=this,l=this.options;n=s.element.find(l.cellSelector),i=e.inArray(e(t)[0],n),s.clear(),n=n.filter((function(e){return e<i})),s.mid(n),s.end(e(t))},range:function(n,i,s,l){let r,a,o,c=this,d=this.options;if(n===t)return{start:c._start,end:c._end};c._clearFlags(),r=c.element.find(d.cellSelector),a=e.inArray(e(n)[0],r),o=e.inArray(e(i)[0],r),(!n||n&&!n.length)&&(c._useStart=!0),c.clear(),n&&c.start(e(n),s),r=r.filter((function(e){if(!(o<0||!n&&a<0))return e>a&&e<o||d.reverse&&e<a&&e>o})),c.mid(r),i?c.end(e(i),s):c._useEnd=!0,a>o&&l&&(c.clearStartEnd(),c.start(e(i),!0),c.end(e(n),!0))},change:function(){this.trigger(c)},_clearFlags:function(){this._useStart=this._useEnd=!1},_tap:function(t){let i=e(t.target),s=this,l=s.widget.selectRange()||{},r=l.start,a=l.end,o=n.calendar.toDateObject(e(i).find("span")),d=s.options,u=d.resetOnStart;if(s._lastActive=i,!r&&!a)return s.clear(!0),l.target===b&&s.start(i),l.target===k&&s.end(i),s._clearFlags(),void s.trigger(c);if(!r&&a)return l.target===k?s.end(i):+o>+l.end&&!d.reverse?(s.clear(!0),s.start(i)):s.range(i,s._end,!1,!0),s.trigger(c),void s._clearFlags();if(r&&!a)return l.target===k&&!d.reverse&&+r>+o?(s.clear(!0),u?s.start(i):s.end(i)):l.target===b?s.start(i):s.range(s._start,i,!1,!0),s.trigger(c),void s._clearFlags();if(r&&a){if(!d.reverse)return+r>+o&&l.target===k?(s.clear(!0),u?(s.start(i),s.end(null),l.target=b):(s.start(null),s.end(i)),void s.trigger(c)):+r<+o&&l.target===b?(+o>+l.end?(s.clear(!0),s.start(i),s.end(null)):s.range(i,s._end),void s.trigger(c)):(l.target===b&&s.range(i,s._end),l.target===k&&s.range(s._start,i),void s.trigger(c));u?l.target===b?s.range(i,s._end,!1,!0):s.range(s._start,i,!1,!0):l.target===b?s.start(i):s.end(i),s.trigger(c)}}});function O(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function q(e,t){if(!e.is(":visible"))return!1;var i=n.getOffset(e),s=t.left+t.width,l=t.top+t.height;return i.right=i.left+n._outerWidth(e),i.bottom=i.top+n._outerHeight(e),!(i.left>s||i.right<t.left||i.top>l||i.bottom<t.top)}function D(e,t){return!(e.right<=t.left||e.left>=t.right||e.bottom<=t.top||e.top>=t.bottom)}x.parseOptions=function(e){var t=e.mode||e,n="string"==typeof t&&t.toLowerCase();return{multiple:n&&n.indexOf("multiple")>-1,cell:n&&n.indexOf("cell")>-1,range:n&&n.indexOf("range")>-1,single:n&&n.indexOf("single")>-1}},n.ui.plugin(x),n.ui.plugin(R)}(window.kendo.jQuery);var t=kendo;e.__meta__={id:"selectable",name:"Selectable",category:"framework",depends:["core","userevents"],advanced:!0},e.default=t,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=kendo.selectable.min.js.map