[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/yuilib/2in3/2.9.0/build/yui2-element/ -> yui2-element-debug.js (source)

   1  YUI.add('yui2-element', function(Y) {
   2      var YAHOO    = Y.YUI2;
   3      /*
   4  Copyright (c) 2011, Yahoo! Inc. All rights reserved.
   5  Code licensed under the BSD License:
   6  http://developer.yahoo.com/yui/license.html
   7  version: 2.9.0
   8  */
   9  /**
  10   * Provides Attribute configurations.
  11   * @namespace YAHOO.util
  12   * @class Attribute
  13   * @constructor
  14   * @param hash {Object} The intial Attribute.
  15   * @param {YAHOO.util.AttributeProvider} The owner of the Attribute instance.
  16   */
  17  
  18  YAHOO.util.Attribute = function(hash, owner) {
  19      if (owner) { 
  20          this.owner = owner;
  21          this.configure(hash, true);
  22      }
  23  };
  24  
  25  YAHOO.util.Attribute.INVALID_VALUE = {};
  26  
  27  YAHOO.util.Attribute.prototype = {
  28      /**
  29       * The name of the attribute.
  30       * @property name
  31       * @type String
  32       */
  33      name: undefined,
  34      
  35      /**
  36       * The value of the attribute.
  37       * @property value
  38       * @type String
  39       */
  40      value: null,
  41      
  42      /**
  43       * The owner of the attribute.
  44       * @property owner
  45       * @type YAHOO.util.AttributeProvider
  46       */
  47      owner: null,
  48      
  49      /**
  50       * Whether or not the attribute is read only.
  51       * @property readOnly
  52       * @type Boolean
  53       */
  54      readOnly: false,
  55      
  56      /**
  57       * Whether or not the attribute can only be written once.
  58       * @property writeOnce
  59       * @type Boolean
  60       */
  61      writeOnce: false,
  62  
  63      /**
  64       * The attribute's initial configuration.
  65       * @private
  66       * @property _initialConfig
  67       * @type Object
  68       */
  69      _initialConfig: null,
  70      
  71      /**
  72       * Whether or not the attribute's value has been set.
  73       * @private
  74       * @property _written
  75       * @type Boolean
  76       */
  77      _written: false,
  78      
  79      /**
  80       * A function to call when setting the attribute's value.
  81       * The method receives the new value as the first arg and the attribute name as the 2nd
  82       * @property method
  83       * @type Function
  84       */
  85      method: null,
  86      
  87      /**
  88       * The function to use when setting the attribute's value.
  89       * The setter receives the new value as the first arg and the attribute name as the 2nd
  90       * The return value of the setter replaces the value passed to set(). 
  91       * @property setter
  92       * @type Function
  93       */
  94      setter: null,
  95      
  96      /**
  97       * The function to use when getting the attribute's value.
  98       * The getter receives the new value as the first arg and the attribute name as the 2nd
  99       * The return value of the getter will be used as the return from get().
 100       * @property getter
 101       * @type Function
 102       */
 103      getter: null,
 104  
 105      /**
 106       * The validator to use when setting the attribute's value.
 107       * @property validator
 108       * @type Function
 109       * @return Boolean
 110       */
 111      validator: null,
 112      
 113      /**
 114       * Retrieves the current value of the attribute.
 115       * @method getValue
 116       * @return {any} The current value of the attribute.
 117       */
 118      getValue: function() {
 119          var val = this.value;
 120  
 121          if (this.getter) {
 122              val = this.getter.call(this.owner, this.name, val);
 123          }
 124  
 125          return val;
 126      },
 127      
 128      /**
 129       * Sets the value of the attribute and fires beforeChange and change events.
 130       * @method setValue
 131       * @param {Any} value The value to apply to the attribute.
 132       * @param {Boolean} silent If true the change events will not be fired.
 133       * @return {Boolean} Whether or not the value was set.
 134       */
 135      setValue: function(value, silent) {
 136          var beforeRetVal,
 137              owner = this.owner,
 138              name = this.name,
 139              invalidValue = YAHOO.util.Attribute.INVALID_VALUE,
 140          
 141              event = {
 142                  type: name, 
 143                  prevValue: this.getValue(),
 144                  newValue: value
 145          };
 146          
 147          if (this.readOnly || ( this.writeOnce && this._written) ) {
 148              YAHOO.log( 'setValue ' + name + ', ' +  value +
 149                      ' failed: read only', 'error', 'Attribute');
 150              return false; // write not allowed
 151          }
 152          
 153          if (this.validator && !this.validator.call(owner, value) ) {
 154              YAHOO.log( 'setValue ' + name + ', ' + value +
 155                      ' validation failed', 'error', 'Attribute');
 156              return false; // invalid value
 157          }
 158  
 159          if (!silent) {
 160              beforeRetVal = owner.fireBeforeChangeEvent(event);
 161              if (beforeRetVal === false) {
 162                  YAHOO.log('setValue ' + name + 
 163                          ' cancelled by beforeChange event', 'info', 'Attribute');
 164                  return false;
 165              }
 166          }
 167  
 168          if (this.setter) {
 169              value = this.setter.call(owner, value, this.name);
 170              if (value === undefined) {
 171                  YAHOO.log('setter for ' + this.name + ' returned undefined', 'warn', 'Attribute');
 172              }
 173  
 174              if (value === invalidValue) {
 175                  return false;
 176              }
 177          }
 178          
 179          if (this.method) {
 180              if (this.method.call(owner, value, this.name) === invalidValue) {
 181                  return false; 
 182              }
 183          }
 184          
 185          this.value = value; // TODO: set before calling setter/method?
 186          this._written = true;
 187          
 188          event.type = name;
 189          
 190          if (!silent) {
 191              this.owner.fireChangeEvent(event);
 192          }
 193          
 194          return true;
 195      },
 196      
 197      /**
 198       * Allows for configuring the Attribute's properties.
 199       * @method configure
 200       * @param {Object} map A key-value map of Attribute properties.
 201       * @param {Boolean} init Whether or not this should become the initial config.
 202       */
 203      configure: function(map, init) {
 204          map = map || {};
 205  
 206          if (init) {
 207              this._written = false; // reset writeOnce
 208          }
 209  
 210          this._initialConfig = this._initialConfig || {};
 211          
 212          for (var key in map) {
 213              if ( map.hasOwnProperty(key) ) {
 214                  this[key] = map[key];
 215                  if (init) {
 216                      this._initialConfig[key] = map[key];
 217                  }
 218              }
 219          }
 220      },
 221      
 222      /**
 223       * Resets the value to the initial config value.
 224       * @method resetValue
 225       * @return {Boolean} Whether or not the value was set.
 226       */
 227      resetValue: function() {
 228          return this.setValue(this._initialConfig.value);
 229      },
 230      
 231      /**
 232       * Resets the attribute config to the initial config state.
 233       * @method resetConfig
 234       */
 235      resetConfig: function() {
 236          this.configure(this._initialConfig, true);
 237      },
 238      
 239      /**
 240       * Resets the value to the current value.
 241       * Useful when values may have gotten out of sync with actual properties.
 242       * @method refresh
 243       * @return {Boolean} Whether or not the value was set.
 244       */
 245      refresh: function(silent) {
 246          this.setValue(this.value, silent);
 247      }
 248  };
 249  
 250  (function() {
 251      var Lang = YAHOO.util.Lang;
 252  
 253      /*
 254      Copyright (c) 2006, Yahoo! Inc. All rights reserved.
 255      Code licensed under the BSD License:
 256      http://developer.yahoo.net/yui/license.txt
 257      */
 258      
 259      /**
 260       * Provides and manages YAHOO.util.Attribute instances
 261       * @namespace YAHOO.util
 262       * @class AttributeProvider
 263       * @uses YAHOO.util.EventProvider
 264       */
 265      YAHOO.util.AttributeProvider = function() {};
 266  
 267      YAHOO.util.AttributeProvider.prototype = {
 268          
 269          /**
 270           * A key-value map of Attribute configurations
 271           * @property _configs
 272           * @protected (may be used by subclasses and augmentors)
 273           * @private
 274           * @type {Object}
 275           */
 276          _configs: null,
 277          /**
 278           * Returns the current value of the attribute.
 279           * @method get
 280           * @param {String} key The attribute whose value will be returned.
 281           * @return {Any} The current value of the attribute.
 282           */
 283          get: function(key){
 284              this._configs = this._configs || {};
 285              var config = this._configs[key];
 286              
 287              if (!config || !this._configs.hasOwnProperty(key)) {
 288                  YAHOO.log(key + ' not found', 'error', 'AttributeProvider');
 289                  return null;
 290              }
 291              
 292              return config.getValue();
 293          },
 294          
 295          /**
 296           * Sets the value of a config.
 297           * @method set
 298           * @param {String} key The name of the attribute
 299           * @param {Any} value The value to apply to the attribute
 300           * @param {Boolean} silent Whether or not to suppress change events
 301           * @return {Boolean} Whether or not the value was set.
 302           */
 303          set: function(key, value, silent){
 304              this._configs = this._configs || {};
 305              var config = this._configs[key];
 306              
 307              if (!config) {
 308                  YAHOO.log('set failed: ' + key + ' not found',
 309                          'error', 'AttributeProvider');
 310                  return false;
 311              }
 312              
 313              return config.setValue(value, silent);
 314          },
 315      
 316          /**
 317           * Returns an array of attribute names.
 318           * @method getAttributeKeys
 319           * @return {Array} An array of attribute names.
 320           */
 321          getAttributeKeys: function(){
 322              this._configs = this._configs;
 323              var keys = [], key;
 324  
 325              for (key in this._configs) {
 326                  if ( Lang.hasOwnProperty(this._configs, key) && 
 327                          !Lang.isUndefined(this._configs[key]) ) {
 328                      keys[keys.length] = key;
 329                  }
 330              }
 331              
 332              return keys;
 333          },
 334          
 335          /**
 336           * Sets multiple attribute values.
 337           * @method setAttributes
 338           * @param {Object} map  A key-value map of attributes
 339           * @param {Boolean} silent Whether or not to suppress change events
 340           */
 341          setAttributes: function(map, silent){
 342              for (var key in map) {
 343                  if ( Lang.hasOwnProperty(map, key) ) {
 344                      this.set(key, map[key], silent);
 345                  }
 346              }
 347          },
 348      
 349          /**
 350           * Resets the specified attribute's value to its initial value.
 351           * @method resetValue
 352           * @param {String} key The name of the attribute
 353           * @param {Boolean} silent Whether or not to suppress change events
 354           * @return {Boolean} Whether or not the value was set
 355           */
 356          resetValue: function(key, silent){
 357              this._configs = this._configs || {};
 358              if (this._configs[key]) {
 359                  this.set(key, this._configs[key]._initialConfig.value, silent);
 360                  return true;
 361              }
 362              return false;
 363          },
 364      
 365          /**
 366           * Sets the attribute's value to its current value.
 367           * @method refresh
 368           * @param {String | Array} key The attribute(s) to refresh
 369           * @param {Boolean} silent Whether or not to suppress change events
 370           */
 371          refresh: function(key, silent) {
 372              this._configs = this._configs || {};
 373              var configs = this._configs;
 374              
 375              key = ( ( Lang.isString(key) ) ? [key] : key ) || 
 376                      this.getAttributeKeys();
 377              
 378              for (var i = 0, len = key.length; i < len; ++i) { 
 379                  if (configs.hasOwnProperty(key[i])) {
 380                      this._configs[key[i]].refresh(silent);
 381                  }
 382              }
 383          },
 384      
 385          /**
 386           * Adds an Attribute to the AttributeProvider instance. 
 387           * @method register
 388           * @param {String} key The attribute's name
 389           * @param {Object} map A key-value map containing the
 390           * attribute's properties.
 391           * @deprecated Use setAttributeConfig
 392           */
 393          register: function(key, map) {
 394              this.setAttributeConfig(key, map);
 395          },
 396          
 397          
 398          /**
 399           * Returns the attribute's properties.
 400           * @method getAttributeConfig
 401           * @param {String} key The attribute's name
 402           * @private
 403           * @return {object} A key-value map containing all of the
 404           * attribute's properties.
 405           */
 406          getAttributeConfig: function(key) {
 407              this._configs = this._configs || {};
 408              var config = this._configs[key] || {};
 409              var map = {}; // returning a copy to prevent overrides
 410              
 411              for (key in config) {
 412                  if ( Lang.hasOwnProperty(config, key) ) {
 413                      map[key] = config[key];
 414                  }
 415              }
 416      
 417              return map;
 418          },
 419          
 420          /**
 421           * Sets or updates an Attribute instance's properties. 
 422           * @method setAttributeConfig
 423           * @param {String} key The attribute's name.
 424           * @param {Object} map A key-value map of attribute properties
 425           * @param {Boolean} init Whether or not this should become the intial config.
 426           */
 427          setAttributeConfig: function(key, map, init) {
 428              this._configs = this._configs || {};
 429              map = map || {};
 430              if (!this._configs[key]) {
 431                  map.name = key;
 432                  this._configs[key] = this.createAttribute(map);
 433              } else {
 434                  this._configs[key].configure(map, init);
 435              }
 436          },
 437          
 438          /**
 439           * Sets or updates an Attribute instance's properties. 
 440           * @method configureAttribute
 441           * @param {String} key The attribute's name.
 442           * @param {Object} map A key-value map of attribute properties
 443           * @param {Boolean} init Whether or not this should become the intial config.
 444           * @deprecated Use setAttributeConfig
 445           */
 446          configureAttribute: function(key, map, init) {
 447              this.setAttributeConfig(key, map, init);
 448          },
 449          
 450          /**
 451           * Resets an attribute to its intial configuration. 
 452           * @method resetAttributeConfig
 453           * @param {String} key The attribute's name.
 454           * @private
 455           */
 456          resetAttributeConfig: function(key){
 457              this._configs = this._configs || {};
 458              this._configs[key].resetConfig();
 459          },
 460          
 461          // wrapper for EventProvider.subscribe
 462          // to create events on the fly
 463          subscribe: function(type, callback) {
 464              this._events = this._events || {};
 465  
 466              if ( !(type in this._events) ) {
 467                  this._events[type] = this.createEvent(type);
 468              }
 469  
 470              YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments);
 471          },
 472  
 473          on: function() {
 474              this.subscribe.apply(this, arguments);
 475          },
 476  
 477          addListener: function() {
 478              this.subscribe.apply(this, arguments);
 479          },
 480  
 481          /**
 482           * Fires the attribute's beforeChange event. 
 483           * @method fireBeforeChangeEvent
 484           * @param {String} key The attribute's name.
 485           * @param {Obj} e The event object to pass to handlers.
 486           */
 487          fireBeforeChangeEvent: function(e) {
 488              var type = 'before';
 489              type += e.type.charAt(0).toUpperCase() + e.type.substr(1) + 'Change';
 490              e.type = type;
 491              return this.fireEvent(e.type, e);
 492          },
 493          
 494          /**
 495           * Fires the attribute's change event. 
 496           * @method fireChangeEvent
 497           * @param {String} key The attribute's name.
 498           * @param {Obj} e The event object to pass to the handlers.
 499           */
 500          fireChangeEvent: function(e) {
 501              e.type += 'Change';
 502              return this.fireEvent(e.type, e);
 503          },
 504  
 505          createAttribute: function(map) {
 506              return new YAHOO.util.Attribute(map, this);
 507          }
 508      };
 509      
 510      YAHOO.augment(YAHOO.util.AttributeProvider, YAHOO.util.EventProvider);
 511  })();
 512  
 513  (function() {
 514  // internal shorthand
 515  var Dom = YAHOO.util.Dom,
 516      AttributeProvider = YAHOO.util.AttributeProvider,
 517      specialTypes = {
 518          mouseenter: true,
 519          mouseleave: true
 520      };
 521  
 522  /**
 523   * Element provides an wrapper object to simplify adding
 524   * event listeners, using dom methods, and managing attributes. 
 525   * @module element
 526   * @namespace YAHOO.util
 527   * @requires yahoo, dom, event
 528   */
 529  
 530  /**
 531   * Element provides an wrapper object to simplify adding
 532   * event listeners, using dom methods, and managing attributes. 
 533   * @class Element
 534   * @uses YAHOO.util.AttributeProvider
 535   * @constructor
 536   * @param el {HTMLElement | String} The html element that 
 537   * represents the Element.
 538   * @param {Object} map A key-value map of initial config names and values
 539   */
 540  var Element = function(el, map) {
 541      this.init.apply(this, arguments);
 542  };
 543  
 544  Element.DOM_EVENTS = {
 545      'click': true,
 546      'dblclick': true,
 547      'keydown': true,
 548      'keypress': true,
 549      'keyup': true,
 550      'mousedown': true,
 551      'mousemove': true,
 552      'mouseout': true, 
 553      'mouseover': true, 
 554      'mouseup': true,
 555      'mouseenter': true, 
 556      'mouseleave': true,
 557      'focus': true,
 558      'blur': true,
 559      'submit': true,
 560      'change': true
 561  };
 562  
 563  Element.prototype = {
 564      /**
 565       * Dom events supported by the Element instance.
 566       * @property DOM_EVENTS
 567       * @type Object
 568       */
 569      DOM_EVENTS: null,
 570  
 571      DEFAULT_HTML_SETTER: function(value, key) {
 572          var el = this.get('element');
 573          
 574          if (el) {
 575              el[key] = value;
 576          }
 577  
 578          return value;
 579  
 580      },
 581  
 582      DEFAULT_HTML_GETTER: function(key) {
 583          var el = this.get('element'),
 584              val;
 585  
 586          if (el) {
 587              val = el[key];
 588          }
 589  
 590          return val;
 591      },
 592  
 593      /**
 594       * Wrapper for HTMLElement method.
 595       * @method appendChild
 596       * @param {YAHOO.util.Element || HTMLElement} child The element to append. 
 597       * @return {HTMLElement} The appended DOM element. 
 598       */
 599      appendChild: function(child) {
 600          child = child.get ? child.get('element') : child;
 601          return this.get('element').appendChild(child);
 602      },
 603      
 604      /**
 605       * Wrapper for HTMLElement method.
 606       * @method getElementsByTagName
 607       * @param {String} tag The tagName to collect
 608       * @return {HTMLCollection} A collection of DOM elements. 
 609       */
 610      getElementsByTagName: function(tag) {
 611          return this.get('element').getElementsByTagName(tag);
 612      },
 613      
 614      /**
 615       * Wrapper for HTMLElement method.
 616       * @method hasChildNodes
 617       * @return {Boolean} Whether or not the element has childNodes
 618       */
 619      hasChildNodes: function() {
 620          return this.get('element').hasChildNodes();
 621      },
 622      
 623      /**
 624       * Wrapper for HTMLElement method.
 625       * @method insertBefore
 626       * @param {HTMLElement} element The HTMLElement to insert
 627       * @param {HTMLElement} before The HTMLElement to insert
 628       * the element before.
 629       * @return {HTMLElement} The inserted DOM element. 
 630       */
 631      insertBefore: function(element, before) {
 632          element = element.get ? element.get('element') : element;
 633          before = (before && before.get) ? before.get('element') : before;
 634          
 635          return this.get('element').insertBefore(element, before);
 636      },
 637      
 638      /**
 639       * Wrapper for HTMLElement method.
 640       * @method removeChild
 641       * @param {HTMLElement} child The HTMLElement to remove
 642       * @return {HTMLElement} The removed DOM element. 
 643       */
 644      removeChild: function(child) {
 645          child = child.get ? child.get('element') : child;
 646          return this.get('element').removeChild(child);
 647      },
 648      
 649      /**
 650       * Wrapper for HTMLElement method.
 651       * @method replaceChild
 652       * @param {HTMLElement} newNode The HTMLElement to insert
 653       * @param {HTMLElement} oldNode The HTMLElement to replace
 654       * @return {HTMLElement} The replaced DOM element. 
 655       */
 656      replaceChild: function(newNode, oldNode) {
 657          newNode = newNode.get ? newNode.get('element') : newNode;
 658          oldNode = oldNode.get ? oldNode.get('element') : oldNode;
 659          return this.get('element').replaceChild(newNode, oldNode);
 660      },
 661  
 662      
 663      /**
 664       * Registers Element specific attributes.
 665       * @method initAttributes
 666       * @param {Object} map A key-value map of initial attribute configs
 667       */
 668      initAttributes: function(map) {
 669      },
 670  
 671      /**
 672       * Adds a listener for the given event.  These may be DOM or 
 673       * customEvent listeners.  Any event that is fired via fireEvent
 674       * can be listened for.  All handlers receive an event object. 
 675       * @method addListener
 676       * @param {String} type The name of the event to listen for
 677       * @param {Function} fn The handler to call when the event fires
 678       * @param {Any} obj A variable to pass to the handler
 679       * @param {Object} scope The object to use for the scope of the handler 
 680       */
 681      addListener: function(type, fn, obj, scope) {
 682  
 683          scope = scope || this;
 684  
 685          var Event = YAHOO.util.Event,
 686              el = this.get('element') || this.get('id'),
 687              self = this;
 688  
 689  
 690          if (specialTypes[type] && !Event._createMouseDelegate) {
 691              YAHOO.log("Using a " + type + " event requires the event-mouseenter module", "error", "Event");
 692              return false;    
 693          }
 694  
 695  
 696          if (!this._events[type]) { // create on the fly
 697  
 698              if (el && this.DOM_EVENTS[type]) {
 699                  Event.on(el, type, function(e, matchedEl) {
 700  
 701                      // Supplement IE with target, currentTarget relatedTarget
 702  
 703                      if (e.srcElement && !e.target) { 
 704                          e.target = e.srcElement;
 705                      }
 706  
 707                      if ((e.toElement && !e.relatedTarget) || (e.fromElement && !e.relatedTarget)) {
 708                          e.relatedTarget = Event.getRelatedTarget(e);
 709                      }
 710                      
 711                      if (!e.currentTarget) {
 712                          e.currentTarget = el;
 713                      }
 714  
 715                      //    Note: matchedEl el is passed back for delegated listeners
 716                      self.fireEvent(type, e, matchedEl);
 717  
 718                  }, obj, scope);
 719              }
 720              this.createEvent(type, {scope: this});
 721          }
 722          
 723          return YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments); // notify via customEvent
 724      },
 725  
 726  
 727      /**
 728       * Alias for addListener
 729       * @method on
 730       * @param {String} type The name of the event to listen for
 731       * @param {Function} fn The function call when the event fires
 732       * @param {Any} obj A variable to pass to the handler
 733       * @param {Object} scope The object to use for the scope of the handler 
 734       */
 735      on: function() {
 736          return this.addListener.apply(this, arguments);
 737      },
 738      
 739      /**
 740       * Alias for addListener
 741       * @method subscribe
 742       * @param {String} type The name of the event to listen for
 743       * @param {Function} fn The function call when the event fires
 744       * @param {Any} obj A variable to pass to the handler
 745       * @param {Object} scope The object to use for the scope of the handler 
 746       */
 747      subscribe: function() {
 748          return this.addListener.apply(this, arguments);
 749      },
 750      
 751      /**
 752       * Remove an event listener
 753       * @method removeListener
 754       * @param {String} type The name of the event to listen for
 755       * @param {Function} fn The function call when the event fires
 756       */
 757      removeListener: function(type, fn) {
 758          return this.unsubscribe.apply(this, arguments);
 759      },
 760      
 761      /**
 762       * Wrapper for Dom method.
 763       * @method addClass
 764       * @param {String} className The className to add
 765       */
 766      addClass: function(className) {
 767          Dom.addClass(this.get('element'), className);
 768      },
 769      
 770      /**
 771       * Wrapper for Dom method.
 772       * @method getElementsByClassName
 773       * @param {String} className The className to collect
 774       * @param {String} tag (optional) The tag to use in
 775       * conjunction with class name
 776       * @return {Array} Array of HTMLElements
 777       */
 778      getElementsByClassName: function(className, tag) {
 779          return Dom.getElementsByClassName(className, tag,
 780                  this.get('element') );
 781      },
 782      
 783      /**
 784       * Wrapper for Dom method.
 785       * @method hasClass
 786       * @param {String} className The className to add
 787       * @return {Boolean} Whether or not the element has the class name
 788       */
 789      hasClass: function(className) {
 790          return Dom.hasClass(this.get('element'), className); 
 791      },
 792      
 793      /**
 794       * Wrapper for Dom method.
 795       * @method removeClass
 796       * @param {String} className The className to remove
 797       */
 798      removeClass: function(className) {
 799          return Dom.removeClass(this.get('element'), className);
 800      },
 801      
 802      /**
 803       * Wrapper for Dom method.
 804       * @method replaceClass
 805       * @param {String} oldClassName The className to replace
 806       * @param {String} newClassName The className to add
 807       */
 808      replaceClass: function(oldClassName, newClassName) {
 809          return Dom.replaceClass(this.get('element'), 
 810                  oldClassName, newClassName);
 811      },
 812      
 813      /**
 814       * Wrapper for Dom method.
 815       * @method setStyle
 816       * @param {String} property The style property to set
 817       * @param {String} value The value to apply to the style property
 818       */
 819      setStyle: function(property, value) {
 820          return Dom.setStyle(this.get('element'),  property, value); // TODO: always queuing?
 821      },
 822      
 823      /**
 824       * Wrapper for Dom method.
 825       * @method getStyle
 826       * @param {String} property The style property to retrieve
 827       * @return {String} The current value of the property
 828       */
 829      getStyle: function(property) {
 830          return Dom.getStyle(this.get('element'),  property);
 831      },
 832      
 833      /**
 834       * Apply any queued set calls.
 835       * @method fireQueue
 836       */
 837      fireQueue: function() {
 838          var queue = this._queue;
 839          for (var i = 0, len = queue.length; i < len; ++i) {
 840              this[queue[i][0]].apply(this, queue[i][1]);
 841          }
 842      },
 843      
 844      /**
 845       * Appends the HTMLElement into either the supplied parentNode.
 846       * @method appendTo
 847       * @param {HTMLElement | Element} parentNode The node to append to
 848       * @param {HTMLElement | Element} before An optional node to insert before
 849       * @return {HTMLElement} The appended DOM element. 
 850       */
 851      appendTo: function(parent, before) {
 852          parent = (parent.get) ?  parent.get('element') : Dom.get(parent);
 853          
 854          this.fireEvent('beforeAppendTo', {
 855              type: 'beforeAppendTo',
 856              target: parent
 857          });
 858          
 859          
 860          before = (before && before.get) ? 
 861                  before.get('element') : Dom.get(before);
 862          var element = this.get('element');
 863          
 864          if (!element) {
 865              YAHOO.log('appendTo failed: element not available',
 866                      'error', 'Element');
 867              return false;
 868          }
 869          
 870          if (!parent) {
 871              YAHOO.log('appendTo failed: parent not available',
 872                      'error', 'Element');
 873              return false;
 874          }
 875          
 876          if (element.parent != parent) {
 877              if (before) {
 878                  parent.insertBefore(element, before);
 879              } else {
 880                  parent.appendChild(element);
 881              }
 882          }
 883          
 884          YAHOO.log(element + 'appended to ' + parent);
 885          
 886          this.fireEvent('appendTo', {
 887              type: 'appendTo',
 888              target: parent
 889          });
 890  
 891          return element;
 892      },
 893      
 894      get: function(key) {
 895          var configs = this._configs || {},
 896              el = configs.element; // avoid loop due to 'element'
 897  
 898          if (el && !configs[key] && !YAHOO.lang.isUndefined(el.value[key]) ) {
 899              this._setHTMLAttrConfig(key);
 900          }
 901  
 902          return AttributeProvider.prototype.get.call(this, key);
 903      },
 904  
 905      setAttributes: function(map, silent) {
 906          // set based on configOrder
 907          var done = {},
 908              configOrder = this._configOrder;
 909  
 910          // set based on configOrder
 911          for (var i = 0, len = configOrder.length; i < len; ++i) {
 912              if (map[configOrder[i]] !== undefined) {
 913                  done[configOrder[i]] = true;
 914                  this.set(configOrder[i], map[configOrder[i]], silent);
 915              }
 916          }
 917  
 918          // unconfigured (e.g. Dom attributes)
 919          for (var att in map) {
 920              if (map.hasOwnProperty(att) && !done[att]) {
 921                  this.set(att, map[att], silent);
 922              }
 923          }
 924      },
 925  
 926      set: function(key, value, silent) {
 927          var el = this.get('element');
 928          if (!el) {
 929              this._queue[this._queue.length] = ['set', arguments];
 930              if (this._configs[key]) {
 931                  this._configs[key].value = value; // so "get" works while queueing
 932              
 933              }
 934              return;
 935          }
 936          
 937          // set it on the element if not configured and is an HTML attribute
 938          if ( !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
 939              this._setHTMLAttrConfig(key);
 940          }
 941  
 942          return AttributeProvider.prototype.set.apply(this, arguments);
 943      },
 944      
 945      setAttributeConfig: function(key, map, init) {
 946          this._configOrder.push(key);
 947          AttributeProvider.prototype.setAttributeConfig.apply(this, arguments);
 948      },
 949  
 950      createEvent: function(type, config) {
 951          this._events[type] = true;
 952          return AttributeProvider.prototype.createEvent.apply(this, arguments);
 953      },
 954      
 955      init: function(el, attr) {
 956          this._initElement(el, attr); 
 957      },
 958  
 959      destroy: function() {
 960          var el = this.get('element');
 961          YAHOO.util.Event.purgeElement(el, true); // purge DOM listeners recursively
 962          this.unsubscribeAll(); // unsubscribe all custom events
 963  
 964          if (el && el.parentNode) {
 965              el.parentNode.removeChild(el); // pull from the DOM
 966          }
 967  
 968          // revert initial configs
 969          this._queue = [];
 970          this._events = {};
 971          this._configs = {};
 972          this._configOrder = []; 
 973      },
 974  
 975      _initElement: function(el, attr) {
 976          this._queue = this._queue || [];
 977          this._events = this._events || {};
 978          this._configs = this._configs || {};
 979          this._configOrder = []; 
 980          attr = attr || {};
 981          attr.element = attr.element || el || null;
 982  
 983          var isReady = false;  // to determine when to init HTMLElement and content
 984  
 985          var DOM_EVENTS = Element.DOM_EVENTS;
 986          this.DOM_EVENTS = this.DOM_EVENTS || {};
 987  
 988          for (var event in DOM_EVENTS) {
 989              if (DOM_EVENTS.hasOwnProperty(event)) {
 990                  this.DOM_EVENTS[event] = DOM_EVENTS[event];
 991              }
 992          }
 993  
 994          if (typeof attr.element === 'string') { // register ID for get() access
 995              this._setHTMLAttrConfig('id', { value: attr.element });
 996          }
 997  
 998          if (Dom.get(attr.element)) {
 999              isReady = true;
1000              this._initHTMLElement(attr);
1001              this._initContent(attr);
1002          }
1003  
1004          YAHOO.util.Event.onAvailable(attr.element, function() {
1005              if (!isReady) { // otherwise already done
1006                  this._initHTMLElement(attr);
1007              }
1008  
1009              this.fireEvent('available', { type: 'available', target: Dom.get(attr.element) });  
1010          }, this, true);
1011          
1012          YAHOO.util.Event.onContentReady(attr.element, function() {
1013              if (!isReady) { // otherwise already done
1014                  this._initContent(attr);
1015              }
1016              this.fireEvent('contentReady', { type: 'contentReady', target: Dom.get(attr.element) });  
1017          }, this, true);
1018      },
1019  
1020      _initHTMLElement: function(attr) {
1021          /**
1022           * The HTMLElement the Element instance refers to.
1023           * @attribute element
1024           * @type HTMLElement
1025           */
1026          this.setAttributeConfig('element', {
1027              value: Dom.get(attr.element),
1028              readOnly: true
1029           });
1030      },
1031  
1032      _initContent: function(attr) {
1033          this.initAttributes(attr);
1034          this.setAttributes(attr, true);
1035          this.fireQueue();
1036  
1037      },
1038  
1039      /**
1040       * Sets the value of the property and fires beforeChange and change events.
1041       * @private
1042       * @method _setHTMLAttrConfig
1043       * @param {YAHOO.util.Element} element The Element instance to
1044       * register the config to.
1045       * @param {String} key The name of the config to register
1046       * @param {Object} map A key-value map of the config's params
1047       */
1048      _setHTMLAttrConfig: function(key, map) {
1049          var el = this.get('element');
1050          map = map || {};
1051          map.name = key;
1052  
1053          map.setter = map.setter || this.DEFAULT_HTML_SETTER;
1054          map.getter = map.getter || this.DEFAULT_HTML_GETTER;
1055  
1056          map.value = map.value || el[key];
1057          this._configs[key] = new YAHOO.util.Attribute(map, this);
1058      }
1059  };
1060  
1061  /**
1062   * Fires when the Element's HTMLElement can be retrieved by Id.
1063   * <p>See: <a href="#addListener">Element.addListener</a></p>
1064   * <p><strong>Event fields:</strong><br>
1065   * <code>&lt;String&gt; type</code> available<br>
1066   * <code>&lt;HTMLElement&gt;
1067   * target</code> the HTMLElement bound to this Element instance<br>
1068   * <p><strong>Usage:</strong><br>
1069   * <code>var handler = function(e) {var target = e.target};<br>
1070   * myTabs.addListener('available', handler);</code></p>
1071   * @event available
1072   */
1073   
1074  /**
1075   * Fires when the Element's HTMLElement subtree is rendered.
1076   * <p>See: <a href="#addListener">Element.addListener</a></p>
1077   * <p><strong>Event fields:</strong><br>
1078   * <code>&lt;String&gt; type</code> contentReady<br>
1079   * <code>&lt;HTMLElement&gt;
1080   * target</code> the HTMLElement bound to this Element instance<br>
1081   * <p><strong>Usage:</strong><br>
1082   * <code>var handler = function(e) {var target = e.target};<br>
1083   * myTabs.addListener('contentReady', handler);</code></p>
1084   * @event contentReady
1085   */
1086  
1087  /**
1088   * Fires before the Element is appended to another Element.
1089   * <p>See: <a href="#addListener">Element.addListener</a></p>
1090   * <p><strong>Event fields:</strong><br>
1091   * <code>&lt;String&gt; type</code> beforeAppendTo<br>
1092   * <code>&lt;HTMLElement/Element&gt;
1093   * target</code> the HTMLElement/Element being appended to 
1094   * <p><strong>Usage:</strong><br>
1095   * <code>var handler = function(e) {var target = e.target};<br>
1096   * myTabs.addListener('beforeAppendTo', handler);</code></p>
1097   * @event beforeAppendTo
1098   */
1099  
1100  /**
1101   * Fires after the Element is appended to another Element.
1102   * <p>See: <a href="#addListener">Element.addListener</a></p>
1103   * <p><strong>Event fields:</strong><br>
1104   * <code>&lt;String&gt; type</code> appendTo<br>
1105   * <code>&lt;HTMLElement/Element&gt;
1106   * target</code> the HTMLElement/Element being appended to 
1107   * <p><strong>Usage:</strong><br>
1108   * <code>var handler = function(e) {var target = e.target};<br>
1109   * myTabs.addListener('appendTo', handler);</code></p>
1110   * @event appendTo
1111   */
1112  
1113  YAHOO.augment(Element, AttributeProvider);
1114  YAHOO.util.Element = Element;
1115  })();
1116  
1117  YAHOO.register("element", YAHOO.util.Element, {version: "2.9.0", build: "2800"});
1118  
1119  }, '2.9.0' ,{"requires": ["yui2-yahoo", "yui2-dom", "yui2-event"], "optional": ["yui2-event-mouseenter", "yui2-event-delegate"]});


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1