/* ======================================================================== * ZUI: chosen.icons.js * http://openzui.com * ======================================================================== * Copyright 2014-2020 cnezsoft.com; Licensed MIT * ======================================================================== */ + function($) { 'use strict'; var NAME = 'zui.chosenIcons'; var ChosenIcons = function(element, options) { this.$ = $(element); this.options = this.getOptions(options); this.lang = ChosenIcons.LANGS[this.options.lang] || ChosenIcons.LANGS.en; this.id = 'chosen-icons-' + $.zui.uuid(); this.init(); }; ChosenIcons.DEFAULTS = { optional: true, lang: 'zh_cn', icons: { common: ['heart', 'user', 'group', 'list-ul', 'th', 'th-large', 'star', 'star-empty', 'search', 'envelope', 'dashboard', 'sitemap', 'umbrella', 'lightbulb', 'envelope-alt', 'cog', 'ok', 'remove', 'home', 'time', 'flag', 'flag-alt', 'flag-checkered', 'qrcode', 'tag', 'tags', 'book', 'bookmark', 'bookmark-empty', 'print', 'camera', 'picture', 'globe', 'map-marker', 'edit', 'edit-sign', 'play', 'stop', 'plus-sign', 'minus-sign', 'remove-sign', 'ok-sign', 'check-sign', 'question-sign', 'info-sign', 'exclamation-sign', 'plus', 'plus-sign', 'minus', 'minus-sign', 'asterisk', 'calendar', 'calendar-empty', 'comment', 'comment-alt', 'comments', 'comments-alt', 'folder-close', 'folder-open', 'folder-close-alt', 'folder-open-alt', 'thumbs-up', 'thumbs-down', 'pushpin', 'building', 'phone', 'rss', 'rss-sign', 'bullhorn', 'bell', 'bell-alt', 'certificate', 'wrench', 'tasks', 'cloud', 'beaker', 'magic', 'smile', 'frown', 'meh', 'code', 'location-arrow'], web: ['share', 'pencil', 'trash', 'file-alt', 'file', 'file-text', 'download-alt', 'upload-alt', 'inbox', 'repeat', 'refresh', 'lock', 'check', 'check-empty', 'eye-open', 'eye-close', 'key', 'signin', 'signout', 'external-link', 'external-link-sign', 'link', 'reorder', 'quote-left', 'quote-right', 'spinner', 'reply', 'question', 'info', 'archive', 'collapse', 'collapse-top'], editor: ['table', 'copy', 'save', 'list-ol', 'paste', 'keyboard', 'paper-clip', 'crop', 'unlink', 'sort-by-alphabet', 'sort-by-alphabet-alt', 'sort-by-attributes', 'sort-by-attributes-alt', 'sort-by-order', 'sort-by-order-alt'], directional: ['chevron-left', 'chevron-right', 'chevron-down', 'chevron-up', 'arrow-left', 'arrow-right', 'arrow-down', 'arrow-up', 'hand-right', 'hand-left', 'hand-up', 'hand-down', 'circle-arrow-left', 'circle-arrow-right', 'circle-arrow-up', 'circle-arrow-down', 'double-angle-left', 'double-angle-right', 'double-angle-down', 'double-angle-up', 'angle-left', 'angle-right', 'angle-down', 'angle-up', 'long-arrow-left', 'long-arrow-right', 'long-arrow-down', 'long-arrow-up', 'caret-left', 'caret-right', 'caret-down', 'caret-up'], other: ['desktop', 'laptop', 'tablet', 'mobile', 'building', 'firefox', 'ie', 'opera', 'qq', 'lemon', 'sign-blank', 'circle', 'circle-blank', 'terminal', 'html5', 'android', 'apple', 'windows', 'weibo', 'wechat', 'renren', 'bug', 'moon', 'sun'] } }; ChosenIcons.LANGS = {}; ChosenIcons.LANGS['zh_cn'] = { emptyIcon: '[没有图标]', commonIcons: '常用图标', webIcons: 'Web 图标', editorIcons: '编辑器图标', directionalIcons: '箭头总汇', otherIcons: '其他图标', }; ChosenIcons.LANGS['en'] = { emptyIcon: '[No Icon]', commonIcons: 'Common Icons', webIcons: 'Web Icons', editorIcons: 'Editor Icons', directionalIcons: 'Directional Icons', otherIcons: 'Other Icons' }; ChosenIcons.LANGS['zh_tw'] = { emptyIcon: '[沒有圖標]', commonIcons: '常用圖標', webIcons: 'Web 圖標', editorIcons: '編輯器圖標', directionalIcons: '箭頭總匯', otherIcons: '其他圖標' }; ChosenIcons.prototype.getOptions = function(options) { options = $.extend(true, { placeholder_text: ' ', disable_search: true, width: '100%', inherit_select_classes: true }, ChosenIcons.DEFAULTS, this.$.data(), options); return options; }; ChosenIcons.prototype.init = function() { var that = this; var $this = this.$.addClass('chosen-icons').addClass(this.id).removeClass('form-control'); $this.empty(); if(this.options.optional) { $this.append(this.getOptionHtml()); } var lang = this.lang; var iconsHtml = []; $.each(this.options.icons, function(name, icons) { iconsHtml.push(that.getgroupHtml(name, icons)); }); $this.append(iconsHtml.join('')); $this.chosen(this.options); var chosenSelector = '.chosen-container.' + this.id; $this.on('chosen:showing_dropdown', function() { $(chosenSelector + ' .chosen-results .group-option').each(function() { var $this = $(this).addClass('icon'); var text = $(this).text(); $this.html(''); }); }).change(function() { var span = $(chosenSelector + ' .chosen-single > span'); var text = $(this).val(); if(text && text.length > 0) { span.html('   ' + text.substr(5).replace(/-/g, ' ') + ''); } else { span.html('' + lang.emptyIcon + ''); } }); var val = $this.data('value'); if(val) { $this.val(val).change(); } } ChosenIcons.prototype.getgroupHtml = function(name, icons) { icons = icons || this.options.icons[name] var iconsHtml = [], that = this; $.each(icons, function(i, icon) { iconsHtml.push(that.getOptionHtml(icon)); }); return '' + iconsHtml.join('') + ''; } ChosenIcons.prototype.getOptionHtml = function(value) { var name = value; if(value && value.length > 0) { value = 'icon-' + value; } else { value = ''; name = this.lang.emptyIcon; } return ''; } $.fn.chosenIcons = function(option) { return this.each(function() { var $this = $(this); var data = $this.data(NAME); var options = typeof option == 'object' && option; if(!data) $this.data(NAME, (data = new ChosenIcons(this, options))); if(typeof option == 'string') data[option](); }) }; $.fn.chosenIcons.Constructor = ChosenIcons; }(jQuery);