src/cm/media/js/lib/yui/yui3-3.15.0/build/imageloader/imageloader.js
author gibus
Mon, 10 Mar 2014 15:19:48 +0100
changeset 602 e16a97fb364a
permissions -rw-r--r--
Use YUI 3.15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('imageloader', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * The ImageLoader Utility is a framework to dynamically load images according to certain triggers,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 * enabling faster load times and a more responsive UI.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @module imageloader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
	 * A group for images. A group can have one time limit and a series of triggers. Thus the images belonging to this group must share these constraints.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
	 * @class ImgLoadGroup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
	 * @extends Base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
	 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
	 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
	Y.ImgLoadGroup = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
		// call init first, because it sets up local vars for storing attribute-related info
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
		this._init();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
		Y.ImgLoadGroup.superclass.constructor.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
	};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
	Y.ImgLoadGroup.NAME = 'imgLoadGroup';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
	Y.ImgLoadGroup.ATTRS = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
		 * Name for the group. Only used to identify the group in logging statements.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
		 * @attribute name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
		 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
		name: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
			value: ''
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
		 * Time limit, in seconds, after which images are fetched regardless of trigger events.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
		 * @attribute timeLimit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
		 * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
		timeLimit: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
			value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
		 * Distance below the fold for which images are loaded. Images are not loaded until they are at most this distance away from (or above) the fold.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
		 * This check is performed at page load (domready) and after any window scroll or window resize event (until all images are loaded).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
		 * @attribute foldDistance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
		 * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
		foldDistance: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
			validator: Y.Lang.isNumber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
			setter: function(val) { this._setFoldTriggers(); return val; },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
			lazyAdd: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
		 * Class name that will identify images belonging to the group. This class name will be removed from each element in order to fetch images.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
		 * This class should have, in its CSS style definition, "<code>background:none !important;</code>".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
		 * @attribute className
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
		 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
		className: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
			value: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
			setter: function(name) { this._className = name; return name; },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
			lazyAdd: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
         * Determines how to act when className is used as the way to delay load images. The "default" action is to just
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
         * remove the class name. The "enhanced" action is to remove the class name and also set the src attribute if
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
         * the element is an img.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
         * @attribute classNameAction
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
         * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
        classNameAction: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
            value: "default"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
	};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
	var groupProto = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
		 * Initialize all private members needed for the group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
		 * @method _init
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
		_init: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
			 * Collection of triggers for this group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
			 * Keeps track of each trigger's event handle, as returned from <code>Y.on</code>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
			 * @property _triggers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
			 * @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
			this._triggers = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
			 * Collection of images (<code>Y.ImgLoadImgObj</code> objects) registered with this group, keyed by DOM id.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
			 * @property _imgObjs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
			 * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
			this._imgObjs = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
			 * Timeout object to keep a handle on the time limit.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
			 * @property _timeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
			 * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
			this._timeout = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
			 * DOM elements having the class name that is associated with this group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
			 * Elements are stored during the <code>_foldCheck</code> function and reused later during any subsequent <code>_foldCheck</code> calls - gives a slight performance improvement when the page fold is repeatedly checked.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
			 * @property _classImageEls
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
			 * @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
			this._classImageEls = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
			 * Keep the CSS class name in a member variable for ease and speed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
			 * @property _className
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
			 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
			this._className = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
			 * Boolean tracking whether the window scroll and window resize triggers have been set if this is a fold group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
			 * @property _areFoldTriggersSet
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
			 * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
			this._areFoldTriggersSet = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
			 * The maximum pixel height of the document that has been made visible.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
			 * During fold checks, if the user scrolls up then there's no need to check for newly exposed images.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
			 * @property _maxKnownHLimit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
			 * @type Int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
			this._maxKnownHLimit = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
			// add a listener to domready that will start the time limit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
			Y.on('domready', this._onloadTasks, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
		 * Adds a trigger to the group. Arguments are passed to <code>Y.on</code>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
		 * @method addTrigger
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
		 * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
		 * @param {Object} obj  The DOM object to attach the trigger event to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
		 * @param {String} type  The event type
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
		addTrigger: function(obj, type) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
			if (! obj || ! type) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
				return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
			/* Need to wrap the fetch function. Event Util can't distinguish prototyped functions of different instantiations.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
			 *   Leads to this scenario: groupA and groupZ both have window-scroll triggers. groupZ also has a 2-sec timeout (groupA has no timeout).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
			 *   groupZ's timeout fires; we remove the triggers. The detach call finds the first window-scroll event with Y.ILG.p.fetch, which is groupA's.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
			 *   groupA's trigger is removed and never fires, leaving images unfetched.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
			var wrappedFetch = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
				this.fetch();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
			};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
			this._triggers.push( Y.on(type, wrappedFetch, obj, this) );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
			return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
		 * Adds a custom event trigger to the group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
		 * @method addCustomTrigger
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
		 * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
		 * @param {String} name  The name of the event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
		 * @param {Object} obj  The object on which to attach the event. <code>obj</code> is optional - by default the event is attached to the <code>Y</code> instance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
		addCustomTrigger: function(name, obj) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
			if (! name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
				return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
			// see comment in addTrigger()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
			var wrappedFetch = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
				this.fetch();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
			};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
			if (Y.Lang.isUndefined(obj)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
				this._triggers.push( Y.on(name, wrappedFetch, this) );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
			else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
				this._triggers.push( obj.on(name, wrappedFetch, this) );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
			return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
		 * Sets the window scroll and window resize triggers for any group that is fold-conditional (i.e., has a fold distance set).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
		 * @method _setFoldTriggers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
		_setFoldTriggers: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
			if (this._areFoldTriggersSet) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
				return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
			var wrappedFoldCheck = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
				this._foldCheck();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
			};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
			this._triggers.push( Y.on('scroll', wrappedFoldCheck, window, this) );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
			this._triggers.push( Y.on('resize', wrappedFoldCheck, window, this) );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
			this._areFoldTriggersSet = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
		 * Performs necessary setup at domready time.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
		 * Initiates time limit for group; executes the fold check for the images.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
		 * @method _onloadTasks
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
		_onloadTasks: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
			var timeLim = this.get('timeLimit');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
			if (timeLim && timeLim > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
				this._timeout = setTimeout(this._getFetchTimeout(), timeLim * 1000);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
			if (! Y.Lang.isUndefined(this.get('foldDistance'))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
				this._foldCheck();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
		 * Returns the group's <code>fetch</code> method, with the proper closure, for use with <code>setTimeout</code>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
		 * @method _getFetchTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
		 * @return {Function}  group's <code>fetch</code> method
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
		_getFetchTimeout: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
			var self = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
			return function() { self.fetch(); };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
		 * Registers an image with the group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
		 * Arguments are passed through to a <code>Y.ImgLoadImgObj</code> constructor; see that class' attribute documentation for detailed information. "<code>domId</code>" is a required attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
		 * @method registerImage
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
		 * @param {Object} config A configuration object literal with attribute name/value pairs  (passed through to a <code>Y.ImgLoadImgObj</code> constructor)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
		 * @return {Object}  <code>Y.ImgLoadImgObj</code> that was registered
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
		registerImage: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
			var domId = arguments[0].domId;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
			if (! domId) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
				return null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
			this._imgObjs[domId] = new Y.ImgLoadImgObj(arguments[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
			return this._imgObjs[domId];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
		 * Displays the images in the group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
		 * This method is called when a trigger fires or the time limit expires; it shouldn't be called externally, but is not private in the rare event that it needs to be called immediately.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
		 * @method fetch
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
		fetch: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
			// done with the triggers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
			this._clearTriggers();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
			// fetch whatever we need to by className
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
			this._fetchByClass();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
			// fetch registered images
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
			for (var id in this._imgObjs) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
				if (this._imgObjs.hasOwnProperty(id)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
					this._imgObjs[id].fetch();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
		 * Clears the timeout and all triggers associated with the group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
		 * @method _clearTriggers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
		_clearTriggers: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
			clearTimeout(this._timeout);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
			// detach all listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
			for (var i=0, len = this._triggers.length; i < len; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
				this._triggers[i].detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
		 * Checks the position of each image in the group. If any part of the image is within the specified distance (<code>foldDistance</code>) of the client viewport, the image is fetched immediately.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
		 * @method _foldCheck
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
		_foldCheck: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
			var allFetched = true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
			    viewReg = Y.DOM.viewportRegion(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
			    hLimit = viewReg.bottom + this.get('foldDistance'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
					id, imgFetched, els, i, len;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
			// unless we've uncovered new frontiers, there's no need to continue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
			if (hLimit <= this._maxKnownHLimit) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
				return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
			this._maxKnownHLimit = hLimit;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
			for (id in this._imgObjs) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
				if (this._imgObjs.hasOwnProperty(id)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
					imgFetched = this._imgObjs[id].fetch(hLimit);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
					allFetched = allFetched && imgFetched;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
			// and by class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
			if (this._className) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
				if (this._classImageEls === null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
					// get all the relevant elements and store them
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
					this._classImageEls = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
					els = Y.all('.' + this._className);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
					els.each( function(node) { this._classImageEls.push( { el: node, y: node.getY(), fetched: false } ); }, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
				els = this._classImageEls;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
				for (i=0, len = els.length; i < len; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
					if (els[i].fetched) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
						continue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
					if (els[i].y && els[i].y <= hLimit) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
						//els[i].el.removeClass(this._className);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
						this._updateNodeClassName(els[i].el);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
                        els[i].fetched = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
					else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
						allFetched = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
			// if allFetched, remove listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
			if (allFetched) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
				this._clearTriggers();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
         * Updates a given node, removing the ImageLoader class name. If the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
         * node is an img and the classNameAction is "enhanced", then node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
         * class name is removed and also the src attribute is set to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
         * image URL as well as clearing the style background image.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
         * @method _updateNodeClassName
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
         * @param node {Node} The node to act on.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
        _updateNodeClassName: function(node){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
            var url;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
            if (this.get("classNameAction") == "enhanced"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
                if (node.get("tagName").toLowerCase() == "img"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
                    url = node.getStyle("backgroundImage");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
                    /url\(["']?(.*?)["']?\)/.test(url);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
                    url = RegExp.$1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
                    node.set("src", url);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
                    node.setStyle("backgroundImage", "");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
            node.removeClass(this._className);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
		 * Finds all elements in the DOM with the class name specified in the group. Removes the class from the element in order to let the style definitions trigger the image fetching.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
		 * @method _fetchByClass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
		_fetchByClass: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
			if (! this._className) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
				return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
			Y.all('.' + this._className).each(Y.bind(this._updateNodeClassName, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
	};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
	Y.extend(Y.ImgLoadGroup, Y.Base, groupProto);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
	//------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
	 * Image objects to be registered with the groups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
	 * @class ImgLoadImgObj
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
	 * @extends Base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
	 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
	 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
	Y.ImgLoadImgObj = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
		Y.ImgLoadImgObj.superclass.constructor.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
		this._init();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
	};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
	Y.ImgLoadImgObj.NAME = 'imgLoadImgObj';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
	Y.ImgLoadImgObj.ATTRS = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
		 * HTML DOM id of the image element.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
		 * @attribute domId
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
		 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
		domId: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
			value: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
			writeOnce: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
		 * Background URL for the image.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
		 * For an image whose URL is specified by "<code>background-image</code>" in the element's style.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
		 * @attribute bgUrl
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
		 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
		bgUrl: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
			value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
		 * Source URL for the image.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
		 * For an image whose URL is specified by a "<code>src</code>" attribute in the DOM element.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
		 * @attribute srcUrl
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
		 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
		srcUrl: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
			value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
		 * Pixel width of the image. Will be set as a <code>width</code> attribute on the DOM element after the image is fetched.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
		 * Defaults to the natural width of the image (no <code>width</code> attribute will be set).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
		 * Usually only used with src images.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
		 * @attribute width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
		 * @type Int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
		width: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
			value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
		 * Pixel height of the image. Will be set as a <code>height</code> attribute on the DOM element after the image is fetched.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
		 * Defaults to the natural height of the image (no <code>height</code> attribute will be set).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
		 * Usually only used with src images.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
		 * @attribute height
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
		 * @type Int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
		height: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
			value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
		 * Whether the image's <code>style.visibility</code> should be set to <code>visible</code> after the image is fetched.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
		 * Used when setting images as <code>visibility:hidden</code> prior to image fetching.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
		 * @attribute setVisible
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
		 * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
		setVisible: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
			value: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
		 * Whether the image is a PNG.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
		 * PNG images get special treatment in that the URL is specified through AlphaImageLoader for IE, versions 6 and earlier.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
		 * Only used with background images.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
		 * @attribute isPng
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
		 * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
		isPng: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
			value: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
		 * AlphaImageLoader <code>sizingMethod</code> property to be set for the image.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
		 * Only set if <code>isPng</code> value for this image is set to <code>true</code>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
		 * Defaults to <code>scale</code>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
		 * @attribute sizingMethod
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
		 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
		sizingMethod: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
			value: 'scale'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
		 * AlphaImageLoader <code>enabled</code> property to be set for the image.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
		 * Only set if <code>isPng</code> value for this image is set to <code>true</code>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
		 * Defaults to <code>true</code>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
		 * @attribute enabled
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
		 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
		enabled: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
			value: 'true'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
	};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
	var imgProto = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
		 * Initialize all private members needed for the group.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
		 * @method _init
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
		_init: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
			 * Whether this image has already been fetched.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
			 * In the case of fold-conditional groups, images won't be fetched twice.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
			 * @property _fetched
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
			 * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
			this._fetched = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
			 * The Node object returned from <code>Y.one</code>, to avoid repeat calls to access the DOM.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
			 * @property _imgEl
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
			 * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
			this._imgEl = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
			/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
			 * The vertical position returned from <code>getY</code>, to avoid repeat calls to access the DOM.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
			 * The Y position is checked only for images registered with fold-conditional groups. The position is checked first at page load (domready)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
			 *   and this caching enhancement assumes that the image's vertical position won't change after that first check.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
			 * @property _yPos
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
			 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
			 * @type Int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
			 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
			this._yPos = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
		 * Displays the image; puts the URL into the DOM.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
		 * This method shouldn't be called externally, but is not private in the rare event that it needs to be called immediately.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
		 * @method fetch
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
		 * @param {Number} withinY  The pixel distance from the top of the page, for which if the image lies within, it will be fetched. Undefined indicates that no check should be made, and the image should always be fetched
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
		 * @return {Boolean}  Whether the image has been fetched (either during this execution or previously)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
		fetch: function(withinY) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
			if (this._fetched) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
				return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
			var el = this._getImgEl(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
			    yPos;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
			if (! el) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
				return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
			if (withinY) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
				// need a distance check
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
				yPos = this._getYPos();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
				if (! yPos || yPos > withinY) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
					return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
			// apply url
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
			if (this.get('bgUrl') !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
				// bg url
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
				if (this.get('isPng') && Y.UA.ie && Y.UA.ie <= 6) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
					// png for which to apply AlphaImageLoader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
					el.setStyle('filter', 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + this.get('bgUrl') + '", sizingMethod="' + this.get('sizingMethod') + '", enabled="' + this.get('enabled') + '")');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
				else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
					// regular bg image
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
					el.setStyle('backgroundImage', "url('" + this.get('bgUrl') + "')");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
			else if (this.get('srcUrl') !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
				// regular src image
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
				el.setAttribute('src', this.get('srcUrl'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
			// apply attributes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
			if (this.get('setVisible')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
				el.setStyle('visibility', 'visible');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
			if (this.get('width')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
				el.setAttribute('width', this.get('width'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
			if (this.get('height')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
				el.setAttribute('height', this.get('height'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
			this._fetched = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
			return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
		 * Gets the object (as a <code>Y.Node</code>) of the DOM element indicated by "<code>domId</code>".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
		 * @method _getImgEl
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
		 * @return {Object} DOM element of the image as a <code>Y.Node</code> object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
		_getImgEl: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
			if (this._imgEl === null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
				this._imgEl = Y.one('#' + this.get('domId'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
			return this._imgEl;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
		},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
		/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
		 * Gets the Y position of the node in page coordinates.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
		 * Expects that the page-coordinate position of the image won't change.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
		 * @method _getYPos
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
		 * @return {Object} The Y position of the image
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
		 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
		 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
		_getYPos: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
			if (this._yPos === null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
				this._yPos = this._getImgEl().getY();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
			return this._yPos;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
	};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
	Y.extend(Y.ImgLoadImgObj, Y.Base, imgProto);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
}, '@VERSION@', {"requires": ["base-base", "node-style", "node-screen"]});