From 54d9fb2cd37d5fcb55991feac128627426d5160d Mon Sep 17 00:00:00 2001 From: farthinker Date: Fri, 8 Jul 2016 18:28:27 +0800 Subject: [PATCH 01/18] CHG: refactor and add remote data source support --- Gruntfile.coffee | 2 - README.md | 154 ++++---- bower.json | 2 +- demo.gif | Bin 143528 -> 0 bytes demo.html | 124 +++---- lib/select.js | 764 ++++++++++++++++++++-------------------- package.json | 2 +- spec/select-spec.coffee | 112 +----- spec/select-spec.js | 133 ++----- src/select.coffee | 649 +++++++++++++++++----------------- styles/select.css | 47 ++- styles/select.scss | 65 ++-- 12 files changed, 914 insertions(+), 1140 deletions(-) delete mode 100644 demo.gif diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 4c2a36b..d0a99ff 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -61,9 +61,7 @@ module.exports = (grunt) -> specs: 'spec/select-spec.js' vendor: [ 'vendor/bower/jquery/dist/jquery.min.js' - 'vendor/bower/jquery-mousewheel/jquery.mousewheel.min.js' 'vendor/bower/simple-module/lib/module.js' - 'vendor/bower/simple-util/lib/util.js' ] grunt.loadNpmTasks 'grunt-contrib-sass' diff --git a/README.md b/README.md index b2d13fa..c74de8f 100644 --- a/README.md +++ b/README.md @@ -1,133 +1,97 @@ simple-select ============= -一个基于 [Simple Module](https://github.com/mycolorway/simple-module) 的快速选择组件。 +Autocomplete select component, supports html options data source, json data source or ajax remote data source. -![Demo Gif](https://raw.githubusercontent.com/mycolorway/simple-select/master/demo.gif) - -### 如何使用 - -#### 下载并引用 - -通过 `bower install` 下载依赖的第三方库,然后在页面中引入这些文件: +### Usage ```html - - - -``` - -#### 初始化配置 -在使用 simple-select 的 HTML 页面里应该有一个对应的 select 元素,例如: - -```html - + ``` -我们需要在这个页面的脚本里初始化 simple-select: - -```javascript +```js simple.select({ - el: $('select'), // * 必须 - cls: "", // 额外的 class - onItemRender: $.noop, // 渲染列表每个元素后调用的函数 - placeholder: "", // input 元素的 placeholder 属性 - multiline: false // input 元素是否可换行,默认为true + el: '.name-list' }); ``` -组件会通过 ` - - - - - -``` +__el__ -### 方法和事件 +Selector/Element/jQuery Object, Required, specify the select element to be initialized with. -simple-select 初始化之后,select 实例会暴露一些公共方法供调用: +__url__ -```javascript -// 初始化 simple-select -var select = simple.select({ - el: $('select') -}); +String, the api url to get remote select options data. This option is required unless `el` option is present. -// 调用 selectItem 方法选择第三个元素 -select.selectItem(2); -``` +__cls__ -#### 公共方法 - -**setItems(items)** - -设置 simple-select 列表元素,`label` `key` 为必须属性,所有属性都保存在对应 item 的 data 属性里: - -```javascript -select.setItems([{ - label: "张三", - hint: '#1', - key: "zhangsan zs 张三", - id: "1" -},{ - label: "李四", - hint: '#2', - key: "lisi ls 李四", - id: "2" -},{ - label: "王麻子", - hint: '#3', - key: "wangmazi wmz 王麻子", - id: "3" -}]); -``` +String, extra html class to be added to wrapper element for style customization. -**selectItem(index)** +__onItemRender__ -选择对应的列表元素,返回该元素的属性: +Function, callback function to be called when item renders in dropdown list with two params: item element and item data. -```javascript -select.selectItem(2); -// 返回 -// { -// label: "王麻子", -// hint: '#2', -// key: "wangmazi wmz 王麻子", -// id: "3" -// } -``` +__placeholder__ + +String, set placeholder for input element. The default placeholder is the text of blank option if it exists. + +__allowInput__ + +false/Selector/Element/jQuery Object, false by default, set an `input:text` element to allow input value outside the select options, . + +__workWrap__ + +Boolean, false by default, set true to allow word wrap in input and dropdown list items. + +__locales__ + +Hash, set custom locale texts for a single instance. If you want to set default locales for all simple-select instances, use `simple.select.locales` instead. + + +### Methods + +__setItems__ + +(`Array` items), set select options by json data. The original options in select element will be overwrite. + +__selectItem__ + +(`String`, value), set selected option by value. + +__clear__ + +clear selected option and value of input. + +__disable__ -**clearSelection()** +Disable component, user input is not allowed. -清除输入内容和选择的元素。 +__enable__ -**destroy()** +Enable component, user input is accepted. -恢复到初始化之前的状态。 +__destroy__ +Destroy component, retore it to original state. -#### 事件 +### Events -**select** +__select__ -触发条件:选择某个列表元素。返回该元素的属性。 +Triggered after some item is selected with two params: item data and item element. **clear** -触发条件:清除输入内容和选择的元素。 +Triggered after `clear()` method is called or clear button is clicked. diff --git a/bower.json b/bower.json index 1d7a6c0..9698e37 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "simple-select", - "version": "2.0.14", + "version": "2.1.0", "homepage": "https://github.com/mycolorway/simple-select", "authors": [ "kshift " diff --git a/demo.gif b/demo.gif deleted file mode 100644 index dd01d7e504afed3f009d795ef8c3b936c6ca4608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143528 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

Pgq-eblNn=@YYH_DH|0bT4j&~Z@T_l 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 diff --git a/demo.html b/demo.html index 45e4f2b..c9ba992 100644 --- a/demo.html +++ b/demo.html @@ -16,86 +16,61 @@ margin: 50px auto; } - .demo-one { - margin-bottom: 250px; - } - - input.error { - border: 1px solid #c21; - } - - @@ -113,6 +88,7 @@

Demo one: multiline as false

+
diff --git a/lib/select.js b/lib/select.js index fea1def..39e205e 100644 --- a/lib/select.js +++ b/lib/select.js @@ -28,511 +28,509 @@ Select = (function(superClass) { Select.prototype.opts = { el: null, + url: null, cls: "", onItemRender: $.noop, placeholder: "", allowInput: false, - multiline: true + wordWrap: false, + locales: null }; - Select.i18n = { - "zh-CN": { - all_options: "所有选项", - clear_selection: "清除选择", - loading: "加载中..." - }, - "en": { - all_options: "All options", - clear_selection: "Clear Selection", - loading: "Loading..." - } + Select.locales = { + loadingMessage: 'Loading...', + no_results: 'No results found' }; Select._tpl = { - textarea: "", - input: "", - item: "
\n \n \n
", - group: "
\n
" + wrapper: "
\n \n \n \n \n \n \n
\n
\n
", + item: "
\n \n \n
" }; Select.prototype._init = function() { var ref; - if (!this.opts.el) { + this.el = $(this.opts.el); + if (!(this.el.length > 0)) { throw "simple select: option el is required"; return; } - if ((ref = this.opts.el.data("select")) != null) { + if ((ref = this.el.data("simpleSelect")) != null) { ref.destroy(); } + this.locales = this.opts.locales || Select.locales; this._render(); - this._bind(); - return this.autoresizeInput(); + return this._bind(); }; Select.prototype._render = function() { - var inputTpl; - Select._tpl.select = "
\n \n \n \n \n \n \n
\n
" + (this._t('loading')) + "
\n
\n
"; - this.el = $(this.opts.el).hide(); - this.el.data("select", this); - this.select = $(Select._tpl.select).data("select", this).addClass(this.opts.cls).insertBefore(this.el); - if (this.opts.multiline) { - this.select.addClass('multiline'); - inputTpl = Select._tpl.textarea; + this.el.hide().data("simpleSelect", this); + this.wrapper = $(Select._tpl.wrapper).data("simpleSelect", this).addClass(this.opts.cls).insertBefore(this.el); + if (this.opts.allowInput) { + this.input = $(this.opts.allowInput); + } else if (this.opts.wordWrap) { + this.wrapper.addClass('word-wrap'); + this.input = $(' - """ + @locales: + loadingMessage: 'Loading...' + no_results: 'No results found' - input: """ - + @_tpl: + wrapper: """ +
+ + + + + + +
+
+
""" item: """ @@ -34,390 +35,374 @@ class Select extends SimpleModule
""" - group: """ -
-
- """ - _init: -> - unless @opts.el + @el = $(@opts.el) + unless @el.length > 0 throw "simple select: option el is required" return - @opts.el.data("select")?.destroy() + @el.data("simpleSelect")?.destroy() + @locales = @opts.locales || Select.locales + @_render() @_bind() - @autoresizeInput() - _render: -> - Select._tpl.select = """ -
- - - - - - -
-
#{@_t('loading')}
-
-
- """ - - @el = $(@opts.el).hide() - @el.data("select", @) - @select = $(Select._tpl.select) - .data("select", @) + @el.hide() + .data("simpleSelect", @) + @wrapper = $(Select._tpl.wrapper) + .data("simpleSelect", @) .addClass(@opts.cls) .insertBefore @el - if @opts.multiline - @select.addClass('multiline') - inputTpl = Select._tpl.textarea + + if @opts.allowInput + @input = $ @opts.allowInput + else if @opts.wordWrap + @wrapper.addClass('word-wrap') + @input = $ '\n\n\n \n\n\n \n'); + this.el.find(this.opts.noWrap ? 'textarea' : 'input:text').remove(); + this.textField = this.el.find('.text-field'); + this.textField.attr('placeholder', this.opts.placeholder); + this.setSelected(this.opts.selected); + return this.el; + }; + + Input.prototype._bind = function() { + this.el.find(".link-expand").on("mousedown", (function(_this) { + return function(e) { + if (_this.disabled) { + return; + } + if (!_this.focused) { + _this.focus(); + } + _this.trigger('expandClick'); + return false; + }; + })(this)); + this.el.find(".link-clear").on("mousedown", (function(_this) { + return function(e) { + if (_this.disabled) { + return; + } + _this.trigger('clearClick'); + return false; + }; + })(this)); + return this.textField.on("keydown.simple-select", (function(_this) { + return function(e) { + var direction; + if (e.which === 40 || e.which === 38) { + e.preventDefault(); + direction = e.which === 40 ? 'down' : 'up'; + return _this.triggerHandler('arrowPress', [direction]); + } else if (e.which === 13) { + e.preventDefault(); + return _this.triggerHandler('enterPress'); + } else if (e.which === 27) { + e.preventDefault(); + return _this.blur(); + } else if (e.which === 8) { + return _this._onBackspacePress(e); + } + }; + })(this)).on("input.simple-select", (function(_this) { + return function(e) { + if (_this._inputTimer) { + clearTimeout(_this._inputTimer); + _this._inputTimer = null; + } + return _this._inputTimer = setTimeout(function() { + return _this._onInputChange(); + }, 200); + }; + })(this)).on("blur.simple-select", (function(_this) { + return function(e) { + _this.focused = false; + return _this.triggerHandler('blur'); + }; + })(this)).on("focus.simple-select", (function(_this) { + return function(e) { + _this.focused = true; + return _this.triggerHandler('focus'); + }; + })(this)); + }; + + Input.prototype._onBackspacePress = function(e) { + if (this.selected) { + e.preventDefault(); + return this.clear(); + } + }; + + Input.prototype._onInputChange = function() { + this._autoresize(); + this.setSelected(false); + return this.triggerHandler('change', [this.getValue()]); + }; + + Input.prototype._autoresize = function() { + var borderBottom, borderTop, scrollHeight; + if (this.opts.noWrap) { + return; + } + this.textField.css("height", 0); + scrollHeight = parseFloat(this.textField[0].scrollHeight); + borderTop = parseFloat(this.textField.css("border-top-width")); + borderBottom = parseFloat(this.textField.css("border-bottom-width")); + return this.textField.css("height", scrollHeight + borderTop + borderBottom); + }; + + Input.prototype.setValue = function(value) { + this.textField.val(value); + return this._onInputChange(); + }; + + Input.prototype.getValue = function() { + return this.textField.val(); + }; + + Input.prototype.setSelected = function(selected) { + if (selected == null) { + selected = false; + } + if (selected) { + if (!(selected instanceof Item)) { + selected = this.dataProvider.getItem(selected); + } + this.textField.val(selected.name); + this.el.addClass('selected'); } else { - this.input = $(''); + this.el.removeClass('selected'); + } + this.selected = selected; + return selected; + }; + + Input.prototype.setDisabled = function(disabled) { + if (disabled == null) { + disabled = false; } - this.input.addClass('select-result').attr('autocomplete', 'off').prependTo(this.wrapper); - this.list = this.wrapper.find(".select-list"); - this._initItems(); - this.selectItem(this.el.val()); + this.disabled = disabled; + this.textField.prop('disabled', disabled); + this.el.toggleClass('disabled', disabled); + return disabled; + }; + + Input.prototype.focus = function() { + return this.textField.focus(); + }; + + Input.prototype.blur = function() { + return this.textField.blur(); + }; + + Input.prototype.clear = function() { + return this.setValue(''); + }; + + return Input; + +})(SimpleModule); + +module.exports = Input; + +},{"./models/data-provider.coffee":3,"./models/item.coffee":5}],3:[function(require,module,exports){ +var DataProvider, Group, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +Group = require('./group.coffee'); + +DataProvider = (function(superClass) { + extend(DataProvider, superClass); + + function DataProvider() { + return DataProvider.__super__.constructor.apply(this, arguments); + } + + DataProvider.getInstance = function() { + return this.instance; + }; + + DataProvider.prototype.opts = { + remote: false, + groups: null, + selectEl: null + }; + + DataProvider.prototype._init = function() { if (this.opts.remote) { - this.wrapper.addClass('allow-empty'); + this.remote = this.opts.remote; + } else if (this.opts.groups) { + this.setGroupsFromJson(this.opts.groups); + } else if (this.opts.selectEl) { + this.setGroupsFromHtml(this.opts.selectEl); } - if (this.opts.wordWrap) { - return this._autoresizeInput(); - } else { - return this._positionList(); + return DataProvider.instance = this; + }; + + DataProvider.prototype._fetch = function(value, callback) { + var obj, onFetch; + if (!this.remote || this.triggerHandler('beforeFetch') === false) { + return; + } + onFetch = function(groups) { + this.setGroupsFromJson(groups); + this.triggerHandler('fetch', [this.groups]); + return typeof callback === "function" ? callback(this.groups) : void 0; + }; + if (!value) { + onFetch([]); + return; + } + return $.ajax({ + url: this.remote.url, + data: $.extend({}, this.remote.params, ( + obj = {}, + obj["" + this.remote.searchKey] = value, + obj + )), + dataType: 'json' + }).done((function(_this) { + return function(groups) { + return onFetch(groups); + }; + })(this)); + }; + + DataProvider.prototype.setGroupsFromJson = function(groups) { + if (!groups) { + return; + } + this.groups = []; + if ($.isArray(groups)) { + this.groups.push(new Group({ + items: groups + })); + } else if ($.isPlainObject(groups)) { + $.each(groups, (function(_this) { + return function(groupName, groupItems) { + return _this.groups.push(new Group({ + name: groupName, + items: groupItems + })); + }; + })(this)); } + this.triggerHandler('change', [this.groups]); + return this.groups; }; - SimpleSelect.prototype._initItems = function() { - var $groups, getItems; - getItems = function($options) { + DataProvider.prototype.setGroupsFromHtml = function(selectEl) { + var $groups, $select, itemsFromOptions; + $select = $(selectEl); + if (!($select && $select.length > 0)) { + return; + } + this.groups = []; + itemsFromOptions = function($options) { var items; items = []; - $options.each(function(i, option) { - var $option, attrs, newAttrs, value; - $option = $(option); - value = $option.val(); - if (!value) { - return; - } - attrs = $option.data(); - if (!$.isEmptyObject(attrs)) { - newAttrs = {}; - $.each(Object.keys(attrs), function(i, key) { - return newAttrs["data-" + key] = attrs[key]; + $options.each((function(_this) { + return function(i, option) { + var $option, value; + $option = $(option); + value = $option.val(); + if (!value) { + return; + } + return items.push({ + name: $option.text(), + value: value, + data: $option.data() }); - attrs = newAttrs; - } - return items.push([$option.text(), value, attrs]); - }); + }; + })(this)); return items; }; - if (($groups = this.el.find('optgroup')).length > 0) { - this.items = {}; + if (($groups = $select.find('optgroup')).length > 0) { $groups.each((function(_this) { - return function(i, group) { + return function(i, groupEl) { var $group; - $group = $(group); - return _this.items[$group.attr('label')] = getItems($group.find('option')); + $group = $(groupEl); + return _this.groups.push(new Group({ + name: $group.attr('label'), + items: itemsFromOptions($group.find('option')) + })); }; })(this)); } else { - this.items = getItems(this.el.find('option')); - } - this._generateList(this.items); - return this._checkBlankOption(); - }; - - SimpleSelect.prototype.setItems = function(items) { - var renderOptions; - renderOptions = function($container, items) { - return $.each(items, function(i, item) { - var $option; - $option = $('", { - label: groupName - }); - renderOptions($group, groupItems); - return _this.el.append($group); + this.groups.push(new Group({ + items: itemsFromOptions($select.find('option')) + })); + } + this.triggerHandler('change', [this.groups]); + return this.groups; + }; + + DataProvider.prototype.getGroups = function() { + return this.groups; + }; + + DataProvider.prototype.getItem = function(value) { + var result; + result = null; + $.each(this.groups, (function(_this) { + return function(i, group) { + result = group.getItem(value); + if (result) { + return false; + } + }; + })(this)); + return result; + }; + + DataProvider.prototype.filter = function(value, callback) { + var groups; + if (this.remote) { + this._fetch(value, (function(_this) { + return function() { + if (typeof callback === "function") { + callback(_this.groups, value); + } + return _this.triggerHandler('filter', [_this.groups, value]); }; })(this)); - } else if (this.opts.remote) { - this.el.append('