15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('print_preview', function() { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'use strict'; 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Draggable control for setting a page margin. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!print_preview.ticket_items.CustomMargins.Orientation} orientation 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Orientation of the margin control that determines where the margin 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * textbox will be placed. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {print_preview.Component} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function MarginControl(orientation) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_preview.Component.call(this); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Determines where the margin textbox will be placed. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!print_preview.ticket_items.CustomMargins.Orientation} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.orientation_ = orientation; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Position of the margin control in points. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {number} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.positionInPts_ = 0; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Page size of the document to print. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!print_preview.Size} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pageSize_ = new print_preview.Size(0, 0); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Amount to scale pixel values by to convert to pixel space. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {number} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.scaleTransform_ = 1; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Amount to translate values in pixel space. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!print_preview.Coordinate2d} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.translateTransform_ = new print_preview.Coordinate2d(0, 0); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Position of the margin control when dragging starts. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {print_preview.Coordinate2d} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.marginStartPositionInPixels_ = null; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Position of the mouse when the dragging starts. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {print_preview.Coordinate2d} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.mouseStartPositionInPixels_ = null; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Processing timeout for the textbox. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {?number} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textTimeout_ = null; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Textbox used to display and receive the value of the margin. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {HTMLInputElement} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textbox_ = null; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Element of the margin control line. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {HTMLElement} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.marginLineEl_ = null; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether this margin control's textbox has keyboard focus. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.isFocused_ = false; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether the margin control is in an error state. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.isInError_ = false; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Event types dispatched by the margin control. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @enum {string} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.EventType = { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dispatched when the margin control starts dragging. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DRAG_START: 'print_preview.MarginControl.DRAG_START', 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dispatched when the text in the margin control's textbox changes. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEXT_CHANGE: 'print_preview.MarginControl.TEXT_CHANGE' 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * CSS classes used by this component. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @enum {string} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.Classes_ = { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEXTBOX: 'margin-control-textbox', 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DRAGGING: 'margin-control-dragging', 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINE: 'margin-control-line' 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Radius of the margin control in pixels. Padding of control + 1 for border. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {number} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.RADIUS_ = 9; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Timeout after a text change after which the text in the textbox is saved to 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the print ticket. Value in milliseconds. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {number} 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.TEXTBOX_TIMEOUT_ = 1000; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.prototype = { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: print_preview.Component.prototype, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @return {boolean} Whether this margin control is in focus. */ 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getIsFocused: function() { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.isFocused_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {!print_preview.ticket_items.CustomMargins.Orientation} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Orientation of the margin control. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getOrientation: function() { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.orientation_; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {number} scaleTransform New scale transform of the margin control. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setScaleTransform: function(scaleTransform) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.scaleTransform_ = scaleTransform; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset position 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setPositionInPts(this.positionInPts_); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!print_preview.Coordinate2d} translateTransform New translate 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * transform of the margin control. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setTranslateTransform: function(translateTransform) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.translateTransform_ = translateTransform; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset position 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setPositionInPts(this.positionInPts_); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!print_preview.Size} pageSize New size of the document's pages. 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setPageSize: function(pageSize) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pageSize_ = pageSize; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setPositionInPts(this.positionInPts_); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @param {boolean} isVisible Whether the margin control is visible. */ 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setIsVisible: function(isVisible) { 18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.getElement().classList.toggle('invisible', !isVisible); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @return {boolean} Whether the margin control is in an error state. */ 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getIsInError: function() { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.isInError_; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} isInError Whether the margin control is in an error 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * state. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setIsInError: function(isInError) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.isInError_ = isInError; 20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.textbox_.classList.toggle('invalid', isInError); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @param {boolean} isEnabled Whether to enable the margin control. */ 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setIsEnabled: function(isEnabled) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textbox_.disabled = !isEnabled; 20946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.getElement().classList.toggle('margin-control-disabled', !isEnabled); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @return {number} Current position of the margin control in points. */ 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getPositionInPts: function() { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.positionInPts_; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {number} posInPts New position of the margin control in points. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setPositionInPts: function(posInPts) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.positionInPts_ = posInPts; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var orientationEnum = 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_preview.ticket_items.CustomMargins.Orientation; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var x = this.translateTransform_.x; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var y = this.translateTransform_.y; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var width = null, height = null; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.orientation_ == orientationEnum.TOP) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) y = this.scaleTransform_ * posInPts + this.translateTransform_.y - 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.RADIUS_; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width = this.scaleTransform_ * this.pageSize_.width; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (this.orientation_ == orientationEnum.RIGHT) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) x = this.scaleTransform_ * (this.pageSize_.width - posInPts) + 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.translateTransform_.x - MarginControl.RADIUS_; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) height = this.scaleTransform_ * this.pageSize_.height; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (this.orientation_ == orientationEnum.BOTTOM) { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) y = this.scaleTransform_ * (this.pageSize_.height - posInPts) + 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.translateTransform_.y - MarginControl.RADIUS_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width = this.scaleTransform_ * this.pageSize_.width; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) x = this.scaleTransform_ * posInPts + this.translateTransform_.x - 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.RADIUS_; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) height = this.scaleTransform_ * this.pageSize_.height; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.getElement().style.left = Math.round(x) + 'px'; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.getElement().style.top = Math.round(y) + 'px'; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (width != null) { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.getElement().style.width = Math.round(width) + 'px'; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (height != null) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.getElement().style.height = Math.round(height) + 'px'; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @return {string} The value in the margin control's textbox. */ 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getTextboxValue: function() { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.textbox_.value; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @param {string} value New value of the margin control's textbox. */ 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setTextboxValue: function(value) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.textbox_.value != value) { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textbox_.value = value; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Converts a value in pixels to points. 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {number} pixels Pixel value to convert. 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {number} Given value expressed in points. 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) convertPixelsToPts: function(pixels) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pts; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var orientationEnum = 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_preview.ticket_items.CustomMargins.Orientation; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.orientation_ == orientationEnum.TOP) { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts = pixels - this.translateTransform_.y + MarginControl.RADIUS_; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts /= this.scaleTransform_; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (this.orientation_ == orientationEnum.RIGHT) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts = pixels - this.translateTransform_.x + MarginControl.RADIUS_; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts /= this.scaleTransform_; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts = this.pageSize_.width - pts; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (this.orientation_ == orientationEnum.BOTTOM) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts = pixels - this.translateTransform_.y + MarginControl.RADIUS_; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts /= this.scaleTransform_; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts = this.pageSize_.height - pts; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts = pixels - this.translateTransform_.x + MarginControl.RADIUS_; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pts /= this.scaleTransform_; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pts; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Translates the position of the margin control relative to the mouse 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * position in pixels. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!print_preview.Coordinate2d} mousePosition New position of 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the mouse. 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {!print_preview.Coordinate2d} New position of the margin control. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) translateMouseToPositionInPixels: function(mousePosition) { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new print_preview.Coordinate2d( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mousePosition.x - this.mouseStartPositionInPixels_.x + 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.marginStartPositionInPixels_.x, 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mousePosition.y - this.mouseStartPositionInPixels_.y + 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.marginStartPositionInPixels_.y); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @override */ 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createDom: function() { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setElementInternal(this.cloneTemplateInternal( 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'margin-control-template')); 31246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.getElement().classList.add('margin-control-' + this.orientation_); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textbox_ = this.getElement().getElementsByClassName( 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.Classes_.TEXTBOX)[0]; 31546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.textbox_.setAttribute( 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'aria-label', loadTimeData.getString(this.orientation_)); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.marginLineEl_ = this.getElement().getElementsByClassName( 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl.Classes_.LINE)[0]; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @override */ 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enterDocument: function() { 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_preview.Component.prototype.enterDocument.call(this); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tracker.add( 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.getElement(), 'mousedown', this.onMouseDown_.bind(this)); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tracker.add( 32746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.getElement(), 32846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 'webkitTransitionEnd', 32946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.onWebkitTransitionEnd_.bind(this)); 33046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.tracker.add( 33146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.textbox_, 'input', this.onTextboxInput_.bind(this)); 33246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.tracker.add( 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textbox_, 'keydown', this.onTextboxKeyDown_.bind(this)); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tracker.add( 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textbox_, 'focus', this.setIsFocused_.bind(this, true)); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tracker.add(this.textbox_, 'blur', this.onTexboxBlur_.bind(this)); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @override */ 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exitDocument: function() { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_preview.Component.prototype.exitDocument.call(this); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textbox_ = null; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.marginLineEl_ = null; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} isFocused Whether the margin control is in focus. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setIsFocused_: function(isFocused) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.isFocused_ = isFocused; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called whenever a mousedown event occurs on the component. 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {MouseEvent} event The event that occured. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onMouseDown_: function(event) { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.textbox_.disabled && 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.button == 0 && 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (event.target == this.getElement() || 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.target == this.marginLineEl_)) { 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.mouseStartPositionInPixels_ = 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new print_preview.Coordinate2d(event.x, event.y); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.marginStartPositionInPixels_ = new print_preview.Coordinate2d( 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.getElement().offsetLeft, this.getElement().offsetTop); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setIsInError(false); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.dispatchSimpleEvent(this, MarginControl.EventType.DRAG_START); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 37446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * Called when opacity CSS transition ends. 37546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @private 37646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) */ 37746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) onWebkitTransitionEnd_: function(event) { 37846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (event.propertyName != 'opacity') 37946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return; 38046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) var elStyle = window.getComputedStyle(this.getElement()); 38146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) var opacity = parseInt(elStyle.getPropertyValue('opacity')); 38246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.textbox_.setAttribute('aria-hidden', opacity == 0); 38346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }, 38446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 38546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /** 38646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * Called when textbox content changes. Starts text change timeout. 38746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @private 38846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) */ 38946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) onTextboxInput_: function(event) { 39046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (this.textTimeout_) { 39146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) clearTimeout(this.textTimeout_); 39246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.textTimeout_ = null; 39346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 39446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.textTimeout_ = setTimeout( 39546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this.onTextboxTimeout_.bind(this), MarginControl.TEXTBOX_TIMEOUT_); 39646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }, 39746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 39846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /** 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when a key down event occurs on the textbox. Dispatches a 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TEXT_CHANGE event if the "Enter" key was pressed. 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} event Contains the key that was pressed. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onTextboxKeyDown_: function(event) { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.textTimeout_) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clearTimeout(this.textTimeout_); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textTimeout_ = null; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (event.keyCode == 13 /*enter*/) { 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.dispatchSimpleEvent(this, MarginControl.EventType.TEXT_CHANGE); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called after a timeout after the text in the textbox has changed. Saves 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the textbox's value to the print ticket. 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onTextboxTimeout_: function() { 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textTimeout_ = null; 42146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cr.dispatchSimpleEvent(this, MarginControl.EventType.TEXT_CHANGE); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when the textbox loses focus. Dispatches a TEXT_CHANGE event. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onTexboxBlur_: function() { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.textTimeout_) { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clearTimeout(this.textTimeout_); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textTimeout_ = null; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setIsFocused_(false); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.dispatchSimpleEvent(this, MarginControl.EventType.TEXT_CHANGE); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Export 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return { 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MarginControl: MarginControl 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 442