You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

11 lines
42 KiB

9 years ago
9 years ago
9 years ago
9 years ago
  1. /*!
  2. * # Semantic UI 2.1.0 - Dropdown
  3. * http://github.com/semantic-org/semantic-ui/
  4. *
  5. *
  6. * Copyright 2015 Contributors
  7. * Released under the MIT license
  8. * http://opensource.org/licenses/MIT
  9. *
  10. */
  11. !function(e,t,n,i){"use strict";e.fn.dropdown=function(a){var o,s=e(this),r=e(n),l=s.selector||"",c="ontouchstart"in n.documentElement,u=(new Date).getTime(),d=[],v=arguments[0],m="string"==typeof v,f=[].slice.call(arguments,1);return s.each(function(h){var g,p,b,w,x,C,S,y=e.isPlainObject(a)?e.extend(!0,{},e.fn.dropdown.settings,a):e.extend({},e.fn.dropdown.settings),T=y.className,A=y.message,k=y.metadata,L=y.namespace,D=y.regExp,I=y.selector,q=y.error,R=y.templates,V="."+L,E="module-"+L,O=e(this),F=e(y.context),P=O.find(I.text),M=O.find(I.search),z=O.find(I.input),H=O.find(I.icon),j=O.prev().find(I.text).length>0?O.prev().find(I.text):O.prev(),U=O.children(I.menu),N=U.find(I.item),K=!1,B=!1,W=!1,$=this,Q=O.data(E);S={initialize:function(){S.debug("Initializing dropdown",y),S.is.alreadySetup()?S.setup.reference():(S.setup.layout(),S.refreshData(),S.save.defaults(),S.restore.selected(),S.create.id(),S.bind.events(),S.observeChanges(),S.instantiate())},instantiate:function(){S.verbose("Storing instance of dropdown",S),Q=S,O.data(E,S)},destroy:function(){S.verbose("Destroying previous dropdown",O),S.remove.tabbable(),O.off(V).removeData(E),U.off(V),r.off(b),x&&x.disconnect(),C&&C.disconnect()},observeChanges:function(){"MutationObserver"in t&&(x=new MutationObserver(function(e){S.debug("<select> modified, recreating menu"),S.setup.select()}),C=new MutationObserver(function(e){S.debug("Menu modified, updating selector cache"),S.refresh()}),S.has.input()&&x.observe(z[0],{childList:!0,subtree:!0}),S.has.menu()&&C.observe(U[0],{childList:!0,subtree:!0}),S.debug("Setting up mutation observer",x,C))},create:{id:function(){w=(Math.random().toString(16)+"000000000").substr(2,8),b="."+w,S.verbose("Creating unique id for element",w)},userChoice:function(t){var n,a,o;return(t=t||S.get.userValues())?(t=e.isArray(t)?t:[t],e.each(t,function(t,s){S.get.item(s)===!1&&(o=y.templates.addition(s),a=e("<div />").html(o).data(k.value,s).addClass(T.addition).addClass(T.item),n=n===i?a:n.add(a),S.verbose("Creating user choices for value",s,a))}),n):!1},userLabels:function(t){var n=S.get.userValues();n&&(S.debug("Adding user labels",n),e.each(n,function(e,t){S.verbose("Adding custom user value"),S.add.label(t,t)}))},menu:function(){U=e("<div />").addClass(T.menu).appendTo(O)}},search:function(e){e=e!==i?e:S.get.query(),S.verbose("Searching for query",e),S.filter(e)},select:{firstUnfiltered:function(){S.verbose("Selecting first non-filtered element"),S.remove.selectedItem(),N.not(I.unselectable).eq(0).addClass(T.selected)},nextAvailable:function(e){e=e.eq(0);var t=e.nextAll(I.item).not(I.unselectable).eq(0),n=e.prevAll(I.item).not(I.unselectable).eq(0),i=t.length>0;i?(S.verbose("Moving selection to",t),t.addClass(T.selected)):(S.verbose("Moving selection to",n),n.addClass(T.selected))}},setup:{api:function(){var e={debug:y.debug,on:!1};S.verbose("First request, initializing API"),O.api(e)},layout:function(){O.is("select")&&(S.setup.select(),S.setup.returnedObject()),S.has.menu()||S.create.menu(),S.is.search()&&!S.has.search()&&(S.verbose("Adding search input"),M=e("<input />").addClass(T.search).insertBefore(P)),y.allowTab&&S.set.tabbable()},select:function(){var t=S.get.selectValues();S.debug("Dropdown initialized on a select",t),O.is("select")&&(z=O),z.parent(I.dropdown).length>0?(S.debug("UI dropdown already exists. Creating dropdown menu only"),O=z.closest(I.dropdown),S.has.menu()||S.create.menu(),U=O.children(I.menu),S.setup.menu(t)):(S.debug("Creating entire dropdown from select"),O=e("<div />").attr("class",z.attr("class")).addClass(T.selection).addClass(T.dropdown).html(R.dropdown(t)).insertBefore(z),z.hasClass(T.multiple)&&z.prop("multiple")===!1&&(S.error(q.missingMultiple),z.prop("multiple",!0)),z.is("[multiple]")&&S.set.multiple(),z.removeAttr("class").detach().prependTo(O)),S.refresh()},menu:function(e){U.html(R.menu(e)),N=U.find(I.item)},reference:function(){S.debug("Dropdown behavior was called on select, replacing with closest dropdown"),O=O.parent(I.dropdown),S.refresh(),S.setup.returnedObject(),m&&(Q=S,S.invoke(v))},returnedObjec
  12. S.set.value(i,t,n),S.check.maxSelections()},arrayValue:function(t,n){return e.isArray(n)||(n=[n]),n=e.grep(n,function(e){return t!=e}),S.verbose("Removed value from delimited string",t,n),n},label:function(e,t){var n=O.find(I.label),i=n.filter('[data-value="'+e+'"]');S.verbose("Removing label",i),i.remove()},activeLabels:function(e){e=e||O.find(I.label).filter("."+T.active),S.verbose("Removing active label selections",e),S.remove.labels(e)},labels:function(t){t=t||O.find(I.label),S.verbose("Removing labels",t),t.each(function(){var t=e(this).data(k.value),n="number"==typeof t?t.toString():t,i=S.is.userValue(n);i?(S.remove.value(n),S.remove.label(n)):S.remove.selected(n)})},tabbable:function(){S.has.search()?(S.debug("Searchable dropdown initialized"),M.attr("tabindex","-1"),U.attr("tabindex","-1")):(S.debug("Simple selection dropdown initialized"),O.attr("tabindex","-1"),U.attr("tabindex","-1"))}},has:{search:function(){return M.length>0},selectInput:function(){return z.is("select")},firstLetter:function(e,t){var n,i;return e&&0!==e.length&&"string"==typeof t?(n=S.get.choiceText(e,!1),t=t.toLowerCase(),i=String(n).charAt(0).toLowerCase(),t==i):!1},input:function(){return z.length>0},items:function(){return N.length>0},menu:function(){return U.length>0},message:function(){return 0!==U.children(I.message).length},label:function(e){var t=O.find(I.label);return t.filter('[data-value="'+e+'"]').length>0},maxSelections:function(){return y.maxSelections&&S.get.selectionCount()>=y.maxSelections},allResultsFiltered:function(){return N.filter(I.unselectable).length===N.length},query:function(){return""!==S.get.query()},value:function(t){var n=S.get.values(),i=e.isArray(n)?n&&-1!==e.inArray(t,n):n==t;return i?!0:!1}},is:{active:function(){return O.hasClass(T.active)},alreadySetup:function(){return O.is("select")&&O.parent(I.dropdown).length>0&&0===O.prev().length},animating:function(e){return e?e.transition&&e.transition("is animating"):U.transition&&U.transition("is animating")},disabled:function(){return O.hasClass(T.disabled)},focused:function(){return n.activeElement===O[0]},focusedOnSearch:function(){return n.activeElement===M[0]},allFiltered:function(){return(S.is.multiple()||S.has.search())&&!S.has.message()&&S.has.allResultsFiltered()},hidden:function(e){return!S.is.visible(e)},initialLoad:function(){return g},onScreen:function(e){var t,n=e||U,i=!0,a={};return n.addClass(T.loading),t={context:{scrollTop:F.scrollTop(),height:F.outerHeight()},menu:{offset:n.offset(),height:n.outerHeight()}},a={above:t.context.scrollTop<=t.menu.offset.top-t.menu.height,below:t.context.scrollTop+t.context.height>=t.menu.offset.top+t.menu.height},a.below?(S.verbose("Dropdown can fit in context downward",a),i=!0):a.below||a.above?(S.verbose("Dropdown cannot fit below, opening upward",a),i=!1):(S.verbose("Dropdown cannot fit in either direction, favoring downward",a),i=!0),n.removeClass(T.loading),i},inObject:function(t,n){var i=!1;return e.each(n,function(e,n){return n==t?(i=!0,!0):void 0}),i},multiple:function(){return O.hasClass(T.multiple)},single:function(){return!S.is.multiple()},selectMutation:function(t){var n=!1;return e.each(t,function(t,i){return i.target&&e(i.target).is("select")?(n=!0,!0):void 0}),n},search:function(){return O.hasClass(T.search)},searchSelection:function(){return S.has.search()&&1===M.parent(I.dropdown).length},selection:function(){return O.hasClass(T.selection)},userValue:function(t){return-1!==e.inArray(t,S.get.userValues())},upward:function(e){var t=e||O;return t.hasClass(T.upward)},visible:function(e){return e?e.hasClass(T.visible):U.hasClass(T.visible)}},can:{activate:function(e){return y.useLabels?!0:S.has.maxSelections()?S.has.maxSelections()&&e.hasClass(T.active)?!0:!1:!0},click:function(){return c||"click"==y.on},extendSelect:function(){return y.allowAdditions||y.apiSettings},show:function(){return!S.is.disabled()&&(S.has.items()||S.has.message())},useAPI:function(){return e.fn.api!==i}},animate:{show:function(t,n){var a,o=n||U,s=n?function(){}:function(){S.hideSubMenus(),S.hideOthers(),S.set.active()};t=e.i