| Index: third_party/document_image_extractor/third_party/src/dom_controller.js
|
| diff --git a/third_party/document_image_extractor/third_party/src/dom_controller.js b/third_party/document_image_extractor/third_party/src/dom_controller.js
|
| deleted file mode 100644
|
| index 97dd3cf8b80526cd62dcd85b7ad672848ae44313..0000000000000000000000000000000000000000
|
| --- a/third_party/document_image_extractor/third_party/src/dom_controller.js
|
| +++ /dev/null
|
| @@ -1,264 +0,0 @@
|
| -goog.provide('image.collections.extension.DomController');
|
| -
|
| -goog.require('goog.Timer');
|
| -goog.require('goog.array');
|
| -goog.require('goog.dom');
|
| -goog.require('goog.events.EventType');
|
| -goog.require('goog.log');
|
| -goog.require('gws.collections.common.Constants');
|
| -goog.require('image.collections.extension.Controller');
|
| -goog.require('image.collections.extension.DocumentImage');
|
| -goog.require('image.collections.extension.DocumentVideo');
|
| -goog.require('image.collections.extension.DomEvent');
|
| -
|
| -goog.scope(function() {
|
| -var Constants = gws.collections.common.Constants;
|
| -var DocumentImage = image.collections.extension.DocumentImage;
|
| -var DocumentVideo = image.collections.extension.DocumentVideo;
|
| -var DomEvent = image.collections.extension.DomEvent;
|
| -
|
| -
|
| -/**
|
| - * This class handles page DOM events and implements DOM manipulation.
|
| - * It should be instantiated by a content script.
|
| - * TODO(busaryev): preloading may not be the best choice for mobile clients.
|
| - * @extends {image.collections.extension.Controller}
|
| - * @constructor
|
| - */
|
| -image.collections.extension.DomController = function() {
|
| - DomController.base(this, 'constructor');
|
| -
|
| - /** @private {number} Number of DOM elements left. */
|
| - this.numElementsToProcess_ = 0;
|
| -
|
| - /** @private {number} The timeout id for goog.Timer.callOnce. */
|
| - this.timeoutId_ = -1;
|
| -};
|
| -goog.inherits(image.collections.extension.DomController,
|
| - image.collections.extension.Controller);
|
| -var DomController = image.collections.extension.DomController;
|
| -
|
| -
|
| -/** @private {goog.log.Logger} */
|
| -DomController.logger_ = goog.log.getLogger(
|
| - 'image.collections.extension.DomController');
|
| -
|
| -
|
| -/**
|
| - * @private {number} The number of milliseconds to wait for the load
|
| - * event to occur before giving up. This ensures we are not wasting too much
|
| - * time trying to get the clip.
|
| - */
|
| -DomController.LOAD_TIMEOUT_MS_ = 5000;
|
| -
|
| -
|
| -/** @override */
|
| -DomController.prototype.initialize = function(parentEventTarget) {
|
| - DomController.base(this, 'initialize', parentEventTarget);
|
| -
|
| - this.eventHandler.
|
| - listen(parentEventTarget, DomEvent.Type.INITIALIZE_DOM,
|
| - this.handleInitializeDom_);
|
| -};
|
| -
|
| -
|
| -/**
|
| - * @param {DomEvent} e
|
| - * @private
|
| - */
|
| -DomController.prototype.handleInitializeDom_ = function(e) {
|
| - if (this.numElementsToProcess_ == 0) {
|
| - // Find <meta> and <link> tags that specify canonical page images, compute
|
| - // image sizes with preloading and store them in element attributes.
|
| - var doc = goog.dom.getDocument();
|
| - var metaElements = doc.getElementsByTagName('meta');
|
| - var linkElements = doc.getElementsByTagName('link');
|
| - this.numElementsToProcess_ = metaElements.length + linkElements.length;
|
| - if (this.numElementsToProcess_ > 0) {
|
| - goog.array.forEach(metaElements, this.processMetaElement_, this);
|
| - goog.array.forEach(linkElements, this.processLinkElement_, this);
|
| - this.timeoutId_ = goog.Timer.callOnce(
|
| - goog.bind(this.dispatchEvent, this, DomEvent.Type.DOM_INITIALIZED),
|
| - DomController.LOAD_TIMEOUT_MS_);
|
| - } else {
|
| - this.dispatchEvent(DomEvent.Type.DOM_INITIALIZED);
|
| - }
|
| - }
|
| -};
|
| -
|
| -
|
| -/**
|
| - * Tries to compute the size of the image specified in a <meta> element.
|
| - * @param {Element} element The element to process.
|
| - * @param {number} index Index of the element in the array.
|
| - * @param {goog.array.ArrayLike} array The array.
|
| - * @private
|
| - */
|
| -DomController.prototype.processMetaElement_ = function(element, index, array) {
|
| - var url = '';
|
| - if (element.hasAttribute('property')) {
|
| - switch (element.getAttribute('property').toLowerCase()) {
|
| - case 'og:image':
|
| - url = element.getAttribute('content');
|
| - var siblings = goog.dom.getChildren(goog.dom.getParentElement(element));
|
| - var width = this.getPropertyContent_(siblings, 'og:image:width');
|
| - var height = this.getPropertyContent_(siblings, 'og:image:height');
|
| - if (width > 0 && height > 0) {
|
| - element.setAttribute(DocumentImage.CustomAttribute.WIDTH, width);
|
| - element.setAttribute(DocumentImage.CustomAttribute.HEIGHT, height);
|
| - }
|
| - break;
|
| - case 'og:video':
|
| - var children = goog.dom.getChildren(goog.dom.getParentElement(element));
|
| - var width = this.getPropertyContent_(children, 'og:video:width');
|
| - var height = this.getPropertyContent_(children, 'og:video:height');
|
| - if (width > 0 && height > 0) {
|
| - element.setAttribute(DocumentVideo.CustomAttribute.WIDTH, width);
|
| - element.setAttribute(DocumentVideo.CustomAttribute.HEIGHT, height);
|
| - }
|
| - }
|
| - } else if (element.hasAttribute('name')) {
|
| - switch (element.getAttribute('name').toLowerCase()) {
|
| - case 'msapplication-tileimage':
|
| - case 'twitter:image':
|
| - url = element.getAttribute('content');
|
| - }
|
| - } else if (element.hasAttribute('itemprop')) {
|
| - switch (element.getAttribute('itemprop').toLowerCase()) {
|
| - case 'thumbnailurl':
|
| - url = element.getAttribute('href') ||
|
| - element.getAttribute('content');
|
| - }
|
| - }
|
| - this.maybeComputeAndStoreImageSize_(url, element);
|
| -};
|
| -
|
| -
|
| -/**
|
| - * Tries to compute the size of the image specified in a <link> element.
|
| - * @param {Element} element The element to process.
|
| - * @param {number} index Index of the element in the array.
|
| - * @param {goog.array.ArrayLike} array The array.
|
| - * @private
|
| - */
|
| -DomController.prototype.processLinkElement_ = function(element, index, array) {
|
| - var url = '';
|
| - if (element.hasAttribute('rel')) {
|
| - switch (element.getAttribute('rel').toLowerCase()) {
|
| - case 'apple-touch-icon-precomposed':
|
| - case 'apple-touch-icon':
|
| - case 'image_src':
|
| - url = element.getAttribute('href');
|
| - }
|
| - } else if (element.hasAttribute('itemprop')) {
|
| - switch (element.getAttribute('itemprop').toLowerCase()) {
|
| - case 'thumbnailurl':
|
| - url = element.getAttribute('href') ||
|
| - element.getAttribute('content');
|
| - }
|
| - }
|
| - this.maybeComputeAndStoreImageSize_(url, element);
|
| -};
|
| -
|
| -
|
| -/**
|
| - * Given a node list, tries to find an element with a 'property' attribute
|
| - * set to a given value and returns the value of its 'content' attribute.
|
| - * @param {Array|NodeList} elements Node list.
|
| - * @param {string} property Expected property value.
|
| - * @return {string}
|
| - * @private
|
| - */
|
| -DomController.prototype.getPropertyContent_ = function(elements, property) {
|
| - for (var i = 0; i < elements.length; ++i) {
|
| - var element = elements[i];
|
| - if (element.hasAttribute('property') &&
|
| - element.getAttribute('property').toLowerCase() == property &&
|
| - element.hasAttribute('content')) {
|
| - return element.getAttribute('content');
|
| - }
|
| - }
|
| - return '';
|
| -};
|
| -
|
| -
|
| -/**
|
| - * Tries to store the size of the element image in custom element tags.
|
| - * @param {string} url Image url (empty if the element defines no image).
|
| - * @param {!Element} element Element.
|
| - * @private
|
| - */
|
| -DomController.prototype.maybeComputeAndStoreImageSize_ = function(
|
| - url, element) {
|
| - var CustomAttribute = DocumentImage.CustomAttribute;
|
| - if (url && (!element.hasAttribute(CustomAttribute.WIDTH) ||
|
| - !element.hasAttribute(CustomAttribute.HEIGHT))) {
|
| - this.computeImageSize_(url, goog.bind(this.storeImageSize_, this, element));
|
| - } else {
|
| - this.maybeDispatchDomInitialized_();
|
| - }
|
| -};
|
| -
|
| -
|
| -/**
|
| - * Computes the image size with preloading and returns it via a callback.
|
| - * @param {string} url Image url.
|
| - * @param {!function(number, number)} callback A callback.
|
| - * @private
|
| - */
|
| -DomController.prototype.computeImageSize_ = function(url, callback) {
|
| - var image = new Image();
|
| - this.eventHandler.listenOnce(image,
|
| - [goog.events.EventType.LOAD, goog.events.EventType.ERROR],
|
| - goog.bind(this.handleImageLoadOrError_, this, callback));
|
| - image.src = url;
|
| -};
|
| -
|
| -
|
| -/**
|
| - * Handles image LOAD and ERROR events.
|
| - * @param {!function(number, number)} callback A callback.
|
| - * @param {goog.events.Event} e Image event.
|
| - * @private
|
| - */
|
| -DomController.prototype.handleImageLoadOrError_ = function(callback, e) {
|
| - var image = /** @type {!Image} */ (e.target);
|
| - if (e.type == goog.events.EventType.LOAD) {
|
| - callback(image.naturalWidth, image.naturalHeight);
|
| - } else {
|
| - goog.log.warning(DomController.logger_,
|
| - 'Failed to load image ' + image.src);
|
| - }
|
| - this.maybeDispatchDomInitialized_();
|
| -};
|
| -
|
| -
|
| -/**
|
| - * Dispatches the DOM_INITIALIZED event if all elements have been processed.
|
| - * @private
|
| - */
|
| -DomController.prototype.maybeDispatchDomInitialized_ = function() {
|
| - if (--this.numElementsToProcess_ == 0) {
|
| - if (this.timeoutId_ != -1) {
|
| - goog.Timer.clear(this.timeoutId_);
|
| - this.timeoutId_ = -1;
|
| - }
|
| - this.dispatchEvent(DomEvent.Type.DOM_INITIALIZED);
|
| - }
|
| -};
|
| -
|
| -
|
| -/**
|
| - * Stores the image size in custom element attributes.
|
| - * @param {!Element} element An element defining the image url.
|
| - * @param {number} width Image width.
|
| - * @param {number} height Image height.
|
| - * @private
|
| - */
|
| -DomController.prototype.storeImageSize_ = function(element, width, height) {
|
| - var CustomAttribute = DocumentImage.CustomAttribute;
|
| - element.setAttribute(CustomAttribute.WIDTH, width);
|
| - element.setAttribute(CustomAttribute.HEIGHT, height);
|
| -};
|
| -
|
| -}); // goog.scope
|
|
|