123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- ///import core
- ///import uicore
- ///import ui/menu.js
- ///import ui/splitbutton.js
- (function() {
- // todo: menu和item提成通用list
- var utils = baidu.editor.utils,
- uiUtils = baidu.editor.ui.uiUtils,
- Menu = baidu.editor.ui.Menu,
- SplitButton = baidu.editor.ui.SplitButton,
- Combox = (baidu.editor.ui.Combox = function(options) {
- this.initOptions(options);
- this.initCombox();
- });
- Combox.prototype = {
- uiName: "combox",
- onbuttonclick: function() {
- this.showPopup();
- },
- initCombox: function() {
- var me = this;
- this.items = this.items || [];
- for (var i = 0; i < this.items.length; i++) {
- var item = this.items[i];
- item.uiName = "listitem";
- item.index = i;
- item.onclick = function() {
- me.selectByIndex(this.index);
- };
- }
- this.popup = new Menu({
- items: this.items,
- uiName: "list",
- editor: this.editor,
- captureWheel: true,
- combox: this
- });
- this.initSplitButton();
- },
- _SplitButton_postRender: SplitButton.prototype.postRender,
- postRender: function() {
- this._SplitButton_postRender();
- this.setLabel(this.label || "");
- this.setValue(this.initValue || "");
- },
- showPopup: function() {
- var rect = uiUtils.getClientRect(this.getDom());
- rect.top += 1;
- rect.bottom -= 1;
- rect.height -= 2;
- this.popup.showAnchorRect(rect);
- },
- getValue: function() {
- return this.value;
- },
- setValue: function(value) {
- var index = this.indexByValue(value);
- if (index != -1) {
- this.selectedIndex = index;
- this.setLabel(this.items[index].label);
- this.value = this.items[index].value;
- } else {
- this.selectedIndex = -1;
- this.setLabel(this.getLabelForUnknowValue(value));
- this.value = value;
- }
- },
- setLabel: function(label) {
- this.getDom("button_body").innerHTML = label;
- this.label = label;
- },
- getLabelForUnknowValue: function(value) {
- return value;
- },
- indexByValue: function(value) {
- for (var i = 0; i < this.items.length; i++) {
- if (value == this.items[i].value) {
- return i;
- }
- }
- return -1;
- },
- getItem: function(index) {
- return this.items[index];
- },
- selectByIndex: function(index) {
- if (
- index < this.items.length &&
- this.fireEvent("select", index) !== false
- ) {
- this.selectedIndex = index;
- this.value = this.items[index].value;
- this.setLabel(this.items[index].label);
- }
- }
- };
- utils.inherits(Combox, SplitButton);
- })();
|