API Docs for: 3.13.0
Show:

File: attribute/js/Attribute.js

  1. /**
  2. * The attribute module provides an augmentable Attribute implementation, which
  3. * adds configurable attributes and attribute change events to the class being
  4. * augmented. It also provides a State class, which is used internally by Attribute,
  5. * but can also be used independently to provide a name/property/value data structure to
  6. * store state.
  7. *
  8. * @module attribute
  9. */
  10.  
  11. /**
  12. * The attribute-base submodule provides core attribute handling support, with everything
  13. * aside from complex attribute handling in the provider's constructor.
  14. *
  15. * @module attribute
  16. * @submodule attribute-base
  17. */
  18.  
  19. /**
  20. * <p>
  21. * Attribute provides configurable attribute support along with attribute change events. It is designed to be
  22. * augmented on to a host class, and provides the host with the ability to configure attributes to store and retrieve state,
  23. * along with attribute change events.
  24. * </p>
  25. * <p>For example, attributes added to the host can be configured:</p>
  26. * <ul>
  27. * <li>As read only.</li>
  28. * <li>As write once.</li>
  29. * <li>With a setter function, which can be used to manipulate
  30. * values passed to Attribute's <a href="#method_set">set</a> method, before they are stored.</li>
  31. * <li>With a getter function, which can be used to manipulate stored values,
  32. * before they are returned by Attribute's <a href="#method_get">get</a> method.</li>
  33. * <li>With a validator function, to validate values before they are stored.</li>
  34. * </ul>
  35. *
  36. * <p>See the <a href="#method_addAttr">addAttr</a> method, for the complete set of configuration
  37. * options available for attributes.</p>
  38. *
  39. * <p><strong>NOTE:</strong> Most implementations will be better off extending the <a href="Base.html">Base</a> class,
  40. * instead of augmenting Attribute directly. Base augments Attribute and will handle the initial configuration
  41. * of attributes for derived classes, accounting for values passed into the constructor.</p>
  42. *
  43. * @class Attribute
  44. * @param attrs {Object} The attributes to add during construction (passed through to <a href="#method_addAttrs">addAttrs</a>).
  45. * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor.
  46. * @param values {Object} The initial attribute values to apply (passed through to <a href="#method_addAttrs">addAttrs</a>).
  47. * These are not merged/cloned. The caller is responsible for isolating user provided values if required.
  48. * @param lazy {boolean} Whether or not to add attributes lazily (passed through to <a href="#method_addAttrs">addAttrs</a>).
  49. * @uses AttributeCore
  50. * @uses AttributeObservable
  51. * @uses EventTarget
  52. * @uses AttributeExtras
  53. */
  54. function Attribute() {
  55. Y.AttributeCore.apply(this, arguments);
  56. Y.AttributeObservable.apply(this, arguments);
  57. Y.AttributeExtras.apply(this, arguments);
  58. }
  59.  
  60. Y.mix(Attribute, Y.AttributeCore, false, null, 1);
  61. Y.mix(Attribute, Y.AttributeExtras, false, null, 1);
  62.  
  63. // Needs to be `true`, to overwrite methods from AttributeCore
  64. Y.mix(Attribute, Y.AttributeObservable, true, null, 1);
  65.  
  66. /**
  67. * <p>The value to return from an attribute setter in order to prevent the set from going through.</p>
  68. *
  69. * <p>You can return this value from your setter if you wish to combine validator and setter
  70. * functionality into a single setter function, which either returns the massaged value to be stored or
  71. * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.</p>
  72. *
  73. * @property INVALID_VALUE
  74. * @type Object
  75. * @static
  76. * @final
  77. */
  78. Attribute.INVALID_VALUE = Y.AttributeCore.INVALID_VALUE;
  79.  
  80. /**
  81. * The list of properties which can be configured for
  82. * each attribute (e.g. setter, getter, writeOnce etc.).
  83. *
  84. * This property is used internally as a whitelist for faster
  85. * Y.mix operations.
  86. *
  87. * @property _ATTR_CFG
  88. * @type Array
  89. * @static
  90. * @protected
  91. */
  92. Attribute._ATTR_CFG = Y.AttributeCore._ATTR_CFG.concat(Y.AttributeObservable._ATTR_CFG);
  93.  
  94. /**
  95. * Utility method to protect an attribute configuration hash, by merging the
  96. * entire object and the individual attr config objects.
  97. *
  98. * @method protectAttrs
  99. * @static
  100. * @param {Object} attrs A hash of attribute to configuration object pairs.
  101. * @return {Object} A protected version of the `attrs` argument.
  102. */
  103. Attribute.protectAttrs = Y.AttributeCore.protectAttrs;
  104.  
  105. Y.Attribute = Attribute;
  106.