| /* |
| * Copyright 2011 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * @fileoverview Code for inlining low resolution critical images. |
| * This javascript is part of DelayImages filter. |
| * |
| * @author pulkitg@google.com (Pulkit Goyal) |
| */ |
| |
| // Exporting functions using quoted attributes to prevent js compiler from |
| // renaming them. |
| // See http://code.google.com/closure/compiler/docs/api-tutorial3.html#dangers |
| window['pagespeed'] = window['pagespeed'] || {}; |
| var pagespeed = window['pagespeed']; |
| |
| |
| |
| /** |
| * @constructor |
| */ |
| pagespeed.DelayImagesInline = function() { |
| /** |
| * Map of images whose low resolution image is present. |
| * @type {Object} |
| * @private |
| */ |
| this.inlineMap_ = {}; |
| }; |
| |
| |
| /** |
| * Add low res images to inlineMap_. |
| * @param {string} url of the image. |
| * @param {string} lowResImage low resolution base64 encoded image. |
| */ |
| pagespeed.DelayImagesInline.prototype.addLowResImages = |
| function(url, lowResImage) { |
| this.inlineMap_[url] = lowResImage; |
| }; |
| pagespeed.DelayImagesInline.prototype['addLowResImages'] = |
| pagespeed.DelayImagesInline.prototype.addLowResImages; |
| |
| |
| /** |
| * For given elements, replace src with low res data url by looking up |
| * data-pagespeed-high-res-src attribute value in inlineMap_ (does nothing if |
| * the latter attribute is absent). |
| * @param {!NodeList<!Element>} elements list of DOM elements to check. |
| */ |
| pagespeed.DelayImagesInline.prototype.replaceElementSrc = |
| function(elements) { |
| for (var i = 0; i < elements.length; ++i) { |
| var high_res_src = elements[i].getAttribute('data-pagespeed-high-res-src'); |
| var src = elements[i].getAttribute('src'); |
| if (high_res_src && !src) { |
| var low_res = this.inlineMap_[high_res_src]; |
| if (low_res) { |
| elements[i].setAttribute('src', low_res); |
| } |
| } |
| } |
| }; |
| pagespeed.DelayImagesInline.prototype['replaceElementSrc'] = |
| pagespeed.DelayImagesInline.prototype.replaceElementSrc; |
| |
| |
| /** |
| * Replace images with the low resolution version if available. |
| */ |
| pagespeed.DelayImagesInline.prototype.replaceWithLowRes = function() { |
| this.replaceElementSrc(document.getElementsByTagName('img')); |
| this.replaceElementSrc(document.getElementsByTagName('input')); |
| }; |
| pagespeed.DelayImagesInline.prototype['replaceWithLowRes'] = |
| pagespeed.DelayImagesInline.prototype.replaceWithLowRes; |
| |
| |
| /** |
| * Initializes the inline delay images module. |
| */ |
| pagespeed.delayImagesInlineInit = function() { |
| var temp = new pagespeed.DelayImagesInline(); |
| pagespeed['delayImagesInline'] = temp; |
| }; |
| pagespeed['delayImagesInlineInit'] = pagespeed.delayImagesInlineInit; |