/** * jQuery EasyUI 1.3.6 * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved. * * Licensed under the GPL or commercial licenses * To use it on other terms please contact author: info@jeasyui.com * http://www.gnu.org/licenses/gpl.txt * http://www.jeasyui.com/license_commercial.php * * jQuery EasyUI comboicons Plugin Extensions 1.0 beta * jQuery EasyUI comboicons 插件扩展 * jquery.comboicons.js * 二次开发 流云 * 最近更新:2014-05-12 * * 依赖项: * 1、jquery.jdirk.js v1.0 beta late * 2、jeasyui.extensions.js v1.0 beta late * 3、jeasyui.extensions.combo.js v1.0 beta late * 4、jeasyui.extensions.menu.js v1.0 beta late * 5、jeasyui.extensions.panel.js v1.0 beta late * 6、jeasyui.extensions.window.js v1.0 beta late * 7、jeasyui.extensions.dialog.js v1.0 beta late * 8、icons/jeasyui.icons.all.js 和 icons/icon-all.css v1.0 beta late * 9、jeasyui.extensions.icons.js v1.0 beta late * * Copyright (c) 2013-2014 ChenJianwei personal All rights reserved. * http://www.chenjianwei.org */ (function ($, undefined) { function create(target) { var state = $.data(target, "comboicons"), opts = state.options, t = $(target).addClass("comboicons-f").combo($.extend({}, opts, { onShowPanel: function () { t.combo("panel").hide(); state.dialog = $.easyui.icons.showSelector({ width: opts.panelWidth, height: opts.panelHeight, size: opts.size, selected: t.combo(opts.multiple ? "getValues" : "getValue"), multiple: opts.multiple, buttons: [ { index: 101.5, text: "清除", iconCls: "icon-standard-cancel", handler: function (d) { t.combo("clear"); d.close(); } } ], onEnter: function (val) { if (val) { var isArray = $.isArray(val), text = isArray ? val.join(", ") : val; t.combo(isArray ? "setValues" : "setValue", val).combo("setText", text); } else { t.combo("clear"); } }, onClose: function () { var state = $.data(target, "combo"); if (state && state.options) { t.combo("hidePanel"); } } }); var dopts = state.dialog.dialog("options"); if ((!$.util.isUtilTop && !dopts.topMost) || $.util.isUtilTop) { var textbox = t.combo("textbox"), offset = textbox.offset(); state.dialog.dialog("move", $.extend(offset, { top: offset.top + textbox.outerHeight() + 2 })) } if ($.isFunction(opts.onShowPanel)) { opts.onShowPanel.apply(this, arguments); } }, onHidePanel: function () { if (state.dialog) { var dia = state.dialog, dopts = dia.dialog("options"); state.dialog = null; if (!dopts.closed) { dia.dialog("close"); } } if ($.isFunction(opts.onHidePanel)) { opts.onHidePanel.apply(this, arguments); } }, onDestroy: function () { if (state.dialog) { state.dialog.dialog("destroy"); state.dialog = null; } if ($.isFunction(opts.onDestroy)) { opts.onDestroy.apply(this, arguments); } }, onChange: function (newValue, oldValue) { if ($.isFunction(opts.onChange)) { opts.onChange.apply(this, arguments); } } })); opts.originalValue = opts.value; if (opts.value) { setValues(target, $.util.likeArrayNotString(opts.value) ? opts.value : [opts.value]); } t.combo("validate"); }; function setValues(target, values) { var t = $(target), opts = t.comboicons("options"), array = $.util.likeArrayNotString(values) ? values : [values], text = array.join(opts.separator); t.combo("setValues", array).combo("setText", text); }; $.fn.comboicons = function (options, param) { if (typeof options == "string") { var method = $.fn.comboicons.methods[options]; if (method) { return method(this, param); } else { return this.combo(options, param); } } options = options || {}; return this.each(function () { var state = $.data(this, "comboicons"); if (state) { $.extend(state.options, options); } else { $.data(this, "comboicons", { options: $.extend({}, $.fn.comboicons.defaults, $.fn.comboicons.parseOptions(this), options) }); create(this); } }); }; $.fn.comboicons.parseOptions = function (target) { return $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target, ["size", "iconCls"])); }; $.fn.comboicons.methods = { options: function (jq) { var opts = jq.combo("options"), copts = $.data(jq[0], 'comboicons').options; return $.extend(copts, { originalValue: opts.originalValue, disabled: opts.disabled, readonly: opts.readonly }); }, setValues: function (jq, values) { return jq.each(function () { setValues(this, values); }); }, setValue: function (jq, value) { return jq.each(function () { setValues(this, [value]); }); } }; $.fn.comboicons.defaults = $.extend({}, $.fn.combo.defaults, { size: "16", iconCls: "icon-hamburg-zoom", panelWidth: 500, panelHeight: 360, autoShowPanel: false, editable: false }); if ($.fn.datagrid) { $.extend($.fn.datagrid.defaults.editors, { comboicons: { init: function (container, options) { var box = $("").appendTo(container).comboicons(options); box.comboicons("textbox").addClass("datagrid-editable-input"); return box; }, destroy: function (target) { $(target).comboicons("destroy"); }, getValue: function (target) { var t = $(target), opts = t.comboicons("options"); return t.comboicons(opts.multiple ? "getValues" : "getValue"); }, setValue: function (target, value) { var t = $(target), opts = t.comboicons("options"); if (value) { if (opts.multiple) { if ($.util.likeArrayNotString(value)) { t.comboicons("setValues", value); } else if (typeof value == "string") { t.comboicons("setValues", value.split(opts.separator)); } else { t.comboicons("setValue", value); } } else { t.comboicons("setValue", value); } } else { t.comboicons("clear"); } }, resize: function (target, width) { $(target).comboicons("resize", width); }, setFocus: function (target) { $(target).comboicons("textbox").focus(); } } }); } $.parser.plugins.push("comboicons"); if ($.fn.form && $.isArray($.fn.form.comboList)) { $.fn.form.comboList.push("comboicons"); //$.array.insert($.fn.form.comboList, 0, "comboicons"); } })(jQuery);