!(function () {
    var Widget = BI.inherit(BI.Widget, {
        props: {
            baseCls: "bi-tree-expander",
            layer: 0,   // 第几层级
            isLastNode: false, //   是不是最后一个
            isFirstNode: false, // 是不是第一个
            selectable: false,
        },

        render: function () {

            var self = this;
            var o = this.options;

            this.trigger = BI.createWidget(o.el, {
                forceNotSelected: !o.selectable,
            });
            this.trigger.on(BI.Controller.EVENT_CHANGE, function (type) {
                o.selectable && self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
            });

            return {
                type: "bi.expander",
                ref: function (_ref) {
                    self.expander = _ref;
                },
                trigger: o.selectable ? "" : "click",
                el: this.trigger,
                isDefaultInit: o.isDefaultInit,
                popup: {
                    type: "bi.tree_expander.popup",
                    layer: o.layer || o.el.layer,
                    isLastNode: o.isLastNode || o.el.isLastNode,
                    isFirstNode: o.isFirstNode || o.el.isFirstNode,
                    el: o.popup,
                },
                listeners: [
                    {
                        eventName: BI.Controller.EVENT_CHANGE,
                        action: function (type) {
                            self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
                        },
                    },
                ],
            };
        },

        setValue: function (v) {
            if (BI.contains(v, this.trigger.getValue())) {
                this.trigger.setSelected(true);
                this.expander.setValue([]);
            } else {
                this.trigger.setSelected(false);
                this.expander.setValue(v);
            }
        },

        getValue: function () {
            if (this.trigger.isSelected()) {
                return [this.trigger.getValue()];
            }
            return this.expander.getValue();
        },

        populate: function (items) {
            this.expander.populate(items);
        },
    });

    BI.shortcut("bi.tree_expander", Widget);
}());