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