⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabview.js

📁 Delphi 控件源码
💻 JS
📖 第 1 页 / 共 2 页
字号:
    var _createContentParent = function(attr) {        var el = document.createElement('div');        if ( this.CONTENT_PARENT_CLASSNAME ) {            el.className = this.CONTENT_PARENT_CLASSNAME;        }                this.get('element').appendChild(el);                return el;    };        var _getChildNodes = function(el) {        var nodes = [];        var childNodes = el.childNodes;                for (var i = 0, len = childNodes.length; i < len; ++i) {            if (childNodes[i].nodeType == 1) {                nodes[nodes.length] = childNodes[i];            }        }                return nodes;    };})();(function() {    var Dom = YAHOO.util.Dom,        Event = YAHOO.util.Event;        /**     * A representation of a Tab's label and content.     * @namespace YAHOO.widget     * @class Tab     * @extends YAHOO.util.Element     * @constructor     * @param element {HTMLElement | String} (optional) The html element that      * represents the TabView. An element will be created if none provided.     * @param {Object} properties A key map of initial properties     */    var Tab = function(el, attr) {        attr = attr || {};        if (arguments.length == 1 && !YAHOO.lang.isString(el) && !el.nodeName) {            attr = el;            el = attr.element;        }        if (!el && !attr.element) {            el = _createTabElement.call(this, attr);        }        this.loadHandler =  {            success: function(o) {                this.set('content', o.responseText);            },            failure: function(o) {            }        };                Tab.superclass.constructor.call(this, el, attr);                this.DOM_EVENTS = {}; // delegating to tabView    };    YAHOO.extend(Tab, YAHOO.util.Element);    var proto = Tab.prototype;        /**     * The default tag name for a Tab's inner element.     * @property LABEL_INNER_TAGNAME     * @type String     * @default "em"     */    proto.LABEL_TAGNAME = 'em';        /**     * The class name applied to active tabs.     * @property ACTIVE_CLASSNAME     * @type String     * @default "selected"     */    proto.ACTIVE_CLASSNAME = 'selected';        /**     * The class name applied to disabled tabs.     * @property DISABLED_CLASSNAME     * @type String     * @default "disabled"     */    proto.DISABLED_CLASSNAME = 'disabled';        /**     * The class name applied to dynamic tabs while loading.     * @property LOADING_CLASSNAME     * @type String     * @default "disabled"     */    proto.LOADING_CLASSNAME = 'loading';    /**     * Provides a reference to the connection request object when data is     * loaded dynamically.     * @property dataConnection     * @type Object     */    proto.dataConnection = null;        /**     * Object containing success and failure callbacks for loading data.     * @property loadHandler     * @type object     */    proto.loadHandler = null;    proto._loading = false;        /**     * Provides a readable name for the tab.     * @method toString     * @return String     */    proto.toString = function() {        var el = this.get('element');        var id = el.id || el.tagName;        return "Tab " + id;     };        /**     * setAttributeConfigs TabView specific properties.     * @method initAttributes     * @param {Object} attr Hash of initial attributes     */    proto.initAttributes = function(attr) {        attr = attr || {};        Tab.superclass.initAttributes.call(this, attr);                var el = this.get('element');                /**         * The event that triggers the tab's activation.         * @attribute activationEvent         * @type String         */        this.setAttributeConfig('activationEvent', {            value: attr.activationEvent || 'click'        });                /**         * The element that contains the tab's label.         * @attribute labelEl         * @type HTMLElement         */        this.setAttributeConfig('labelEl', {            value: attr.labelEl || _getlabelEl.call(this),            method: function(value) {                var current = this.get('labelEl');                if (current) {                    if (current == value) {                        return false; // already set                    }                                        this.replaceChild(value, current);                } else if (el.firstChild) { // ensure label is firstChild by default                    this.insertBefore(value, el.firstChild);                } else {                    this.appendChild(value);                }              }         });        /**         * The tab's label text (or innerHTML).         * @attribute label         * @type String         */        this.setAttributeConfig('label', {            value: attr.label || _getLabel.call(this),            method: function(value) {                var labelEl = this.get('labelEl');                if (!labelEl) { // create if needed                    this.set('labelEl', _createlabelEl.call(this));                }                                _setLabel.call(this, value);            }        });                /**         * The HTMLElement that contains the tab's content.         * @attribute contentEl         * @type HTMLElement         */        this.setAttributeConfig('contentEl', {            value: attr.contentEl || document.createElement('div'),            method: function(value) {                var current = this.get('contentEl');                if (current) {                    if (current == value) {                        return false; // already set                    }                    this.replaceChild(value, current);                }            }        });                /**         * The tab's content.         * @attribute content         * @type String         */        this.setAttributeConfig('content', {            value: attr.content,            method: function(value) {                this.get('contentEl').innerHTML = value;            }        });        var _dataLoaded = false;                /**         * The tab's data source, used for loading content dynamically.         * @attribute dataSrc         * @type String         */        this.setAttributeConfig('dataSrc', {            value: attr.dataSrc        });                /**         * Whether or not content should be reloaded for every view.         * @attribute cacheData         * @type Boolean         * @default false         */        this.setAttributeConfig('cacheData', {            value: attr.cacheData || false,            validator: YAHOO.lang.isBoolean        });                /**         * The method to use for the data request.         * @attribute loadMethod         * @type String         * @default "GET"         */        this.setAttributeConfig('loadMethod', {            value: attr.loadMethod || 'GET',            validator: YAHOO.lang.isString        });        /**         * Whether or not any data has been loaded from the server.         * @attribute dataLoaded         * @type Boolean         */                this.setAttributeConfig('dataLoaded', {            value: false,            validator: YAHOO.lang.isBoolean,            writeOnce: true        });                /**         * Number if milliseconds before aborting and calling failure handler.         * @attribute dataTimeout         * @type Number         * @default null         */        this.setAttributeConfig('dataTimeout', {            value: attr.dataTimeout || null,            validator: YAHOO.lang.isNumber        });                /**         * Whether or not the tab is currently active.         * If a dataSrc is set for the tab, the content will be loaded from         * the given source.         * @attribute active         * @type Boolean         */        this.setAttributeConfig('active', {            value: attr.active || this.hasClass(this.ACTIVE_CLASSNAME),            method: function(value) {                if (value === true) {                    this.addClass(this.ACTIVE_CLASSNAME);                    this.set('title', 'active');                } else {                    this.removeClass(this.ACTIVE_CLASSNAME);                    this.set('title', '');                }            },            validator: function(value) {                return YAHOO.lang.isBoolean(value) && !this.get('disabled') ;            }        });                /**         * Whether or not the tab is disabled.         * @attribute disabled         * @type Boolean         */        this.setAttributeConfig('disabled', {            value: attr.disabled || this.hasClass(this.DISABLED_CLASSNAME),            method: function(value) {                if (value === true) {                    Dom.addClass(this.get('element'), this.DISABLED_CLASSNAME);                } else {                    Dom.removeClass(this.get('element'), this.DISABLED_CLASSNAME);                }            },            validator: YAHOO.lang.isBoolean        });                /**         * The href of the tab's anchor element.         * @attribute href         * @type String         * @default '#'         */        this.setAttributeConfig('href', {            value: attr.href ||                    this.getElementsByTagName('a')[0].getAttribute('href', 2) || '#',            method: function(value) {                this.getElementsByTagName('a')[0].href = value;            },            validator: YAHOO.lang.isString        });                /**         * The Whether or not the tab's content is visible.         * @attribute contentVisible         * @type Boolean         * @default false         */        this.setAttributeConfig('contentVisible', {            value: attr.contentVisible,            method: function(value) {                if (value) {                    this.get('contentEl').style.display = 'block';                                        if ( this.get('dataSrc') ) {                     // load dynamic content unless already loading or loaded and caching                        if ( !this._loading && !(this.get('dataLoaded') && this.get('cacheData')) ) {                            _dataConnect.call(this);                        }                    }                } else {                    this.get('contentEl').style.display = 'none';                }            },            validator: YAHOO.lang.isBoolean        });    };        var _createTabElement = function(attr) {        var el = document.createElement('li');        var a = document.createElement('a');                a.href = attr.href || '#';                el.appendChild(a);                var label = attr.label || null;        var labelEl = attr.labelEl || null;                if (labelEl) { // user supplied labelEl            if (!label) { // user supplied label                label = _getLabel.call(this, labelEl);            }        } else {            labelEl = _createlabelEl.call(this);        }                a.appendChild(labelEl);                return el;    };        var _getlabelEl = function() {        return this.getElementsByTagName(this.LABEL_TAGNAME)[0];    };        var _createlabelEl = function() {        var el = document.createElement(this.LABEL_TAGNAME);        return el;    };        var _setLabel = function(label) {        var el = this.get('labelEl');        el.innerHTML = label;    };        var _getLabel = function() {        var label,            el = this.get('labelEl');                        if (!el) {                return undefined;            }                return el.innerHTML;    };        var _dataConnect = function() {        if (!YAHOO.util.Connect) {            return false;        }        Dom.addClass(this.get('contentEl').parentNode, this.LOADING_CLASSNAME);        this._loading = true;         this.dataConnection = YAHOO.util.Connect.asyncRequest(            this.get('loadMethod'),            this.get('dataSrc'),             {                success: function(o) {                    this.loadHandler.success.call(this, o);                    this.set('dataLoaded', true);                    this.dataConnection = null;                    Dom.removeClass(this.get('contentEl').parentNode,                            this.LOADING_CLASSNAME);                    this._loading = false;                },                failure: function(o) {                    this.loadHandler.failure.call(this, o);                    this.dataConnection = null;                    Dom.removeClass(this.get('contentEl').parentNode,                            this.LOADING_CLASSNAME);                    this._loading = false;                },                scope: this,                timeout: this.get('dataTimeout')            }        );    };        YAHOO.widget.Tab = Tab;})();YAHOO.register("tabview", YAHOO.widget.TabView, {version: "2.4.0", build: "733"});

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -