• Y
  • List All
  • Feedback
    • This Project
    • All Projects
Profile Account Log out
  • Favorite
  • Project
  • Recent History
Loading...
  • Log in
  • Sign up
kadrians / Testing_for_YONA star
  • Project homeH
  • CodeC
  • IssueI 1
  • Pull requestP
  • Review R
  • MilestoneM
  • BoardB 2
  • Files
  • Commit
  • Branches
Testing_for_YONAsourcepublicjavascriptscommonyobi.ui.Select2.js
Download as .zip file
File name
Commit message
Commit date
bin
Yona 1.16.0 Upload
02-04
lib
Yona 1.16.0 Upload
02-04
share/doc/api
Yona 1.16.0 Upload
02-04
source
Source Code Upload
02-04
README.md
Yona 1.16.0 Upload
02-04
File name
Commit message
Commit date
app
Source Code Upload
02-04
conf
Source Code Upload
02-04
docs
Source Code Upload
02-04
lib
Source Code Upload
02-04
project
Source Code Upload
02-04
public
Source Code Upload
02-04
support-script
Source Code Upload
02-04
test
Source Code Upload
02-04
.gitignore
Source Code Upload
02-04
.mailmap
Source Code Upload
02-04
.travis.yml
Source Code Upload
02-04
AUTHORS
Source Code Upload
02-04
LICENSE
Source Code Upload
02-04
NOTICE
Source Code Upload
02-04
README.md
Source Code Upload
02-04
build.sbt
Source Code Upload
02-04
dev.sh
Source Code Upload
02-04
dist.sh
Source Code Upload
02-04
is-alive-bot.sh
Source Code Upload
02-04
minify-js.sh
Source Code Upload
02-04
restart.sh
Source Code Upload
02-04
File name
Commit message
Commit date
bootstrap
Source Code Upload
02-04
help
Source Code Upload
02-04
images
Source Code Upload
02-04
javascripts
Source Code Upload
02-04
stylesheets
Source Code Upload
02-04
compiler.jar
Source Code Upload
02-04
File name
Commit message
Commit date
common
Source Code Upload
02-04
lib
Source Code Upload
02-04
service
Source Code Upload
02-04
template
Source Code Upload
02-04
yona-common.js
Source Code Upload
02-04
yona-layout.js
Source Code Upload
02-04
yona-lib.js
Source Code Upload
02-04
File name
Commit message
Commit date
yobi.Attachments.js
Source Code Upload
02-04
yobi.CodeCommentBlock.js
Source Code Upload
02-04
yobi.CodeCommentBox.js
Source Code Upload
02-04
yobi.Comment.js
Source Code Upload
02-04
yobi.CommentForm.js
Source Code Upload
02-04
yobi.Common.js
Source Code Upload
02-04
yobi.Files.js
Source Code Upload
02-04
yobi.Interval.js
Source Code Upload
02-04
yobi.LoginDialog.js
Source Code Upload
02-04
yobi.Markdown.js
Source Code Upload
02-04
yobi.Mention.js
Source Code Upload
02-04
yobi.OriginalMessage.js
Source Code Upload
02-04
yobi.Pagination.js
Source Code Upload
02-04
yobi.ShortcutKey.js
Source Code Upload
02-04
yobi.WatcherList.js
Source Code Upload
02-04
yobi.ui.Calendar.js
Source Code Upload
02-04
yobi.ui.Dialog.js
Source Code Upload
02-04
yobi.ui.Dropdown.js
Source Code Upload
02-04
yobi.ui.Mergely.js
Source Code Upload
02-04
yobi.ui.Select2.js
Source Code Upload
02-04
yobi.ui.Tabs.js
Source Code Upload
02-04
yobi.ui.Toast.js
Source Code Upload
02-04
yobi.ui.Typeahead.js
Source Code Upload
02-04
yona.CommentAttachmentsUpdate.js
Source Code Upload
02-04
yona.KeyControl.js
Source Code Upload
02-04
yona.ReceiverList.js
Source Code Upload
02-04
yona.Sha1.js
Source Code Upload
02-04
yona.SubComment.js
Source Code Upload
02-04
yona.Subtask.js
Source Code Upload
02-04
yona.Tasklist.js
Source Code Upload
02-04
yona.TitleHeadAutoCompletion.js
Source Code Upload
02-04
yona.Usermenu.js
Source Code Upload
02-04
Nell 02-04 2600fe6 Source Code Upload UNIX
Raw Open in browser Change history
/** * Yobi, Project Hosting SW * * Copyright 2014 NAVER Corp. * http://yobi.io * * @author Jihan Kim * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * yobi.ui.Select2 * * @requires select2.js (http://ivaynberg.github.io/select2/) */ (function(ns){ "use strict"; var oNS = $yobi.createNamespace(ns); oNS.container[oNS.name] = function(element, options){ var targetElement = $(element); var select2Option = $.extend({ "width" : "resolve", "allowClear" : targetElement.data("allowClear"), "closeOnSelect" : targetElement.data("closeOnSelect"), "dropdownCssClass" : targetElement.data("dropdownCssClass"), "containerCssClass": targetElement.data("containerCssClass") }, options); // Customized formats var formatters = { "projects": function(itemObject){ var itemElement = $(itemObject.element); var avatarURL = itemElement.data("avatarUrl"); function _doesntHaveProjectAvatar() { return !avatarURL || avatarURL.indexOf("project_default_logo.png") !== -1; } var owner = itemElement.data("owner") ? itemElement.data("owner") : ""; if(_doesntHaveProjectAvatar()){ return $.tmpl($("#tplSelect2ProjectsWithoutAvatar").text(), { "name" : itemObject.text, "owner" : owner }); } else { return $.tmpl($("#tplSelect2Projects").text(), { "avatarURL": avatarURL, "name" : itemObject.text.trim(), "owner" : owner }); } }, "issues": function(itemObject){ return $.tmpl($("#tplSelect2FormatIssues").text(), { "name" : itemObject.text }); }, "user": function(itemObject){ var itemElement = $(itemObject.element); var avatarURL = itemElement.data("avatarUrl"); if(!avatarURL){ return '<div>' + itemObject.text + '</div>'; } // Template text var tplUserItem = $("#tplSelect2FormatUser").text() || '<div class="usf-group" title="${name} ${loginId}">' + '<span class="avatar-wrap smaller"><img src="${avatarURL}" width="20" height="20"></span>' + '<strong class="name">${name}</strong>' + '<span class="loginid">${loginId}</span></div>'; var loginId = itemElement.data("loginId") ? "@" + itemElement.data("loginId") : ""; var formattedResult = $.tmpl(tplUserItem, { "avatarURL": avatarURL, "name" : itemObject.text.trim(), "loginId" : loginId }); return formattedResult; }, "milestone": function(itemObject){ var itemElement = $(itemObject.element); var milestoneState = itemElement.data("state"); if(!milestoneState){ return itemObject.text; } milestoneState = milestoneState.toLowerCase(); var milestoneStateLabel = Messages("milestone.state." + milestoneState); var tplMilestoneItem = $("#tplSElect2FormatMilestone").text() || '<div title="[${stateLabel}] ${name}">${name}</div>'; var formattedResult = $.tmpl(tplMilestoneItem, { "name" : itemObject.text.trim().replace('<', '&lt;'), "state": milestoneState, "stateLabel": milestoneStateLabel }); return formattedResult; }, "issuelabel": function(itemObject){ var element = $(itemObject.element); var labelId = element.val(); var text = $.trim($('<div/>').text(itemObject.text).html()); if(!labelId){ // = optgroup var isCategoryExclusive = element.data("categoryIsExclusive"); var data = { "text" : text, "title": Messages("label.category.option") + '<br>' + (isCategoryExclusive ? Messages("label.category.option.single") : Messages("label.category.option.multiple")), "css" : isCategoryExclusive ? 'yobicon-tag category-exclusive single' : 'yobicon-tags category-exclusive multiple' }; var tpl = '<i class="${css}" data-toggle="tooltip" data-html="true" data-placement="right" title="${title}"></i><span>${text}</span>'; return $.tmpl(tpl, data); } return '<a class="label issue-label active static" data-label-id="' + labelId + '">' + text + '</a>'; }, "branch": function(itemObject){ var branchType = "unknown"; var branchName = itemObject.text.trim(); var branchNameRegex = /refs\/(.[a-z]+)\/(.+)/i; // parse branchName with regular expression branchNameRegex // e.g.'refs/heads/feature/review-10' // -> ["refs/heads/feature/review-10", "heads", "feature/review-10"] var parsedBranchName = branchName.match(branchNameRegex); var branchTypeMapByName = { "heads": "branch", "tags" : "tag" }; if(parsedBranchName){ branchType = branchTypeMapByName[parsedBranchName[1]] || parsedBranchName[1]; branchName = parsedBranchName[2]; } var tplBranchItem = $("#tplSelect2FormatBranch").text() || '<strong class="branch-label ${branchType}">${branchType}</strong> ${branchName}'; // branchType will be "unknown" // if selected branch name doesn't starts with /refs var formattedResult = $.tmpl(tplBranchItem, { "branchType": branchType, "branchName": branchName }); return formattedResult; } }; // Custom matchers var matchers = { "user": function(term, formattedResult, itemElement){ term = term.toLowerCase(); formattedResult = formattedResult.toLowerCase(); var loginId = itemElement.data("loginId") + ""; loginId = (typeof loginId !== "undefined") ? loginId.toLowerCase() : ""; return (loginId.indexOf(term) > -1) || (formattedResult.indexOf(term) > -1); }, "projects": function(term, formattedResult, itemElement){ term = term.toLowerCase(); formattedResult = formattedResult.toLowerCase(); var owner = itemElement.data("owner") + ""; owner = (typeof owner !== "undefined") ? owner.toLowerCase() : ""; return (owner.indexOf(term) > -1) || (formattedResult.indexOf(term) > -1); } }; // Custom behaviors var behaviors = { "issuelabel": function(select2Element){ select2Element.on({ "select2-selecting": _onSelectingIssueLabel, "select2-open" : _onOpenIssueLabel }); function _onSelectingIssueLabel(evt){ var data = [evt.object]; var element = $(evt.object.element); var select2Object = $(evt.target).data("select2"); var oldData = select2Object.data() // Remove label which category is same with selected label from current data // if selected label belonged exclusive category if(element.data("categoryIsExclusive")){ var categoryId = $(evt.object.element).data("categoryId"); var filtered = _filterLabelInSameCategory(categoryId, oldData); data = data.concat(filtered); if(oldData.length != filtered.length){ _unselect(select2Object, categoryId); } } else { data = data.concat(oldData); } _rememberLastScrollTop(); // Set data as filtered // and trigger "change" event select2Object.data(data, true); if(select2Object.opts.closeOnSelect !== false){ select2Object.close(); } evt.preventDefault(); return false; } function _filterLabelInSameCategory(categoryId, currentData){ return currentData.filter(function(data){ return (categoryId !== $(data.element).data("categoryId")); }); } function _rememberLastScrollTop(){ var lastScrollTop = $("#select2-drop").find(".select2-results").scrollTop(); select2Element.data("lastScrollTop", lastScrollTop); } function _restoreLastScrollTop(){ var lastScrollTop = select2Element.data("lastScrollTop"); if(lastScrollTop){ $("#select2-drop").find(".select2-results").scrollTop(lastScrollTop); select2Element.data("lastScrollTop", null); } } function _onOpenIssueLabel(){ _restoreLastScrollTop(); } // When select2 v3.x is migrated to v4.x, it will probably need to be updated. function _unselect(select2Object, categoryId){ select2Object.results.find(".select2-selected").filter(function(){ var optionElement = $(this).data("select2-data").element; return $(optionElement).data("categoryId") === categoryId; }).removeClass("select2-selected"); } } }; // Use customized format if specified format exists var formatName = targetElement.data("format"); var formatter = formatName ? formatters[formatName.toLowerCase()] : null; var matcher = formatName ? matchers[formatName.toLowerCase()] : null; var behavior = formatName ? behaviors[formatName.toLowerCase()] : null; if(typeof formatter === "function"){ select2Option = $.extend(select2Option, { "formatResult" : formatter, "formatSelection": formatter }); } if(typeof matcher === "function"){ select2Option.matcher = matcher; } if(typeof behavior === "function"){ behavior(targetElement); } $(document).on("mousewheel", ".select2-results", _stopScrollOnBothEnds); function _stopScrollOnBothEnds(evt){ if((evt.originalEvent.deltaY > 0 && _isScrollEndOfList(evt.currentTarget)) || (evt.originalEvent.deltaY < 0 && _isScrollTopOfList(evt.currentTarget))){ evt.preventDefault(); evt.stopPropagation(); return false; } } function _isScrollTopOfList(element){ return ($(element).scrollTop() === 0); } function _isScrollEndOfList(element){ return ($(element).scrollTop() + $(element).height() === element.scrollHeight); } return targetElement.select2(select2Option); }; })("yobi.ui.Select2"); $(function(){ $('[data-toggle="select2"]').each(function(i, el){ yobi.ui.Select2(el); }); });

          
        
    
    
Copyright Yona authors & © NAVER Corp. & NAVER LABS Supported by NAVER CLOUD PLATFORM

or
login with Google Sign in with Google
Reset password | Sign up