/*! * # Semantic UI 2.0.0 - Dropdown * http://github.com/semantic-org/semantic-ui/ * * * Copyright 2014 Contributors * Released under the MIT license * http://opensource.org/licenses/MIT * */ !function(e,t,n,i){"use strict";e.fn.dropdown=function(o){var a,r=e(this),s=e(n),l=r.selector||"",c="ontouchstart"in n.documentElement,u=(new Date).getTime(),d=[],v=arguments[0],f="string"==typeof v,m=[].slice.call(arguments,1);return r.each(function(){var h,g,p,b,w,y=e.isPlainObject(o)?e.extend(!0,{},e.fn.dropdown.settings,o):e.extend({},e.fn.dropdown.settings),x=y.className,C=y.metadata,T=y.namespace,S=y.selector,k=y.error,A=y.templates,I="."+T,E="module-"+T,D=e(this),O=D.find(S.text),V=D.find(S.search),F=D.find(S.input),M=D.find(S.icon),q=D.prev().find(S.text).length>0?D.prev().find(S.text):D.prev(),R=D.children(S.menu),P=R.find(S.item),j=!1,z=!1,L=this,H=D.data(E);w={initialize:function(){w.debug("Initializing dropdown",y),w.is.alreadySetup()?w.setup.reference():(w.setup.layout(),w.save.defaults(),w.set.selected(),w.create.id(),c&&w.bind.touchEvents(),w.bind.mouseEvents(),w.bind.keyboardEvents(),w.observeChanges(),w.instantiate())},instantiate:function(){w.verbose("Storing instance of dropdown",w),H=w,D.data(E,w)},destroy:function(){w.verbose("Destroying previous dropdown for",D),w.remove.tabbable(),D.off(I).removeData(E),R.off(I),s.off(h),p&&p.disconnect(),b&&b.disconnect()},observeChanges:function(){"MutationObserver"in t&&(p=new MutationObserver(function(){w.debug("").addClass(x.search).insertBefore(O)),y.allowTab&&w.set.tabbable()},select:function(){var t=w.get.selectValues();w.debug("Dropdown initialized on a select",t),D.is("select")&&(F=D),F.parent(S.dropdown).length>0?(w.debug("UI dropdown already exists. Creating dropdown menu only"),D=F.closest(S.dropdown),R=D.children(S.menu),0===R.length&&(R=e("
").addClass(x.menu).appendTo(D)),R.html(A.menu(t))):(w.debug("Creating entire dropdown from select"),D=e("
").attr("class",F.attr("class")).addClass(x.selection).addClass(x.dropdown).html(A.dropdown(t)).insertBefore(F),F.removeAttr("class").detach().prependTo(D)),F.is("[multiple]")&&w.set.multiple(),w.refresh()},reference:function(){var e,t,n=r.index(D);w.debug("Dropdown behavior was called on select, replacing with closest dropdown"),D=D.parent(S.dropdown),w.refresh(),e=r.slice(0,n),t=r.slice(n+1),r=e.add(D).add(t)}},refresh:function(){w.verbose("Refreshing selector cache"),O=D.find(S.text),V=D.find(S.search),F=D.find(S.input),M=D.find(S.icon),q=D.prev().find(S.text).length>0?D.prev().find(S.text):D.prev(),R=D.children(S.menu),P=R.find(S.item)},toggle:function(){w.verbose("Toggling menu visibility"),w.is.active()?w.hide():w.show()},show:function(t){t=e.isFunction(t)?t:function(){},w.is.searchSelection()&&w.is.allFiltered()||w.can.show()&&!w.is.active()&&(w.debug("Showing dropdown"),w.is.multiple()&&w.filterActive(),w.animate.show(function(){w.can.click()&&w.bind.intent(),w.set.visible(),t.call(L)}),y.onShow.call(L))},hide:function(t){t=e.isFunction(t)?t:function(){},w.is.active()&&(w.debug("Hiding dropdown"),w.animate.hide(function(){w.remove.visible(),t.call(L)}),y.onHide.call(L))},hideOthers:function(){w.verbose("Finding other dropdowns to hide"),r.not(D).has(S.menu+":visible:not(."+x.animating+")").dropdown("hide")},hideSubMenus:function(){var e=R.children(S.item).find(S.menu);e.transition("hide")},bind:{keyboardEvents:function(){w.debug("Binding keyboard events"),D.on("keydown"+I,w.event.keydown),w.has.search()&&D.on(w.get.inputEvent()+I,S.search,w.event.input),w.is.multiple()&&s.on("keydown"+h,w.event.document.keydown)},touchEvents:function(){w.debug("Touch device detected binding additional touch events"),w.is.searchSelection()||D.on("touchstart"+I,w.event.test.toggle),R.on("touchstart"+I,S.item,w.event.item.mouseenter)},mouseEvents:function(){w.verbose("Mouse detected binding mouse events"),w.is.searchSelection()?(D.on("mousedown"+I,S.menu,w.event.menu.mousedown).on("mouseup"+I,S.menu,w.event.menu.mouseup).on("click"+I,S.search,w.show).on("focus"+I,S.search,w.event.search.focus).on("blur"+I,S.search,w.event.search.blur).on("click"+I,S.text,w.event.text.focus),w.is.multiple()&&D.on("click"+I,w.event.click).on("click"+I,S.label,w.event.label.click).on("click"+I,S.remove,w.event.remove.click)):("click"==y.on?D.on("click"+I,w.event.test.toggle):"hover"==y.on?D.on("mouseenter"+I,w.delay.show).on("mouseleave"+I,w.delay.hide):D.on(y.on+I,w.toggle),D.on("mousedown"+I,w.event.mousedown).on("mouseup"+I,w.event.mouseup).on("focus"+I,w.event.focus).on("blur"+I,w.event.blur)),R.on("mouseenter"+I,S.item,w.event.item.mouseenter).on("mouseleave"+I,S.item,w.event.item.mouseleave).on("click"+I,S.item,w.event.item.click)},intent:function(){w.verbose("Binding hide intent event to document"),c&&s.on("touchstart"+h,w.event.test.touch).on("touchmove"+h,w.event.test.touch),s.on("click"+h,w.event.test.hide)}},unbind:{intent:function(){w.verbose("Removing hide intent event from document"),c&&s.off("touchstart"+h).off("touchmove"+h),s.off("click"+h)}},filter:function(t){var n=e(),i=w.escape.regExp(t),o=new RegExp("^"+i,"igm"),a=new RegExp(i,"ig");w.verbose("Searching for matching values"),P.each(function(){var t=e(this),i=String(w.get.choiceText(t,!1)),r=String(w.get.choiceValue(t,i));i.match(o)||r.match(o)?n=n.add(t):y.fullTextSearch&&(i.match(a)||r.match(a))&&(n=n.add(t))}),w.debug("Setting filter",t),w.remove.filteredItem(),P.not(n).addClass(x.filtered),w.is.multiple()&&w.filterActive(),w.verbose("Selecting first non-filtered element"),w.remove.selectedItem(),P.not("."+x.filtered).eq(0).addClass(x.selected),w.is.allFiltered()&&(w.debug("All items filtered, hiding dropdown",t),w.is.searchSelection()&&w.hide(),y.onNoResults.call(L,t))},filterActive:function(){P.filter("."+x.active).addClass(x.filtered)},focusSearch:function(){w.is.search()&&!w.is.focusedOnSearch()&&V.focus()},forceSelection:function(){var e=P.not(x.filtered).filter("."+x.selected).eq(0),t=P.filter("."+x.active).eq(0),n=e.length>0?e:t,i=n.size()>0;i?(w.debug("Forcing partial selection to selected item",n),w.event.item.click.call(n),w.remove.filteredItem()):w.hide()},event:{focus:function(){!j&&w.is.hidden()&&w.show()},click:function(t){var n=e(t.target);!n.is(D)&&!n.is(M)||w.is.focusedOnSearch()||V.focus()},blur:function(){var e=n.activeElement===this;j||e||w.hide()},mousedown:function(){j=!0},mouseup:function(){j=!1},search:{focus:function(){j=!0,w.show()},blur:function(){var e=n.activeElement===this;z||e||(w.is.multiple()?w.remove.activeLabel():y.forceSelection?w.forceSelection():w.hide())}},text:{focus:function(){j=!0,V.focus()}},input:function(){(w.is.multiple()||w.is.searchSelection())&&w.set.filtered(),clearTimeout(w.timer),w.timer=setTimeout(w.search,y.delay.search)},label:{click:function(t){var n=e(this),i=D.find(S.label),o=i.filter("."+x.active),a=n.nextAll("."+x.active),r=n.prevAll("."+x.active),s=a.length>0?n.nextUntil(a).add(o).add(n):n.prevUntil(r).add(o).add(n);t.shiftKey?(o.removeClass(x.active),s.addClass(x.active)):t.ctrlKey?n.toggleClass(x.active):(o.removeClass(x.active),n.addClass(x.active)),y.onLabelClick.apply(this,i.filter("."+x.active))}},remove:{click:function(){var t=e(this).parent();t.hasClass(x.active)?w.remove.labels():w.remove.labels(t)}},test:{toggle:function(e){w.determine.eventInMenu(e,w.toggle)&&e.preventDefault()},touch:function(e){w.determine.eventInMenu(e,function(){"touchstart"==e.type?w.timer=setTimeout(w.hide,y.delay.touch):"touchmove"==e.type&&clearTimeout(w.timer)}),e.stopPropagation()},hide:function(e){w.determine.eventInModule(e,w.hide)}},menu:{mousedown:function(){z=!0},mouseup:function(){z=!1}},item:{mouseenter:function(t){var n=e(this).children(S.menu),i=e(this).siblings(S.item).children(S.menu);n.length>0&&(clearTimeout(w.itemTimer),w.itemTimer=setTimeout(function(){w.verbose("Showing sub-menu",n),e.each(i,function(){w.animate.hide(!1,e(this))}),w.animate.show(!1,n)},y.delay.show),t.preventDefault())},mouseleave:function(){var t=e(this).children(S.menu);t.length>0&&(clearTimeout(w.itemTimer),w.itemTimer=setTimeout(function(){w.verbose("Hiding sub-menu",t),w.animate.hide(!1,t)},y.delay.hide))},click:function(t){var n=e(this),i=e(t?t.target:""),o=n.find(S.menu),a=w.get.choiceText(n),r=w.get.choiceValue(n,a),s=function(){w.remove.searchTerm(),w.determine.selectAction(a,r)},l=o.length>0,c=o.find(i).length>0;c||l&&!y.allowCategorySelection||s()}},document:{keydown:function(e){var t=e.which,n=w.get.shortcutKeys(),i=w.is.inObject(t,n);if(i){var o=D.find(S.label),a=o.filter("."+x.active),r=a.data("value"),s=o.index(a),l=(o.length,a.length>0),c=0==s,u=w.is.focusedOnSearch(),d=u&&0==w.get.caretPosition();u&&t==n.delimiter?w.is.visible()&&(w.event.item.click.call($selectedItem,e),e.preventDefault()):t==n.leftArrow?d&&!l?o.last().addClass(x.active):l&&!c&&(e.shiftKey||o.removeClass(x.active),a.prev().addClass(x.active).end(),e.preventDefault()):t==n.rightArrow?l&&(e.shiftKey||o.removeClass(x.active),a.next().addClass(x.active).end(),e.preventDefault()):t==n.deleteKey||t==n.backspace?l?(a.last().next().addClass(x.active),w.remove.labels(a)):d&&!l&&t==n.backspace&&(a=o.last().addClass(x.active),r=a.data("value"),w.remove.selected(r)):a.removeClass(x.active)}}},keydown:function(e){var t=e.which,n=w.get.shortcutKeys(),i=w.is.inObject(t,n);if(i){var o,a,r=P.not(x.filtered).filter("."+x.selected).eq(0),s=R.children("."+x.active).eq(0),l=r.length>0?r:s,c=l.length>0?l.siblings(":not(."+x.filtered+")").andSelf():R.children(":not(."+x.filtered+")"),u=l.children(S.menu),d=l.closest(S.menu),v=d.hasClass(x.visible)||d.hasClass(x.animating),f=u.length>0,m=l.length>0;if(w.is.visible()){if(t==n.enter&&m&&(f&&!y.allowCategorySelection?(w.verbose("Pressed enter on unselectable category, opening sub menu"),t=n.rightArrow):(w.verbose("Enter key pressed, choosing selected item"),w.event.item.click.call(l,e))),t==n.leftArrow&&(a=d[0]!==R[0],a&&(w.verbose("Left key pressed, closing sub-menu"),w.animate.hide(!1,d),l.removeClass(x.selected),d.closest(S.item).addClass(x.selected),e.preventDefault())),t==n.rightArrow&&f&&(w.verbose("Right key pressed, opening sub-menu"),w.animate.show(!1,u),l.removeClass(x.selected),u.find(S.item).eq(0).addClass(x.selected),e.preventDefault()),t==n.upArrow){if(o=m&&v?l.prevAll(S.item+":not(."+x.filtered+")").eq(0):P.eq(0),c.index(o)<0)return void w.verbose("Up key pressed but reached top of current menu");w.verbose("Up key pressed, changing active item"),l.removeClass(x.selected),o.addClass(x.selected),w.set.scrollPosition(o),e.preventDefault()}if(t==n.downArrow){if(o=m&&v?o=l.nextAll(S.item+":not(."+x.filtered+")").eq(0):P.eq(0),0===o.length)return void w.verbose("Down key pressed but reached bottom of current menu");w.verbose("Down key pressed, changing active item"),P.removeClass(x.selected),o.addClass(x.selected),w.set.scrollPosition(o),e.preventDefault()}}else t==n.enter&&(w.verbose("Enter key pressed, showing dropdown"),w.show()),t==n.escape&&(w.verbose("Escape key pressed, closing dropdown"),w.hide()),t==n.downArrow&&(w.verbose("Down key pressed, showing dropdown"),w.show())}},resetStyle:function(){e(this).removeAttr("style")}},determine:{selectAction:function(t,n){w.verbose("Determining action",y.action),e.isFunction(w.action[y.action])?(w.verbose("Triggering preset action",y.action,t,n),w.action[y.action](t,n)):e.isFunction(y.action)?(w.verbose("Triggering user action",y.action,t,n),y.action(t,n)):w.error(k.action,y.action)},eventInModule:function(t,n){return n=e.isFunction(n)?n:function(){},0===e(t.target).closest(D).length?(w.verbose("Triggering event",n),n(),!0):(w.verbose("Event occurred in dropdown, canceling callback"),!1)},eventInMenu:function(t,n){return n=e.isFunction(n)?n:function(){},0===e(t.target).closest(R).length?(w.verbose("Triggering event",n),n(),!0):(w.verbose("Event occurred in dropdown menu, canceling callback"),!1)}},action:{nothing:function(){},activate:function(e,t){t=t!==i?t:e,w.set.selected(t),w.hide(function(){w.remove.filteredItem()})},select:function(e,t){t=t!==i?t:e,w.set.selected(t),w.hide(function(){w.remove.filteredItem()})},combo:function(e,t){t=t!==i?t:e,w.set.selected(t),w.hide(function(){w.remove.filteredItem()})},hide:function(){w.hide(function(){w.remove.filteredItem()})}},get:{id:function(){return g},text:function(){return O.text()},uniqueArray:function(t){return e.grep(t,function(n,i){return e.inArray(n,t)===i})},caretPosition:function(){var e,t,i=V.get(0);return"selectionStart"in i?i.selectionStart:n.selection?(i.focus(),e=n.selection.createRange(),t=e.text.length,e.moveStart("character",-i.value.length),e.text.length-t):void 0},shortcutKeys:function(){return{backspace:8,delimiter:188,deleteKey:46,enter:13,escape:27,leftArrow:37,upArrow:38,rightArrow:39,downArrow:40}},value:function(){return F.length>0?F.val():D.data(C.value)},values:function(){var e=w.get.value();return""==e?"":!F.is("select")&&w.is.multiple()?e.split(y.delimiter):e},choiceText:function(e,t){return t=t!==i?t:y.preserveHTML,e?(e.find(S.menu).length>0&&(w.verbose("Retreiving text of element with sub-menu"),e=e.clone(),e.find(S.menu).remove(),e.find(S.menuIcon).remove()),e.data(C.text)!==i?e.data(C.text):t?e.html().trim():e.text().trim()):void 0},choiceValue:function(e,t){return t=t||w.get.choiceText(e),e?e.data(C.value)!==i?e.data(C.value):"string"==typeof t?t.toLowerCase().trim():t:!1},inputEvent:function(){var e=V[0];return e?e.oninput!==i?"input":e.onpropertychange!==i?"propertychange":"keyup":!1},selectValues:function(){var t={};return t.values=y.sortSelect?{}:[],D.find("option").each(function(){var n=e(this).html(),o=e(this).attr("value")!==i?e(this).attr("value"):n;""===o?t.placeholder=n:y.sortSelect?t.values[o]={name:n,value:o}:t.values.push({name:n,value:o})}),y.sortSelect?w.debug("Retrieved and sorted values from select",t):w.debug("Retreived values from select",t),t},activeItem:function(){return P.filter("."+x.active)},item:function(t,n){var o,a=!1;return t=t!==i?t:w.get.values()!==i?w.get.values():w.get.text(),o=w.is.multiple()&&e.isArray(t),n=""===t||0===t?!0:n||!1,t!==i&&P.each(function(){var i=e(this),r=w.get.choiceText(i),s=w.get.choiceValue(i,r);if(o)(-1!==e.inArray(s,t)||-1!==e.inArray(r,t))&&(a=a?a.add(i):i);else if(n){if(w.verbose("Ambiguous dropdown value using strict type check",i,t),s===t||r===t)return a=i,!0}else if(s==t||r==t)return w.verbose("Found select item by value",s,t),a=i,!0}),a}},restore:{defaults:function(){w.restore.defaultText(),w.restore.defaultValue()},defaultText:function(){var e=D.data(C.defaultText);w.debug("Restoring default text",e),w.set.text(e),O.addClass(x.placeholder)},defaultValue:function(){var e=D.data(C.defaultValue);e!==i&&(w.debug("Restoring default value",e),e.length?w.set.selected(e):(w.remove.activeItem(),w.remove.selectedItem()))}},save:{defaults:function(){w.save.defaultText(),w.save.placeholderText(),w.save.defaultValue()},defaultValue:function(){D.data(C.defaultValue,w.get.value())},defaultText:function(){D.data(C.defaultText,O.text())},placeholderText:function(){O.hasClass(x.placeholder)&&D.data(C.placeholderText,O.text())}},clear:function(){w.set.placeholderText(),w.clearValue(),w.remove.activeItem(),w.remove.selectedItem()},clearValue:function(){w.set.value("")},set:{filtered:function(){var e=w.is.multiple(),t=V.val(),n="string"==typeof t&&t.length>0,i=t.length*y.glyphWidth+"em",o=""!=F.val();e&&n&&(w.verbose("Adjusting input width",i,y.glyphWidth),V.css("width",i)),n||e&&o?(w.verbose("Hiding placeholder text"),O.addClass(x.filtered)):(!e||e&&!o)&&(w.verbose("Showing placeholder text"),O.removeClass(x.filtered))},placeholderText:function(e){w.debug("Restoring placeholder text"),e=e||D.data(C.placeholderText),w.set.text(placeholderText),O.addClass(x.placeholder)},tabbable:function(){w.has.search()?(w.debug("Searchable dropdown initialized"),V.val("").attr("tabindex",0),R.attr("tabindex","-1")):(w.debug("Simple selection dropdown initialized"),D.attr("tabindex")||(D.attr("tabindex",0),R.attr("tabindex","-1")))},scrollPosition:function(e,t){var n,o,a,r,s,l,c,u,d,v=5;e=e||w.get.activeItem(),n=e&&e.length>0,t=t!==i?t:!1,e&&n&&(R.hasClass(x.visible)||R.addClass(x.loading),c=R.height(),a=e.height(),l=R.scrollTop(),s=R.offset().top,r=e.offset().top,o=l-s+r,d=o+v>l+c,u=l>o-v,w.debug("Scrolling to active item",o),(u||d||t)&&R.scrollTop(o).removeClass(x.loading))},text:function(e){"select"!==y.action?(w.debug("Changing text",e,O),O.removeClass(x.filtered).removeClass(x.placeholder),y.preserveHTML?O.html(e):O.text(e)):"combo"==y.action&&(w.debug("Changing combo button text",e,q),y.preserveHTML?q.html(e):q.text(e))},value:function(t,n,i){var o=(F.length>0,w.get.values());if(F.length>0){if(w.is.multiple()&&(t=[t],e.isArray(o)&&(t=o.concat(t),t=w.get.uniqueArray(t)),F.is("select")?w.debug("Setting multiple