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