Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5859)

Unified Diff: chrome/browser/resources/md_history/app.crisper.js

Issue 2371383003: MD Downloads/History: make javascript uglier and more compact (Closed)
Patch Set: merge Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/md_history/app.crisper.js
diff --git a/chrome/browser/resources/md_history/app.crisper.js b/chrome/browser/resources/md_history/app.crisper.js
index 7f6560e203ad383ad576741be859fbea950472b6..cce7210a81fc6142afea7bfac6b981cea9d3b289 100644
--- a/chrome/browser/resources/md_history/app.crisper.js
+++ b/chrome/browser/resources/md_history/app.crisper.js
@@ -1,5527 +1,86 @@
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-function PromiseResolver() {
- this.resolve_;
- this.reject_;
- this.promise_ = new Promise(function(resolve, reject) {
- this.resolve_ = resolve;
- this.reject_ = reject;
- }.bind(this));
-}
-
-PromiseResolver.prototype = {
- get promise() {
- return this.promise_;
- },
- set promise(p) {
- assertNotReached();
- },
- get resolve() {
- return this.resolve_;
- },
- set resolve(r) {
- assertNotReached();
- },
- get reject() {
- return this.reject_;
- },
- set reject(s) {
- assertNotReached();
- }
-};
-
+function PromiseResolver(){this.resolve_;this.reject_;this.promise_=new Promise(function(resolve,reject){this.resolve_=resolve;this.reject_=reject}.bind(this))}PromiseResolver.prototype={get promise(){return this.promise_},set promise(p){assertNotReached()},get resolve(){return this.resolve_},set resolve(r){assertNotReached()},get reject(){return this.reject_},set reject(s){assertNotReached()}};
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-var global = this;
-
-var WebUIListener;
-
-var cr = cr || function() {
- 'use strict';
- function exportPath(name, opt_object, opt_objectToExportTo) {
- var parts = name.split('.');
- var cur = opt_objectToExportTo || global;
- for (var part; parts.length && (part = parts.shift()); ) {
- if (!parts.length && opt_object !== undefined) {
- cur[part] = opt_object;
- } else if (part in cur) {
- cur = cur[part];
- } else {
- cur = cur[part] = {};
- }
- }
- return cur;
- }
- function dispatchPropertyChange(target, propertyName, newValue, oldValue) {
- var e = new Event(propertyName + 'Change');
- e.propertyName = propertyName;
- e.newValue = newValue;
- e.oldValue = oldValue;
- target.dispatchEvent(e);
- }
- function getAttributeName(jsName) {
- return jsName.replace(/([A-Z])/g, '-$1').toLowerCase();
- }
- var PropertyKind = {
- JS: 'js',
- ATTR: 'attr',
- BOOL_ATTR: 'boolAttr'
- };
- function getGetter(name, kind) {
- switch (kind) {
- case PropertyKind.JS:
- var privateName = name + '_';
- return function() {
- return this[privateName];
- };
-
- case PropertyKind.ATTR:
- var attributeName = getAttributeName(name);
- return function() {
- return this.getAttribute(attributeName);
- };
-
- case PropertyKind.BOOL_ATTR:
- var attributeName = getAttributeName(name);
- return function() {
- return this.hasAttribute(attributeName);
- };
- }
- throw 'not reached';
- }
- function getSetter(name, kind, opt_setHook) {
- switch (kind) {
- case PropertyKind.JS:
- var privateName = name + '_';
- return function(value) {
- var oldValue = this[name];
- if (value !== oldValue) {
- this[privateName] = value;
- if (opt_setHook) opt_setHook.call(this, value, oldValue);
- dispatchPropertyChange(this, name, value, oldValue);
- }
- };
-
- case PropertyKind.ATTR:
- var attributeName = getAttributeName(name);
- return function(value) {
- var oldValue = this[name];
- if (value !== oldValue) {
- if (value == undefined) this.removeAttribute(attributeName); else this.setAttribute(attributeName, value);
- if (opt_setHook) opt_setHook.call(this, value, oldValue);
- dispatchPropertyChange(this, name, value, oldValue);
- }
- };
-
- case PropertyKind.BOOL_ATTR:
- var attributeName = getAttributeName(name);
- return function(value) {
- var oldValue = this[name];
- if (value !== oldValue) {
- if (value) this.setAttribute(attributeName, name); else this.removeAttribute(attributeName);
- if (opt_setHook) opt_setHook.call(this, value, oldValue);
- dispatchPropertyChange(this, name, value, oldValue);
- }
- };
- }
- throw 'not reached';
- }
- function defineProperty(obj, name, opt_kind, opt_setHook) {
- if (typeof obj == 'function') obj = obj.prototype;
- var kind = opt_kind || PropertyKind.JS;
- if (!obj.__lookupGetter__(name)) obj.__defineGetter__(name, getGetter(name, kind));
- if (!obj.__lookupSetter__(name)) obj.__defineSetter__(name, getSetter(name, kind, opt_setHook));
- }
- var uidCounter = 1;
- function createUid() {
- return uidCounter++;
- }
- function getUid(item) {
- if (item.hasOwnProperty('uid')) return item.uid;
- return item.uid = createUid();
- }
- function dispatchSimpleEvent(target, type, opt_bubbles, opt_cancelable) {
- var e = new Event(type, {
- bubbles: opt_bubbles,
- cancelable: opt_cancelable === undefined || opt_cancelable
- });
- return target.dispatchEvent(e);
- }
- function define(name, fun) {
- var obj = exportPath(name);
- var exports = fun();
- for (var propertyName in exports) {
- var propertyDescriptor = Object.getOwnPropertyDescriptor(exports, propertyName);
- if (propertyDescriptor) Object.defineProperty(obj, propertyName, propertyDescriptor);
- }
- }
- function addSingletonGetter(ctor) {
- ctor.getInstance = function() {
- return ctor.instance_ || (ctor.instance_ = new ctor());
- };
- }
- function makePublic(ctor, methods, opt_target) {
- methods.forEach(function(method) {
- ctor[method] = function() {
- var target = opt_target ? document.getElementById(opt_target) : ctor.getInstance();
- return target[method + '_'].apply(target, arguments);
- };
- });
- }
- var chromeSendResolverMap = {};
- function webUIResponse(id, isSuccess, response) {
- var resolver = chromeSendResolverMap[id];
- delete chromeSendResolverMap[id];
- if (isSuccess) resolver.resolve(response); else resolver.reject(response);
- }
- function sendWithPromise(methodName, var_args) {
- var args = Array.prototype.slice.call(arguments, 1);
- var promiseResolver = new PromiseResolver();
- var id = methodName + '_' + createUid();
- chromeSendResolverMap[id] = promiseResolver;
- chrome.send(methodName, [ id ].concat(args));
- return promiseResolver.promise;
- }
- var webUIListenerMap = {};
- function webUIListenerCallback(event, var_args) {
- var eventListenersMap = webUIListenerMap[event];
- if (!eventListenersMap) {
- return;
- }
- var args = Array.prototype.slice.call(arguments, 1);
- for (var listenerId in eventListenersMap) {
- eventListenersMap[listenerId].apply(null, args);
- }
- }
- function addWebUIListener(eventName, callback) {
- webUIListenerMap[eventName] = webUIListenerMap[eventName] || {};
- var uid = createUid();
- webUIListenerMap[eventName][uid] = callback;
- return {
- eventName: eventName,
- uid: uid
- };
- }
- function removeWebUIListener(listener) {
- var listenerExists = webUIListenerMap[listener.eventName] && webUIListenerMap[listener.eventName][listener.uid];
- if (listenerExists) {
- delete webUIListenerMap[listener.eventName][listener.uid];
- return true;
- }
- return false;
- }
- return {
- addSingletonGetter: addSingletonGetter,
- createUid: createUid,
- define: define,
- defineProperty: defineProperty,
- dispatchPropertyChange: dispatchPropertyChange,
- dispatchSimpleEvent: dispatchSimpleEvent,
- exportPath: exportPath,
- getUid: getUid,
- makePublic: makePublic,
- PropertyKind: PropertyKind,
- addWebUIListener: addWebUIListener,
- removeWebUIListener: removeWebUIListener,
- sendWithPromise: sendWithPromise,
- webUIListenerCallback: webUIListenerCallback,
- webUIResponse: webUIResponse,
- get doc() {
- return document;
- },
- get isMac() {
- return /Mac/.test(navigator.platform);
- },
- get isWindows() {
- return /Win/.test(navigator.platform);
- },
- get isChromeOS() {
- return /CrOS/.test(navigator.userAgent);
- },
- get isLinux() {
- return /Linux/.test(navigator.userAgent);
- },
- get isAndroid() {
- return /Android/.test(navigator.userAgent);
- },
- get isIOS() {
- return /iPad|iPhone|iPod/.test(navigator.platform);
- }
- };
-}();
-
+var global=this;var WebUIListener;var cr=cr||function(){"use strict";function exportPath(name,opt_object,opt_objectToExportTo){var parts=name.split(".");var cur=opt_objectToExportTo||global;for(var part;parts.length&&(part=parts.shift());){if(!parts.length&&opt_object!==undefined){cur[part]=opt_object}else if(part in cur){cur=cur[part]}else{cur=cur[part]={}}}return cur}function dispatchPropertyChange(target,propertyName,newValue,oldValue){var e=new Event(propertyName+"Change");e.propertyName=propertyName;e.newValue=newValue;e.oldValue=oldValue;target.dispatchEvent(e)}function getAttributeName(jsName){return jsName.replace(/([A-Z])/g,"-$1").toLowerCase()}var PropertyKind={JS:"js",ATTR:"attr",BOOL_ATTR:"boolAttr"};function getGetter(name,kind){switch(kind){case PropertyKind.JS:var privateName=name+"_";return function(){return this[privateName]};case PropertyKind.ATTR:var attributeName=getAttributeName(name);return function(){return this.getAttribute(attributeName)};case PropertyKind.BOOL_ATTR:var attributeName=getAttributeName(name);return function(){return this.hasAttribute(attributeName)}}throw"not reached"}function getSetter(name,kind,opt_setHook){switch(kind){case PropertyKind.JS:var privateName=name+"_";return function(value){var oldValue=this[name];if(value!==oldValue){this[privateName]=value;if(opt_setHook)opt_setHook.call(this,value,oldValue);dispatchPropertyChange(this,name,value,oldValue)}};case PropertyKind.ATTR:var attributeName=getAttributeName(name);return function(value){var oldValue=this[name];if(value!==oldValue){if(value==undefined)this.removeAttribute(attributeName);else this.setAttribute(attributeName,value);if(opt_setHook)opt_setHook.call(this,value,oldValue);dispatchPropertyChange(this,name,value,oldValue)}};case PropertyKind.BOOL_ATTR:var attributeName=getAttributeName(name);return function(value){var oldValue=this[name];if(value!==oldValue){if(value)this.setAttribute(attributeName,name);else this.removeAttribute(attributeName);if(opt_setHook)opt_setHook.call(this,value,oldValue);dispatchPropertyChange(this,name,value,oldValue)}}}throw"not reached"}function defineProperty(obj,name,opt_kind,opt_setHook){if(typeof obj=="function")obj=obj.prototype;var kind=opt_kind||PropertyKind.JS;if(!obj.__lookupGetter__(name))obj.__defineGetter__(name,getGetter(name,kind));if(!obj.__lookupSetter__(name))obj.__defineSetter__(name,getSetter(name,kind,opt_setHook))}var uidCounter=1;function createUid(){return uidCounter++}function getUid(item){if(item.hasOwnProperty("uid"))return item.uid;return item.uid=createUid()}function dispatchSimpleEvent(target,type,opt_bubbles,opt_cancelable){var e=new Event(type,{bubbles:opt_bubbles,cancelable:opt_cancelable===undefined||opt_cancelable});return target.dispatchEvent(e)}function define(name,fun){var obj=exportPath(name);var exports=fun();for(var propertyName in exports){var propertyDescriptor=Object.getOwnPropertyDescriptor(exports,propertyName);if(propertyDescriptor)Object.defineProperty(obj,propertyName,propertyDescriptor)}}function addSingletonGetter(ctor){ctor.getInstance=function(){return ctor.instance_||(ctor.instance_=new ctor)}}function makePublic(ctor,methods,opt_target){methods.forEach(function(method){ctor[method]=function(){var target=opt_target?document.getElementById(opt_target):ctor.getInstance();return target[method+"_"].apply(target,arguments)}})}var chromeSendResolverMap={};function webUIResponse(id,isSuccess,response){var resolver=chromeSendResolverMap[id];delete chromeSendResolverMap[id];if(isSuccess)resolver.resolve(response);else resolver.reject(response)}function sendWithPromise(methodName,var_args){var args=Array.prototype.slice.call(arguments,1);var promiseResolver=new PromiseResolver;var id=methodName+"_"+createUid();chromeSendResolverMap[id]=promiseResolver;chrome.send(methodName,[id].concat(args));return promiseResolver.promise}var webUIListenerMap={};function webUIListenerCallback(event,var_args){var eventListenersMap=webUIListenerMap[event];if(!eventListenersMap){return}var args=Array.prototype.slice.call(arguments,1);for(var listenerId in eventListenersMap){eventListenersMap[listenerId].apply(null,args)}}function addWebUIListener(eventName,callback){webUIListenerMap[eventName]=webUIListenerMap[eventName]||{};var uid=createUid();webUIListenerMap[eventName][uid]=callback;return{eventName:eventName,uid:uid}}function removeWebUIListener(listener){var listenerExists=webUIListenerMap[listener.eventName]&&webUIListenerMap[listener.eventName][listener.uid];if(listenerExists){delete webUIListenerMap[listener.eventName][listener.uid];return true}return false}return{addSingletonGetter:addSingletonGetter,createUid:createUid,define:define,defineProperty:defineProperty,dispatchPropertyChange:dispatchPropertyChange,dispatchSimpleEvent:dispatchSimpleEvent,exportPath:exportPath,getUid:getUid,makePublic:makePublic,PropertyKind:PropertyKind,addWebUIListener:addWebUIListener,removeWebUIListener:removeWebUIListener,sendWithPromise:sendWithPromise,webUIListenerCallback:webUIListenerCallback,webUIResponse:webUIResponse,get doc(){return document},get isMac(){return/Mac/.test(navigator.platform)},get isWindows(){return/Win/.test(navigator.platform)},get isChromeOS(){return/CrOS/.test(navigator.userAgent)},get isLinux(){return/Linux/.test(navigator.userAgent)},get isAndroid(){return/Android/.test(navigator.userAgent)},get isIOS(){return/iPad|iPhone|iPod/.test(navigator.platform)}}}();
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-cr.define('cr.ui', function() {
- function decorate(source, constr) {
- var elements;
- if (typeof source == 'string') elements = cr.doc.querySelectorAll(source); else elements = [ source ];
- for (var i = 0, el; el = elements[i]; i++) {
- if (!(el instanceof constr)) constr.decorate(el);
- }
- }
- function createElementHelper(tagName, opt_bag) {
- var doc;
- if (opt_bag && opt_bag.ownerDocument) doc = opt_bag.ownerDocument; else doc = cr.doc;
- return doc.createElement(tagName);
- }
- function define(tagNameOrFunction) {
- var createFunction, tagName;
- if (typeof tagNameOrFunction == 'function') {
- createFunction = tagNameOrFunction;
- tagName = '';
- } else {
- createFunction = createElementHelper;
- tagName = tagNameOrFunction;
- }
- function f(opt_propertyBag) {
- var el = createFunction(tagName, opt_propertyBag);
- f.decorate(el);
- for (var propertyName in opt_propertyBag) {
- el[propertyName] = opt_propertyBag[propertyName];
- }
- return el;
- }
- f.decorate = function(el) {
- el.__proto__ = f.prototype;
- el.decorate();
- };
- return f;
- }
- function limitInputWidth(el, parentEl, min, opt_scale) {
- el.style.width = '10px';
- var doc = el.ownerDocument;
- var win = doc.defaultView;
- var computedStyle = win.getComputedStyle(el);
- var parentComputedStyle = win.getComputedStyle(parentEl);
- var rtl = computedStyle.direction == 'rtl';
- var inputRect = el.getBoundingClientRect();
- var parentRect = parentEl.getBoundingClientRect();
- var startPos = rtl ? parentRect.right - inputRect.right : inputRect.left - parentRect.left;
- var inner = parseInt(computedStyle.borderLeftWidth, 10) + parseInt(computedStyle.paddingLeft, 10) + parseInt(computedStyle.paddingRight, 10) + parseInt(computedStyle.borderRightWidth, 10);
- var parentPadding = rtl ? parseInt(parentComputedStyle.paddingLeft, 10) : parseInt(parentComputedStyle.paddingRight, 10);
- var max = parentEl.clientWidth - startPos - inner - parentPadding;
- if (opt_scale) max *= opt_scale;
- function limit() {
- if (el.scrollWidth > max) {
- el.style.width = max + 'px';
- } else {
- el.style.width = 0;
- var sw = el.scrollWidth;
- if (sw < min) {
- el.style.width = min + 'px';
- } else {
- el.style.width = sw + 'px';
- }
- }
- }
- el.addEventListener('input', limit);
- limit();
- }
- function toCssPx(pixels) {
- if (!window.isFinite(pixels)) console.error('Pixel value is not a number: ' + pixels);
- return Math.round(pixels) + 'px';
- }
- function swallowDoubleClick(e) {
- var doc = e.target.ownerDocument;
- var counter = Math.min(1, e.detail);
- function swallow(e) {
- e.stopPropagation();
- e.preventDefault();
- }
- function onclick(e) {
- if (e.detail > counter) {
- counter = e.detail;
- swallow(e);
- } else {
- doc.removeEventListener('dblclick', swallow, true);
- doc.removeEventListener('click', onclick, true);
- }
- }
- setTimeout(function() {
- doc.addEventListener('click', onclick, true);
- doc.addEventListener('dblclick', swallow, true);
- }, 0);
- }
- return {
- decorate: decorate,
- define: define,
- limitInputWidth: limitInputWidth,
- toCssPx: toCssPx,
- swallowDoubleClick: swallowDoubleClick
- };
-});
-
+cr.define("cr.ui",function(){function decorate(source,constr){var elements;if(typeof source=="string")elements=cr.doc.querySelectorAll(source);else elements=[source];for(var i=0,el;el=elements[i];i++){if(!(el instanceof constr))constr.decorate(el)}}function createElementHelper(tagName,opt_bag){var doc;if(opt_bag&&opt_bag.ownerDocument)doc=opt_bag.ownerDocument;else doc=cr.doc;return doc.createElement(tagName)}function define(tagNameOrFunction){var createFunction,tagName;if(typeof tagNameOrFunction=="function"){createFunction=tagNameOrFunction;tagName=""}else{createFunction=createElementHelper;tagName=tagNameOrFunction}function f(opt_propertyBag){var el=createFunction(tagName,opt_propertyBag);f.decorate(el);for(var propertyName in opt_propertyBag){el[propertyName]=opt_propertyBag[propertyName]}return el}f.decorate=function(el){el.__proto__=f.prototype;el.decorate()};return f}function limitInputWidth(el,parentEl,min,opt_scale){el.style.width="10px";var doc=el.ownerDocument;var win=doc.defaultView;var computedStyle=win.getComputedStyle(el);var parentComputedStyle=win.getComputedStyle(parentEl);var rtl=computedStyle.direction=="rtl";var inputRect=el.getBoundingClientRect();var parentRect=parentEl.getBoundingClientRect();var startPos=rtl?parentRect.right-inputRect.right:inputRect.left-parentRect.left;var inner=parseInt(computedStyle.borderLeftWidth,10)+parseInt(computedStyle.paddingLeft,10)+parseInt(computedStyle.paddingRight,10)+parseInt(computedStyle.borderRightWidth,10);var parentPadding=rtl?parseInt(parentComputedStyle.paddingLeft,10):parseInt(parentComputedStyle.paddingRight,10);var max=parentEl.clientWidth-startPos-inner-parentPadding;if(opt_scale)max*=opt_scale;function limit(){if(el.scrollWidth>max){el.style.width=max+"px"}else{el.style.width=0;var sw=el.scrollWidth;if(sw<min){el.style.width=min+"px"}else{el.style.width=sw+"px"}}}el.addEventListener("input",limit);limit()}function toCssPx(pixels){if(!window.isFinite(pixels))console.error("Pixel value is not a number: "+pixels);return Math.round(pixels)+"px"}function swallowDoubleClick(e){var doc=e.target.ownerDocument;var counter=Math.min(1,e.detail);function swallow(e){e.stopPropagation();e.preventDefault()}function onclick(e){if(e.detail>counter){counter=e.detail;swallow(e)}else{doc.removeEventListener("dblclick",swallow,true);doc.removeEventListener("click",onclick,true)}}setTimeout(function(){doc.addEventListener("click",onclick,true);doc.addEventListener("dblclick",swallow,true)},0)}return{decorate:decorate,define:define,limitInputWidth:limitInputWidth,toCssPx:toCssPx,swallowDoubleClick:swallowDoubleClick}});
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-cr.define('cr.ui', function() {
- function KeyboardShortcut(shortcut) {
- var mods = {};
- var ident = '';
- shortcut.split('|').forEach(function(part) {
- var partLc = part.toLowerCase();
- switch (partLc) {
- case 'alt':
- case 'ctrl':
- case 'meta':
- case 'shift':
- mods[partLc + 'Key'] = true;
- break;
-
- default:
- if (ident) throw Error('Invalid shortcut');
- ident = part;
- }
- });
- this.ident_ = ident;
- this.mods_ = mods;
- }
- KeyboardShortcut.prototype = {
- matchesEvent: function(e) {
- if (e.key == this.ident_) {
- var mods = this.mods_;
- return [ 'altKey', 'ctrlKey', 'metaKey', 'shiftKey' ].every(function(k) {
- return e[k] == !!mods[k];
- });
- }
- return false;
- }
- };
- var Command = cr.ui.define('command');
- Command.prototype = {
- __proto__: HTMLElement.prototype,
- decorate: function() {
- CommandManager.init(assert(this.ownerDocument));
- if (this.hasAttribute('shortcut')) this.shortcut = this.getAttribute('shortcut');
- },
- execute: function(opt_element) {
- if (this.disabled) return;
- var doc = this.ownerDocument;
- if (doc.activeElement) {
- var e = new Event('command', {
- bubbles: true
- });
- e.command = this;
- (opt_element || doc.activeElement).dispatchEvent(e);
- }
- },
- canExecuteChange: function(opt_node) {
- dispatchCanExecuteEvent(this, opt_node || this.ownerDocument.activeElement);
- },
- shortcut_: '',
- get shortcut() {
- return this.shortcut_;
- },
- set shortcut(shortcut) {
- var oldShortcut = this.shortcut_;
- if (shortcut !== oldShortcut) {
- this.keyboardShortcuts_ = shortcut.split(/\s+/).map(function(shortcut) {
- return new KeyboardShortcut(shortcut);
- });
- this.shortcut_ = shortcut;
- cr.dispatchPropertyChange(this, 'shortcut', this.shortcut_, oldShortcut);
- }
- },
- matchesEvent: function(e) {
- if (!this.keyboardShortcuts_) return false;
- return this.keyboardShortcuts_.some(function(keyboardShortcut) {
- return keyboardShortcut.matchesEvent(e);
- });
- }
- };
- cr.defineProperty(Command, 'label', cr.PropertyKind.ATTR);
- cr.defineProperty(Command, 'disabled', cr.PropertyKind.BOOL_ATTR);
- cr.defineProperty(Command, 'hidden', cr.PropertyKind.BOOL_ATTR);
- cr.defineProperty(Command, 'checked', cr.PropertyKind.BOOL_ATTR);
- cr.defineProperty(Command, 'hideShortcutText', cr.PropertyKind.BOOL_ATTR);
- function dispatchCanExecuteEvent(command, target) {
- var e = new CanExecuteEvent(command);
- target.dispatchEvent(e);
- command.disabled = !e.canExecute;
- }
- var commandManagers = {};
- function CommandManager(doc) {
- doc.addEventListener('focus', this.handleFocus_.bind(this), true);
- doc.addEventListener('keydown', this.handleKeyDown_.bind(this), false);
- }
- CommandManager.init = function(doc) {
- var uid = cr.getUid(doc);
- if (!(uid in commandManagers)) {
- commandManagers[uid] = new CommandManager(doc);
- }
- };
- CommandManager.prototype = {
- handleFocus_: function(e) {
- var target = e.target;
- if (target.menu || target.command) return;
- var commands = Array.prototype.slice.call(target.ownerDocument.querySelectorAll('command'));
- commands.forEach(function(command) {
- dispatchCanExecuteEvent(command, target);
- });
- },
- handleKeyDown_: function(e) {
- var target = e.target;
- var commands = Array.prototype.slice.call(target.ownerDocument.querySelectorAll('command'));
- for (var i = 0, command; command = commands[i]; i++) {
- if (command.matchesEvent(e)) {
- command.canExecuteChange();
- if (!command.disabled) {
- e.preventDefault();
- e.stopPropagation();
- command.execute();
- return;
- }
- }
- }
- }
- };
- function CanExecuteEvent(command) {
- var e = new Event('canExecute', {
- bubbles: true,
- cancelable: true
- });
- e.__proto__ = CanExecuteEvent.prototype;
- e.command = command;
- return e;
- }
- CanExecuteEvent.prototype = {
- __proto__: Event.prototype,
- command: null,
- canExecute_: false,
- get canExecute() {
- return this.canExecute_;
- },
- set canExecute(canExecute) {
- this.canExecute_ = !!canExecute;
- this.stopPropagation();
- this.preventDefault();
- }
- };
- return {
- Command: Command,
- CanExecuteEvent: CanExecuteEvent
- };
-});
-
-Polymer({
- is: 'iron-media-query',
- properties: {
- queryMatches: {
- type: Boolean,
- value: false,
- readOnly: true,
- notify: true
- },
- query: {
- type: String,
- observer: 'queryChanged'
- },
- full: {
- type: Boolean,
- value: false
- },
- _boundMQHandler: {
- value: function() {
- return this.queryHandler.bind(this);
- }
- },
- _mq: {
- value: null
- }
- },
- attached: function() {
- this.style.display = 'none';
- this.queryChanged();
- },
- detached: function() {
- this._remove();
- },
- _add: function() {
- if (this._mq) {
- this._mq.addListener(this._boundMQHandler);
- }
- },
- _remove: function() {
- if (this._mq) {
- this._mq.removeListener(this._boundMQHandler);
- }
- this._mq = null;
- },
- queryChanged: function() {
- this._remove();
- var query = this.query;
- if (!query) {
- return;
- }
- if (!this.full && query[0] !== '(') {
- query = '(' + query + ')';
- }
- this._mq = window.matchMedia(query);
- this._add();
- this.queryHandler(this._mq);
- },
- queryHandler: function(mq) {
- this._setQueryMatches(mq.matches);
- }
-});
-
-Polymer.IronResizableBehavior = {
- properties: {
- _parentResizable: {
- type: Object,
- observer: '_parentResizableChanged'
- },
- _notifyingDescendant: {
- type: Boolean,
- value: false
- }
- },
- listeners: {
- 'iron-request-resize-notifications': '_onIronRequestResizeNotifications'
- },
- created: function() {
- this._interestedResizables = [];
- this._boundNotifyResize = this.notifyResize.bind(this);
- },
- attached: function() {
- this.fire('iron-request-resize-notifications', null, {
- node: this,
- bubbles: true,
- cancelable: true
- });
- if (!this._parentResizable) {
- window.addEventListener('resize', this._boundNotifyResize);
- this.notifyResize();
- }
- },
- detached: function() {
- if (this._parentResizable) {
- this._parentResizable.stopResizeNotificationsFor(this);
- } else {
- window.removeEventListener('resize', this._boundNotifyResize);
- }
- this._parentResizable = null;
- },
- notifyResize: function() {
- if (!this.isAttached) {
- return;
- }
- this._interestedResizables.forEach(function(resizable) {
- if (this.resizerShouldNotify(resizable)) {
- this._notifyDescendant(resizable);
- }
- }, this);
- this._fireResize();
- },
- assignParentResizable: function(parentResizable) {
- this._parentResizable = parentResizable;
- },
- stopResizeNotificationsFor: function(target) {
- var index = this._interestedResizables.indexOf(target);
- if (index > -1) {
- this._interestedResizables.splice(index, 1);
- this.unlisten(target, 'iron-resize', '_onDescendantIronResize');
- }
- },
- resizerShouldNotify: function(element) {
- return true;
- },
- _onDescendantIronResize: function(event) {
- if (this._notifyingDescendant) {
- event.stopPropagation();
- return;
- }
- if (!Polymer.Settings.useShadow) {
- this._fireResize();
- }
- },
- _fireResize: function() {
- this.fire('iron-resize', null, {
- node: this,
- bubbles: false
- });
- },
- _onIronRequestResizeNotifications: function(event) {
- var target = event.path ? event.path[0] : event.target;
- if (target === this) {
- return;
- }
- if (this._interestedResizables.indexOf(target) === -1) {
- this._interestedResizables.push(target);
- this.listen(target, 'iron-resize', '_onDescendantIronResize');
- }
- target.assignParentResizable(this);
- this._notifyDescendant(target);
- event.stopPropagation();
- },
- _parentResizableChanged: function(parentResizable) {
- if (parentResizable) {
- window.removeEventListener('resize', this._boundNotifyResize);
- }
- },
- _notifyDescendant: function(descendant) {
- if (!this.isAttached) {
- return;
- }
- this._notifyingDescendant = true;
- descendant.notifyResize();
- this._notifyingDescendant = false;
- }
-};
-
-Polymer.IronSelection = function(selectCallback) {
- this.selection = [];
- this.selectCallback = selectCallback;
-};
-
-Polymer.IronSelection.prototype = {
- get: function() {
- return this.multi ? this.selection.slice() : this.selection[0];
- },
- clear: function(excludes) {
- this.selection.slice().forEach(function(item) {
- if (!excludes || excludes.indexOf(item) < 0) {
- this.setItemSelected(item, false);
- }
- }, this);
- },
- isSelected: function(item) {
- return this.selection.indexOf(item) >= 0;
- },
- setItemSelected: function(item, isSelected) {
- if (item != null) {
- if (isSelected !== this.isSelected(item)) {
- if (isSelected) {
- this.selection.push(item);
- } else {
- var i = this.selection.indexOf(item);
- if (i >= 0) {
- this.selection.splice(i, 1);
- }
- }
- if (this.selectCallback) {
- this.selectCallback(item, isSelected);
- }
- }
- }
- },
- select: function(item) {
- if (this.multi) {
- this.toggle(item);
- } else if (this.get() !== item) {
- this.setItemSelected(this.get(), false);
- this.setItemSelected(item, true);
- }
- },
- toggle: function(item) {
- this.setItemSelected(item, !this.isSelected(item));
- }
-};
-
-Polymer.IronSelectableBehavior = {
- properties: {
- attrForSelected: {
- type: String,
- value: null
- },
- selected: {
- type: String,
- notify: true
- },
- selectedItem: {
- type: Object,
- readOnly: true,
- notify: true
- },
- activateEvent: {
- type: String,
- value: 'tap',
- observer: '_activateEventChanged'
- },
- selectable: String,
- selectedClass: {
- type: String,
- value: 'iron-selected'
- },
- selectedAttribute: {
- type: String,
- value: null
- },
- fallbackSelection: {
- type: String,
- value: null
- },
- items: {
- type: Array,
- readOnly: true,
- notify: true,
- value: function() {
- return [];
- }
- },
- _excludedLocalNames: {
- type: Object,
- value: function() {
- return {
- template: 1
- };
- }
- }
- },
- observers: [ '_updateAttrForSelected(attrForSelected)', '_updateSelected(selected)', '_checkFallback(fallbackSelection)' ],
- created: function() {
- this._bindFilterItem = this._filterItem.bind(this);
- this._selection = new Polymer.IronSelection(this._applySelection.bind(this));
- },
- attached: function() {
- this._observer = this._observeItems(this);
- this._updateItems();
- if (!this._shouldUpdateSelection) {
- this._updateSelected();
- }
- this._addListener(this.activateEvent);
- },
- detached: function() {
- if (this._observer) {
- Polymer.dom(this).unobserveNodes(this._observer);
- }
- this._removeListener(this.activateEvent);
- },
- indexOf: function(item) {
- return this.items.indexOf(item);
- },
- select: function(value) {
- this.selected = value;
- },
- selectPrevious: function() {
- var length = this.items.length;
- var index = (Number(this._valueToIndex(this.selected)) - 1 + length) % length;
- this.selected = this._indexToValue(index);
- },
- selectNext: function() {
- var index = (Number(this._valueToIndex(this.selected)) + 1) % this.items.length;
- this.selected = this._indexToValue(index);
- },
- selectIndex: function(index) {
- this.select(this._indexToValue(index));
- },
- forceSynchronousItemUpdate: function() {
- this._updateItems();
- },
- get _shouldUpdateSelection() {
- return this.selected != null;
- },
- _checkFallback: function() {
- if (this._shouldUpdateSelection) {
- this._updateSelected();
- }
- },
- _addListener: function(eventName) {
- this.listen(this, eventName, '_activateHandler');
- },
- _removeListener: function(eventName) {
- this.unlisten(this, eventName, '_activateHandler');
- },
- _activateEventChanged: function(eventName, old) {
- this._removeListener(old);
- this._addListener(eventName);
- },
- _updateItems: function() {
- var nodes = Polymer.dom(this).queryDistributedElements(this.selectable || '*');
- nodes = Array.prototype.filter.call(nodes, this._bindFilterItem);
- this._setItems(nodes);
- },
- _updateAttrForSelected: function() {
- if (this._shouldUpdateSelection) {
- this.selected = this._indexToValue(this.indexOf(this.selectedItem));
- }
- },
- _updateSelected: function() {
- this._selectSelected(this.selected);
- },
- _selectSelected: function(selected) {
- this._selection.select(this._valueToItem(this.selected));
- if (this.fallbackSelection && this.items.length && this._selection.get() === undefined) {
- this.selected = this.fallbackSelection;
- }
- },
- _filterItem: function(node) {
- return !this._excludedLocalNames[node.localName];
- },
- _valueToItem: function(value) {
- return value == null ? null : this.items[this._valueToIndex(value)];
- },
- _valueToIndex: function(value) {
- if (this.attrForSelected) {
- for (var i = 0, item; item = this.items[i]; i++) {
- if (this._valueForItem(item) == value) {
- return i;
- }
- }
- } else {
- return Number(value);
- }
- },
- _indexToValue: function(index) {
- if (this.attrForSelected) {
- var item = this.items[index];
- if (item) {
- return this._valueForItem(item);
- }
- } else {
- return index;
- }
- },
- _valueForItem: function(item) {
- var propValue = item[Polymer.CaseMap.dashToCamelCase(this.attrForSelected)];
- return propValue != undefined ? propValue : item.getAttribute(this.attrForSelected);
- },
- _applySelection: function(item, isSelected) {
- if (this.selectedClass) {
- this.toggleClass(this.selectedClass, isSelected, item);
- }
- if (this.selectedAttribute) {
- this.toggleAttribute(this.selectedAttribute, isSelected, item);
- }
- this._selectionChange();
- this.fire('iron-' + (isSelected ? 'select' : 'deselect'), {
- item: item
- });
- },
- _selectionChange: function() {
- this._setSelectedItem(this._selection.get());
- },
- _observeItems: function(node) {
- return Polymer.dom(node).observeNodes(function(mutation) {
- this._updateItems();
- if (this._shouldUpdateSelection) {
- this._updateSelected();
- }
- this.fire('iron-items-changed', mutation, {
- bubbles: false,
- cancelable: false
- });
- });
- },
- _activateHandler: function(e) {
- var t = e.target;
- var items = this.items;
- while (t && t != this) {
- var i = items.indexOf(t);
- if (i >= 0) {
- var value = this._indexToValue(i);
- this._itemActivate(value, t);
- return;
- }
- t = t.parentNode;
- }
- },
- _itemActivate: function(value, item) {
- if (!this.fire('iron-activate', {
- selected: value,
- item: item
- }, {
- cancelable: true
- }).defaultPrevented) {
- this.select(value);
- }
- }
-};
-
-Polymer({
- is: 'iron-pages',
- behaviors: [ Polymer.IronResizableBehavior, Polymer.IronSelectableBehavior ],
- properties: {
- activateEvent: {
- type: String,
- value: null
- }
- },
- observers: [ '_selectedPageChanged(selected)' ],
- _selectedPageChanged: function(selected, old) {
- this.async(this.notifyResize);
- }
-});
-
-Polymer.IronScrollTargetBehavior = {
- properties: {
- scrollTarget: {
- type: HTMLElement,
- value: function() {
- return this._defaultScrollTarget;
- }
- }
- },
- observers: [ '_scrollTargetChanged(scrollTarget, isAttached)' ],
- _scrollTargetChanged: function(scrollTarget, isAttached) {
- var eventTarget;
- if (this._oldScrollTarget) {
- eventTarget = this._oldScrollTarget === this._doc ? window : this._oldScrollTarget;
- eventTarget.removeEventListener('scroll', this._boundScrollHandler);
- this._oldScrollTarget = null;
- }
- if (!isAttached) {
- return;
- }
- if (scrollTarget === 'document') {
- this.scrollTarget = this._doc;
- } else if (typeof scrollTarget === 'string') {
- this.scrollTarget = this.domHost ? this.domHost.$[scrollTarget] : Polymer.dom(this.ownerDocument).querySelector('#' + scrollTarget);
- } else if (this._isValidScrollTarget()) {
- eventTarget = scrollTarget === this._doc ? window : scrollTarget;
- this._boundScrollHandler = this._boundScrollHandler || this._scrollHandler.bind(this);
- this._oldScrollTarget = scrollTarget;
- eventTarget.addEventListener('scroll', this._boundScrollHandler);
- }
- },
- _scrollHandler: function scrollHandler() {},
- get _defaultScrollTarget() {
- return this._doc;
- },
- get _doc() {
- return this.ownerDocument.documentElement;
- },
- get _scrollTop() {
- if (this._isValidScrollTarget()) {
- return this.scrollTarget === this._doc ? window.pageYOffset : this.scrollTarget.scrollTop;
- }
- return 0;
- },
- get _scrollLeft() {
- if (this._isValidScrollTarget()) {
- return this.scrollTarget === this._doc ? window.pageXOffset : this.scrollTarget.scrollLeft;
- }
- return 0;
- },
- set _scrollTop(top) {
- if (this.scrollTarget === this._doc) {
- window.scrollTo(window.pageXOffset, top);
- } else if (this._isValidScrollTarget()) {
- this.scrollTarget.scrollTop = top;
- }
- },
- set _scrollLeft(left) {
- if (this.scrollTarget === this._doc) {
- window.scrollTo(left, window.pageYOffset);
- } else if (this._isValidScrollTarget()) {
- this.scrollTarget.scrollLeft = left;
- }
- },
- scroll: function(left, top) {
- if (this.scrollTarget === this._doc) {
- window.scrollTo(left, top);
- } else if (this._isValidScrollTarget()) {
- this.scrollTarget.scrollLeft = left;
- this.scrollTarget.scrollTop = top;
- }
- },
- get _scrollTargetWidth() {
- if (this._isValidScrollTarget()) {
- return this.scrollTarget === this._doc ? window.innerWidth : this.scrollTarget.offsetWidth;
- }
- return 0;
- },
- get _scrollTargetHeight() {
- if (this._isValidScrollTarget()) {
- return this.scrollTarget === this._doc ? window.innerHeight : this.scrollTarget.offsetHeight;
- }
- return 0;
- },
- _isValidScrollTarget: function() {
- return this.scrollTarget instanceof HTMLElement;
- }
-};
-
-(function() {
- var metaDatas = {};
- var metaArrays = {};
- var singleton = null;
- Polymer.IronMeta = Polymer({
- is: 'iron-meta',
- properties: {
- type: {
- type: String,
- value: 'default',
- observer: '_typeChanged'
- },
- key: {
- type: String,
- observer: '_keyChanged'
- },
- value: {
- type: Object,
- notify: true,
- observer: '_valueChanged'
- },
- self: {
- type: Boolean,
- observer: '_selfChanged'
- },
- list: {
- type: Array,
- notify: true
- }
- },
- hostAttributes: {
- hidden: true
- },
- factoryImpl: function(config) {
- if (config) {
- for (var n in config) {
- switch (n) {
- case 'type':
- case 'key':
- case 'value':
- this[n] = config[n];
- break;
- }
- }
- }
- },
- created: function() {
- this._metaDatas = metaDatas;
- this._metaArrays = metaArrays;
- },
- _keyChanged: function(key, old) {
- this._resetRegistration(old);
- },
- _valueChanged: function(value) {
- this._resetRegistration(this.key);
- },
- _selfChanged: function(self) {
- if (self) {
- this.value = this;
- }
- },
- _typeChanged: function(type) {
- this._unregisterKey(this.key);
- if (!metaDatas[type]) {
- metaDatas[type] = {};
- }
- this._metaData = metaDatas[type];
- if (!metaArrays[type]) {
- metaArrays[type] = [];
- }
- this.list = metaArrays[type];
- this._registerKeyValue(this.key, this.value);
- },
- byKey: function(key) {
- return this._metaData && this._metaData[key];
- },
- _resetRegistration: function(oldKey) {
- this._unregisterKey(oldKey);
- this._registerKeyValue(this.key, this.value);
- },
- _unregisterKey: function(key) {
- this._unregister(key, this._metaData, this.list);
- },
- _registerKeyValue: function(key, value) {
- this._register(key, value, this._metaData, this.list);
- },
- _register: function(key, value, data, list) {
- if (key && data && value !== undefined) {
- data[key] = value;
- list.push(value);
- }
- },
- _unregister: function(key, data, list) {
- if (key && data) {
- if (key in data) {
- var value = data[key];
- delete data[key];
- this.arrayDelete(list, value);
- }
- }
- }
- });
- Polymer.IronMeta.getIronMeta = function getIronMeta() {
- if (singleton === null) {
- singleton = new Polymer.IronMeta();
- }
- return singleton;
- };
- Polymer.IronMetaQuery = Polymer({
- is: 'iron-meta-query',
- properties: {
- type: {
- type: String,
- value: 'default',
- observer: '_typeChanged'
- },
- key: {
- type: String,
- observer: '_keyChanged'
- },
- value: {
- type: Object,
- notify: true,
- readOnly: true
- },
- list: {
- type: Array,
- notify: true
- }
- },
- factoryImpl: function(config) {
- if (config) {
- for (var n in config) {
- switch (n) {
- case 'type':
- case 'key':
- this[n] = config[n];
- break;
- }
- }
- }
- },
- created: function() {
- this._metaDatas = metaDatas;
- this._metaArrays = metaArrays;
- },
- _keyChanged: function(key) {
- this._setValue(this._metaData && this._metaData[key]);
- },
- _typeChanged: function(type) {
- this._metaData = metaDatas[type];
- this.list = metaArrays[type];
- if (this.key) {
- this._keyChanged(this.key);
- }
- },
- byKey: function(key) {
- return this._metaData && this._metaData[key];
- }
- });
-})();
-
-Polymer({
- is: 'iron-icon',
- properties: {
- icon: {
- type: String,
- observer: '_iconChanged'
- },
- theme: {
- type: String,
- observer: '_updateIcon'
- },
- src: {
- type: String,
- observer: '_srcChanged'
- },
- _meta: {
- value: Polymer.Base.create('iron-meta', {
- type: 'iconset'
- }),
- observer: '_updateIcon'
- }
- },
- _DEFAULT_ICONSET: 'icons',
- _iconChanged: function(icon) {
- var parts = (icon || '').split(':');
- this._iconName = parts.pop();
- this._iconsetName = parts.pop() || this._DEFAULT_ICONSET;
- this._updateIcon();
- },
- _srcChanged: function(src) {
- this._updateIcon();
- },
- _usesIconset: function() {
- return this.icon || !this.src;
- },
- _updateIcon: function() {
- if (this._usesIconset()) {
- if (this._img && this._img.parentNode) {
- Polymer.dom(this.root).removeChild(this._img);
- }
- if (this._iconName === "") {
- if (this._iconset) {
- this._iconset.removeIcon(this);
- }
- } else if (this._iconsetName && this._meta) {
- this._iconset = this._meta.byKey(this._iconsetName);
- if (this._iconset) {
- this._iconset.applyIcon(this, this._iconName, this.theme);
- this.unlisten(window, 'iron-iconset-added', '_updateIcon');
- } else {
- this.listen(window, 'iron-iconset-added', '_updateIcon');
- }
- }
- } else {
- if (this._iconset) {
- this._iconset.removeIcon(this);
- }
- if (!this._img) {
- this._img = document.createElement('img');
- this._img.style.width = '100%';
- this._img.style.height = '100%';
- this._img.draggable = false;
- }
- this._img.src = this.src;
- Polymer.dom(this.root).appendChild(this._img);
- }
- }
-});
-
-(function() {
- 'use strict';
- var KEY_IDENTIFIER = {
- 'U+0008': 'backspace',
- 'U+0009': 'tab',
- 'U+001B': 'esc',
- 'U+0020': 'space',
- 'U+007F': 'del'
- };
- var KEY_CODE = {
- 8: 'backspace',
- 9: 'tab',
- 13: 'enter',
- 27: 'esc',
- 33: 'pageup',
- 34: 'pagedown',
- 35: 'end',
- 36: 'home',
- 32: 'space',
- 37: 'left',
- 38: 'up',
- 39: 'right',
- 40: 'down',
- 46: 'del',
- 106: '*'
- };
- var MODIFIER_KEYS = {
- shift: 'shiftKey',
- ctrl: 'ctrlKey',
- alt: 'altKey',
- meta: 'metaKey'
- };
- var KEY_CHAR = /[a-z0-9*]/;
- var IDENT_CHAR = /U\+/;
- var ARROW_KEY = /^arrow/;
- var SPACE_KEY = /^space(bar)?/;
- var ESC_KEY = /^escape$/;
- function transformKey(key, noSpecialChars) {
- var validKey = '';
- if (key) {
- var lKey = key.toLowerCase();
- if (lKey === ' ' || SPACE_KEY.test(lKey)) {
- validKey = 'space';
- } else if (ESC_KEY.test(lKey)) {
- validKey = 'esc';
- } else if (lKey.length == 1) {
- if (!noSpecialChars || KEY_CHAR.test(lKey)) {
- validKey = lKey;
- }
- } else if (ARROW_KEY.test(lKey)) {
- validKey = lKey.replace('arrow', '');
- } else if (lKey == 'multiply') {
- validKey = '*';
- } else {
- validKey = lKey;
- }
- }
- return validKey;
- }
- function transformKeyIdentifier(keyIdent) {
- var validKey = '';
- if (keyIdent) {
- if (keyIdent in KEY_IDENTIFIER) {
- validKey = KEY_IDENTIFIER[keyIdent];
- } else if (IDENT_CHAR.test(keyIdent)) {
- keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16);
- validKey = String.fromCharCode(keyIdent).toLowerCase();
- } else {
- validKey = keyIdent.toLowerCase();
- }
- }
- return validKey;
- }
- function transformKeyCode(keyCode) {
- var validKey = '';
- if (Number(keyCode)) {
- if (keyCode >= 65 && keyCode <= 90) {
- validKey = String.fromCharCode(32 + keyCode);
- } else if (keyCode >= 112 && keyCode <= 123) {
- validKey = 'f' + (keyCode - 112);
- } else if (keyCode >= 48 && keyCode <= 57) {
- validKey = String(keyCode - 48);
- } else if (keyCode >= 96 && keyCode <= 105) {
- validKey = String(keyCode - 96);
- } else {
- validKey = KEY_CODE[keyCode];
- }
- }
- return validKey;
- }
- function normalizedKeyForEvent(keyEvent, noSpecialChars) {
- if (keyEvent.key) {
- return transformKey(keyEvent.key, noSpecialChars);
- }
- if (keyEvent.detail && keyEvent.detail.key) {
- return transformKey(keyEvent.detail.key, noSpecialChars);
- }
- return transformKeyIdentifier(keyEvent.keyIdentifier) || transformKeyCode(keyEvent.keyCode) || '';
- }
- function keyComboMatchesEvent(keyCombo, event) {
- var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers);
- return keyEvent === keyCombo.key && (!keyCombo.hasModifiers || !!event.shiftKey === !!keyCombo.shiftKey && !!event.ctrlKey === !!keyCombo.ctrlKey && !!event.altKey === !!keyCombo.altKey && !!event.metaKey === !!keyCombo.metaKey);
- }
- function parseKeyComboString(keyComboString) {
- if (keyComboString.length === 1) {
- return {
- combo: keyComboString,
- key: keyComboString,
- event: 'keydown'
- };
- }
- return keyComboString.split('+').reduce(function(parsedKeyCombo, keyComboPart) {
- var eventParts = keyComboPart.split(':');
- var keyName = eventParts[0];
- var event = eventParts[1];
- if (keyName in MODIFIER_KEYS) {
- parsedKeyCombo[MODIFIER_KEYS[keyName]] = true;
- parsedKeyCombo.hasModifiers = true;
- } else {
- parsedKeyCombo.key = keyName;
- parsedKeyCombo.event = event || 'keydown';
- }
- return parsedKeyCombo;
- }, {
- combo: keyComboString.split(':').shift()
- });
- }
- function parseEventString(eventString) {
- return eventString.trim().split(' ').map(function(keyComboString) {
- return parseKeyComboString(keyComboString);
- });
- }
- Polymer.IronA11yKeysBehavior = {
- properties: {
- keyEventTarget: {
- type: Object,
- value: function() {
- return this;
- }
- },
- stopKeyboardEventPropagation: {
- type: Boolean,
- value: false
- },
- _boundKeyHandlers: {
- type: Array,
- value: function() {
- return [];
- }
- },
- _imperativeKeyBindings: {
- type: Object,
- value: function() {
- return {};
- }
- }
- },
- observers: [ '_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)' ],
- keyBindings: {},
- registered: function() {
- this._prepKeyBindings();
- },
- attached: function() {
- this._listenKeyEventListeners();
- },
- detached: function() {
- this._unlistenKeyEventListeners();
- },
- addOwnKeyBinding: function(eventString, handlerName) {
- this._imperativeKeyBindings[eventString] = handlerName;
- this._prepKeyBindings();
- this._resetKeyEventListeners();
- },
- removeOwnKeyBindings: function() {
- this._imperativeKeyBindings = {};
- this._prepKeyBindings();
- this._resetKeyEventListeners();
- },
- keyboardEventMatchesKeys: function(event, eventString) {
- var keyCombos = parseEventString(eventString);
- for (var i = 0; i < keyCombos.length; ++i) {
- if (keyComboMatchesEvent(keyCombos[i], event)) {
- return true;
- }
- }
- return false;
- },
- _collectKeyBindings: function() {
- var keyBindings = this.behaviors.map(function(behavior) {
- return behavior.keyBindings;
- });
- if (keyBindings.indexOf(this.keyBindings) === -1) {
- keyBindings.push(this.keyBindings);
- }
- return keyBindings;
- },
- _prepKeyBindings: function() {
- this._keyBindings = {};
- this._collectKeyBindings().forEach(function(keyBindings) {
- for (var eventString in keyBindings) {
- this._addKeyBinding(eventString, keyBindings[eventString]);
- }
- }, this);
- for (var eventString in this._imperativeKeyBindings) {
- this._addKeyBinding(eventString, this._imperativeKeyBindings[eventString]);
- }
- for (var eventName in this._keyBindings) {
- this._keyBindings[eventName].sort(function(kb1, kb2) {
- var b1 = kb1[0].hasModifiers;
- var b2 = kb2[0].hasModifiers;
- return b1 === b2 ? 0 : b1 ? -1 : 1;
- });
- }
- },
- _addKeyBinding: function(eventString, handlerName) {
- parseEventString(eventString).forEach(function(keyCombo) {
- this._keyBindings[keyCombo.event] = this._keyBindings[keyCombo.event] || [];
- this._keyBindings[keyCombo.event].push([ keyCombo, handlerName ]);
- }, this);
- },
- _resetKeyEventListeners: function() {
- this._unlistenKeyEventListeners();
- if (this.isAttached) {
- this._listenKeyEventListeners();
- }
- },
- _listenKeyEventListeners: function() {
- if (!this.keyEventTarget) {
- return;
- }
- Object.keys(this._keyBindings).forEach(function(eventName) {
- var keyBindings = this._keyBindings[eventName];
- var boundKeyHandler = this._onKeyBindingEvent.bind(this, keyBindings);
- this._boundKeyHandlers.push([ this.keyEventTarget, eventName, boundKeyHandler ]);
- this.keyEventTarget.addEventListener(eventName, boundKeyHandler);
- }, this);
- },
- _unlistenKeyEventListeners: function() {
- var keyHandlerTuple;
- var keyEventTarget;
- var eventName;
- var boundKeyHandler;
- while (this._boundKeyHandlers.length) {
- keyHandlerTuple = this._boundKeyHandlers.pop();
- keyEventTarget = keyHandlerTuple[0];
- eventName = keyHandlerTuple[1];
- boundKeyHandler = keyHandlerTuple[2];
- keyEventTarget.removeEventListener(eventName, boundKeyHandler);
- }
- },
- _onKeyBindingEvent: function(keyBindings, event) {
- if (this.stopKeyboardEventPropagation) {
- event.stopPropagation();
- }
- if (event.defaultPrevented) {
- return;
- }
- for (var i = 0; i < keyBindings.length; i++) {
- var keyCombo = keyBindings[i][0];
- var handlerName = keyBindings[i][1];
- if (keyComboMatchesEvent(keyCombo, event)) {
- this._triggerKeyHandler(keyCombo, handlerName, event);
- if (event.defaultPrevented) {
- return;
- }
- }
- }
- },
- _triggerKeyHandler: function(keyCombo, handlerName, keyboardEvent) {
- var detail = Object.create(keyCombo);
- detail.keyboardEvent = keyboardEvent;
- var event = new CustomEvent(keyCombo.event, {
- detail: detail,
- cancelable: true
- });
- this[handlerName].call(this, event);
- if (event.defaultPrevented) {
- keyboardEvent.preventDefault();
- }
- }
- };
-})();
-
-Polymer.IronControlState = {
- properties: {
- focused: {
- type: Boolean,
- value: false,
- notify: true,
- readOnly: true,
- reflectToAttribute: true
- },
- disabled: {
- type: Boolean,
- value: false,
- notify: true,
- observer: '_disabledChanged',
- reflectToAttribute: true
- },
- _oldTabIndex: {
- type: Number
- },
- _boundFocusBlurHandler: {
- type: Function,
- value: function() {
- return this._focusBlurHandler.bind(this);
- }
- }
- },
- observers: [ '_changedControlState(focused, disabled)' ],
- ready: function() {
- this.addEventListener('focus', this._boundFocusBlurHandler, true);
- this.addEventListener('blur', this._boundFocusBlurHandler, true);
- },
- _focusBlurHandler: function(event) {
- if (event.target === this) {
- this._setFocused(event.type === 'focus');
- } else if (!this.shadowRoot) {
- var target = Polymer.dom(event).localTarget;
- if (!this.isLightDescendant(target)) {
- this.fire(event.type, {
- sourceEvent: event
- }, {
- node: this,
- bubbles: event.bubbles,
- cancelable: event.cancelable
- });
- }
- }
- },
- _disabledChanged: function(disabled, old) {
- this.setAttribute('aria-disabled', disabled ? 'true' : 'false');
- this.style.pointerEvents = disabled ? 'none' : '';
- if (disabled) {
- this._oldTabIndex = this.tabIndex;
- this._setFocused(false);
- this.tabIndex = -1;
- this.blur();
- } else if (this._oldTabIndex !== undefined) {
- this.tabIndex = this._oldTabIndex;
- }
- },
- _changedControlState: function() {
- if (this._controlStateChanged) {
- this._controlStateChanged();
- }
- }
-};
-
-Polymer.IronButtonStateImpl = {
- properties: {
- pressed: {
- type: Boolean,
- readOnly: true,
- value: false,
- reflectToAttribute: true,
- observer: '_pressedChanged'
- },
- toggles: {
- type: Boolean,
- value: false,
- reflectToAttribute: true
- },
- active: {
- type: Boolean,
- value: false,
- notify: true,
- reflectToAttribute: true
- },
- pointerDown: {
- type: Boolean,
- readOnly: true,
- value: false
- },
- receivedFocusFromKeyboard: {
- type: Boolean,
- readOnly: true
- },
- ariaActiveAttribute: {
- type: String,
- value: 'aria-pressed',
- observer: '_ariaActiveAttributeChanged'
- }
- },
- listeners: {
- down: '_downHandler',
- up: '_upHandler',
- tap: '_tapHandler'
- },
- observers: [ '_detectKeyboardFocus(focused)', '_activeChanged(active, ariaActiveAttribute)' ],
- keyBindings: {
- 'enter:keydown': '_asyncClick',
- 'space:keydown': '_spaceKeyDownHandler',
- 'space:keyup': '_spaceKeyUpHandler'
- },
- _mouseEventRe: /^mouse/,
- _tapHandler: function() {
- if (this.toggles) {
- this._userActivate(!this.active);
- } else {
- this.active = false;
- }
- },
- _detectKeyboardFocus: function(focused) {
- this._setReceivedFocusFromKeyboard(!this.pointerDown && focused);
- },
- _userActivate: function(active) {
- if (this.active !== active) {
- this.active = active;
- this.fire('change');
- }
- },
- _downHandler: function(event) {
- this._setPointerDown(true);
- this._setPressed(true);
- this._setReceivedFocusFromKeyboard(false);
- },
- _upHandler: function() {
- this._setPointerDown(false);
- this._setPressed(false);
- },
- _spaceKeyDownHandler: function(event) {
- var keyboardEvent = event.detail.keyboardEvent;
- var target = Polymer.dom(keyboardEvent).localTarget;
- if (this.isLightDescendant(target)) return;
- keyboardEvent.preventDefault();
- keyboardEvent.stopImmediatePropagation();
- this._setPressed(true);
- },
- _spaceKeyUpHandler: function(event) {
- var keyboardEvent = event.detail.keyboardEvent;
- var target = Polymer.dom(keyboardEvent).localTarget;
- if (this.isLightDescendant(target)) return;
- if (this.pressed) {
- this._asyncClick();
- }
- this._setPressed(false);
- },
- _asyncClick: function() {
- this.async(function() {
- this.click();
- }, 1);
- },
- _pressedChanged: function(pressed) {
- this._changedButtonState();
- },
- _ariaActiveAttributeChanged: function(value, oldValue) {
- if (oldValue && oldValue != value && this.hasAttribute(oldValue)) {
- this.removeAttribute(oldValue);
- }
- },
- _activeChanged: function(active, ariaActiveAttribute) {
- if (this.toggles) {
- this.setAttribute(this.ariaActiveAttribute, active ? 'true' : 'false');
- } else {
- this.removeAttribute(this.ariaActiveAttribute);
- }
- this._changedButtonState();
- },
- _controlStateChanged: function() {
- if (this.disabled) {
- this._setPressed(false);
- } else {
- this._changedButtonState();
- }
- },
- _changedButtonState: function() {
- if (this._buttonStateChanged) {
- this._buttonStateChanged();
- }
- }
-};
-
-Polymer.IronButtonState = [ Polymer.IronA11yKeysBehavior, Polymer.IronButtonStateImpl ];
-
-(function() {
- var Utility = {
- distance: function(x1, y1, x2, y2) {
- var xDelta = x1 - x2;
- var yDelta = y1 - y2;
- return Math.sqrt(xDelta * xDelta + yDelta * yDelta);
- },
- now: window.performance && window.performance.now ? window.performance.now.bind(window.performance) : Date.now
- };
- function ElementMetrics(element) {
- this.element = element;
- this.width = this.boundingRect.width;
- this.height = this.boundingRect.height;
- this.size = Math.max(this.width, this.height);
- }
- ElementMetrics.prototype = {
- get boundingRect() {
- return this.element.getBoundingClientRect();
- },
- furthestCornerDistanceFrom: function(x, y) {
- var topLeft = Utility.distance(x, y, 0, 0);
- var topRight = Utility.distance(x, y, this.width, 0);
- var bottomLeft = Utility.distance(x, y, 0, this.height);
- var bottomRight = Utility.distance(x, y, this.width, this.height);
- return Math.max(topLeft, topRight, bottomLeft, bottomRight);
- }
- };
- function Ripple(element) {
- this.element = element;
- this.color = window.getComputedStyle(element).color;
- this.wave = document.createElement('div');
- this.waveContainer = document.createElement('div');
- this.wave.style.backgroundColor = this.color;
- this.wave.classList.add('wave');
- this.waveContainer.classList.add('wave-container');
- Polymer.dom(this.waveContainer).appendChild(this.wave);
- this.resetInteractionState();
- }
- Ripple.MAX_RADIUS = 300;
- Ripple.prototype = {
- get recenters() {
- return this.element.recenters;
- },
- get center() {
- return this.element.center;
- },
- get mouseDownElapsed() {
- var elapsed;
- if (!this.mouseDownStart) {
- return 0;
- }
- elapsed = Utility.now() - this.mouseDownStart;
- if (this.mouseUpStart) {
- elapsed -= this.mouseUpElapsed;
- }
- return elapsed;
- },
- get mouseUpElapsed() {
- return this.mouseUpStart ? Utility.now() - this.mouseUpStart : 0;
- },
- get mouseDownElapsedSeconds() {
- return this.mouseDownElapsed / 1e3;
- },
- get mouseUpElapsedSeconds() {
- return this.mouseUpElapsed / 1e3;
- },
- get mouseInteractionSeconds() {
- return this.mouseDownElapsedSeconds + this.mouseUpElapsedSeconds;
- },
- get initialOpacity() {
- return this.element.initialOpacity;
- },
- get opacityDecayVelocity() {
- return this.element.opacityDecayVelocity;
- },
- get radius() {
- var width2 = this.containerMetrics.width * this.containerMetrics.width;
- var height2 = this.containerMetrics.height * this.containerMetrics.height;
- var waveRadius = Math.min(Math.sqrt(width2 + height2), Ripple.MAX_RADIUS) * 1.1 + 5;
- var duration = 1.1 - .2 * (waveRadius / Ripple.MAX_RADIUS);
- var timeNow = this.mouseInteractionSeconds / duration;
- var size = waveRadius * (1 - Math.pow(80, -timeNow));
- return Math.abs(size);
- },
- get opacity() {
- if (!this.mouseUpStart) {
- return this.initialOpacity;
- }
- return Math.max(0, this.initialOpacity - this.mouseUpElapsedSeconds * this.opacityDecayVelocity);
- },
- get outerOpacity() {
- var outerOpacity = this.mouseUpElapsedSeconds * .3;
- var waveOpacity = this.opacity;
- return Math.max(0, Math.min(outerOpacity, waveOpacity));
- },
- get isOpacityFullyDecayed() {
- return this.opacity < .01 && this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS);
- },
- get isRestingAtMaxRadius() {
- return this.opacity >= this.initialOpacity && this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS);
- },
- get isAnimationComplete() {
- return this.mouseUpStart ? this.isOpacityFullyDecayed : this.isRestingAtMaxRadius;
- },
- get translationFraction() {
- return Math.min(1, this.radius / this.containerMetrics.size * 2 / Math.sqrt(2));
- },
- get xNow() {
- if (this.xEnd) {
- return this.xStart + this.translationFraction * (this.xEnd - this.xStart);
- }
- return this.xStart;
- },
- get yNow() {
- if (this.yEnd) {
- return this.yStart + this.translationFraction * (this.yEnd - this.yStart);
- }
- return this.yStart;
- },
- get isMouseDown() {
- return this.mouseDownStart && !this.mouseUpStart;
- },
- resetInteractionState: function() {
- this.maxRadius = 0;
- this.mouseDownStart = 0;
- this.mouseUpStart = 0;
- this.xStart = 0;
- this.yStart = 0;
- this.xEnd = 0;
- this.yEnd = 0;
- this.slideDistance = 0;
- this.containerMetrics = new ElementMetrics(this.element);
- },
- draw: function() {
- var scale;
- var translateString;
- var dx;
- var dy;
- this.wave.style.opacity = this.opacity;
- scale = this.radius / (this.containerMetrics.size / 2);
- dx = this.xNow - this.containerMetrics.width / 2;
- dy = this.yNow - this.containerMetrics.height / 2;
- this.waveContainer.style.webkitTransform = 'translate(' + dx + 'px, ' + dy + 'px)';
- this.waveContainer.style.transform = 'translate3d(' + dx + 'px, ' + dy + 'px, 0)';
- this.wave.style.webkitTransform = 'scale(' + scale + ',' + scale + ')';
- this.wave.style.transform = 'scale3d(' + scale + ',' + scale + ',1)';
- },
- downAction: function(event) {
- var xCenter = this.containerMetrics.width / 2;
- var yCenter = this.containerMetrics.height / 2;
- this.resetInteractionState();
- this.mouseDownStart = Utility.now();
- if (this.center) {
- this.xStart = xCenter;
- this.yStart = yCenter;
- this.slideDistance = Utility.distance(this.xStart, this.yStart, this.xEnd, this.yEnd);
- } else {
- this.xStart = event ? event.detail.x - this.containerMetrics.boundingRect.left : this.containerMetrics.width / 2;
- this.yStart = event ? event.detail.y - this.containerMetrics.boundingRect.top : this.containerMetrics.height / 2;
- }
- if (this.recenters) {
- this.xEnd = xCenter;
- this.yEnd = yCenter;
- this.slideDistance = Utility.distance(this.xStart, this.yStart, this.xEnd, this.yEnd);
- }
- this.maxRadius = this.containerMetrics.furthestCornerDistanceFrom(this.xStart, this.yStart);
- this.waveContainer.style.top = (this.containerMetrics.height - this.containerMetrics.size) / 2 + 'px';
- this.waveContainer.style.left = (this.containerMetrics.width - this.containerMetrics.size) / 2 + 'px';
- this.waveContainer.style.width = this.containerMetrics.size + 'px';
- this.waveContainer.style.height = this.containerMetrics.size + 'px';
- },
- upAction: function(event) {
- if (!this.isMouseDown) {
- return;
- }
- this.mouseUpStart = Utility.now();
- },
- remove: function() {
- Polymer.dom(this.waveContainer.parentNode).removeChild(this.waveContainer);
- }
- };
- Polymer({
- is: 'paper-ripple',
- behaviors: [ Polymer.IronA11yKeysBehavior ],
- properties: {
- initialOpacity: {
- type: Number,
- value: .25
- },
- opacityDecayVelocity: {
- type: Number,
- value: .8
- },
- recenters: {
- type: Boolean,
- value: false
- },
- center: {
- type: Boolean,
- value: false
- },
- ripples: {
- type: Array,
- value: function() {
- return [];
- }
- },
- animating: {
- type: Boolean,
- readOnly: true,
- reflectToAttribute: true,
- value: false
- },
- holdDown: {
- type: Boolean,
- value: false,
- observer: '_holdDownChanged'
- },
- noink: {
- type: Boolean,
- value: false
- },
- _animating: {
- type: Boolean
- },
- _boundAnimate: {
- type: Function,
- value: function() {
- return this.animate.bind(this);
- }
- }
- },
- get target() {
- return this.keyEventTarget;
- },
- keyBindings: {
- 'enter:keydown': '_onEnterKeydown',
- 'space:keydown': '_onSpaceKeydown',
- 'space:keyup': '_onSpaceKeyup'
- },
- attached: function() {
- if (this.parentNode.nodeType == 11) {
- this.keyEventTarget = Polymer.dom(this).getOwnerRoot().host;
- } else {
- this.keyEventTarget = this.parentNode;
- }
- var keyEventTarget = this.keyEventTarget;
- this.listen(keyEventTarget, 'up', 'uiUpAction');
- this.listen(keyEventTarget, 'down', 'uiDownAction');
- },
- detached: function() {
- this.unlisten(this.keyEventTarget, 'up', 'uiUpAction');
- this.unlisten(this.keyEventTarget, 'down', 'uiDownAction');
- this.keyEventTarget = null;
- },
- get shouldKeepAnimating() {
- for (var index = 0; index < this.ripples.length; ++index) {
- if (!this.ripples[index].isAnimationComplete) {
- return true;
- }
- }
- return false;
- },
- simulatedRipple: function() {
- this.downAction(null);
- this.async(function() {
- this.upAction();
- }, 1);
- },
- uiDownAction: function(event) {
- if (!this.noink) {
- this.downAction(event);
- }
- },
- downAction: function(event) {
- if (this.holdDown && this.ripples.length > 0) {
- return;
- }
- var ripple = this.addRipple();
- ripple.downAction(event);
- if (!this._animating) {
- this._animating = true;
- this.animate();
- }
- },
- uiUpAction: function(event) {
- if (!this.noink) {
- this.upAction(event);
- }
- },
- upAction: function(event) {
- if (this.holdDown) {
- return;
- }
- this.ripples.forEach(function(ripple) {
- ripple.upAction(event);
- });
- this._animating = true;
- this.animate();
- },
- onAnimationComplete: function() {
- this._animating = false;
- this.$.background.style.backgroundColor = null;
- this.fire('transitionend');
- },
- addRipple: function() {
- var ripple = new Ripple(this);
- Polymer.dom(this.$.waves).appendChild(ripple.waveContainer);
- this.$.background.style.backgroundColor = ripple.color;
- this.ripples.push(ripple);
- this._setAnimating(true);
- return ripple;
- },
- removeRipple: function(ripple) {
- var rippleIndex = this.ripples.indexOf(ripple);
- if (rippleIndex < 0) {
- return;
- }
- this.ripples.splice(rippleIndex, 1);
- ripple.remove();
- if (!this.ripples.length) {
- this._setAnimating(false);
- }
- },
- animate: function() {
- if (!this._animating) {
- return;
- }
- var index;
- var ripple;
- for (index = 0; index < this.ripples.length; ++index) {
- ripple = this.ripples[index];
- ripple.draw();
- this.$.background.style.opacity = ripple.outerOpacity;
- if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) {
- this.removeRipple(ripple);
- }
- }
- if (!this.shouldKeepAnimating && this.ripples.length === 0) {
- this.onAnimationComplete();
- } else {
- window.requestAnimationFrame(this._boundAnimate);
- }
- },
- _onEnterKeydown: function() {
- this.uiDownAction();
- this.async(this.uiUpAction, 1);
- },
- _onSpaceKeydown: function() {
- this.uiDownAction();
- },
- _onSpaceKeyup: function() {
- this.uiUpAction();
- },
- _holdDownChanged: function(newVal, oldVal) {
- if (oldVal === undefined) {
- return;
- }
- if (newVal) {
- this.downAction();
- } else {
- this.upAction();
- }
- }
- });
-})();
-
-Polymer.PaperRippleBehavior = {
- properties: {
- noink: {
- type: Boolean,
- observer: '_noinkChanged'
- },
- _rippleContainer: {
- type: Object
- }
- },
- _buttonStateChanged: function() {
- if (this.focused) {
- this.ensureRipple();
- }
- },
- _downHandler: function(event) {
- Polymer.IronButtonStateImpl._downHandler.call(this, event);
- if (this.pressed) {
- this.ensureRipple(event);
- }
- },
- ensureRipple: function(optTriggeringEvent) {
- if (!this.hasRipple()) {
- this._ripple = this._createRipple();
- this._ripple.noink = this.noink;
- var rippleContainer = this._rippleContainer || this.root;
- if (rippleContainer) {
- Polymer.dom(rippleContainer).appendChild(this._ripple);
- }
- if (optTriggeringEvent) {
- var domContainer = Polymer.dom(this._rippleContainer || this);
- var target = Polymer.dom(optTriggeringEvent).rootTarget;
- if (domContainer.deepContains(target)) {
- this._ripple.uiDownAction(optTriggeringEvent);
- }
- }
- }
- },
- getRipple: function() {
- this.ensureRipple();
- return this._ripple;
- },
- hasRipple: function() {
- return Boolean(this._ripple);
- },
- _createRipple: function() {
- return document.createElement('paper-ripple');
- },
- _noinkChanged: function(noink) {
- if (this.hasRipple()) {
- this._ripple.noink = noink;
- }
- }
-};
-
-Polymer.PaperInkyFocusBehaviorImpl = {
- observers: [ '_focusedChanged(receivedFocusFromKeyboard)' ],
- _focusedChanged: function(receivedFocusFromKeyboard) {
- if (receivedFocusFromKeyboard) {
- this.ensureRipple();
- }
- if (this.hasRipple()) {
- this._ripple.holdDown = receivedFocusFromKeyboard;
- }
- },
- _createRipple: function() {
- var ripple = Polymer.PaperRippleBehavior._createRipple();
- ripple.id = 'ink';
- ripple.setAttribute('center', '');
- ripple.classList.add('circle');
- return ripple;
- }
-};
-
-Polymer.PaperInkyFocusBehavior = [ Polymer.IronButtonState, Polymer.IronControlState, Polymer.PaperRippleBehavior, Polymer.PaperInkyFocusBehaviorImpl ];
-
-Polymer({
- is: 'paper-icon-button',
- hostAttributes: {
- role: 'button',
- tabindex: '0'
- },
- behaviors: [ Polymer.PaperInkyFocusBehavior ],
- properties: {
- src: {
- type: String
- },
- icon: {
- type: String
- },
- alt: {
- type: String,
- observer: "_altChanged"
- }
- },
- _altChanged: function(newValue, oldValue) {
- var label = this.getAttribute('aria-label');
- if (!label || oldValue == label) {
- this.setAttribute('aria-label', newValue);
- }
- }
-});
-
-Polymer({
- is: 'iron-iconset-svg',
- properties: {
- name: {
- type: String,
- observer: '_nameChanged'
- },
- size: {
- type: Number,
- value: 24
- }
- },
- attached: function() {
- this.style.display = 'none';
- },
- getIconNames: function() {
- this._icons = this._createIconMap();
- return Object.keys(this._icons).map(function(n) {
- return this.name + ':' + n;
- }, this);
- },
- applyIcon: function(element, iconName) {
- element = element.root || element;
- this.removeIcon(element);
- var svg = this._cloneIcon(iconName);
- if (svg) {
- var pde = Polymer.dom(element);
- pde.insertBefore(svg, pde.childNodes[0]);
- return element._svgIcon = svg;
- }
- return null;
- },
- removeIcon: function(element) {
- if (element._svgIcon) {
- Polymer.dom(element).removeChild(element._svgIcon);
- element._svgIcon = null;
- }
- },
- _nameChanged: function() {
- new Polymer.IronMeta({
- type: 'iconset',
- key: this.name,
- value: this
- });
- this.async(function() {
- this.fire('iron-iconset-added', this, {
- node: window
- });
- });
- },
- _createIconMap: function() {
- var icons = Object.create(null);
- Polymer.dom(this).querySelectorAll('[id]').forEach(function(icon) {
- icons[icon.id] = icon;
- });
- return icons;
- },
- _cloneIcon: function(id) {
- this._icons = this._icons || this._createIconMap();
- return this._prepareSvgClone(this._icons[id], this.size);
- },
- _prepareSvgClone: function(sourceSvg, size) {
- if (sourceSvg) {
- var content = sourceSvg.cloneNode(true), svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'), viewBox = content.getAttribute('viewBox') || '0 0 ' + size + ' ' + size;
- svg.setAttribute('viewBox', viewBox);
- svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');
- svg.style.cssText = 'pointer-events: none; display: block; width: 100%; height: 100%;';
- svg.appendChild(content).removeAttribute('id');
- return svg;
- }
- return null;
- }
-});
+cr.define("cr.ui",function(){function KeyboardShortcut(shortcut){var mods={};var ident="";shortcut.split("|").forEach(function(part){var partLc=part.toLowerCase();switch(partLc){case"alt":case"ctrl":case"meta":case"shift":mods[partLc+"Key"]=true;break;default:if(ident)throw Error("Invalid shortcut");ident=part}});this.ident_=ident;this.mods_=mods}KeyboardShortcut.prototype={matchesEvent:function(e){if(e.key==this.ident_){var mods=this.mods_;return["altKey","ctrlKey","metaKey","shiftKey"].every(function(k){return e[k]==!!mods[k]})}return false}};var Command=cr.ui.define("command");Command.prototype={__proto__:HTMLElement.prototype,decorate:function(){CommandManager.init(assert(this.ownerDocument));if(this.hasAttribute("shortcut"))this.shortcut=this.getAttribute("shortcut")},execute:function(opt_element){if(this.disabled)return;var doc=this.ownerDocument;if(doc.activeElement){var e=new Event("command",{bubbles:true});e.command=this;(opt_element||doc.activeElement).dispatchEvent(e)}},canExecuteChange:function(opt_node){dispatchCanExecuteEvent(this,opt_node||this.ownerDocument.activeElement)},shortcut_:"",get shortcut(){return this.shortcut_},set shortcut(shortcut){var oldShortcut=this.shortcut_;if(shortcut!==oldShortcut){this.keyboardShortcuts_=shortcut.split(/\s+/).map(function(shortcut){return new KeyboardShortcut(shortcut)});this.shortcut_=shortcut;cr.dispatchPropertyChange(this,"shortcut",this.shortcut_,oldShortcut)}},matchesEvent:function(e){if(!this.keyboardShortcuts_)return false;return this.keyboardShortcuts_.some(function(keyboardShortcut){return keyboardShortcut.matchesEvent(e)})}};cr.defineProperty(Command,"label",cr.PropertyKind.ATTR);cr.defineProperty(Command,"disabled",cr.PropertyKind.BOOL_ATTR);cr.defineProperty(Command,"hidden",cr.PropertyKind.BOOL_ATTR);cr.defineProperty(Command,"checked",cr.PropertyKind.BOOL_ATTR);cr.defineProperty(Command,"hideShortcutText",cr.PropertyKind.BOOL_ATTR);function dispatchCanExecuteEvent(command,target){var e=new CanExecuteEvent(command);target.dispatchEvent(e);command.disabled=!e.canExecute}var commandManagers={};function CommandManager(doc){doc.addEventListener("focus",this.handleFocus_.bind(this),true);doc.addEventListener("keydown",this.handleKeyDown_.bind(this),false)}CommandManager.init=function(doc){var uid=cr.getUid(doc);if(!(uid in commandManagers)){commandManagers[uid]=new CommandManager(doc)}};CommandManager.prototype={handleFocus_:function(e){var target=e.target;if(target.menu||target.command)return;var commands=Array.prototype.slice.call(target.ownerDocument.querySelectorAll("command"));commands.forEach(function(command){dispatchCanExecuteEvent(command,target)})},handleKeyDown_:function(e){var target=e.target;var commands=Array.prototype.slice.call(target.ownerDocument.querySelectorAll("command"));for(var i=0,command;command=commands[i];i++){if(command.matchesEvent(e)){command.canExecuteChange();if(!command.disabled){e.preventDefault();e.stopPropagation();command.execute();return}}}}};function CanExecuteEvent(command){var e=new Event("canExecute",{bubbles:true,cancelable:true});e.__proto__=CanExecuteEvent.prototype;e.command=command;return e}CanExecuteEvent.prototype={__proto__:Event.prototype,command:null,canExecute_:false,get canExecute(){return this.canExecute_},set canExecute(canExecute){this.canExecute_=!!canExecute;this.stopPropagation();this.preventDefault()}};return{Command:Command,CanExecuteEvent:CanExecuteEvent}});Polymer({is:"iron-media-query",properties:{queryMatches:{type:Boolean,value:false,readOnly:true,notify:true},query:{type:String,observer:"queryChanged"},full:{type:Boolean,value:false},_boundMQHandler:{value:function(){return this.queryHandler.bind(this)}},_mq:{value:null}},attached:function(){this.style.display="none";this.queryChanged()},detached:function(){this._remove()},_add:function(){if(this._mq){this._mq.addListener(this._boundMQHandler)}},_remove:function(){if(this._mq){this._mq.removeListener(this._boundMQHandler)}this._mq=null},queryChanged:function(){this._remove();var query=this.query;if(!query){return}if(!this.full&&query[0]!=="("){query="("+query+")"}this._mq=window.matchMedia(query);this._add();this.queryHandler(this._mq)},queryHandler:function(mq){this._setQueryMatches(mq.matches)}});Polymer.IronResizableBehavior={properties:{_parentResizable:{type:Object,observer:"_parentResizableChanged"},_notifyingDescendant:{type:Boolean,value:false}},listeners:{"iron-request-resize-notifications":"_onIronRequestResizeNotifications"},created:function(){this._interestedResizables=[];this._boundNotifyResize=this.notifyResize.bind(this)},attached:function(){this.fire("iron-request-resize-notifications",null,{node:this,bubbles:true,cancelable:true});if(!this._parentResizable){window.addEventListener("resize",this._boundNotifyResize);this.notifyResize()}},detached:function(){if(this._parentResizable){this._parentResizable.stopResizeNotificationsFor(this)}else{window.removeEventListener("resize",this._boundNotifyResize)}this._parentResizable=null},notifyResize:function(){if(!this.isAttached){return}this._interestedResizables.forEach(function(resizable){if(this.resizerShouldNotify(resizable)){this._notifyDescendant(resizable)}},this);this._fireResize()},assignParentResizable:function(parentResizable){this._parentResizable=parentResizable},stopResizeNotificationsFor:function(target){var index=this._interestedResizables.indexOf(target);if(index>-1){this._interestedResizables.splice(index,1);this.unlisten(target,"iron-resize","_onDescendantIronResize")}},resizerShouldNotify:function(element){return true},_onDescendantIronResize:function(event){if(this._notifyingDescendant){event.stopPropagation();return}if(!Polymer.Settings.useShadow){this._fireResize()}},_fireResize:function(){this.fire("iron-resize",null,{node:this,bubbles:false})},_onIronRequestResizeNotifications:function(event){var target=event.path?event.path[0]:event.target;if(target===this){return}if(this._interestedResizables.indexOf(target)===-1){this._interestedResizables.push(target);this.listen(target,"iron-resize","_onDescendantIronResize")}target.assignParentResizable(this);this._notifyDescendant(target);event.stopPropagation()},_parentResizableChanged:function(parentResizable){if(parentResizable){window.removeEventListener("resize",this._boundNotifyResize)}},_notifyDescendant:function(descendant){if(!this.isAttached){return}this._notifyingDescendant=true;descendant.notifyResize();this._notifyingDescendant=false}};Polymer.IronSelection=function(selectCallback){this.selection=[];this.selectCallback=selectCallback};Polymer.IronSelection.prototype={get:function(){return this.multi?this.selection.slice():this.selection[0]},clear:function(excludes){this.selection.slice().forEach(function(item){if(!excludes||excludes.indexOf(item)<0){this.setItemSelected(item,false)}},this)},isSelected:function(item){return this.selection.indexOf(item)>=0},setItemSelected:function(item,isSelected){if(item!=null){if(isSelected!==this.isSelected(item)){if(isSelected){this.selection.push(item)}else{var i=this.selection.indexOf(item);if(i>=0){this.selection.splice(i,1)}}if(this.selectCallback){this.selectCallback(item,isSelected)}}}},select:function(item){if(this.multi){this.toggle(item)}else if(this.get()!==item){this.setItemSelected(this.get(),false);this.setItemSelected(item,true)}},toggle:function(item){this.setItemSelected(item,!this.isSelected(item))}};Polymer.IronSelectableBehavior={properties:{attrForSelected:{type:String,value:null},selected:{type:String,notify:true},selectedItem:{type:Object,readOnly:true,notify:true},activateEvent:{type:String,value:"tap",observer:"_activateEventChanged"},selectable:String,selectedClass:{type:String,value:"iron-selected"},selectedAttribute:{type:String,value:null},fallbackSelection:{type:String,value:null},items:{type:Array,readOnly:true,notify:true,value:function(){return[]}},_excludedLocalNames:{type:Object,value:function(){return{template:1}}}},observers:["_updateAttrForSelected(attrForSelected)","_updateSelected(selected)","_checkFallback(fallbackSelection)"],created:function(){this._bindFilterItem=this._filterItem.bind(this);this._selection=new Polymer.IronSelection(this._applySelection.bind(this))},attached:function(){this._observer=this._observeItems(this);this._updateItems();if(!this._shouldUpdateSelection){this._updateSelected()}this._addListener(this.activateEvent)},detached:function(){if(this._observer){Polymer.dom(this).unobserveNodes(this._observer)}this._removeListener(this.activateEvent)},indexOf:function(item){return this.items.indexOf(item)},select:function(value){this.selected=value},selectPrevious:function(){var length=this.items.length;var index=(Number(this._valueToIndex(this.selected))-1+length)%length;this.selected=this._indexToValue(index)},selectNext:function(){var index=(Number(this._valueToIndex(this.selected))+1)%this.items.length;this.selected=this._indexToValue(index)},selectIndex:function(index){this.select(this._indexToValue(index))},forceSynchronousItemUpdate:function(){this._updateItems()},get _shouldUpdateSelection(){return this.selected!=null},_checkFallback:function(){if(this._shouldUpdateSelection){this._updateSelected()}},_addListener:function(eventName){this.listen(this,eventName,"_activateHandler")},_removeListener:function(eventName){this.unlisten(this,eventName,"_activateHandler")},_activateEventChanged:function(eventName,old){this._removeListener(old);this._addListener(eventName)},_updateItems:function(){var nodes=Polymer.dom(this).queryDistributedElements(this.selectable||"*");nodes=Array.prototype.filter.call(nodes,this._bindFilterItem);this._setItems(nodes)},_updateAttrForSelected:function(){if(this._shouldUpdateSelection){this.selected=this._indexToValue(this.indexOf(this.selectedItem))}},_updateSelected:function(){this._selectSelected(this.selected)},_selectSelected:function(selected){this._selection.select(this._valueToItem(this.selected));if(this.fallbackSelection&&this.items.length&&this._selection.get()===undefined){this.selected=this.fallbackSelection}},_filterItem:function(node){return!this._excludedLocalNames[node.localName]},_valueToItem:function(value){return value==null?null:this.items[this._valueToIndex(value)]},_valueToIndex:function(value){if(this.attrForSelected){for(var i=0,item;item=this.items[i];i++){if(this._valueForItem(item)==value){return i}}}else{return Number(value)}},_indexToValue:function(index){if(this.attrForSelected){var item=this.items[index];if(item){return this._valueForItem(item)}}else{return index}},_valueForItem:function(item){var propValue=item[Polymer.CaseMap.dashToCamelCase(this.attrForSelected)];return propValue!=undefined?propValue:item.getAttribute(this.attrForSelected)},_applySelection:function(item,isSelected){if(this.selectedClass){this.toggleClass(this.selectedClass,isSelected,item)}if(this.selectedAttribute){this.toggleAttribute(this.selectedAttribute,isSelected,item)}this._selectionChange();this.fire("iron-"+(isSelected?"select":"deselect"),{item:item})},_selectionChange:function(){this._setSelectedItem(this._selection.get())},_observeItems:function(node){return Polymer.dom(node).observeNodes(function(mutation){this._updateItems();if(this._shouldUpdateSelection){this._updateSelected()}this.fire("iron-items-changed",mutation,{bubbles:false,cancelable:false})})},_activateHandler:function(e){var t=e.target;var items=this.items;while(t&&t!=this){var i=items.indexOf(t);if(i>=0){var value=this._indexToValue(i);this._itemActivate(value,t);return}t=t.parentNode}},_itemActivate:function(value,item){if(!this.fire("iron-activate",{selected:value,item:item},{cancelable:true}).defaultPrevented){this.select(value)}}};Polymer({is:"iron-pages",behaviors:[Polymer.IronResizableBehavior,Polymer.IronSelectableBehavior],properties:{activateEvent:{type:String,value:null}},observers:["_selectedPageChanged(selected)"],_selectedPageChanged:function(selected,old){this.async(this.notifyResize)}});Polymer.IronScrollTargetBehavior={properties:{scrollTarget:{type:HTMLElement,value:function(){return this._defaultScrollTarget}}},observers:["_scrollTargetChanged(scrollTarget, isAttached)"],_scrollTargetChanged:function(scrollTarget,isAttached){var eventTarget;if(this._oldScrollTarget){eventTarget=this._oldScrollTarget===this._doc?window:this._oldScrollTarget;eventTarget.removeEventListener("scroll",this._boundScrollHandler);this._oldScrollTarget=null}if(!isAttached){return}if(scrollTarget==="document"){this.scrollTarget=this._doc}else if(typeof scrollTarget==="string"){this.scrollTarget=this.domHost?this.domHost.$[scrollTarget]:Polymer.dom(this.ownerDocument).querySelector("#"+scrollTarget)}else if(this._isValidScrollTarget()){eventTarget=scrollTarget===this._doc?window:scrollTarget;this._boundScrollHandler=this._boundScrollHandler||this._scrollHandler.bind(this);this._oldScrollTarget=scrollTarget;eventTarget.addEventListener("scroll",this._boundScrollHandler)}},_scrollHandler:function scrollHandler(){},get _defaultScrollTarget(){return this._doc},get _doc(){return this.ownerDocument.documentElement},get _scrollTop(){if(this._isValidScrollTarget()){return this.scrollTarget===this._doc?window.pageYOffset:this.scrollTarget.scrollTop}return 0},get _scrollLeft(){if(this._isValidScrollTarget()){return this.scrollTarget===this._doc?window.pageXOffset:this.scrollTarget.scrollLeft}return 0},set _scrollTop(top){if(this.scrollTarget===this._doc){window.scrollTo(window.pageXOffset,top)}else if(this._isValidScrollTarget()){this.scrollTarget.scrollTop=top}},set _scrollLeft(left){if(this.scrollTarget===this._doc){window.scrollTo(left,window.pageYOffset)}else if(this._isValidScrollTarget()){this.scrollTarget.scrollLeft=left}},scroll:function(left,top){if(this.scrollTarget===this._doc){window.scrollTo(left,top)}else if(this._isValidScrollTarget()){this.scrollTarget.scrollLeft=left;this.scrollTarget.scrollTop=top}},get _scrollTargetWidth(){if(this._isValidScrollTarget()){return this.scrollTarget===this._doc?window.innerWidth:this.scrollTarget.offsetWidth}return 0},get _scrollTargetHeight(){if(this._isValidScrollTarget()){return this.scrollTarget===this._doc?window.innerHeight:this.scrollTarget.offsetHeight}return 0},_isValidScrollTarget:function(){return this.scrollTarget instanceof HTMLElement}};(function(){var metaDatas={};var metaArrays={};var singleton=null;Polymer.IronMeta=Polymer({is:"iron-meta",properties:{type:{type:String,value:"default",observer:"_typeChanged"},key:{type:String,observer:"_keyChanged"},value:{type:Object,notify:true,observer:"_valueChanged"},self:{type:Boolean,observer:"_selfChanged"},list:{type:Array,notify:true}},hostAttributes:{hidden:true},factoryImpl:function(config){if(config){for(var n in config){switch(n){case"type":case"key":case"value":this[n]=config[n];break}}}},created:function(){this._metaDatas=metaDatas;this._metaArrays=metaArrays},_keyChanged:function(key,old){this._resetRegistration(old)},_valueChanged:function(value){this._resetRegistration(this.key)},_selfChanged:function(self){if(self){this.value=this}},_typeChanged:function(type){this._unregisterKey(this.key);if(!metaDatas[type]){metaDatas[type]={}}this._metaData=metaDatas[type];if(!metaArrays[type]){metaArrays[type]=[]}this.list=metaArrays[type];this._registerKeyValue(this.key,this.value)},byKey:function(key){return this._metaData&&this._metaData[key]},_resetRegistration:function(oldKey){this._unregisterKey(oldKey);this._registerKeyValue(this.key,this.value)},_unregisterKey:function(key){this._unregister(key,this._metaData,this.list)},_registerKeyValue:function(key,value){this._register(key,value,this._metaData,this.list)},_register:function(key,value,data,list){if(key&&data&&value!==undefined){data[key]=value;list.push(value)}},_unregister:function(key,data,list){if(key&&data){if(key in data){var value=data[key];delete data[key];this.arrayDelete(list,value)}}}});Polymer.IronMeta.getIronMeta=function getIronMeta(){if(singleton===null){singleton=new Polymer.IronMeta}return singleton};Polymer.IronMetaQuery=Polymer({is:"iron-meta-query",properties:{type:{type:String,value:"default",observer:"_typeChanged"},key:{type:String,observer:"_keyChanged"},value:{type:Object,notify:true,readOnly:true},list:{type:Array,notify:true}},factoryImpl:function(config){if(config){for(var n in config){switch(n){case"type":case"key":this[n]=config[n];break}}}},created:function(){this._metaDatas=metaDatas;this._metaArrays=metaArrays},_keyChanged:function(key){this._setValue(this._metaData&&this._metaData[key])},_typeChanged:function(type){this._metaData=metaDatas[type];this.list=metaArrays[type];if(this.key){this._keyChanged(this.key)}},byKey:function(key){return this._metaData&&this._metaData[key]}})})();Polymer({is:"iron-icon",properties:{icon:{type:String,observer:"_iconChanged"},theme:{type:String,observer:"_updateIcon"},src:{type:String,observer:"_srcChanged"},_meta:{value:Polymer.Base.create("iron-meta",{type:"iconset"}),observer:"_updateIcon"}},_DEFAULT_ICONSET:"icons",_iconChanged:function(icon){var parts=(icon||"").split(":");this._iconName=parts.pop();this._iconsetName=parts.pop()||this._DEFAULT_ICONSET;this._updateIcon()},_srcChanged:function(src){this._updateIcon()},_usesIconset:function(){return this.icon||!this.src},_updateIcon:function(){if(this._usesIconset()){if(this._img&&this._img.parentNode){Polymer.dom(this.root).removeChild(this._img)}if(this._iconName===""){if(this._iconset){this._iconset.removeIcon(this)}}else if(this._iconsetName&&this._meta){this._iconset=this._meta.byKey(this._iconsetName);if(this._iconset){this._iconset.applyIcon(this,this._iconName,this.theme);this.unlisten(window,"iron-iconset-added","_updateIcon")}else{this.listen(window,"iron-iconset-added","_updateIcon")}}}else{if(this._iconset){this._iconset.removeIcon(this)}if(!this._img){this._img=document.createElement("img");this._img.style.width="100%";this._img.style.height="100%";this._img.draggable=false}this._img.src=this.src;Polymer.dom(this.root).appendChild(this._img)}}});(function(){"use strict";var KEY_IDENTIFIER={"U+0008":"backspace","U+0009":"tab","U+001B":"esc","U+0020":"space","U+007F":"del"};var KEY_CODE={8:"backspace",9:"tab",13:"enter",27:"esc",33:"pageup",34:"pagedown",35:"end",36:"home",32:"space",37:"left",38:"up",39:"right",40:"down",46:"del",106:"*"};var MODIFIER_KEYS={shift:"shiftKey",ctrl:"ctrlKey",alt:"altKey",meta:"metaKey"};var KEY_CHAR=/[a-z0-9*]/;var IDENT_CHAR=/U\+/;var ARROW_KEY=/^arrow/;var SPACE_KEY=/^space(bar)?/;var ESC_KEY=/^escape$/;function transformKey(key,noSpecialChars){var validKey="";if(key){var lKey=key.toLowerCase();if(lKey===" "||SPACE_KEY.test(lKey)){validKey="space"}else if(ESC_KEY.test(lKey)){validKey="esc"}else if(lKey.length==1){if(!noSpecialChars||KEY_CHAR.test(lKey)){validKey=lKey}}else if(ARROW_KEY.test(lKey)){validKey=lKey.replace("arrow","")}else if(lKey=="multiply"){validKey="*"}else{validKey=lKey}}return validKey}function transformKeyIdentifier(keyIdent){var validKey="";if(keyIdent){if(keyIdent in KEY_IDENTIFIER){validKey=KEY_IDENTIFIER[keyIdent]}else if(IDENT_CHAR.test(keyIdent)){keyIdent=parseInt(keyIdent.replace("U+","0x"),16);validKey=String.fromCharCode(keyIdent).toLowerCase()}else{validKey=keyIdent.toLowerCase()}}return validKey}function transformKeyCode(keyCode){var validKey="";if(Number(keyCode)){if(keyCode>=65&&keyCode<=90){validKey=String.fromCharCode(32+keyCode)}else if(keyCode>=112&&keyCode<=123){validKey="f"+(keyCode-112)}else if(keyCode>=48&&keyCode<=57){validKey=String(keyCode-48)}else if(keyCode>=96&&keyCode<=105){validKey=String(keyCode-96)}else{validKey=KEY_CODE[keyCode]}}return validKey}function normalizedKeyForEvent(keyEvent,noSpecialChars){if(keyEvent.key){return transformKey(keyEvent.key,noSpecialChars)}if(keyEvent.detail&&keyEvent.detail.key){return transformKey(keyEvent.detail.key,noSpecialChars)}return transformKeyIdentifier(keyEvent.keyIdentifier)||transformKeyCode(keyEvent.keyCode)||""}function keyComboMatchesEvent(keyCombo,event){var keyEvent=normalizedKeyForEvent(event,keyCombo.hasModifiers);return keyEvent===keyCombo.key&&(!keyCombo.hasModifiers||!!event.shiftKey===!!keyCombo.shiftKey&&!!event.ctrlKey===!!keyCombo.ctrlKey&&!!event.altKey===!!keyCombo.altKey&&!!event.metaKey===!!keyCombo.metaKey)}function parseKeyComboString(keyComboString){if(keyComboString.length===1){return{combo:keyComboString,key:keyComboString,event:"keydown"}}return keyComboString.split("+").reduce(function(parsedKeyCombo,keyComboPart){var eventParts=keyComboPart.split(":");var keyName=eventParts[0];var event=eventParts[1];if(keyName in MODIFIER_KEYS){parsedKeyCombo[MODIFIER_KEYS[keyName]]=true;parsedKeyCombo.hasModifiers=true}else{parsedKeyCombo.key=keyName;parsedKeyCombo.event=event||"keydown"}return parsedKeyCombo},{combo:keyComboString.split(":").shift()})}function parseEventString(eventString){return eventString.trim().split(" ").map(function(keyComboString){return parseKeyComboString(keyComboString)})}Polymer.IronA11yKeysBehavior={properties:{keyEventTarget:{type:Object,value:function(){return this}},stopKeyboardEventPropagation:{type:Boolean,value:false},_boundKeyHandlers:{type:Array,value:function(){return[]}},_imperativeKeyBindings:{type:Object,value:function(){return{}}}},observers:["_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)"],keyBindings:{},registered:function(){this._prepKeyBindings()},attached:function(){this._listenKeyEventListeners()},detached:function(){this._unlistenKeyEventListeners()},addOwnKeyBinding:function(eventString,handlerName){this._imperativeKeyBindings[eventString]=handlerName;this._prepKeyBindings();this._resetKeyEventListeners()},removeOwnKeyBindings:function(){this._imperativeKeyBindings={};this._prepKeyBindings();this._resetKeyEventListeners()},keyboardEventMatchesKeys:function(event,eventString){var keyCombos=parseEventString(eventString);for(var i=0;i<keyCombos.length;++i){if(keyComboMatchesEvent(keyCombos[i],event)){return true}}return false},_collectKeyBindings:function(){var keyBindings=this.behaviors.map(function(behavior){return behavior.keyBindings});if(keyBindings.indexOf(this.keyBindings)===-1){keyBindings.push(this.keyBindings)}return keyBindings},_prepKeyBindings:function(){this._keyBindings={};this._collectKeyBindings().forEach(function(keyBindings){for(var eventString in keyBindings){this._addKeyBinding(eventString,keyBindings[eventString])}},this);for(var eventString in this._imperativeKeyBindings){this._addKeyBinding(eventString,this._imperativeKeyBindings[eventString])}for(var eventName in this._keyBindings){this._keyBindings[eventName].sort(function(kb1,kb2){var b1=kb1[0].hasModifiers;var b2=kb2[0].hasModifiers;return b1===b2?0:b1?-1:1})}},_addKeyBinding:function(eventString,handlerName){parseEventString(eventString).forEach(function(keyCombo){this._keyBindings[keyCombo.event]=this._keyBindings[keyCombo.event]||[];this._keyBindings[keyCombo.event].push([keyCombo,handlerName])},this)},_resetKeyEventListeners:function(){this._unlistenKeyEventListeners();if(this.isAttached){this._listenKeyEventListeners()}},_listenKeyEventListeners:function(){if(!this.keyEventTarget){return}Object.keys(this._keyBindings).forEach(function(eventName){var keyBindings=this._keyBindings[eventName];var boundKeyHandler=this._onKeyBindingEvent.bind(this,keyBindings);this._boundKeyHandlers.push([this.keyEventTarget,eventName,boundKeyHandler]);this.keyEventTarget.addEventListener(eventName,boundKeyHandler)},this)},_unlistenKeyEventListeners:function(){var keyHandlerTuple;var keyEventTarget;var eventName;var boundKeyHandler;while(this._boundKeyHandlers.length){keyHandlerTuple=this._boundKeyHandlers.pop();keyEventTarget=keyHandlerTuple[0];eventName=keyHandlerTuple[1];boundKeyHandler=keyHandlerTuple[2];keyEventTarget.removeEventListener(eventName,boundKeyHandler)}},_onKeyBindingEvent:function(keyBindings,event){if(this.stopKeyboardEventPropagation){event.stopPropagation()}if(event.defaultPrevented){return}for(var i=0;i<keyBindings.length;i++){var keyCombo=keyBindings[i][0];var handlerName=keyBindings[i][1];if(keyComboMatchesEvent(keyCombo,event)){this._triggerKeyHandler(keyCombo,handlerName,event);if(event.defaultPrevented){return}}}},_triggerKeyHandler:function(keyCombo,handlerName,keyboardEvent){var detail=Object.create(keyCombo);detail.keyboardEvent=keyboardEvent;var event=new CustomEvent(keyCombo.event,{detail:detail,cancelable:true});this[handlerName].call(this,event);if(event.defaultPrevented){keyboardEvent.preventDefault()}}}})();Polymer.IronControlState={properties:{focused:{type:Boolean,value:false,notify:true,readOnly:true,reflectToAttribute:true},disabled:{type:Boolean,value:false,notify:true,observer:"_disabledChanged",reflectToAttribute:true},_oldTabIndex:{type:Number},_boundFocusBlurHandler:{type:Function,value:function(){return this._focusBlurHandler.bind(this)}}},observers:["_changedControlState(focused, disabled)"],ready:function(){this.addEventListener("focus",this._boundFocusBlurHandler,true);this.addEventListener("blur",this._boundFocusBlurHandler,true)},_focusBlurHandler:function(event){if(event.target===this){this._setFocused(event.type==="focus")}else if(!this.shadowRoot){var target=Polymer.dom(event).localTarget;if(!this.isLightDescendant(target)){this.fire(event.type,{sourceEvent:event},{node:this,bubbles:event.bubbles,cancelable:event.cancelable})}}},_disabledChanged:function(disabled,old){this.setAttribute("aria-disabled",disabled?"true":"false");this.style.pointerEvents=disabled?"none":"";if(disabled){this._oldTabIndex=this.tabIndex;this._setFocused(false);this.tabIndex=-1;this.blur()}else if(this._oldTabIndex!==undefined){this.tabIndex=this._oldTabIndex}},_changedControlState:function(){if(this._controlStateChanged){this._controlStateChanged()}}};Polymer.IronButtonStateImpl={properties:{pressed:{type:Boolean,readOnly:true,value:false,reflectToAttribute:true,observer:"_pressedChanged"},toggles:{type:Boolean,value:false,reflectToAttribute:true},active:{type:Boolean,value:false,notify:true,reflectToAttribute:true},pointerDown:{type:Boolean,readOnly:true,value:false},receivedFocusFromKeyboard:{type:Boolean,readOnly:true},ariaActiveAttribute:{type:String,value:"aria-pressed",observer:"_ariaActiveAttributeChanged"}},listeners:{down:"_downHandler",up:"_upHandler",tap:"_tapHandler"},observers:["_detectKeyboardFocus(focused)","_activeChanged(active, ariaActiveAttribute)"],keyBindings:{"enter:keydown":"_asyncClick","space:keydown":"_spaceKeyDownHandler","space:keyup":"_spaceKeyUpHandler"},_mouseEventRe:/^mouse/,_tapHandler:function(){if(this.toggles){this._userActivate(!this.active)}else{this.active=false}},_detectKeyboardFocus:function(focused){this._setReceivedFocusFromKeyboard(!this.pointerDown&&focused)},_userActivate:function(active){if(this.active!==active){this.active=active;this.fire("change")}},_downHandler:function(event){this._setPointerDown(true);this._setPressed(true);this._setReceivedFocusFromKeyboard(false)},_upHandler:function(){this._setPointerDown(false);this._setPressed(false)},_spaceKeyDownHandler:function(event){var keyboardEvent=event.detail.keyboardEvent;var target=Polymer.dom(keyboardEvent).localTarget;if(this.isLightDescendant(target))return;keyboardEvent.preventDefault();keyboardEvent.stopImmediatePropagation();this._setPressed(true)},_spaceKeyUpHandler:function(event){var keyboardEvent=event.detail.keyboardEvent;var target=Polymer.dom(keyboardEvent).localTarget;if(this.isLightDescendant(target))return;if(this.pressed){this._asyncClick()}this._setPressed(false)},_asyncClick:function(){this.async(function(){this.click()},1)},_pressedChanged:function(pressed){this._changedButtonState()},_ariaActiveAttributeChanged:function(value,oldValue){if(oldValue&&oldValue!=value&&this.hasAttribute(oldValue)){this.removeAttribute(oldValue)}},_activeChanged:function(active,ariaActiveAttribute){if(this.toggles){this.setAttribute(this.ariaActiveAttribute,active?"true":"false")}else{this.removeAttribute(this.ariaActiveAttribute)}this._changedButtonState()},_controlStateChanged:function(){if(this.disabled){this._setPressed(false)}else{this._changedButtonState()}},_changedButtonState:function(){if(this._buttonStateChanged){this._buttonStateChanged()}}};Polymer.IronButtonState=[Polymer.IronA11yKeysBehavior,Polymer.IronButtonStateImpl];(function(){var Utility={distance:function(x1,y1,x2,y2){var xDelta=x1-x2;var yDelta=y1-y2;return Math.sqrt(xDelta*xDelta+yDelta*yDelta)},now:window.performance&&window.performance.now?window.performance.now.bind(window.performance):Date.now};function ElementMetrics(element){this.element=element;this.width=this.boundingRect.width;this.height=this.boundingRect.height;this.size=Math.max(this.width,this.height)}ElementMetrics.prototype={get boundingRect(){return this.element.getBoundingClientRect()},furthestCornerDistanceFrom:function(x,y){var topLeft=Utility.distance(x,y,0,0);var topRight=Utility.distance(x,y,this.width,0);var bottomLeft=Utility.distance(x,y,0,this.height);var bottomRight=Utility.distance(x,y,this.width,this.height);return Math.max(topLeft,topRight,bottomLeft,bottomRight)}};function Ripple(element){this.element=element;this.color=window.getComputedStyle(element).color;this.wave=document.createElement("div");this.waveContainer=document.createElement("div");this.wave.style.backgroundColor=this.color;this.wave.classList.add("wave");this.waveContainer.classList.add("wave-container");Polymer.dom(this.waveContainer).appendChild(this.wave);this.resetInteractionState()}Ripple.MAX_RADIUS=300;Ripple.prototype={get recenters(){return this.element.recenters},get center(){return this.element.center},get mouseDownElapsed(){var elapsed;if(!this.mouseDownStart){return 0}elapsed=Utility.now()-this.mouseDownStart;if(this.mouseUpStart){elapsed-=this.mouseUpElapsed}return elapsed},get mouseUpElapsed(){return this.mouseUpStart?Utility.now()-this.mouseUpStart:0},get mouseDownElapsedSeconds(){return this.mouseDownElapsed/1e3},get mouseUpElapsedSeconds(){return this.mouseUpElapsed/1e3},get mouseInteractionSeconds(){return this.mouseDownElapsedSeconds+this.mouseUpElapsedSeconds},get initialOpacity(){return this.element.initialOpacity},get opacityDecayVelocity(){return this.element.opacityDecayVelocity},get radius(){var width2=this.containerMetrics.width*this.containerMetrics.width;var height2=this.containerMetrics.height*this.containerMetrics.height;var waveRadius=Math.min(Math.sqrt(width2+height2),Ripple.MAX_RADIUS)*1.1+5;var duration=1.1-.2*(waveRadius/Ripple.MAX_RADIUS);var timeNow=this.mouseInteractionSeconds/duration;var size=waveRadius*(1-Math.pow(80,-timeNow));return Math.abs(size)},get opacity(){if(!this.mouseUpStart){return this.initialOpacity}return Math.max(0,this.initialOpacity-this.mouseUpElapsedSeconds*this.opacityDecayVelocity)},get outerOpacity(){var outerOpacity=this.mouseUpElapsedSeconds*.3;var waveOpacity=this.opacity;return Math.max(0,Math.min(outerOpacity,waveOpacity))},get isOpacityFullyDecayed(){return this.opacity<.01&&this.radius>=Math.min(this.maxRadius,Ripple.MAX_RADIUS)},get isRestingAtMaxRadius(){return this.opacity>=this.initialOpacity&&this.radius>=Math.min(this.maxRadius,Ripple.MAX_RADIUS)},get isAnimationComplete(){return this.mouseUpStart?this.isOpacityFullyDecayed:this.isRestingAtMaxRadius},get translationFraction(){return Math.min(1,this.radius/this.containerMetrics.size*2/Math.sqrt(2))},get xNow(){if(this.xEnd){return this.xStart+this.translationFraction*(this.xEnd-this.xStart)}return this.xStart},get yNow(){if(this.yEnd){return this.yStart+this.translationFraction*(this.yEnd-this.yStart)}return this.yStart},get isMouseDown(){return this.mouseDownStart&&!this.mouseUpStart},resetInteractionState:function(){this.maxRadius=0;this.mouseDownStart=0;this.mouseUpStart=0;this.xStart=0;this.yStart=0;this.xEnd=0;this.yEnd=0;this.slideDistance=0;this.containerMetrics=new ElementMetrics(this.element)},draw:function(){var scale;var translateString;var dx;var dy;this.wave.style.opacity=this.opacity;scale=this.radius/(this.containerMetrics.size/2);dx=this.xNow-this.containerMetrics.width/2;
+dy=this.yNow-this.containerMetrics.height/2;this.waveContainer.style.webkitTransform="translate("+dx+"px, "+dy+"px)";this.waveContainer.style.transform="translate3d("+dx+"px, "+dy+"px, 0)";this.wave.style.webkitTransform="scale("+scale+","+scale+")";this.wave.style.transform="scale3d("+scale+","+scale+",1)"},downAction:function(event){var xCenter=this.containerMetrics.width/2;var yCenter=this.containerMetrics.height/2;this.resetInteractionState();this.mouseDownStart=Utility.now();if(this.center){this.xStart=xCenter;this.yStart=yCenter;this.slideDistance=Utility.distance(this.xStart,this.yStart,this.xEnd,this.yEnd)}else{this.xStart=event?event.detail.x-this.containerMetrics.boundingRect.left:this.containerMetrics.width/2;this.yStart=event?event.detail.y-this.containerMetrics.boundingRect.top:this.containerMetrics.height/2}if(this.recenters){this.xEnd=xCenter;this.yEnd=yCenter;this.slideDistance=Utility.distance(this.xStart,this.yStart,this.xEnd,this.yEnd)}this.maxRadius=this.containerMetrics.furthestCornerDistanceFrom(this.xStart,this.yStart);this.waveContainer.style.top=(this.containerMetrics.height-this.containerMetrics.size)/2+"px";this.waveContainer.style.left=(this.containerMetrics.width-this.containerMetrics.size)/2+"px";this.waveContainer.style.width=this.containerMetrics.size+"px";this.waveContainer.style.height=this.containerMetrics.size+"px"},upAction:function(event){if(!this.isMouseDown){return}this.mouseUpStart=Utility.now()},remove:function(){Polymer.dom(this.waveContainer.parentNode).removeChild(this.waveContainer)}};Polymer({is:"paper-ripple",behaviors:[Polymer.IronA11yKeysBehavior],properties:{initialOpacity:{type:Number,value:.25},opacityDecayVelocity:{type:Number,value:.8},recenters:{type:Boolean,value:false},center:{type:Boolean,value:false},ripples:{type:Array,value:function(){return[]}},animating:{type:Boolean,readOnly:true,reflectToAttribute:true,value:false},holdDown:{type:Boolean,value:false,observer:"_holdDownChanged"},noink:{type:Boolean,value:false},_animating:{type:Boolean},_boundAnimate:{type:Function,value:function(){return this.animate.bind(this)}}},get target(){return this.keyEventTarget},keyBindings:{"enter:keydown":"_onEnterKeydown","space:keydown":"_onSpaceKeydown","space:keyup":"_onSpaceKeyup"},attached:function(){if(this.parentNode.nodeType==11){this.keyEventTarget=Polymer.dom(this).getOwnerRoot().host}else{this.keyEventTarget=this.parentNode}var keyEventTarget=this.keyEventTarget;this.listen(keyEventTarget,"up","uiUpAction");this.listen(keyEventTarget,"down","uiDownAction")},detached:function(){this.unlisten(this.keyEventTarget,"up","uiUpAction");this.unlisten(this.keyEventTarget,"down","uiDownAction");this.keyEventTarget=null},get shouldKeepAnimating(){for(var index=0;index<this.ripples.length;++index){if(!this.ripples[index].isAnimationComplete){return true}}return false},simulatedRipple:function(){this.downAction(null);this.async(function(){this.upAction()},1)},uiDownAction:function(event){if(!this.noink){this.downAction(event)}},downAction:function(event){if(this.holdDown&&this.ripples.length>0){return}var ripple=this.addRipple();ripple.downAction(event);if(!this._animating){this._animating=true;this.animate()}},uiUpAction:function(event){if(!this.noink){this.upAction(event)}},upAction:function(event){if(this.holdDown){return}this.ripples.forEach(function(ripple){ripple.upAction(event)});this._animating=true;this.animate()},onAnimationComplete:function(){this._animating=false;this.$.background.style.backgroundColor=null;this.fire("transitionend")},addRipple:function(){var ripple=new Ripple(this);Polymer.dom(this.$.waves).appendChild(ripple.waveContainer);this.$.background.style.backgroundColor=ripple.color;this.ripples.push(ripple);this._setAnimating(true);return ripple},removeRipple:function(ripple){var rippleIndex=this.ripples.indexOf(ripple);if(rippleIndex<0){return}this.ripples.splice(rippleIndex,1);ripple.remove();if(!this.ripples.length){this._setAnimating(false)}},animate:function(){if(!this._animating){return}var index;var ripple;for(index=0;index<this.ripples.length;++index){ripple=this.ripples[index];ripple.draw();this.$.background.style.opacity=ripple.outerOpacity;if(ripple.isOpacityFullyDecayed&&!ripple.isRestingAtMaxRadius){this.removeRipple(ripple)}}if(!this.shouldKeepAnimating&&this.ripples.length===0){this.onAnimationComplete()}else{window.requestAnimationFrame(this._boundAnimate)}},_onEnterKeydown:function(){this.uiDownAction();this.async(this.uiUpAction,1)},_onSpaceKeydown:function(){this.uiDownAction()},_onSpaceKeyup:function(){this.uiUpAction()},_holdDownChanged:function(newVal,oldVal){if(oldVal===undefined){return}if(newVal){this.downAction()}else{this.upAction()}}})})();Polymer.PaperRippleBehavior={properties:{noink:{type:Boolean,observer:"_noinkChanged"},_rippleContainer:{type:Object}},_buttonStateChanged:function(){if(this.focused){this.ensureRipple()}},_downHandler:function(event){Polymer.IronButtonStateImpl._downHandler.call(this,event);if(this.pressed){this.ensureRipple(event)}},ensureRipple:function(optTriggeringEvent){if(!this.hasRipple()){this._ripple=this._createRipple();this._ripple.noink=this.noink;var rippleContainer=this._rippleContainer||this.root;if(rippleContainer){Polymer.dom(rippleContainer).appendChild(this._ripple)}if(optTriggeringEvent){var domContainer=Polymer.dom(this._rippleContainer||this);var target=Polymer.dom(optTriggeringEvent).rootTarget;if(domContainer.deepContains(target)){this._ripple.uiDownAction(optTriggeringEvent)}}}},getRipple:function(){this.ensureRipple();return this._ripple},hasRipple:function(){return Boolean(this._ripple)},_createRipple:function(){return document.createElement("paper-ripple")},_noinkChanged:function(noink){if(this.hasRipple()){this._ripple.noink=noink}}};Polymer.PaperInkyFocusBehaviorImpl={observers:["_focusedChanged(receivedFocusFromKeyboard)"],_focusedChanged:function(receivedFocusFromKeyboard){if(receivedFocusFromKeyboard){this.ensureRipple()}if(this.hasRipple()){this._ripple.holdDown=receivedFocusFromKeyboard}},_createRipple:function(){var ripple=Polymer.PaperRippleBehavior._createRipple();ripple.id="ink";ripple.setAttribute("center","");ripple.classList.add("circle");return ripple}};Polymer.PaperInkyFocusBehavior=[Polymer.IronButtonState,Polymer.IronControlState,Polymer.PaperRippleBehavior,Polymer.PaperInkyFocusBehaviorImpl];Polymer({is:"paper-icon-button",hostAttributes:{role:"button",tabindex:"0"},behaviors:[Polymer.PaperInkyFocusBehavior],properties:{src:{type:String},icon:{type:String},alt:{type:String,observer:"_altChanged"}},_altChanged:function(newValue,oldValue){var label=this.getAttribute("aria-label");if(!label||oldValue==label){this.setAttribute("aria-label",newValue)}}});Polymer({is:"iron-iconset-svg",properties:{name:{type:String,observer:"_nameChanged"},size:{type:Number,value:24}},attached:function(){this.style.display="none"},getIconNames:function(){this._icons=this._createIconMap();return Object.keys(this._icons).map(function(n){return this.name+":"+n},this)},applyIcon:function(element,iconName){element=element.root||element;this.removeIcon(element);var svg=this._cloneIcon(iconName);if(svg){var pde=Polymer.dom(element);pde.insertBefore(svg,pde.childNodes[0]);return element._svgIcon=svg}return null},removeIcon:function(element){if(element._svgIcon){Polymer.dom(element).removeChild(element._svgIcon);element._svgIcon=null}},_nameChanged:function(){new Polymer.IronMeta({type:"iconset",key:this.name,value:this});this.async(function(){this.fire("iron-iconset-added",this,{node:window})})},_createIconMap:function(){var icons=Object.create(null);Polymer.dom(this).querySelectorAll("[id]").forEach(function(icon){icons[icon.id]=icon});return icons},_cloneIcon:function(id){this._icons=this._icons||this._createIconMap();return this._prepareSvgClone(this._icons[id],this.size)},_prepareSvgClone:function(sourceSvg,size){if(sourceSvg){var content=sourceSvg.cloneNode(true),svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),viewBox=content.getAttribute("viewBox")||"0 0 "+size+" "+size;svg.setAttribute("viewBox",viewBox);svg.setAttribute("preserveAspectRatio","xMidYMid meet");svg.style.cssText="pointer-events: none; display: block; width: 100%; height: 100%;";svg.appendChild(content).removeAttribute("id");return svg}return null}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'cr-lazy-render',
- "extends": 'template',
- behaviors: [ Polymer.Templatizer ],
- child_: null,
- get: function() {
- if (!this.child_) this.render_();
- return this.child_;
- },
- getIfExists: function() {
- return this.child_;
- },
- render_: function() {
- if (!this.ctor) this.templatize(this);
- var parentNode = this.parentNode;
- if (parentNode && !this.child_) {
- var instance = this.stamp({});
- this.child_ = instance.root.firstElementChild;
- parentNode.insertBefore(instance.root, this);
- }
- },
- _forwardParentProp: function(prop, value) {
- if (this.child_) this.child_._templateInstance[prop] = value;
- },
- _forwardParentPath: function(path, value) {
- if (this.child_) this.child_._templateInstance.notifyPath(path, value, true);
- }
-});
-
-(function() {
- 'use strict';
- Polymer.IronA11yAnnouncer = Polymer({
- is: 'iron-a11y-announcer',
- properties: {
- mode: {
- type: String,
- value: 'polite'
- },
- _text: {
- type: String,
- value: ''
- }
- },
- created: function() {
- if (!Polymer.IronA11yAnnouncer.instance) {
- Polymer.IronA11yAnnouncer.instance = this;
- }
- document.body.addEventListener('iron-announce', this._onIronAnnounce.bind(this));
- },
- announce: function(text) {
- this._text = '';
- this.async(function() {
- this._text = text;
- }, 100);
- },
- _onIronAnnounce: function(event) {
- if (event.detail && event.detail.text) {
- this.announce(event.detail.text);
- }
- }
- });
- Polymer.IronA11yAnnouncer.instance = null;
- Polymer.IronA11yAnnouncer.requestAvailability = function() {
- if (!Polymer.IronA11yAnnouncer.instance) {
- Polymer.IronA11yAnnouncer.instance = document.createElement('iron-a11y-announcer');
- }
- document.body.appendChild(Polymer.IronA11yAnnouncer.instance);
- };
-})();
-
-Polymer.IronValidatableBehaviorMeta = null;
-
-Polymer.IronValidatableBehavior = {
- properties: {
- validator: {
- type: String
- },
- invalid: {
- notify: true,
- reflectToAttribute: true,
- type: Boolean,
- value: false
- },
- _validatorMeta: {
- type: Object
- },
- validatorType: {
- type: String,
- value: 'validator'
- },
- _validator: {
- type: Object,
- computed: '__computeValidator(validator)'
- }
- },
- observers: [ '_invalidChanged(invalid)' ],
- registered: function() {
- Polymer.IronValidatableBehaviorMeta = new Polymer.IronMeta({
- type: 'validator'
- });
- },
- _invalidChanged: function() {
- if (this.invalid) {
- this.setAttribute('aria-invalid', 'true');
- } else {
- this.removeAttribute('aria-invalid');
- }
- },
- hasValidator: function() {
- return this._validator != null;
- },
- validate: function(value) {
- this.invalid = !this._getValidity(value);
- return !this.invalid;
- },
- _getValidity: function(value) {
- if (this.hasValidator()) {
- return this._validator.validate(value);
- }
- return true;
- },
- __computeValidator: function() {
- return Polymer.IronValidatableBehaviorMeta && Polymer.IronValidatableBehaviorMeta.byKey(this.validator);
- }
-};
-
-Polymer({
- is: 'iron-input',
- "extends": 'input',
- behaviors: [ Polymer.IronValidatableBehavior ],
- properties: {
- bindValue: {
- observer: '_bindValueChanged',
- type: String
- },
- preventInvalidInput: {
- type: Boolean
- },
- allowedPattern: {
- type: String,
- observer: "_allowedPatternChanged"
- },
- _previousValidInput: {
- type: String,
- value: ''
- },
- _patternAlreadyChecked: {
- type: Boolean,
- value: false
- }
- },
- listeners: {
- input: '_onInput',
- keypress: '_onKeypress'
- },
- registered: function() {
- if (!this._canDispatchEventOnDisabled()) {
- this._origDispatchEvent = this.dispatchEvent;
- this.dispatchEvent = this._dispatchEventFirefoxIE;
- }
- },
- created: function() {
- Polymer.IronA11yAnnouncer.requestAvailability();
- },
- _canDispatchEventOnDisabled: function() {
- var input = document.createElement('input');
- var canDispatch = false;
- input.disabled = true;
- input.addEventListener('feature-check-dispatch-event', function() {
- canDispatch = true;
- });
- try {
- input.dispatchEvent(new Event('feature-check-dispatch-event'));
- } catch (e) {}
- return canDispatch;
- },
- _dispatchEventFirefoxIE: function() {
- var disabled = this.disabled;
- this.disabled = false;
- this._origDispatchEvent.apply(this, arguments);
- this.disabled = disabled;
- },
- get _patternRegExp() {
- var pattern;
- if (this.allowedPattern) {
- pattern = new RegExp(this.allowedPattern);
- } else {
- switch (this.type) {
- case 'number':
- pattern = /[0-9.,e-]/;
- break;
- }
- }
- return pattern;
- },
- ready: function() {
- this.bindValue = this.value;
- },
- _bindValueChanged: function() {
- if (this.value !== this.bindValue) {
- this.value = !(this.bindValue || this.bindValue === 0 || this.bindValue === false) ? '' : this.bindValue;
- }
- this.fire('bind-value-changed', {
- value: this.bindValue
- });
- },
- _allowedPatternChanged: function() {
- this.preventInvalidInput = this.allowedPattern ? true : false;
- },
- _onInput: function() {
- if (this.preventInvalidInput && !this._patternAlreadyChecked) {
- var valid = this._checkPatternValidity();
- if (!valid) {
- this._announceInvalidCharacter('Invalid string of characters not entered.');
- this.value = this._previousValidInput;
- }
- }
- this.bindValue = this.value;
- this._previousValidInput = this.value;
- this._patternAlreadyChecked = false;
- },
- _isPrintable: function(event) {
- var anyNonPrintable = event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 13 || event.keyCode == 27;
- var mozNonPrintable = event.keyCode == 19 || event.keyCode == 20 || event.keyCode == 45 || event.keyCode == 46 || event.keyCode == 144 || event.keyCode == 145 || event.keyCode > 32 && event.keyCode < 41 || event.keyCode > 111 && event.keyCode < 124;
- return !anyNonPrintable && !(event.charCode == 0 && mozNonPrintable);
- },
- _onKeypress: function(event) {
- if (!this.preventInvalidInput && this.type !== 'number') {
- return;
- }
- var regexp = this._patternRegExp;
- if (!regexp) {
- return;
- }
- if (event.metaKey || event.ctrlKey || event.altKey) return;
- this._patternAlreadyChecked = true;
- var thisChar = String.fromCharCode(event.charCode);
- if (this._isPrintable(event) && !regexp.test(thisChar)) {
- event.preventDefault();
- this._announceInvalidCharacter('Invalid character ' + thisChar + ' not entered.');
- }
- },
- _checkPatternValidity: function() {
- var regexp = this._patternRegExp;
- if (!regexp) {
- return true;
- }
- for (var i = 0; i < this.value.length; i++) {
- if (!regexp.test(this.value[i])) {
- return false;
- }
- }
- return true;
- },
- validate: function() {
- var valid = this.checkValidity();
- if (valid) {
- if (this.required && this.value === '') {
- valid = false;
- } else if (this.hasValidator()) {
- valid = Polymer.IronValidatableBehavior.validate.call(this, this.value);
- }
- }
- this.invalid = !valid;
- this.fire('iron-input-validate');
- return valid;
- },
- _announceInvalidCharacter: function(message) {
- this.fire('iron-announce', {
- text: message
- });
- }
-});
-
-Polymer({
- is: 'paper-input-container',
- properties: {
- noLabelFloat: {
- type: Boolean,
- value: false
- },
- alwaysFloatLabel: {
- type: Boolean,
- value: false
- },
- attrForValue: {
- type: String,
- value: 'bind-value'
- },
- autoValidate: {
- type: Boolean,
- value: false
- },
- invalid: {
- observer: '_invalidChanged',
- type: Boolean,
- value: false
- },
- focused: {
- readOnly: true,
- type: Boolean,
- value: false,
- notify: true
- },
- _addons: {
- type: Array
- },
- _inputHasContent: {
- type: Boolean,
- value: false
- },
- _inputSelector: {
- type: String,
- value: 'input,textarea,.paper-input-input'
- },
- _boundOnFocus: {
- type: Function,
- value: function() {
- return this._onFocus.bind(this);
- }
- },
- _boundOnBlur: {
- type: Function,
- value: function() {
- return this._onBlur.bind(this);
- }
- },
- _boundOnInput: {
- type: Function,
- value: function() {
- return this._onInput.bind(this);
- }
- },
- _boundValueChanged: {
- type: Function,
- value: function() {
- return this._onValueChanged.bind(this);
- }
- }
- },
- listeners: {
- 'addon-attached': '_onAddonAttached',
- 'iron-input-validate': '_onIronInputValidate'
- },
- get _valueChangedEvent() {
- return this.attrForValue + '-changed';
- },
- get _propertyForValue() {
- return Polymer.CaseMap.dashToCamelCase(this.attrForValue);
- },
- get _inputElement() {
- return Polymer.dom(this).querySelector(this._inputSelector);
- },
- get _inputElementValue() {
- return this._inputElement[this._propertyForValue] || this._inputElement.value;
- },
- ready: function() {
- if (!this._addons) {
- this._addons = [];
- }
- this.addEventListener('focus', this._boundOnFocus, true);
- this.addEventListener('blur', this._boundOnBlur, true);
- },
- attached: function() {
- if (this.attrForValue) {
- this._inputElement.addEventListener(this._valueChangedEvent, this._boundValueChanged);
- } else {
- this.addEventListener('input', this._onInput);
- }
- if (this._inputElementValue != '') {
- this._handleValueAndAutoValidate(this._inputElement);
- } else {
- this._handleValue(this._inputElement);
- }
- },
- _onAddonAttached: function(event) {
- if (!this._addons) {
- this._addons = [];
- }
- var target = event.target;
- if (this._addons.indexOf(target) === -1) {
- this._addons.push(target);
- if (this.isAttached) {
- this._handleValue(this._inputElement);
- }
- }
- },
- _onFocus: function() {
- this._setFocused(true);
- },
- _onBlur: function() {
- this._setFocused(false);
- this._handleValueAndAutoValidate(this._inputElement);
- },
- _onInput: function(event) {
- this._handleValueAndAutoValidate(event.target);
- },
- _onValueChanged: function(event) {
- this._handleValueAndAutoValidate(event.target);
- },
- _handleValue: function(inputElement) {
- var value = this._inputElementValue;
- if (value || value === 0 || inputElement.type === 'number' && !inputElement.checkValidity()) {
- this._inputHasContent = true;
- } else {
- this._inputHasContent = false;
- }
- this.updateAddons({
- inputElement: inputElement,
- value: value,
- invalid: this.invalid
- });
- },
- _handleValueAndAutoValidate: function(inputElement) {
- if (this.autoValidate) {
- var valid;
- if (inputElement.validate) {
- valid = inputElement.validate(this._inputElementValue);
- } else {
- valid = inputElement.checkValidity();
- }
- this.invalid = !valid;
- }
- this._handleValue(inputElement);
- },
- _onIronInputValidate: function(event) {
- this.invalid = this._inputElement.invalid;
- },
- _invalidChanged: function() {
- if (this._addons) {
- this.updateAddons({
- invalid: this.invalid
- });
- }
- },
- updateAddons: function(state) {
- for (var addon, index = 0; addon = this._addons[index]; index++) {
- addon.update(state);
- }
- },
- _computeInputContentClass: function(noLabelFloat, alwaysFloatLabel, focused, invalid, _inputHasContent) {
- var cls = 'input-content';
- if (!noLabelFloat) {
- var label = this.querySelector('label');
- if (alwaysFloatLabel || _inputHasContent) {
- cls += ' label-is-floating';
- this.$.labelAndInputContainer.style.position = 'static';
- if (invalid) {
- cls += ' is-invalid';
- } else if (focused) {
- cls += " label-is-highlighted";
- }
- } else {
- if (label) {
- this.$.labelAndInputContainer.style.position = 'relative';
- }
- }
- } else {
- if (_inputHasContent) {
- cls += ' label-is-hidden';
- }
- }
- return cls;
- },
- _computeUnderlineClass: function(focused, invalid) {
- var cls = 'underline';
- if (invalid) {
- cls += ' is-invalid';
- } else if (focused) {
- cls += ' is-highlighted';
- }
- return cls;
- },
- _computeAddOnContentClass: function(focused, invalid) {
- var cls = 'add-on-content';
- if (invalid) {
- cls += ' is-invalid';
- } else if (focused) {
- cls += ' is-highlighted';
- }
- return cls;
- }
-});
-
-Polymer.PaperSpinnerBehavior = {
- listeners: {
- animationend: '__reset',
- webkitAnimationEnd: '__reset'
- },
- properties: {
- active: {
- type: Boolean,
- value: false,
- reflectToAttribute: true,
- observer: '__activeChanged'
- },
- alt: {
- type: String,
- value: 'loading',
- observer: '__altChanged'
- },
- __coolingDown: {
- type: Boolean,
- value: false
- }
- },
- __computeContainerClasses: function(active, coolingDown) {
- return [ active || coolingDown ? 'active' : '', coolingDown ? 'cooldown' : '' ].join(' ');
- },
- __activeChanged: function(active, old) {
- this.__setAriaHidden(!active);
- this.__coolingDown = !active && old;
- },
- __altChanged: function(alt) {
- if (alt === this.getPropertyInfo('alt').value) {
- this.alt = this.getAttribute('aria-label') || alt;
- } else {
- this.__setAriaHidden(alt === '');
- this.setAttribute('aria-label', alt);
- }
- },
- __setAriaHidden: function(hidden) {
- var attr = 'aria-hidden';
- if (hidden) {
- this.setAttribute(attr, 'true');
- } else {
- this.removeAttribute(attr);
- }
- },
- __reset: function() {
- this.active = false;
- this.__coolingDown = false;
- }
-};
-
-Polymer({
- is: 'paper-spinner-lite',
- behaviors: [ Polymer.PaperSpinnerBehavior ]
-});
-
+Polymer({is:"cr-lazy-render","extends":"template",behaviors:[Polymer.Templatizer],child_:null,get:function(){if(!this.child_)this.render_();return this.child_},getIfExists:function(){return this.child_},render_:function(){if(!this.ctor)this.templatize(this);var parentNode=this.parentNode;if(parentNode&&!this.child_){var instance=this.stamp({});this.child_=instance.root.firstElementChild;parentNode.insertBefore(instance.root,this)}},_forwardParentProp:function(prop,value){if(this.child_)this.child_._templateInstance[prop]=value},_forwardParentPath:function(path,value){if(this.child_)this.child_._templateInstance.notifyPath(path,value,true)}});(function(){"use strict";Polymer.IronA11yAnnouncer=Polymer({is:"iron-a11y-announcer",properties:{mode:{type:String,value:"polite"},_text:{type:String,value:""}},created:function(){if(!Polymer.IronA11yAnnouncer.instance){Polymer.IronA11yAnnouncer.instance=this}document.body.addEventListener("iron-announce",this._onIronAnnounce.bind(this))},announce:function(text){this._text="";this.async(function(){this._text=text},100)},_onIronAnnounce:function(event){if(event.detail&&event.detail.text){this.announce(event.detail.text)}}});Polymer.IronA11yAnnouncer.instance=null;Polymer.IronA11yAnnouncer.requestAvailability=function(){if(!Polymer.IronA11yAnnouncer.instance){Polymer.IronA11yAnnouncer.instance=document.createElement("iron-a11y-announcer")}document.body.appendChild(Polymer.IronA11yAnnouncer.instance)}})();Polymer.IronValidatableBehaviorMeta=null;Polymer.IronValidatableBehavior={properties:{validator:{type:String},invalid:{notify:true,reflectToAttribute:true,type:Boolean,value:false},_validatorMeta:{type:Object},validatorType:{type:String,value:"validator"},_validator:{type:Object,computed:"__computeValidator(validator)"}},observers:["_invalidChanged(invalid)"],registered:function(){Polymer.IronValidatableBehaviorMeta=new Polymer.IronMeta({type:"validator"})},_invalidChanged:function(){if(this.invalid){this.setAttribute("aria-invalid","true")}else{this.removeAttribute("aria-invalid")}},hasValidator:function(){return this._validator!=null},validate:function(value){this.invalid=!this._getValidity(value);return!this.invalid},_getValidity:function(value){if(this.hasValidator()){return this._validator.validate(value)}return true},__computeValidator:function(){return Polymer.IronValidatableBehaviorMeta&&Polymer.IronValidatableBehaviorMeta.byKey(this.validator)}};Polymer({is:"iron-input","extends":"input",behaviors:[Polymer.IronValidatableBehavior],properties:{bindValue:{observer:"_bindValueChanged",type:String},preventInvalidInput:{type:Boolean},allowedPattern:{type:String,observer:"_allowedPatternChanged"},_previousValidInput:{type:String,value:""},_patternAlreadyChecked:{type:Boolean,value:false}},listeners:{input:"_onInput",keypress:"_onKeypress"},registered:function(){if(!this._canDispatchEventOnDisabled()){this._origDispatchEvent=this.dispatchEvent;this.dispatchEvent=this._dispatchEventFirefoxIE}},created:function(){Polymer.IronA11yAnnouncer.requestAvailability()},_canDispatchEventOnDisabled:function(){var input=document.createElement("input");var canDispatch=false;input.disabled=true;input.addEventListener("feature-check-dispatch-event",function(){canDispatch=true});try{input.dispatchEvent(new Event("feature-check-dispatch-event"))}catch(e){}return canDispatch},_dispatchEventFirefoxIE:function(){var disabled=this.disabled;this.disabled=false;this._origDispatchEvent.apply(this,arguments);this.disabled=disabled},get _patternRegExp(){var pattern;if(this.allowedPattern){pattern=new RegExp(this.allowedPattern)}else{switch(this.type){case"number":pattern=/[0-9.,e-]/;break}}return pattern},ready:function(){this.bindValue=this.value},_bindValueChanged:function(){if(this.value!==this.bindValue){this.value=!(this.bindValue||this.bindValue===0||this.bindValue===false)?"":this.bindValue}this.fire("bind-value-changed",{value:this.bindValue})},_allowedPatternChanged:function(){this.preventInvalidInput=this.allowedPattern?true:false},_onInput:function(){if(this.preventInvalidInput&&!this._patternAlreadyChecked){var valid=this._checkPatternValidity();if(!valid){this._announceInvalidCharacter("Invalid string of characters not entered.");this.value=this._previousValidInput}}this.bindValue=this.value;this._previousValidInput=this.value;this._patternAlreadyChecked=false},_isPrintable:function(event){var anyNonPrintable=event.keyCode==8||event.keyCode==9||event.keyCode==13||event.keyCode==27;var mozNonPrintable=event.keyCode==19||event.keyCode==20||event.keyCode==45||event.keyCode==46||event.keyCode==144||event.keyCode==145||event.keyCode>32&&event.keyCode<41||event.keyCode>111&&event.keyCode<124;return!anyNonPrintable&&!(event.charCode==0&&mozNonPrintable)},_onKeypress:function(event){if(!this.preventInvalidInput&&this.type!=="number"){return}var regexp=this._patternRegExp;if(!regexp){return}if(event.metaKey||event.ctrlKey||event.altKey)return;this._patternAlreadyChecked=true;var thisChar=String.fromCharCode(event.charCode);if(this._isPrintable(event)&&!regexp.test(thisChar)){event.preventDefault();this._announceInvalidCharacter("Invalid character "+thisChar+" not entered.")}},_checkPatternValidity:function(){var regexp=this._patternRegExp;if(!regexp){return true}for(var i=0;i<this.value.length;i++){if(!regexp.test(this.value[i])){return false}}return true},validate:function(){var valid=this.checkValidity();if(valid){if(this.required&&this.value===""){valid=false}else if(this.hasValidator()){valid=Polymer.IronValidatableBehavior.validate.call(this,this.value)}}this.invalid=!valid;this.fire("iron-input-validate");return valid},_announceInvalidCharacter:function(message){this.fire("iron-announce",{text:message})}});Polymer({is:"paper-input-container",properties:{noLabelFloat:{type:Boolean,value:false},alwaysFloatLabel:{type:Boolean,value:false},attrForValue:{type:String,value:"bind-value"},autoValidate:{type:Boolean,value:false},invalid:{observer:"_invalidChanged",type:Boolean,value:false},focused:{readOnly:true,type:Boolean,value:false,notify:true},_addons:{type:Array},_inputHasContent:{type:Boolean,value:false},_inputSelector:{type:String,value:"input,textarea,.paper-input-input"},_boundOnFocus:{type:Function,value:function(){return this._onFocus.bind(this)}},_boundOnBlur:{type:Function,value:function(){return this._onBlur.bind(this)}},_boundOnInput:{type:Function,value:function(){return this._onInput.bind(this)}},_boundValueChanged:{type:Function,value:function(){return this._onValueChanged.bind(this)}}},listeners:{"addon-attached":"_onAddonAttached","iron-input-validate":"_onIronInputValidate"},get _valueChangedEvent(){return this.attrForValue+"-changed"},get _propertyForValue(){return Polymer.CaseMap.dashToCamelCase(this.attrForValue)},get _inputElement(){return Polymer.dom(this).querySelector(this._inputSelector)},get _inputElementValue(){return this._inputElement[this._propertyForValue]||this._inputElement.value},ready:function(){if(!this._addons){this._addons=[]}this.addEventListener("focus",this._boundOnFocus,true);this.addEventListener("blur",this._boundOnBlur,true)},attached:function(){if(this.attrForValue){this._inputElement.addEventListener(this._valueChangedEvent,this._boundValueChanged)}else{this.addEventListener("input",this._onInput)}if(this._inputElementValue!=""){this._handleValueAndAutoValidate(this._inputElement)}else{this._handleValue(this._inputElement)}},_onAddonAttached:function(event){if(!this._addons){this._addons=[]}var target=event.target;if(this._addons.indexOf(target)===-1){this._addons.push(target);if(this.isAttached){this._handleValue(this._inputElement)}}},_onFocus:function(){this._setFocused(true)},_onBlur:function(){this._setFocused(false);this._handleValueAndAutoValidate(this._inputElement)},_onInput:function(event){this._handleValueAndAutoValidate(event.target)},_onValueChanged:function(event){this._handleValueAndAutoValidate(event.target)},_handleValue:function(inputElement){var value=this._inputElementValue;if(value||value===0||inputElement.type==="number"&&!inputElement.checkValidity()){this._inputHasContent=true}else{this._inputHasContent=false}this.updateAddons({inputElement:inputElement,value:value,invalid:this.invalid})},_handleValueAndAutoValidate:function(inputElement){if(this.autoValidate){var valid;if(inputElement.validate){valid=inputElement.validate(this._inputElementValue)}else{valid=inputElement.checkValidity()}this.invalid=!valid}this._handleValue(inputElement)},_onIronInputValidate:function(event){this.invalid=this._inputElement.invalid},_invalidChanged:function(){if(this._addons){this.updateAddons({invalid:this.invalid})}},updateAddons:function(state){for(var addon,index=0;addon=this._addons[index];index++){addon.update(state)}},_computeInputContentClass:function(noLabelFloat,alwaysFloatLabel,focused,invalid,_inputHasContent){var cls="input-content";if(!noLabelFloat){var label=this.querySelector("label");if(alwaysFloatLabel||_inputHasContent){cls+=" label-is-floating";this.$.labelAndInputContainer.style.position="static";if(invalid){cls+=" is-invalid"}else if(focused){cls+=" label-is-highlighted"}}else{if(label){this.$.labelAndInputContainer.style.position="relative"}}}else{if(_inputHasContent){cls+=" label-is-hidden"}}return cls},_computeUnderlineClass:function(focused,invalid){var cls="underline";if(invalid){cls+=" is-invalid"}else if(focused){cls+=" is-highlighted"}return cls},_computeAddOnContentClass:function(focused,invalid){var cls="add-on-content";if(invalid){cls+=" is-invalid"}else if(focused){cls+=" is-highlighted"}return cls}});Polymer.PaperSpinnerBehavior={listeners:{animationend:"__reset",webkitAnimationEnd:"__reset"},properties:{active:{type:Boolean,value:false,reflectToAttribute:true,observer:"__activeChanged"},alt:{type:String,value:"loading",observer:"__altChanged"},__coolingDown:{type:Boolean,value:false}},__computeContainerClasses:function(active,coolingDown){return[active||coolingDown?"active":"",coolingDown?"cooldown":""].join(" ")},__activeChanged:function(active,old){this.__setAriaHidden(!active);this.__coolingDown=!active&&old},__altChanged:function(alt){if(alt===this.getPropertyInfo("alt").value){this.alt=this.getAttribute("aria-label")||alt}else{this.__setAriaHidden(alt==="");this.setAttribute("aria-label",alt)}},__setAriaHidden:function(hidden){var attr="aria-hidden";if(hidden){this.setAttribute(attr,"true")}else{this.removeAttribute(attr)}},__reset:function(){this.active=false;this.__coolingDown=false}};Polymer({is:"paper-spinner-lite",behaviors:[Polymer.PaperSpinnerBehavior]});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-var CrSearchFieldBehavior = {
- properties: {
- label: {
- type: String,
- value: ''
- },
- clearLabel: {
- type: String,
- value: ''
- },
- showingSearch: {
- type: Boolean,
- value: false,
- notify: true,
- observer: 'showingSearchChanged_',
- reflectToAttribute: true
- },
- lastValue_: {
- type: String,
- value: ''
- }
- },
- getSearchInput: function() {},
- getValue: function() {
- return this.getSearchInput().value;
- },
- setValue: function(value) {
- this.getSearchInput().bindValue = value;
- this.onValueChanged_(value);
- },
- showAndFocus: function() {
- this.showingSearch = true;
- this.focus_();
- },
- focus_: function() {
- this.getSearchInput().focus();
- },
- onSearchTermSearch: function() {
- this.onValueChanged_(this.getValue());
- },
- onValueChanged_: function(newValue) {
- if (newValue == this.lastValue_) return;
- this.fire('search-changed', newValue);
- this.lastValue_ = newValue;
- },
- onSearchTermKeydown: function(e) {
- if (e.key == 'Escape') this.showingSearch = false;
- },
- showingSearchChanged_: function() {
- if (this.showingSearch) {
- this.focus_();
- return;
- }
- this.setValue('');
- this.getSearchInput().blur();
- }
-};
-
+var CrSearchFieldBehavior={properties:{label:{type:String,value:""},clearLabel:{type:String,value:""},showingSearch:{type:Boolean,value:false,notify:true,observer:"showingSearchChanged_",reflectToAttribute:true},lastValue_:{type:String,value:""}},getSearchInput:function(){},getValue:function(){return this.getSearchInput().value},setValue:function(value){this.getSearchInput().bindValue=value;this.onValueChanged_(value)},showAndFocus:function(){this.showingSearch=true;this.focus_()},focus_:function(){this.getSearchInput().focus()},onSearchTermSearch:function(){this.onValueChanged_(this.getValue())},onValueChanged_:function(newValue){if(newValue==this.lastValue_)return;this.fire("search-changed",newValue);this.lastValue_=newValue},onSearchTermKeydown:function(e){if(e.key=="Escape")this.showingSearch=false},showingSearchChanged_:function(){if(this.showingSearch){this.focus_();return}this.setValue("");this.getSearchInput().blur()}};
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'cr-toolbar-search-field',
- behaviors: [ CrSearchFieldBehavior ],
- properties: {
- narrow: {
- type: Boolean,
- reflectToAttribute: true
- },
- label: String,
- clearLabel: String,
- spinnerActive: {
- type: Boolean,
- reflectToAttribute: true
- },
- hasSearchText_: Boolean,
- isSpinnerShown_: {
- type: Boolean,
- computed: 'computeIsSpinnerShown_(spinnerActive, showingSearch)'
- }
- },
- listeners: {
- tap: 'showSearch_',
- 'searchInput.bind-value-changed': 'onBindValueChanged_'
- },
- getSearchInput: function() {
- return this.$.searchInput;
- },
- isSearchFocused: function() {
- return this.$.searchTerm.focused;
- },
- computeIconTabIndex_: function(narrow) {
- return narrow ? 0 : -1;
- },
- computeIsSpinnerShown_: function() {
- return this.spinnerActive && this.showingSearch;
- },
- onInputBlur_: function() {
- if (!this.hasSearchText_) this.showingSearch = false;
- },
- onBindValueChanged_: function() {
- var newValue = this.$.searchInput.bindValue;
- this.hasSearchText_ = newValue != '';
- if (newValue != '') this.showingSearch = true;
- },
- showSearch_: function(e) {
- if (e.target != this.$.clearSearch) this.showingSearch = true;
- },
- hideSearch_: function(e) {
- this.showingSearch = false;
- e.stopPropagation();
- }
-});
-
+Polymer({is:"cr-toolbar-search-field",behaviors:[CrSearchFieldBehavior],properties:{narrow:{type:Boolean,reflectToAttribute:true},label:String,clearLabel:String,spinnerActive:{type:Boolean,reflectToAttribute:true},hasSearchText_:Boolean,isSpinnerShown_:{type:Boolean,computed:"computeIsSpinnerShown_(spinnerActive, showingSearch)"}},listeners:{tap:"showSearch_","searchInput.bind-value-changed":"onBindValueChanged_"},getSearchInput:function(){return this.$.searchInput},isSearchFocused:function(){return this.$.searchTerm.focused},computeIconTabIndex_:function(narrow){return narrow?0:-1},computeIsSpinnerShown_:function(){return this.spinnerActive&&this.showingSearch},onInputBlur_:function(){if(!this.hasSearchText_)this.showingSearch=false},onBindValueChanged_:function(){var newValue=this.$.searchInput.bindValue;this.hasSearchText_=newValue!="";if(newValue!="")this.showingSearch=true},showSearch_:function(e){if(e.target!=this.$.clearSearch)this.showingSearch=true},hideSearch_:function(e){this.showingSearch=false;e.stopPropagation()}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'cr-toolbar',
- properties: {
- pageName: String,
- searchPrompt: String,
- clearLabel: String,
- menuLabel: String,
- menuPromo: String,
- spinnerActive: Boolean,
- showMenu: {
- type: Boolean,
- value: false
- },
- showMenuPromo: {
- type: Boolean,
- value: false
- },
- closeMenuPromo: String,
- narrow_: {
- type: Boolean,
- reflectToAttribute: true
- },
- showingSearch_: {
- type: Boolean,
- reflectToAttribute: true
- }
- },
- observers: [ 'possiblyShowMenuPromo_(showMenu, showMenuPromo, showingSearch_)' ],
- getSearchField: function() {
- return this.$.search;
- },
- onClosePromoTap_: function() {
- this.showMenuPromo = false;
- },
- onMenuTap_: function() {
- this.fire('cr-menu-tap');
- this.onClosePromoTap_();
- },
- possiblyShowMenuPromo_: function() {
- Polymer.RenderStatus.afterNextRender(this, function() {
- if (this.showMenu && this.showMenuPromo && !this.showingSearch_) {
- this.$$('#menuPromo').animate({
- opacity: [ 0, .9 ]
- }, {
- duration: 500,
- fill: 'forwards'
- });
- this.fire('cr-menu-promo-shown');
- }
- }.bind(this));
- },
- titleIfNotShowMenuPromo_: function(title, showMenuPromo) {
- return showMenuPromo ? '' : title;
- }
-});
-
+Polymer({is:"cr-toolbar",properties:{pageName:String,searchPrompt:String,clearLabel:String,menuLabel:String,menuPromo:String,spinnerActive:Boolean,showMenu:{type:Boolean,value:false},showMenuPromo:{type:Boolean,value:false},closeMenuPromo:String,narrow_:{type:Boolean,reflectToAttribute:true},showingSearch_:{type:Boolean,reflectToAttribute:true}},observers:["possiblyShowMenuPromo_(showMenu, showMenuPromo, showingSearch_)"],getSearchField:function(){return this.$.search},onClosePromoTap_:function(){this.showMenuPromo=false},onMenuTap_:function(){this.fire("cr-menu-tap");this.onClosePromoTap_()},possiblyShowMenuPromo_:function(){Polymer.RenderStatus.afterNextRender(this,function(){if(this.showMenu&&this.showMenuPromo&&!this.showingSearch_){this.$$("#menuPromo").animate({opacity:[0,.9]},{duration:500,fill:"forwards"});this.fire("cr-menu-promo-shown")}}.bind(this))},titleIfNotShowMenuPromo_:function(title,showMenuPromo){return showMenuPromo?"":title}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-cr.define('md_history', function() {
- function BrowserService() {
- this.pendingDeleteItems_ = null;
- this.pendingDeletePromise_ = null;
- }
- BrowserService.prototype = {
- deleteItems: function(items) {
- if (this.pendingDeleteItems_ != null) {
- return new Promise(function(resolve, reject) {
- reject(items);
- });
- }
- var removalList = items.map(function(item) {
- return {
- url: item.url,
- timestamps: item.allTimestamps
- };
- });
- this.pendingDeleteItems_ = items;
- this.pendingDeletePromise_ = new PromiseResolver();
- chrome.send('removeVisits', removalList);
- return this.pendingDeletePromise_.promise;
- },
- removeBookmark: function(url) {
- chrome.send('removeBookmark', [ url ]);
- },
- openForeignSessionAllTabs: function(sessionTag) {
- chrome.send('openForeignSession', [ sessionTag ]);
- },
- openForeignSessionTab: function(sessionTag, windowId, tabId, e) {
- chrome.send('openForeignSession', [ sessionTag, String(windowId), String(tabId), e.button || 0, e.altKey, e.ctrlKey, e.metaKey, e.shiftKey ]);
- },
- deleteForeignSession: function(sessionTag) {
- chrome.send('deleteForeignSession', [ sessionTag ]);
- },
- openClearBrowsingData: function() {
- chrome.send('clearBrowsingData');
- },
- recordHistogram: function(histogram, value, max) {
- chrome.send('metricsHandler:recordInHistogram', [ histogram, value, max ]);
- },
- recordAction: function(action) {
- if (action.indexOf('_') == -1) action = 'HistoryPage_' + action;
- chrome.send('metricsHandler:recordAction', [ action ]);
- },
- resolveDelete_: function(successful) {
- if (this.pendingDeleteItems_ == null || this.pendingDeletePromise_ == null) {
- return;
- }
- if (successful) this.pendingDeletePromise_.resolve(this.pendingDeleteItems_); else this.pendingDeletePromise_.reject(this.pendingDeleteItems_);
- this.pendingDeleteItems_ = null;
- this.pendingDeletePromise_ = null;
- },
- menuPromoShown: function() {
- chrome.send('menuPromoShown');
- }
- };
- cr.addSingletonGetter(BrowserService);
- return {
- BrowserService: BrowserService
- };
-});
-
-function deleteComplete() {
- md_history.BrowserService.getInstance().resolveDelete_(true);
-}
-
-function deleteFailed() {
- md_history.BrowserService.getInstance().resolveDelete_(false);
-}
-
+cr.define("md_history",function(){function BrowserService(){this.pendingDeleteItems_=null;this.pendingDeletePromise_=null}BrowserService.prototype={deleteItems:function(items){if(this.pendingDeleteItems_!=null){return new Promise(function(resolve,reject){reject(items)})}var removalList=items.map(function(item){return{url:item.url,timestamps:item.allTimestamps}});this.pendingDeleteItems_=items;this.pendingDeletePromise_=new PromiseResolver;chrome.send("removeVisits",removalList);return this.pendingDeletePromise_.promise},removeBookmark:function(url){chrome.send("removeBookmark",[url])},openForeignSessionAllTabs:function(sessionTag){chrome.send("openForeignSession",[sessionTag])},openForeignSessionTab:function(sessionTag,windowId,tabId,e){chrome.send("openForeignSession",[sessionTag,String(windowId),String(tabId),e.button||0,e.altKey,e.ctrlKey,e.metaKey,e.shiftKey])},deleteForeignSession:function(sessionTag){chrome.send("deleteForeignSession",[sessionTag])},openClearBrowsingData:function(){chrome.send("clearBrowsingData")},recordHistogram:function(histogram,value,max){chrome.send("metricsHandler:recordInHistogram",[histogram,value,max])},recordAction:function(action){if(action.indexOf("_")==-1)action="HistoryPage_"+action;chrome.send("metricsHandler:recordAction",[action])},resolveDelete_:function(successful){if(this.pendingDeleteItems_==null||this.pendingDeletePromise_==null){return}if(successful)this.pendingDeletePromise_.resolve(this.pendingDeleteItems_);else this.pendingDeletePromise_.reject(this.pendingDeleteItems_);this.pendingDeleteItems_=null;this.pendingDeletePromise_=null},menuPromoShown:function(){chrome.send("menuPromoShown")}};cr.addSingletonGetter(BrowserService);return{BrowserService:BrowserService}});function deleteComplete(){md_history.BrowserService.getInstance().resolveDelete_(true)}function deleteFailed(){md_history.BrowserService.getInstance().resolveDelete_(false)}
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'history-toolbar',
- properties: {
- count: {
- type: Number,
- value: 0,
- observer: 'changeToolbarView_'
- },
- itemsSelected_: {
- type: Boolean,
- value: false,
- reflectToAttribute: true
- },
- searchTerm: {
- type: String,
- observer: 'searchTermChanged_',
- notify: true
- },
- spinnerActive: {
- type: Boolean,
- value: false
- },
- hasDrawer: {
- type: Boolean,
- observer: 'hasDrawerChanged_',
- reflectToAttribute: true
- },
- showSyncNotice: Boolean,
- isGroupedMode: {
- type: Boolean,
- reflectToAttribute: true
- },
- groupedRange: {
- type: Number,
- value: 0,
- reflectToAttribute: true,
- notify: true
- },
- queryStartTime: String,
- queryEndTime: String,
- showMenuPromo_: {
- type: Boolean,
- value: function() {
- return loadTimeData.getBoolean('showMenuPromo');
- }
- }
- },
- get searchField() {
- return this.$['main-toolbar'].getSearchField();
- },
- showSearchField: function() {
- this.searchField.showAndFocus();
- },
- changeToolbarView_: function() {
- this.itemsSelected_ = this.count > 0;
- },
- searchTermChanged_: function() {
- if (this.searchField.getValue() != this.searchTerm) {
- this.searchField.showAndFocus();
- this.searchField.setValue(this.searchTerm);
- }
- },
- onMenuPromoShown_: function() {
- md_history.BrowserService.getInstance().menuPromoShown();
- },
- onSearchChanged_: function(event) {
- this.searchTerm = event.detail;
- },
- onInfoButtonTap_: function() {
- var dropdown = this.$.syncNotice.get();
- dropdown.positionTarget = this.$$('#info-button-icon');
- if (dropdown.style.display == 'none') dropdown.open();
- },
- onClearSelectionTap_: function() {
- this.fire('unselect-all');
- },
- onDeleteTap_: function() {
- this.fire('delete-selected');
- },
- deletingAllowed_: function() {
- return loadTimeData.getBoolean('allowDeletingHistory');
- },
- numberOfItemsSelected_: function(count) {
- return count > 0 ? loadTimeData.getStringF('itemsSelected', count) : '';
- },
- getHistoryInterval_: function(queryStartTime, queryEndTime) {
- return loadTimeData.getStringF('historyInterval', queryStartTime, queryEndTime);
- },
- hasDrawerChanged_: function() {
- this.updateStyles();
- }
-});
-
-(function() {
- var IOS = navigator.userAgent.match(/iP(?:hone|ad;(?: U;)? CPU) OS (\d+)/);
- var IOS_TOUCH_SCROLLING = IOS && IOS[1] >= 8;
- var DEFAULT_PHYSICAL_COUNT = 3;
- var HIDDEN_Y = '-10000px';
- var DEFAULT_GRID_SIZE = 200;
- var SECRET_TABINDEX = -100;
- Polymer({
- is: 'iron-list',
- properties: {
- items: {
- type: Array
- },
- maxPhysicalCount: {
- type: Number,
- value: 500
- },
- as: {
- type: String,
- value: 'item'
- },
- indexAs: {
- type: String,
- value: 'index'
- },
- selectedAs: {
- type: String,
- value: 'selected'
- },
- grid: {
- type: Boolean,
- value: false,
- reflectToAttribute: true
- },
- selectionEnabled: {
- type: Boolean,
- value: false
- },
- selectedItem: {
- type: Object,
- notify: true
- },
- selectedItems: {
- type: Object,
- notify: true
- },
- multiSelection: {
- type: Boolean,
- value: false
- }
- },
- observers: [ '_itemsChanged(items.*)', '_selectionEnabledChanged(selectionEnabled)', '_multiSelectionChanged(multiSelection)', '_setOverflow(scrollTarget)' ],
- behaviors: [ Polymer.Templatizer, Polymer.IronResizableBehavior, Polymer.IronA11yKeysBehavior, Polymer.IronScrollTargetBehavior ],
- keyBindings: {
- up: '_didMoveUp',
- down: '_didMoveDown',
- enter: '_didEnter'
- },
- _ratio: .5,
- _scrollerPaddingTop: 0,
- _scrollPosition: 0,
- _physicalSize: 0,
- _physicalAverage: 0,
- _physicalAverageCount: 0,
- _physicalTop: 0,
- _virtualCount: 0,
- _physicalIndexForKey: null,
- _estScrollHeight: 0,
- _scrollHeight: 0,
- _viewportHeight: 0,
- _viewportWidth: 0,
- _physicalItems: null,
- _physicalSizes: null,
- _firstVisibleIndexVal: null,
- _lastVisibleIndexVal: null,
- _collection: null,
- _maxPages: 3,
- _focusedItem: null,
- _focusedIndex: -1,
- _offscreenFocusedItem: null,
- _focusBackfillItem: null,
- _itemsPerRow: 1,
- _itemWidth: 0,
- _rowHeight: 0,
- _templateCost: 0,
- get _physicalBottom() {
- return this._physicalTop + this._physicalSize;
- },
- get _scrollBottom() {
- return this._scrollPosition + this._viewportHeight;
- },
- get _virtualEnd() {
- return this._virtualStart + this._physicalCount - 1;
- },
- get _hiddenContentSize() {
- var size = this.grid ? this._physicalRows * this._rowHeight : this._physicalSize;
- return size - this._viewportHeight;
- },
- get _maxScrollTop() {
- return this._estScrollHeight - this._viewportHeight + this._scrollerPaddingTop;
- },
- _minVirtualStart: 0,
- get _maxVirtualStart() {
- return Math.max(0, this._virtualCount - this._physicalCount);
- },
- _virtualStartVal: 0,
- set _virtualStart(val) {
- this._virtualStartVal = Math.min(this._maxVirtualStart, Math.max(this._minVirtualStart, val));
- },
- get _virtualStart() {
- return this._virtualStartVal || 0;
- },
- _physicalStartVal: 0,
- set _physicalStart(val) {
- this._physicalStartVal = val % this._physicalCount;
- if (this._physicalStartVal < 0) {
- this._physicalStartVal = this._physicalCount + this._physicalStartVal;
- }
- this._physicalEnd = (this._physicalStart + this._physicalCount - 1) % this._physicalCount;
- },
- get _physicalStart() {
- return this._physicalStartVal || 0;
- },
- _physicalCountVal: 0,
- set _physicalCount(val) {
- this._physicalCountVal = val;
- this._physicalEnd = (this._physicalStart + this._physicalCount - 1) % this._physicalCount;
- },
- get _physicalCount() {
- return this._physicalCountVal;
- },
- _physicalEnd: 0,
- get _optPhysicalSize() {
- if (this.grid) {
- return this._estRowsInView * this._rowHeight * this._maxPages;
- }
- return this._viewportHeight * this._maxPages;
- },
- get _optPhysicalCount() {
- return this._estRowsInView * this._itemsPerRow * this._maxPages;
- },
- get _isVisible() {
- return Boolean(this.offsetWidth || this.offsetHeight);
- },
- get firstVisibleIndex() {
- if (this._firstVisibleIndexVal === null) {
- var physicalOffset = Math.floor(this._physicalTop + this._scrollerPaddingTop);
- this._firstVisibleIndexVal = this._iterateItems(function(pidx, vidx) {
- physicalOffset += this._getPhysicalSizeIncrement(pidx);
- if (physicalOffset > this._scrollPosition) {
- return this.grid ? vidx - vidx % this._itemsPerRow : vidx;
- }
- if (this.grid && this._virtualCount - 1 === vidx) {
- return vidx - vidx % this._itemsPerRow;
- }
- }) || 0;
- }
- return this._firstVisibleIndexVal;
- },
- get lastVisibleIndex() {
- if (this._lastVisibleIndexVal === null) {
- if (this.grid) {
- var lastIndex = this.firstVisibleIndex + this._estRowsInView * this._itemsPerRow - 1;
- this._lastVisibleIndexVal = Math.min(this._virtualCount, lastIndex);
- } else {
- var physicalOffset = this._physicalTop;
- this._iterateItems(function(pidx, vidx) {
- if (physicalOffset < this._scrollBottom) {
- this._lastVisibleIndexVal = vidx;
- } else {
- return true;
- }
- physicalOffset += this._getPhysicalSizeIncrement(pidx);
- });
- }
- }
- return this._lastVisibleIndexVal;
- },
- get _defaultScrollTarget() {
- return this;
- },
- get _virtualRowCount() {
- return Math.ceil(this._virtualCount / this._itemsPerRow);
- },
- get _estRowsInView() {
- return Math.ceil(this._viewportHeight / this._rowHeight);
- },
- get _physicalRows() {
- return Math.ceil(this._physicalCount / this._itemsPerRow);
- },
- ready: function() {
- this.addEventListener('focus', this._didFocus.bind(this), true);
- },
- attached: function() {
- this.updateViewportBoundaries();
- if (this._physicalCount === 0) {
- this._debounceTemplate(this._render);
- }
- this.listen(this, 'iron-resize', '_resizeHandler');
- },
- detached: function() {
- this.unlisten(this, 'iron-resize', '_resizeHandler');
- },
- _setOverflow: function(scrollTarget) {
- this.style.webkitOverflowScrolling = scrollTarget === this ? 'touch' : '';
- this.style.overflow = scrollTarget === this ? 'auto' : '';
- },
- updateViewportBoundaries: function() {
- this._scrollerPaddingTop = this.scrollTarget === this ? 0 : parseInt(window.getComputedStyle(this)['padding-top'], 10);
- this._viewportHeight = this._scrollTargetHeight;
- if (this.grid) {
- this._updateGridMetrics();
- }
- },
- _scrollHandler: function() {
- var scrollTop = Math.max(0, Math.min(this._maxScrollTop, this._scrollTop));
- var delta = scrollTop - this._scrollPosition;
- var tileHeight, tileTop, kth, recycledTileSet, scrollBottom, physicalBottom;
- var ratio = this._ratio;
- var recycledTiles = 0;
- var hiddenContentSize = this._hiddenContentSize;
- var currentRatio = ratio;
- var movingUp = [];
- this._scrollPosition = scrollTop;
- this._firstVisibleIndexVal = null;
- this._lastVisibleIndexVal = null;
- scrollBottom = this._scrollBottom;
- physicalBottom = this._physicalBottom;
- if (Math.abs(delta) > this._physicalSize) {
- this._physicalTop += delta;
- recycledTiles = Math.round(delta / this._physicalAverage);
- } else if (delta < 0) {
- var topSpace = scrollTop - this._physicalTop;
- var virtualStart = this._virtualStart;
- recycledTileSet = [];
- kth = this._physicalEnd;
- currentRatio = topSpace / hiddenContentSize;
- while (currentRatio < ratio && recycledTiles < this._physicalCount && virtualStart - recycledTiles > 0 && physicalBottom - this._getPhysicalSizeIncrement(kth) > scrollBottom) {
- tileHeight = this._getPhysicalSizeIncrement(kth);
- currentRatio += tileHeight / hiddenContentSize;
- physicalBottom -= tileHeight;
- recycledTileSet.push(kth);
- recycledTiles++;
- kth = kth === 0 ? this._physicalCount - 1 : kth - 1;
- }
- movingUp = recycledTileSet;
- recycledTiles = -recycledTiles;
- } else if (delta > 0) {
- var bottomSpace = physicalBottom - scrollBottom;
- var virtualEnd = this._virtualEnd;
- var lastVirtualItemIndex = this._virtualCount - 1;
- recycledTileSet = [];
- kth = this._physicalStart;
- currentRatio = bottomSpace / hiddenContentSize;
- while (currentRatio < ratio && recycledTiles < this._physicalCount && virtualEnd + recycledTiles < lastVirtualItemIndex && this._physicalTop + this._getPhysicalSizeIncrement(kth) < scrollTop) {
- tileHeight = this._getPhysicalSizeIncrement(kth);
- currentRatio += tileHeight / hiddenContentSize;
- this._physicalTop += tileHeight;
- recycledTileSet.push(kth);
- recycledTiles++;
- kth = (kth + 1) % this._physicalCount;
- }
- }
- if (recycledTiles === 0) {
- if (physicalBottom < scrollBottom || this._physicalTop > scrollTop) {
- this._increasePoolIfNeeded();
- }
- } else {
- this._virtualStart = this._virtualStart + recycledTiles;
- this._physicalStart = this._physicalStart + recycledTiles;
- this._update(recycledTileSet, movingUp);
- }
- },
- _update: function(itemSet, movingUp) {
- this._manageFocus();
- this._assignModels(itemSet);
- this._updateMetrics(itemSet);
- if (movingUp) {
- while (movingUp.length) {
- var idx = movingUp.pop();
- this._physicalTop -= this._getPhysicalSizeIncrement(idx);
- }
- }
- this._positionItems();
- this._updateScrollerSize();
- this._increasePoolIfNeeded();
- },
- _createPool: function(size) {
- var physicalItems = new Array(size);
- this._ensureTemplatized();
- for (var i = 0; i < size; i++) {
- var inst = this.stamp(null);
- physicalItems[i] = inst.root.querySelector('*');
- Polymer.dom(this).appendChild(inst.root);
- }
- return physicalItems;
- },
- _increasePoolIfNeeded: function() {
- if (this._viewportHeight === 0) {
- return false;
- }
- var self = this;
- var isClientFull = this._physicalBottom >= this._scrollBottom && this._physicalTop <= this._scrollPosition;
- if (this._physicalSize >= this._optPhysicalSize && isClientFull) {
- return false;
- }
- var maxPoolSize = Math.round(this._physicalCount * .5);
- if (!isClientFull) {
- this._debounceTemplate(this._increasePool.bind(this, maxPoolSize));
- return true;
- }
- this._yield(function() {
- self._increasePool(Math.min(maxPoolSize, Math.max(1, Math.round(50 / self._templateCost))));
- });
- return true;
- },
- _yield: function(cb) {
- var g = window;
- var handle = g.requestIdleCallback ? g.requestIdleCallback(cb) : g.setTimeout(cb, 16);
- Polymer.dom.addDebouncer({
- complete: function() {
- g.cancelIdleCallback ? g.cancelIdleCallback(handle) : g.clearTimeout(handle);
- cb();
- }
- });
- },
- _increasePool: function(missingItems) {
- var nextPhysicalCount = Math.min(this._physicalCount + missingItems, this._virtualCount - this._virtualStart, Math.max(this.maxPhysicalCount, DEFAULT_PHYSICAL_COUNT));
- var prevPhysicalCount = this._physicalCount;
- var delta = nextPhysicalCount - prevPhysicalCount;
- var ts = window.performance.now();
- if (delta <= 0) {
- return;
- }
- [].push.apply(this._physicalItems, this._createPool(delta));
- [].push.apply(this._physicalSizes, new Array(delta));
- this._physicalCount = prevPhysicalCount + delta;
- if (this._physicalStart > this._physicalEnd && this._isIndexRendered(this._focusedIndex) && this._getPhysicalIndex(this._focusedIndex) < this._physicalEnd) {
- this._physicalStart = this._physicalStart + delta;
- }
- this._update();
- this._templateCost = (window.performance.now() - ts) / delta;
- },
- _render: function() {
- if (this.isAttached && this._isVisible) {
- if (this._physicalCount === 0) {
- this._increasePool(DEFAULT_PHYSICAL_COUNT);
- } else {
- this._update();
- }
- }
- },
- _ensureTemplatized: function() {
- if (!this.ctor) {
- var props = {};
- props.__key__ = true;
- props[this.as] = true;
- props[this.indexAs] = true;
- props[this.selectedAs] = true;
- props.tabIndex = true;
- this._instanceProps = props;
- this._userTemplate = Polymer.dom(this).querySelector('template');
- if (this._userTemplate) {
- this.templatize(this._userTemplate);
- } else {
- console.warn('iron-list requires a template to be provided in light-dom');
- }
- }
- },
- _getStampedChildren: function() {
- return this._physicalItems;
- },
- _forwardInstancePath: function(inst, path, value) {
- if (path.indexOf(this.as + '.') === 0) {
- this.notifyPath('items.' + inst.__key__ + '.' + path.slice(this.as.length + 1), value);
- }
- },
- _forwardParentProp: function(prop, value) {
- if (this._physicalItems) {
- this._physicalItems.forEach(function(item) {
- item._templateInstance[prop] = value;
- }, this);
- }
- },
- _forwardParentPath: function(path, value) {
- if (this._physicalItems) {
- this._physicalItems.forEach(function(item) {
- item._templateInstance.notifyPath(path, value, true);
- }, this);
- }
- },
- _forwardItemPath: function(path, value) {
- if (!this._physicalIndexForKey) {
- return;
- }
- var dot = path.indexOf('.');
- var key = path.substring(0, dot < 0 ? path.length : dot);
- var idx = this._physicalIndexForKey[key];
- var offscreenItem = this._offscreenFocusedItem;
- var el = offscreenItem && offscreenItem._templateInstance.__key__ === key ? offscreenItem : this._physicalItems[idx];
- if (!el || el._templateInstance.__key__ !== key) {
- return;
- }
- if (dot >= 0) {
- path = this.as + '.' + path.substring(dot + 1);
- el._templateInstance.notifyPath(path, value, true);
- } else {
- var currentItem = el._templateInstance[this.as];
- if (Array.isArray(this.selectedItems)) {
- for (var i = 0; i < this.selectedItems.length; i++) {
- if (this.selectedItems[i] === currentItem) {
- this.set('selectedItems.' + i, value);
- break;
- }
- }
- } else if (this.selectedItem === currentItem) {
- this.set('selectedItem', value);
- }
- el._templateInstance[this.as] = value;
- }
- },
- _itemsChanged: function(change) {
- if (change.path === 'items') {
- this._virtualStart = 0;
- this._physicalTop = 0;
- this._virtualCount = this.items ? this.items.length : 0;
- this._collection = this.items ? Polymer.Collection.get(this.items) : null;
- this._physicalIndexForKey = {};
- this._firstVisibleIndexVal = null;
- this._lastVisibleIndexVal = null;
- this._physicalCount = this._physicalCount || 0;
- this._physicalItems = this._physicalItems || [];
- this._physicalSizes = this._physicalSizes || [];
- this._physicalStart = 0;
- this._resetScrollPosition(0);
- this._removeFocusedItem();
- this._debounceTemplate(this._render);
- } else if (change.path === 'items.splices') {
- this._adjustVirtualIndex(change.value.indexSplices);
- this._virtualCount = this.items ? this.items.length : 0;
- this._debounceTemplate(this._render);
- } else {
- this._forwardItemPath(change.path.split('.').slice(1).join('.'), change.value);
- }
- },
- _adjustVirtualIndex: function(splices) {
- splices.forEach(function(splice) {
- splice.removed.forEach(this._removeItem, this);
- if (splice.index < this._virtualStart) {
- var delta = Math.max(splice.addedCount - splice.removed.length, splice.index - this._virtualStart);
- this._virtualStart = this._virtualStart + delta;
- if (this._focusedIndex >= 0) {
- this._focusedIndex = this._focusedIndex + delta;
- }
- }
- }, this);
- },
- _removeItem: function(item) {
- this.$.selector.deselect(item);
- if (this._focusedItem && this._focusedItem._templateInstance[this.as] === item) {
- this._removeFocusedItem();
- }
- },
- _iterateItems: function(fn, itemSet) {
- var pidx, vidx, rtn, i;
- if (arguments.length === 2 && itemSet) {
- for (i = 0; i < itemSet.length; i++) {
- pidx = itemSet[i];
- vidx = this._computeVidx(pidx);
- if ((rtn = fn.call(this, pidx, vidx)) != null) {
- return rtn;
- }
- }
- } else {
- pidx = this._physicalStart;
- vidx = this._virtualStart;
- for (;pidx < this._physicalCount; pidx++, vidx++) {
- if ((rtn = fn.call(this, pidx, vidx)) != null) {
- return rtn;
- }
- }
- for (pidx = 0; pidx < this._physicalStart; pidx++, vidx++) {
- if ((rtn = fn.call(this, pidx, vidx)) != null) {
- return rtn;
- }
- }
- }
- },
- _computeVidx: function(pidx) {
- if (pidx >= this._physicalStart) {
- return this._virtualStart + (pidx - this._physicalStart);
- }
- return this._virtualStart + (this._physicalCount - this._physicalStart) + pidx;
- },
- _assignModels: function(itemSet) {
- this._iterateItems(function(pidx, vidx) {
- var el = this._physicalItems[pidx];
- var inst = el._templateInstance;
- var item = this.items && this.items[vidx];
- if (item != null) {
- inst[this.as] = item;
- inst.__key__ = this._collection.getKey(item);
- inst[this.selectedAs] = this.$.selector.isSelected(item);
- inst[this.indexAs] = vidx;
- inst.tabIndex = this._focusedIndex === vidx ? 0 : -1;
- this._physicalIndexForKey[inst.__key__] = pidx;
- el.removeAttribute('hidden');
- } else {
- inst.__key__ = null;
- el.setAttribute('hidden', '');
- }
- }, itemSet);
- },
- _updateMetrics: function(itemSet) {
- Polymer.dom.flush();
- var newPhysicalSize = 0;
- var oldPhysicalSize = 0;
- var prevAvgCount = this._physicalAverageCount;
- var prevPhysicalAvg = this._physicalAverage;
- this._iterateItems(function(pidx, vidx) {
- oldPhysicalSize += this._physicalSizes[pidx] || 0;
- this._physicalSizes[pidx] = this._physicalItems[pidx].offsetHeight;
- newPhysicalSize += this._physicalSizes[pidx];
- this._physicalAverageCount += this._physicalSizes[pidx] ? 1 : 0;
- }, itemSet);
- this._viewportHeight = this._scrollTargetHeight;
- if (this.grid) {
- this._updateGridMetrics();
- this._physicalSize = Math.ceil(this._physicalCount / this._itemsPerRow) * this._rowHeight;
- } else {
- this._physicalSize = this._physicalSize + newPhysicalSize - oldPhysicalSize;
- }
- if (this._physicalAverageCount !== prevAvgCount) {
- this._physicalAverage = Math.round((prevPhysicalAvg * prevAvgCount + newPhysicalSize) / this._physicalAverageCount);
- }
- },
- _updateGridMetrics: function() {
- this._viewportWidth = this.$.items.offsetWidth;
- this._itemWidth = this._physicalCount > 0 ? this._physicalItems[0].getBoundingClientRect().width : DEFAULT_GRID_SIZE;
- this._rowHeight = this._physicalCount > 0 ? this._physicalItems[0].offsetHeight : DEFAULT_GRID_SIZE;
- this._itemsPerRow = this._itemWidth ? Math.floor(this._viewportWidth / this._itemWidth) : this._itemsPerRow;
- },
- _positionItems: function() {
- this._adjustScrollPosition();
- var y = this._physicalTop;
- if (this.grid) {
- var totalItemWidth = this._itemsPerRow * this._itemWidth;
- var rowOffset = (this._viewportWidth - totalItemWidth) / 2;
- this._iterateItems(function(pidx, vidx) {
- var modulus = vidx % this._itemsPerRow;
- var x = Math.floor(modulus * this._itemWidth + rowOffset);
- this.translate3d(x + 'px', y + 'px', 0, this._physicalItems[pidx]);
- if (this._shouldRenderNextRow(vidx)) {
- y += this._rowHeight;
- }
- });
- } else {
- this._iterateItems(function(pidx, vidx) {
- this.translate3d(0, y + 'px', 0, this._physicalItems[pidx]);
- y += this._physicalSizes[pidx];
- });
- }
- },
- _getPhysicalSizeIncrement: function(pidx) {
- if (!this.grid) {
- return this._physicalSizes[pidx];
- }
- if (this._computeVidx(pidx) % this._itemsPerRow !== this._itemsPerRow - 1) {
- return 0;
- }
- return this._rowHeight;
- },
- _shouldRenderNextRow: function(vidx) {
- return vidx % this._itemsPerRow === this._itemsPerRow - 1;
- },
- _adjustScrollPosition: function() {
- var deltaHeight = this._virtualStart === 0 ? this._physicalTop : Math.min(this._scrollPosition + this._physicalTop, 0);
- if (deltaHeight) {
- this._physicalTop = this._physicalTop - deltaHeight;
- if (!IOS_TOUCH_SCROLLING && this._physicalTop !== 0) {
- this._resetScrollPosition(this._scrollTop - deltaHeight);
- }
- }
- },
- _resetScrollPosition: function(pos) {
- if (this.scrollTarget) {
- this._scrollTop = pos;
- this._scrollPosition = this._scrollTop;
- }
- },
- _updateScrollerSize: function(forceUpdate) {
- if (this.grid) {
- this._estScrollHeight = this._virtualRowCount * this._rowHeight;
- } else {
- this._estScrollHeight = this._physicalBottom + Math.max(this._virtualCount - this._physicalCount - this._virtualStart, 0) * this._physicalAverage;
- }
- forceUpdate = forceUpdate || this._scrollHeight === 0;
- forceUpdate = forceUpdate || this._scrollPosition >= this._estScrollHeight - this._physicalSize;
- forceUpdate = forceUpdate || this.grid && this.$.items.style.height < this._estScrollHeight;
- if (forceUpdate || Math.abs(this._estScrollHeight - this._scrollHeight) >= this._optPhysicalSize) {
- this.$.items.style.height = this._estScrollHeight + 'px';
- this._scrollHeight = this._estScrollHeight;
- }
- },
- scrollToItem: function(item) {
- return this.scrollToIndex(this.items.indexOf(item));
- },
- scrollToIndex: function(idx) {
- if (typeof idx !== 'number' || idx < 0 || idx > this.items.length - 1) {
- return;
- }
- Polymer.dom.flush();
- if (this._physicalCount === 0) {
- return;
- }
- idx = Math.min(Math.max(idx, 0), this._virtualCount - 1);
- if (!this._isIndexRendered(idx) || idx >= this._maxVirtualStart) {
- this._virtualStart = this.grid ? idx - this._itemsPerRow * 2 : idx - 1;
- }
- this._manageFocus();
- this._assignModels();
- this._updateMetrics();
- this._physicalTop = Math.floor(this._virtualStart / this._itemsPerRow) * this._physicalAverage;
- var currentTopItem = this._physicalStart;
- var currentVirtualItem = this._virtualStart;
- var targetOffsetTop = 0;
- var hiddenContentSize = this._hiddenContentSize;
- while (currentVirtualItem < idx && targetOffsetTop <= hiddenContentSize) {
- targetOffsetTop = targetOffsetTop + this._getPhysicalSizeIncrement(currentTopItem);
- currentTopItem = (currentTopItem + 1) % this._physicalCount;
- currentVirtualItem++;
- }
- this._updateScrollerSize(true);
- this._positionItems();
- this._resetScrollPosition(this._physicalTop + this._scrollerPaddingTop + targetOffsetTop);
- this._increasePoolIfNeeded();
- this._firstVisibleIndexVal = null;
- this._lastVisibleIndexVal = null;
- },
- _resetAverage: function() {
- this._physicalAverage = 0;
- this._physicalAverageCount = 0;
- },
- _resizeHandler: function() {
- if (IOS && Math.abs(this._viewportHeight - this._scrollTargetHeight) < 100) {
- return;
- }
- Polymer.dom.addDebouncer(this.debounce('_debounceTemplate', function() {
- this.updateViewportBoundaries();
- this._render();
- if (this._physicalCount > 0 && this._isVisible) {
- this._resetAverage();
- this.scrollToIndex(this.firstVisibleIndex);
- }
- }.bind(this), 1));
- },
- _getModelFromItem: function(item) {
- var key = this._collection.getKey(item);
- var pidx = this._physicalIndexForKey[key];
- if (pidx != null) {
- return this._physicalItems[pidx]._templateInstance;
- }
- return null;
- },
- _getNormalizedItem: function(item) {
- if (this._collection.getKey(item) === undefined) {
- if (typeof item === 'number') {
- item = this.items[item];
- if (!item) {
- throw new RangeError('<item> not found');
- }
- return item;
- }
- throw new TypeError('<item> should be a valid item');
- }
- return item;
- },
- selectItem: function(item) {
- item = this._getNormalizedItem(item);
- var model = this._getModelFromItem(item);
- if (!this.multiSelection && this.selectedItem) {
- this.deselectItem(this.selectedItem);
- }
- if (model) {
- model[this.selectedAs] = true;
- }
- this.$.selector.select(item);
- this.updateSizeForItem(item);
- },
- deselectItem: function(item) {
- item = this._getNormalizedItem(item);
- var model = this._getModelFromItem(item);
- if (model) {
- model[this.selectedAs] = false;
- }
- this.$.selector.deselect(item);
- this.updateSizeForItem(item);
- },
- toggleSelectionForItem: function(item) {
- item = this._getNormalizedItem(item);
- if (this.$.selector.isSelected(item)) {
- this.deselectItem(item);
- } else {
- this.selectItem(item);
- }
- },
- clearSelection: function() {
- function unselect(item) {
- var model = this._getModelFromItem(item);
- if (model) {
- model[this.selectedAs] = false;
- }
- }
- if (Array.isArray(this.selectedItems)) {
- this.selectedItems.forEach(unselect, this);
- } else if (this.selectedItem) {
- unselect.call(this, this.selectedItem);
- }
- this.$.selector.clearSelection();
- },
- _selectionEnabledChanged: function(selectionEnabled) {
- var handler = selectionEnabled ? this.listen : this.unlisten;
- handler.call(this, this, 'tap', '_selectionHandler');
- },
- _selectionHandler: function(e) {
- var model = this.modelForElement(e.target);
- if (!model) {
- return;
- }
- var modelTabIndex, activeElTabIndex;
- var target = Polymer.dom(e).path[0];
- var activeEl = Polymer.dom(this.domHost ? this.domHost.root : document).activeElement;
- var physicalItem = this._physicalItems[this._getPhysicalIndex(model[this.indexAs])];
- if (target.localName === 'input' || target.localName === 'button' || target.localName === 'select') {
- return;
- }
- modelTabIndex = model.tabIndex;
- model.tabIndex = SECRET_TABINDEX;
- activeElTabIndex = activeEl ? activeEl.tabIndex : -1;
- model.tabIndex = modelTabIndex;
- if (activeEl && physicalItem !== activeEl && physicalItem.contains(activeEl) && activeElTabIndex !== SECRET_TABINDEX) {
- return;
- }
- this.toggleSelectionForItem(model[this.as]);
- },
- _multiSelectionChanged: function(multiSelection) {
- this.clearSelection();
- this.$.selector.multi = multiSelection;
- },
- updateSizeForItem: function(item) {
- item = this._getNormalizedItem(item);
- var key = this._collection.getKey(item);
- var pidx = this._physicalIndexForKey[key];
- if (pidx != null) {
- this._updateMetrics([ pidx ]);
- this._positionItems();
- }
- },
- _manageFocus: function() {
- var fidx = this._focusedIndex;
- if (fidx >= 0 && fidx < this._virtualCount) {
- if (this._isIndexRendered(fidx)) {
- this._restoreFocusedItem();
- } else {
- this._createFocusBackfillItem();
- }
- } else if (this._virtualCount > 0 && this._physicalCount > 0) {
- this._focusedIndex = this._virtualStart;
- this._focusedItem = this._physicalItems[this._physicalStart];
- }
- },
- _isIndexRendered: function(idx) {
- return idx >= this._virtualStart && idx <= this._virtualEnd;
- },
- _isIndexVisible: function(idx) {
- return idx >= this.firstVisibleIndex && idx <= this.lastVisibleIndex;
- },
- _getPhysicalIndex: function(idx) {
- return this._physicalIndexForKey[this._collection.getKey(this._getNormalizedItem(idx))];
- },
- _focusPhysicalItem: function(idx) {
- if (idx < 0 || idx >= this._virtualCount) {
- return;
- }
- this._restoreFocusedItem();
- if (!this._isIndexRendered(idx)) {
- this.scrollToIndex(idx);
- }
- var physicalItem = this._physicalItems[this._getPhysicalIndex(idx)];
- var model = physicalItem._templateInstance;
- var focusable;
- model.tabIndex = SECRET_TABINDEX;
- if (physicalItem.tabIndex === SECRET_TABINDEX) {
- focusable = physicalItem;
- }
- if (!focusable) {
- focusable = Polymer.dom(physicalItem).querySelector('[tabindex="' + SECRET_TABINDEX + '"]');
- }
- model.tabIndex = 0;
- this._focusedIndex = idx;
- focusable && focusable.focus();
- },
- _removeFocusedItem: function() {
- if (this._offscreenFocusedItem) {
- Polymer.dom(this).removeChild(this._offscreenFocusedItem);
- }
- this._offscreenFocusedItem = null;
- this._focusBackfillItem = null;
- this._focusedItem = null;
- this._focusedIndex = -1;
- },
- _createFocusBackfillItem: function() {
- var pidx, fidx = this._focusedIndex;
- if (this._offscreenFocusedItem || fidx < 0) {
- return;
- }
- if (!this._focusBackfillItem) {
- var stampedTemplate = this.stamp(null);
- this._focusBackfillItem = stampedTemplate.root.querySelector('*');
- Polymer.dom(this).appendChild(stampedTemplate.root);
- }
- pidx = this._getPhysicalIndex(fidx);
- if (pidx != null) {
- this._offscreenFocusedItem = this._physicalItems[pidx];
- this._physicalItems[pidx] = this._focusBackfillItem;
- this.translate3d(0, HIDDEN_Y, 0, this._offscreenFocusedItem);
- }
- },
- _restoreFocusedItem: function() {
- var pidx, fidx = this._focusedIndex;
- if (!this._offscreenFocusedItem || this._focusedIndex < 0) {
- return;
- }
- this._assignModels();
- pidx = this._getPhysicalIndex(fidx);
- if (pidx != null) {
- this._focusBackfillItem = this._physicalItems[pidx];
- this._physicalItems[pidx] = this._offscreenFocusedItem;
- this._offscreenFocusedItem = null;
- this.translate3d(0, HIDDEN_Y, 0, this._focusBackfillItem);
- }
- },
- _didFocus: function(e) {
- var targetModel = this.modelForElement(e.target);
- var focusedModel = this._focusedItem ? this._focusedItem._templateInstance : null;
- var hasOffscreenFocusedItem = this._offscreenFocusedItem !== null;
- var fidx = this._focusedIndex;
- if (!targetModel || !focusedModel) {
- return;
- }
- if (focusedModel === targetModel) {
- if (!this._isIndexVisible(fidx)) {
- this.scrollToIndex(fidx);
- }
- } else {
- this._restoreFocusedItem();
- focusedModel.tabIndex = -1;
- targetModel.tabIndex = 0;
- fidx = targetModel[this.indexAs];
- this._focusedIndex = fidx;
- this._focusedItem = this._physicalItems[this._getPhysicalIndex(fidx)];
- if (hasOffscreenFocusedItem && !this._offscreenFocusedItem) {
- this._update();
- }
- }
- },
- _didMoveUp: function() {
- this._focusPhysicalItem(this._focusedIndex - 1);
- },
- _didMoveDown: function(e) {
- e.detail.keyboardEvent.preventDefault();
- this._focusPhysicalItem(this._focusedIndex + 1);
- },
- _didEnter: function(e) {
- this._focusPhysicalItem(this._focusedIndex);
- this._selectionHandler(e.detail.keyboardEvent);
- }
- });
-})();
-
-Polymer({
- is: 'iron-scroll-threshold',
- properties: {
- upperThreshold: {
- type: Number,
- value: 100
- },
- lowerThreshold: {
- type: Number,
- value: 100
- },
- upperTriggered: {
- type: Boolean,
- value: false,
- notify: true,
- readOnly: true
- },
- lowerTriggered: {
- type: Boolean,
- value: false,
- notify: true,
- readOnly: true
- },
- horizontal: {
- type: Boolean,
- value: false
- }
- },
- behaviors: [ Polymer.IronScrollTargetBehavior ],
- observers: [ '_setOverflow(scrollTarget)', '_initCheck(horizontal, isAttached)' ],
- get _defaultScrollTarget() {
- return this;
- },
- _setOverflow: function(scrollTarget) {
- this.style.overflow = scrollTarget === this ? 'auto' : '';
- },
- _scrollHandler: function() {
- var THROTTLE_THRESHOLD = 200;
- if (!this.isDebouncerActive('_checkTheshold')) {
- this.debounce('_checkTheshold', function() {
- this.checkScrollThesholds();
- }, THROTTLE_THRESHOLD);
- }
- },
- _initCheck: function(horizontal, isAttached) {
- if (isAttached) {
- this.debounce('_init', function() {
- this.clearTriggers();
- this.checkScrollThesholds();
- });
- }
- },
- checkScrollThesholds: function() {
- if (!this.scrollTarget || this.lowerTriggered && this.upperTriggered) {
- return;
- }
- var upperScrollValue = this.horizontal ? this._scrollLeft : this._scrollTop;
- var lowerScrollValue = this.horizontal ? this.scrollTarget.scrollWidth - this._scrollTargetWidth - this._scrollLeft : this.scrollTarget.scrollHeight - this._scrollTargetHeight - this._scrollTop;
- if (upperScrollValue <= this.upperThreshold && !this.upperTriggered) {
- this._setUpperTriggered(true);
- this.fire('upper-threshold');
- }
- if (lowerScrollValue <= this.lowerThreshold && !this.lowerTriggered) {
- this._setLowerTriggered(true);
- this.fire('lower-threshold');
- }
- },
- clearTriggers: function() {
- this._setUpperTriggered(false);
- this._setLowerTriggered(false);
- }
-});
-
+Polymer({is:"history-toolbar",properties:{count:{type:Number,value:0,observer:"changeToolbarView_"},itemsSelected_:{type:Boolean,value:false,reflectToAttribute:true},searchTerm:{type:String,observer:"searchTermChanged_",notify:true},spinnerActive:{type:Boolean,value:false},hasDrawer:{type:Boolean,observer:"hasDrawerChanged_",reflectToAttribute:true},showSyncNotice:Boolean,isGroupedMode:{type:Boolean,reflectToAttribute:true},groupedRange:{type:Number,value:0,reflectToAttribute:true,notify:true},queryStartTime:String,queryEndTime:String,showMenuPromo_:{type:Boolean,value:function(){return loadTimeData.getBoolean("showMenuPromo")}}},get searchField(){return this.$["main-toolbar"].getSearchField()},showSearchField:function(){this.searchField.showAndFocus()},changeToolbarView_:function(){this.itemsSelected_=this.count>0},searchTermChanged_:function(){if(this.searchField.getValue()!=this.searchTerm){this.searchField.showAndFocus();this.searchField.setValue(this.searchTerm)}},onMenuPromoShown_:function(){md_history.BrowserService.getInstance().menuPromoShown()},onSearchChanged_:function(event){this.searchTerm=event.detail},onInfoButtonTap_:function(){var dropdown=this.$.syncNotice.get();dropdown.positionTarget=this.$$("#info-button-icon");if(dropdown.style.display=="none")dropdown.open()},onClearSelectionTap_:function(){this.fire("unselect-all")},onDeleteTap_:function(){this.fire("delete-selected")},deletingAllowed_:function(){return loadTimeData.getBoolean("allowDeletingHistory")},numberOfItemsSelected_:function(count){return count>0?loadTimeData.getStringF("itemsSelected",count):""},getHistoryInterval_:function(queryStartTime,queryEndTime){return loadTimeData.getStringF("historyInterval",queryStartTime,queryEndTime)},hasDrawerChanged_:function(){this.updateStyles()}});(function(){var IOS=navigator.userAgent.match(/iP(?:hone|ad;(?: U;)? CPU) OS (\d+)/);var IOS_TOUCH_SCROLLING=IOS&&IOS[1]>=8;var DEFAULT_PHYSICAL_COUNT=3;var HIDDEN_Y="-10000px";var DEFAULT_GRID_SIZE=200;var SECRET_TABINDEX=-100;Polymer({is:"iron-list",properties:{items:{type:Array},maxPhysicalCount:{type:Number,value:500},as:{type:String,value:"item"},indexAs:{type:String,value:"index"},selectedAs:{type:String,value:"selected"},grid:{type:Boolean,value:false,reflectToAttribute:true},selectionEnabled:{type:Boolean,value:false},selectedItem:{type:Object,notify:true},selectedItems:{type:Object,notify:true},multiSelection:{type:Boolean,value:false}},observers:["_itemsChanged(items.*)","_selectionEnabledChanged(selectionEnabled)","_multiSelectionChanged(multiSelection)","_setOverflow(scrollTarget)"],behaviors:[Polymer.Templatizer,Polymer.IronResizableBehavior,Polymer.IronA11yKeysBehavior,Polymer.IronScrollTargetBehavior],keyBindings:{up:"_didMoveUp",down:"_didMoveDown",enter:"_didEnter"},_ratio:.5,_scrollerPaddingTop:0,_scrollPosition:0,_physicalSize:0,_physicalAverage:0,_physicalAverageCount:0,_physicalTop:0,_virtualCount:0,_physicalIndexForKey:null,_estScrollHeight:0,_scrollHeight:0,_viewportHeight:0,_viewportWidth:0,_physicalItems:null,_physicalSizes:null,_firstVisibleIndexVal:null,_lastVisibleIndexVal:null,_collection:null,_maxPages:3,_focusedItem:null,_focusedIndex:-1,_offscreenFocusedItem:null,_focusBackfillItem:null,_itemsPerRow:1,_itemWidth:0,_rowHeight:0,_templateCost:0,get _physicalBottom(){return this._physicalTop+this._physicalSize},get _scrollBottom(){return this._scrollPosition+this._viewportHeight},get _virtualEnd(){return this._virtualStart+this._physicalCount-1},get _hiddenContentSize(){var size=this.grid?this._physicalRows*this._rowHeight:this._physicalSize;return size-this._viewportHeight},get _maxScrollTop(){return this._estScrollHeight-this._viewportHeight+this._scrollerPaddingTop},_minVirtualStart:0,get _maxVirtualStart(){return Math.max(0,this._virtualCount-this._physicalCount)},_virtualStartVal:0,set _virtualStart(val){this._virtualStartVal=Math.min(this._maxVirtualStart,Math.max(this._minVirtualStart,val))},get _virtualStart(){return this._virtualStartVal||0},_physicalStartVal:0,set _physicalStart(val){this._physicalStartVal=val%this._physicalCount;if(this._physicalStartVal<0){this._physicalStartVal=this._physicalCount+this._physicalStartVal}this._physicalEnd=(this._physicalStart+this._physicalCount-1)%this._physicalCount},get _physicalStart(){return this._physicalStartVal||0},_physicalCountVal:0,set _physicalCount(val){this._physicalCountVal=val;this._physicalEnd=(this._physicalStart+this._physicalCount-1)%this._physicalCount},get _physicalCount(){return this._physicalCountVal},_physicalEnd:0,get _optPhysicalSize(){if(this.grid){return this._estRowsInView*this._rowHeight*this._maxPages}return this._viewportHeight*this._maxPages},get _optPhysicalCount(){return this._estRowsInView*this._itemsPerRow*this._maxPages},get _isVisible(){return Boolean(this.offsetWidth||this.offsetHeight)},get firstVisibleIndex(){if(this._firstVisibleIndexVal===null){var physicalOffset=Math.floor(this._physicalTop+this._scrollerPaddingTop);this._firstVisibleIndexVal=this._iterateItems(function(pidx,vidx){physicalOffset+=this._getPhysicalSizeIncrement(pidx);if(physicalOffset>this._scrollPosition){return this.grid?vidx-vidx%this._itemsPerRow:vidx}if(this.grid&&this._virtualCount-1===vidx){return vidx-vidx%this._itemsPerRow}})||0}return this._firstVisibleIndexVal},get lastVisibleIndex(){if(this._lastVisibleIndexVal===null){if(this.grid){var lastIndex=this.firstVisibleIndex+this._estRowsInView*this._itemsPerRow-1;this._lastVisibleIndexVal=Math.min(this._virtualCount,lastIndex)}else{var physicalOffset=this._physicalTop;this._iterateItems(function(pidx,vidx){if(physicalOffset<this._scrollBottom){this._lastVisibleIndexVal=vidx}else{return true}physicalOffset+=this._getPhysicalSizeIncrement(pidx)})}}return this._lastVisibleIndexVal},get _defaultScrollTarget(){return this},get _virtualRowCount(){return Math.ceil(this._virtualCount/this._itemsPerRow)},get _estRowsInView(){return Math.ceil(this._viewportHeight/this._rowHeight)},get _physicalRows(){return Math.ceil(this._physicalCount/this._itemsPerRow)},ready:function(){this.addEventListener("focus",this._didFocus.bind(this),true)},attached:function(){this.updateViewportBoundaries();if(this._physicalCount===0){this._debounceTemplate(this._render)}this.listen(this,"iron-resize","_resizeHandler")},detached:function(){this.unlisten(this,"iron-resize","_resizeHandler")},_setOverflow:function(scrollTarget){this.style.webkitOverflowScrolling=scrollTarget===this?"touch":"";this.style.overflow=scrollTarget===this?"auto":""},updateViewportBoundaries:function(){this._scrollerPaddingTop=this.scrollTarget===this?0:parseInt(window.getComputedStyle(this)["padding-top"],10);this._viewportHeight=this._scrollTargetHeight;if(this.grid){this._updateGridMetrics()}},_scrollHandler:function(){var scrollTop=Math.max(0,Math.min(this._maxScrollTop,this._scrollTop));var delta=scrollTop-this._scrollPosition;var tileHeight,tileTop,kth,recycledTileSet,scrollBottom,physicalBottom;var ratio=this._ratio;var recycledTiles=0;var hiddenContentSize=this._hiddenContentSize;var currentRatio=ratio;var movingUp=[];this._scrollPosition=scrollTop;this._firstVisibleIndexVal=null;this._lastVisibleIndexVal=null;scrollBottom=this._scrollBottom;physicalBottom=this._physicalBottom;if(Math.abs(delta)>this._physicalSize){this._physicalTop+=delta;recycledTiles=Math.round(delta/this._physicalAverage)}else if(delta<0){var topSpace=scrollTop-this._physicalTop;var virtualStart=this._virtualStart;recycledTileSet=[];kth=this._physicalEnd;currentRatio=topSpace/hiddenContentSize;while(currentRatio<ratio&&recycledTiles<this._physicalCount&&virtualStart-recycledTiles>0&&physicalBottom-this._getPhysicalSizeIncrement(kth)>scrollBottom){tileHeight=this._getPhysicalSizeIncrement(kth);currentRatio+=tileHeight/hiddenContentSize;physicalBottom-=tileHeight;recycledTileSet.push(kth);recycledTiles++;kth=kth===0?this._physicalCount-1:kth-1}movingUp=recycledTileSet;recycledTiles=-recycledTiles}else if(delta>0){var bottomSpace=physicalBottom-scrollBottom;var virtualEnd=this._virtualEnd;var lastVirtualItemIndex=this._virtualCount-1;recycledTileSet=[];kth=this._physicalStart;currentRatio=bottomSpace/hiddenContentSize;while(currentRatio<ratio&&recycledTiles<this._physicalCount&&virtualEnd+recycledTiles<lastVirtualItemIndex&&this._physicalTop+this._getPhysicalSizeIncrement(kth)<scrollTop){tileHeight=this._getPhysicalSizeIncrement(kth);currentRatio+=tileHeight/hiddenContentSize;this._physicalTop+=tileHeight;recycledTileSet.push(kth);recycledTiles++;kth=(kth+1)%this._physicalCount}}if(recycledTiles===0){if(physicalBottom<scrollBottom||this._physicalTop>scrollTop){this._increasePoolIfNeeded()}}else{this._virtualStart=this._virtualStart+recycledTiles;this._physicalStart=this._physicalStart+recycledTiles;this._update(recycledTileSet,movingUp)}},_update:function(itemSet,movingUp){this._manageFocus();this._assignModels(itemSet);this._updateMetrics(itemSet);if(movingUp){while(movingUp.length){var idx=movingUp.pop();this._physicalTop-=this._getPhysicalSizeIncrement(idx)}}this._positionItems();this._updateScrollerSize();this._increasePoolIfNeeded()},_createPool:function(size){var physicalItems=new Array(size);this._ensureTemplatized();for(var i=0;i<size;i++){var inst=this.stamp(null);physicalItems[i]=inst.root.querySelector("*");Polymer.dom(this).appendChild(inst.root)}return physicalItems},_increasePoolIfNeeded:function(){if(this._viewportHeight===0){return false}var self=this;var isClientFull=this._physicalBottom>=this._scrollBottom&&this._physicalTop<=this._scrollPosition;if(this._physicalSize>=this._optPhysicalSize&&isClientFull){return false}var maxPoolSize=Math.round(this._physicalCount*.5);if(!isClientFull){this._debounceTemplate(this._increasePool.bind(this,maxPoolSize));return true}this._yield(function(){self._increasePool(Math.min(maxPoolSize,Math.max(1,Math.round(50/self._templateCost))))});return true},_yield:function(cb){var g=window;var handle=g.requestIdleCallback?g.requestIdleCallback(cb):g.setTimeout(cb,16);Polymer.dom.addDebouncer({complete:function(){g.cancelIdleCallback?g.cancelIdleCallback(handle):g.clearTimeout(handle);cb()}})},_increasePool:function(missingItems){var nextPhysicalCount=Math.min(this._physicalCount+missingItems,this._virtualCount-this._virtualStart,Math.max(this.maxPhysicalCount,DEFAULT_PHYSICAL_COUNT));var prevPhysicalCount=this._physicalCount;var delta=nextPhysicalCount-prevPhysicalCount;var ts=window.performance.now();if(delta<=0){return}[].push.apply(this._physicalItems,this._createPool(delta));[].push.apply(this._physicalSizes,new Array(delta));this._physicalCount=prevPhysicalCount+delta;if(this._physicalStart>this._physicalEnd&&this._isIndexRendered(this._focusedIndex)&&this._getPhysicalIndex(this._focusedIndex)<this._physicalEnd){this._physicalStart=this._physicalStart+delta}this._update();this._templateCost=(window.performance.now()-ts)/delta},_render:function(){if(this.isAttached&&this._isVisible){if(this._physicalCount===0){this._increasePool(DEFAULT_PHYSICAL_COUNT)}else{this._update()}}},_ensureTemplatized:function(){if(!this.ctor){var props={};props.__key__=true;props[this.as]=true;props[this.indexAs]=true;props[this.selectedAs]=true;props.tabIndex=true;this._instanceProps=props;this._userTemplate=Polymer.dom(this).querySelector("template");if(this._userTemplate){this.templatize(this._userTemplate)}else{console.warn("iron-list requires a template to be provided in light-dom")}}},_getStampedChildren:function(){return this._physicalItems},_forwardInstancePath:function(inst,path,value){if(path.indexOf(this.as+".")===0){this.notifyPath("items."+inst.__key__+"."+path.slice(this.as.length+1),value)}},_forwardParentProp:function(prop,value){if(this._physicalItems){this._physicalItems.forEach(function(item){item._templateInstance[prop]=value},this)}},_forwardParentPath:function(path,value){if(this._physicalItems){this._physicalItems.forEach(function(item){item._templateInstance.notifyPath(path,value,true)},this)}},_forwardItemPath:function(path,value){if(!this._physicalIndexForKey){return}var dot=path.indexOf(".");var key=path.substring(0,dot<0?path.length:dot);var idx=this._physicalIndexForKey[key];var offscreenItem=this._offscreenFocusedItem;var el=offscreenItem&&offscreenItem._templateInstance.__key__===key?offscreenItem:this._physicalItems[idx];if(!el||el._templateInstance.__key__!==key){return}if(dot>=0){path=this.as+"."+path.substring(dot+1);el._templateInstance.notifyPath(path,value,true)}else{var currentItem=el._templateInstance[this.as];if(Array.isArray(this.selectedItems)){for(var i=0;i<this.selectedItems.length;i++){if(this.selectedItems[i]===currentItem){this.set("selectedItems."+i,value);break}}}else if(this.selectedItem===currentItem){this.set("selectedItem",value)}el._templateInstance[this.as]=value}},_itemsChanged:function(change){if(change.path==="items"){this._virtualStart=0;this._physicalTop=0;this._virtualCount=this.items?this.items.length:0;this._collection=this.items?Polymer.Collection.get(this.items):null;this._physicalIndexForKey={};this._firstVisibleIndexVal=null;this._lastVisibleIndexVal=null;this._physicalCount=this._physicalCount||0;this._physicalItems=this._physicalItems||[];this._physicalSizes=this._physicalSizes||[];this._physicalStart=0;this._resetScrollPosition(0);this._removeFocusedItem();this._debounceTemplate(this._render)}else if(change.path==="items.splices"){this._adjustVirtualIndex(change.value.indexSplices);this._virtualCount=this.items?this.items.length:0;this._debounceTemplate(this._render)}else{this._forwardItemPath(change.path.split(".").slice(1).join("."),change.value)}},_adjustVirtualIndex:function(splices){splices.forEach(function(splice){splice.removed.forEach(this._removeItem,this);if(splice.index<this._virtualStart){var delta=Math.max(splice.addedCount-splice.removed.length,splice.index-this._virtualStart);this._virtualStart=this._virtualStart+delta;if(this._focusedIndex>=0){this._focusedIndex=this._focusedIndex+delta}}},this)},_removeItem:function(item){this.$.selector.deselect(item);if(this._focusedItem&&this._focusedItem._templateInstance[this.as]===item){this._removeFocusedItem()}},_iterateItems:function(fn,itemSet){var pidx,vidx,rtn,i;if(arguments.length===2&&itemSet){for(i=0;i<itemSet.length;i++){pidx=itemSet[i];vidx=this._computeVidx(pidx);if((rtn=fn.call(this,pidx,vidx))!=null){return rtn}}}else{pidx=this._physicalStart;vidx=this._virtualStart;for(;pidx<this._physicalCount;pidx++,vidx++){if((rtn=fn.call(this,pidx,vidx))!=null){return rtn}}for(pidx=0;pidx<this._physicalStart;pidx++,vidx++){if((rtn=fn.call(this,pidx,vidx))!=null){return rtn}}}},_computeVidx:function(pidx){if(pidx>=this._physicalStart){return this._virtualStart+(pidx-this._physicalStart)}return this._virtualStart+(this._physicalCount-this._physicalStart)+pidx},_assignModels:function(itemSet){this._iterateItems(function(pidx,vidx){var el=this._physicalItems[pidx];var inst=el._templateInstance;var item=this.items&&this.items[vidx];if(item!=null){inst[this.as]=item;inst.__key__=this._collection.getKey(item);inst[this.selectedAs]=this.$.selector.isSelected(item);inst[this.indexAs]=vidx;inst.tabIndex=this._focusedIndex===vidx?0:-1;this._physicalIndexForKey[inst.__key__]=pidx;el.removeAttribute("hidden")}else{inst.__key__=null;el.setAttribute("hidden","")}},itemSet)},_updateMetrics:function(itemSet){Polymer.dom.flush();var newPhysicalSize=0;var oldPhysicalSize=0;var prevAvgCount=this._physicalAverageCount;var prevPhysicalAvg=this._physicalAverage;this._iterateItems(function(pidx,vidx){oldPhysicalSize+=this._physicalSizes[pidx]||0;this._physicalSizes[pidx]=this._physicalItems[pidx].offsetHeight;newPhysicalSize+=this._physicalSizes[pidx];this._physicalAverageCount+=this._physicalSizes[pidx]?1:0},itemSet);this._viewportHeight=this._scrollTargetHeight;if(this.grid){this._updateGridMetrics();this._physicalSize=Math.ceil(this._physicalCount/this._itemsPerRow)*this._rowHeight}else{this._physicalSize=this._physicalSize+newPhysicalSize-oldPhysicalSize}if(this._physicalAverageCount!==prevAvgCount){this._physicalAverage=Math.round((prevPhysicalAvg*prevAvgCount+newPhysicalSize)/this._physicalAverageCount)}},_updateGridMetrics:function(){this._viewportWidth=this.$.items.offsetWidth;this._itemWidth=this._physicalCount>0?this._physicalItems[0].getBoundingClientRect().width:DEFAULT_GRID_SIZE;this._rowHeight=this._physicalCount>0?this._physicalItems[0].offsetHeight:DEFAULT_GRID_SIZE;this._itemsPerRow=this._itemWidth?Math.floor(this._viewportWidth/this._itemWidth):this._itemsPerRow},_positionItems:function(){this._adjustScrollPosition();var y=this._physicalTop;if(this.grid){var totalItemWidth=this._itemsPerRow*this._itemWidth;var rowOffset=(this._viewportWidth-totalItemWidth)/2;this._iterateItems(function(pidx,vidx){var modulus=vidx%this._itemsPerRow;var x=Math.floor(modulus*this._itemWidth+rowOffset);this.translate3d(x+"px",y+"px",0,this._physicalItems[pidx]);if(this._shouldRenderNextRow(vidx)){y+=this._rowHeight}})}else{this._iterateItems(function(pidx,vidx){this.translate3d(0,y+"px",0,this._physicalItems[pidx]);y+=this._physicalSizes[pidx]})}},_getPhysicalSizeIncrement:function(pidx){if(!this.grid){return this._physicalSizes[pidx]}if(this._computeVidx(pidx)%this._itemsPerRow!==this._itemsPerRow-1){return 0}return this._rowHeight},_shouldRenderNextRow:function(vidx){return vidx%this._itemsPerRow===this._itemsPerRow-1},_adjustScrollPosition:function(){var deltaHeight=this._virtualStart===0?this._physicalTop:Math.min(this._scrollPosition+this._physicalTop,0);if(deltaHeight){this._physicalTop=this._physicalTop-deltaHeight;if(!IOS_TOUCH_SCROLLING&&this._physicalTop!==0){this._resetScrollPosition(this._scrollTop-deltaHeight)}}},_resetScrollPosition:function(pos){if(this.scrollTarget){this._scrollTop=pos;this._scrollPosition=this._scrollTop}},_updateScrollerSize:function(forceUpdate){if(this.grid){this._estScrollHeight=this._virtualRowCount*this._rowHeight}else{this._estScrollHeight=this._physicalBottom+Math.max(this._virtualCount-this._physicalCount-this._virtualStart,0)*this._physicalAverage}forceUpdate=forceUpdate||this._scrollHeight===0;forceUpdate=forceUpdate||this._scrollPosition>=this._estScrollHeight-this._physicalSize;forceUpdate=forceUpdate||this.grid&&this.$.items.style.height<this._estScrollHeight;if(forceUpdate||Math.abs(this._estScrollHeight-this._scrollHeight)>=this._optPhysicalSize){this.$.items.style.height=this._estScrollHeight+"px";this._scrollHeight=this._estScrollHeight}},scrollToItem:function(item){return this.scrollToIndex(this.items.indexOf(item))},scrollToIndex:function(idx){if(typeof idx!=="number"||idx<0||idx>this.items.length-1){return}Polymer.dom.flush();if(this._physicalCount===0){return}idx=Math.min(Math.max(idx,0),this._virtualCount-1);if(!this._isIndexRendered(idx)||idx>=this._maxVirtualStart){this._virtualStart=this.grid?idx-this._itemsPerRow*2:idx-1}this._manageFocus();this._assignModels();this._updateMetrics();this._physicalTop=Math.floor(this._virtualStart/this._itemsPerRow)*this._physicalAverage;var currentTopItem=this._physicalStart;var currentVirtualItem=this._virtualStart;var targetOffsetTop=0;var hiddenContentSize=this._hiddenContentSize;while(currentVirtualItem<idx&&targetOffsetTop<=hiddenContentSize){targetOffsetTop=targetOffsetTop+this._getPhysicalSizeIncrement(currentTopItem);currentTopItem=(currentTopItem+1)%this._physicalCount;currentVirtualItem++}this._updateScrollerSize(true);this._positionItems();this._resetScrollPosition(this._physicalTop+this._scrollerPaddingTop+targetOffsetTop);this._increasePoolIfNeeded();this._firstVisibleIndexVal=null;this._lastVisibleIndexVal=null},_resetAverage:function(){this._physicalAverage=0;this._physicalAverageCount=0},_resizeHandler:function(){if(IOS&&Math.abs(this._viewportHeight-this._scrollTargetHeight)<100){return}Polymer.dom.addDebouncer(this.debounce("_debounceTemplate",function(){this.updateViewportBoundaries();this._render();if(this._physicalCount>0&&this._isVisible){this._resetAverage();this.scrollToIndex(this.firstVisibleIndex)}}.bind(this),1))},_getModelFromItem:function(item){var key=this._collection.getKey(item);var pidx=this._physicalIndexForKey[key];if(pidx!=null){return this._physicalItems[pidx]._templateInstance}return null},_getNormalizedItem:function(item){if(this._collection.getKey(item)===undefined){if(typeof item==="number"){item=this.items[item];if(!item){throw new RangeError("<item> not found")}return item}throw new TypeError("<item> should be a valid item")}return item},selectItem:function(item){item=this._getNormalizedItem(item);var model=this._getModelFromItem(item);if(!this.multiSelection&&this.selectedItem){this.deselectItem(this.selectedItem)}if(model){model[this.selectedAs]=true}this.$.selector.select(item);this.updateSizeForItem(item)},deselectItem:function(item){item=this._getNormalizedItem(item);var model=this._getModelFromItem(item);if(model){model[this.selectedAs]=false}this.$.selector.deselect(item);this.updateSizeForItem(item)},toggleSelectionForItem:function(item){item=this._getNormalizedItem(item);if(this.$.selector.isSelected(item)){this.deselectItem(item)}else{this.selectItem(item)}},clearSelection:function(){function unselect(item){var model=this._getModelFromItem(item);if(model){model[this.selectedAs]=false}}if(Array.isArray(this.selectedItems)){this.selectedItems.forEach(unselect,this)}else if(this.selectedItem){unselect.call(this,this.selectedItem)}this.$.selector.clearSelection()},_selectionEnabledChanged:function(selectionEnabled){var handler=selectionEnabled?this.listen:this.unlisten;handler.call(this,this,"tap","_selectionHandler")},_selectionHandler:function(e){var model=this.modelForElement(e.target);if(!model){return}var modelTabIndex,activeElTabIndex;var target=Polymer.dom(e).path[0];var activeEl=Polymer.dom(this.domHost?this.domHost.root:document).activeElement;var physicalItem=this._physicalItems[this._getPhysicalIndex(model[this.indexAs])];if(target.localName==="input"||target.localName==="button"||target.localName==="select"){return}modelTabIndex=model.tabIndex;model.tabIndex=SECRET_TABINDEX;activeElTabIndex=activeEl?activeEl.tabIndex:-1;model.tabIndex=modelTabIndex;if(activeEl&&physicalItem!==activeEl&&physicalItem.contains(activeEl)&&activeElTabIndex!==SECRET_TABINDEX){return}this.toggleSelectionForItem(model[this.as])},_multiSelectionChanged:function(multiSelection){this.clearSelection();this.$.selector.multi=multiSelection},updateSizeForItem:function(item){item=this._getNormalizedItem(item);var key=this._collection.getKey(item);var pidx=this._physicalIndexForKey[key];if(pidx!=null){this._updateMetrics([pidx]);this._positionItems()}},_manageFocus:function(){var fidx=this._focusedIndex;if(fidx>=0&&fidx<this._virtualCount){if(this._isIndexRendered(fidx)){this._restoreFocusedItem()}else{this._createFocusBackfillItem()}}else if(this._virtualCount>0&&this._physicalCount>0){this._focusedIndex=this._virtualStart;this._focusedItem=this._physicalItems[this._physicalStart]}},_isIndexRendered:function(idx){return idx>=this._virtualStart&&idx<=this._virtualEnd},_isIndexVisible:function(idx){return idx>=this.firstVisibleIndex&&idx<=this.lastVisibleIndex},_getPhysicalIndex:function(idx){return this._physicalIndexForKey[this._collection.getKey(this._getNormalizedItem(idx))]},_focusPhysicalItem:function(idx){if(idx<0||idx>=this._virtualCount){return}this._restoreFocusedItem();if(!this._isIndexRendered(idx)){this.scrollToIndex(idx)}var physicalItem=this._physicalItems[this._getPhysicalIndex(idx)];var model=physicalItem._templateInstance;var focusable;model.tabIndex=SECRET_TABINDEX;if(physicalItem.tabIndex===SECRET_TABINDEX){focusable=physicalItem}if(!focusable){focusable=Polymer.dom(physicalItem).querySelector('[tabindex="'+SECRET_TABINDEX+'"]')}model.tabIndex=0;this._focusedIndex=idx;focusable&&focusable.focus()},_removeFocusedItem:function(){if(this._offscreenFocusedItem){Polymer.dom(this).removeChild(this._offscreenFocusedItem)}this._offscreenFocusedItem=null;this._focusBackfillItem=null;this._focusedItem=null;this._focusedIndex=-1},_createFocusBackfillItem:function(){var pidx,fidx=this._focusedIndex;if(this._offscreenFocusedItem||fidx<0){return}if(!this._focusBackfillItem){var stampedTemplate=this.stamp(null);this._focusBackfillItem=stampedTemplate.root.querySelector("*");Polymer.dom(this).appendChild(stampedTemplate.root)}pidx=this._getPhysicalIndex(fidx);if(pidx!=null){this._offscreenFocusedItem=this._physicalItems[pidx];this._physicalItems[pidx]=this._focusBackfillItem;this.translate3d(0,HIDDEN_Y,0,this._offscreenFocusedItem)}},_restoreFocusedItem:function(){var pidx,fidx=this._focusedIndex;if(!this._offscreenFocusedItem||this._focusedIndex<0){return}this._assignModels();pidx=this._getPhysicalIndex(fidx);if(pidx!=null){this._focusBackfillItem=this._physicalItems[pidx];this._physicalItems[pidx]=this._offscreenFocusedItem;this._offscreenFocusedItem=null;this.translate3d(0,HIDDEN_Y,0,this._focusBackfillItem)}},_didFocus:function(e){var targetModel=this.modelForElement(e.target);var focusedModel=this._focusedItem?this._focusedItem._templateInstance:null;var hasOffscreenFocusedItem=this._offscreenFocusedItem!==null;var fidx=this._focusedIndex;if(!targetModel||!focusedModel){return}if(focusedModel===targetModel){if(!this._isIndexVisible(fidx)){this.scrollToIndex(fidx)}}else{this._restoreFocusedItem();focusedModel.tabIndex=-1;targetModel.tabIndex=0;fidx=targetModel[this.indexAs];this._focusedIndex=fidx;this._focusedItem=this._physicalItems[this._getPhysicalIndex(fidx)];if(hasOffscreenFocusedItem&&!this._offscreenFocusedItem){this._update()}}},_didMoveUp:function(){this._focusPhysicalItem(this._focusedIndex-1)},_didMoveDown:function(e){e.detail.keyboardEvent.preventDefault();this._focusPhysicalItem(this._focusedIndex+1)},_didEnter:function(e){this._focusPhysicalItem(this._focusedIndex);this._selectionHandler(e.detail.keyboardEvent)}})})();Polymer({is:"iron-scroll-threshold",properties:{upperThreshold:{type:Number,value:100},lowerThreshold:{type:Number,value:100},upperTriggered:{type:Boolean,value:false,notify:true,readOnly:true},lowerTriggered:{type:Boolean,value:false,notify:true,readOnly:true},horizontal:{type:Boolean,value:false}},behaviors:[Polymer.IronScrollTargetBehavior],observers:["_setOverflow(scrollTarget)","_initCheck(horizontal, isAttached)"],get _defaultScrollTarget(){return this},_setOverflow:function(scrollTarget){this.style.overflow=scrollTarget===this?"auto":""},_scrollHandler:function(){var THROTTLE_THRESHOLD=200;if(!this.isDebouncerActive("_checkTheshold")){this.debounce("_checkTheshold",function(){this.checkScrollThesholds()},THROTTLE_THRESHOLD)}},_initCheck:function(horizontal,isAttached){if(isAttached){this.debounce("_init",function(){this.clearTriggers();this.checkScrollThesholds()})}},checkScrollThesholds:function(){if(!this.scrollTarget||this.lowerTriggered&&this.upperTriggered){return}var upperScrollValue=this.horizontal?this._scrollLeft:this._scrollTop;var lowerScrollValue=this.horizontal?this.scrollTarget.scrollWidth-this._scrollTargetWidth-this._scrollLeft:this.scrollTarget.scrollHeight-this._scrollTargetHeight-this._scrollTop;if(upperScrollValue<=this.upperThreshold&&!this.upperTriggered){this._setUpperTriggered(true);this.fire("upper-threshold")}if(lowerScrollValue<=this.lowerThreshold&&!this.lowerTriggered){this._setLowerTriggered(true);this.fire("lower-threshold")}},clearTriggers:function(){this._setUpperTriggered(false);this._setLowerTriggered(false)}});
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-var EventTrackerEntry;
-
-function EventTracker() {
- this.listeners_ = [];
-}
-
-EventTracker.prototype = {
- add: function(target, eventType, listener, opt_capture) {
- var capture = !!opt_capture;
- var h = {
- target: target,
- eventType: eventType,
- listener: listener,
- capture: capture
- };
- this.listeners_.push(h);
- target.addEventListener(eventType, listener, capture);
- },
- remove: function(target, eventType) {
- this.listeners_ = this.listeners_.filter(function(h) {
- if (h.target == target && (!eventType || h.eventType == eventType)) {
- EventTracker.removeEventListener_(h);
- return false;
- }
- return true;
- });
- },
- removeAll: function() {
- this.listeners_.forEach(EventTracker.removeEventListener_);
- this.listeners_ = [];
- }
-};
-
-EventTracker.removeEventListener_ = function(h) {
- h.target.removeEventListener(h.eventType, h.listener, h.capture);
-};
-
+var EventTrackerEntry;function EventTracker(){this.listeners_=[]}EventTracker.prototype={add:function(target,eventType,listener,opt_capture){var capture=!!opt_capture;var h={target:target,eventType:eventType,listener:listener,capture:capture};this.listeners_.push(h);target.addEventListener(eventType,listener,capture)},remove:function(target,eventType){this.listeners_=this.listeners_.filter(function(h){if(h.target==target&&(!eventType||h.eventType==eventType)){EventTracker.removeEventListener_(h);return false}return true})},removeAll:function(){this.listeners_.forEach(EventTracker.removeEventListener_);this.listeners_=[]}};EventTracker.removeEventListener_=function(h){h.target.removeEventListener(h.eventType,h.listener,h.capture)};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-cr.define('cr.ui', function() {
- function FocusRow(root, boundary, opt_delegate) {
- this.root = root;
- this.boundary_ = boundary || document.documentElement;
- this.delegate = opt_delegate;
- this.eventTracker = new EventTracker();
- }
- FocusRow.Delegate = function() {};
- FocusRow.Delegate.prototype = {
- onKeydown: assertNotReached,
- onFocus: assertNotReached
- };
- FocusRow.ACTIVE_CLASS = 'focus-row-active';
- FocusRow.isFocusable = function(element) {
- if (!element || element.disabled) return false;
- function isVisible(element) {
- assertInstanceof(element, Element);
- var style = window.getComputedStyle(element);
- if (style.visibility == 'hidden' || style.display == 'none') return false;
- var parent = element.parentNode;
- if (!parent) return false;
- if (parent == element.ownerDocument || parent instanceof DocumentFragment) return true;
- return isVisible(parent);
- }
- return isVisible(element);
- };
- FocusRow.prototype = {
- addItem: function(type, query) {
- assert(type);
- var element = this.root.querySelector(query);
- if (!element) return false;
- element.setAttribute('focus-type', type);
- element.tabIndex = this.isActive() ? 0 : -1;
- this.eventTracker.add(element, 'blur', this.onBlur_.bind(this));
- this.eventTracker.add(element, 'focus', this.onFocus_.bind(this));
- this.eventTracker.add(element, 'keydown', this.onKeydown_.bind(this));
- this.eventTracker.add(element, 'mousedown', this.onMousedown_.bind(this));
- return true;
- },
- destroy: function() {
- this.eventTracker.removeAll();
- },
- getCustomEquivalent: function(sampleElement) {
- return assert(this.getFirstFocusable());
- },
- getElements: function() {
- var elements = this.root.querySelectorAll('[focus-type]');
- return Array.prototype.slice.call(elements);
- },
- getEquivalentElement: function(sampleElement) {
- if (this.getFocusableElements().indexOf(sampleElement) >= 0) return sampleElement;
- var sampleFocusType = this.getTypeForElement(sampleElement);
- if (sampleFocusType) {
- var sameType = this.getFirstFocusable(sampleFocusType);
- if (sameType) return sameType;
- }
- return this.getCustomEquivalent(sampleElement);
- },
- getFirstFocusable: function(opt_type) {
- var filter = opt_type ? '="' + opt_type + '"' : '';
- var elements = this.root.querySelectorAll('[focus-type' + filter + ']');
- for (var i = 0; i < elements.length; ++i) {
- if (cr.ui.FocusRow.isFocusable(elements[i])) return elements[i];
- }
- return null;
- },
- getFocusableElements: function() {
- return this.getElements().filter(cr.ui.FocusRow.isFocusable);
- },
- getTypeForElement: function(element) {
- return element.getAttribute('focus-type') || '';
- },
- isActive: function() {
- return this.root.classList.contains(FocusRow.ACTIVE_CLASS);
- },
- makeActive: function(active) {
- if (active == this.isActive()) return;
- this.getElements().forEach(function(element) {
- element.tabIndex = active ? 0 : -1;
- });
- this.root.classList.toggle(FocusRow.ACTIVE_CLASS, active);
- },
- onBlur_: function(e) {
- if (!this.boundary_.contains(e.relatedTarget)) return;
- var currentTarget = e.currentTarget;
- if (this.getFocusableElements().indexOf(currentTarget) >= 0) this.makeActive(false);
- },
- onFocus_: function(e) {
- if (this.delegate) this.delegate.onFocus(this, e);
- },
- onMousedown_: function(e) {
- if (e.button) return;
- if (!e.currentTarget.disabled) e.currentTarget.tabIndex = 0;
- },
- onKeydown_: function(e) {
- var elements = this.getFocusableElements();
- var currentElement = e.currentTarget;
- var elementIndex = elements.indexOf(currentElement);
- assert(elementIndex >= 0);
- if (this.delegate && this.delegate.onKeydown(this, e)) return;
- if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) return;
- var index = -1;
- if (e.key == 'ArrowLeft') index = elementIndex + (isRTL() ? 1 : -1); else if (e.key == 'ArrowRight') index = elementIndex + (isRTL() ? -1 : 1); else if (e.key == 'Home') index = 0; else if (e.key == 'End') index = elements.length - 1;
- var elementToFocus = elements[index];
- if (elementToFocus) {
- this.getEquivalentElement(elementToFocus).focus();
- e.preventDefault();
- }
- }
- };
- return {
- FocusRow: FocusRow
- };
-});
-
+cr.define("cr.ui",function(){function FocusRow(root,boundary,opt_delegate){this.root=root;this.boundary_=boundary||document.documentElement;this.delegate=opt_delegate;this.eventTracker=new EventTracker}FocusRow.Delegate=function(){};FocusRow.Delegate.prototype={onKeydown:assertNotReached,onFocus:assertNotReached};FocusRow.ACTIVE_CLASS="focus-row-active";FocusRow.isFocusable=function(element){if(!element||element.disabled)return false;function isVisible(element){assertInstanceof(element,Element);var style=window.getComputedStyle(element);if(style.visibility=="hidden"||style.display=="none")return false;var parent=element.parentNode;if(!parent)return false;if(parent==element.ownerDocument||parent instanceof DocumentFragment)return true;return isVisible(parent)}return isVisible(element)};FocusRow.prototype={addItem:function(type,query){assert(type);var element=this.root.querySelector(query);if(!element)return false;element.setAttribute("focus-type",type);element.tabIndex=this.isActive()?0:-1;this.eventTracker.add(element,"blur",this.onBlur_.bind(this));this.eventTracker.add(element,"focus",this.onFocus_.bind(this));this.eventTracker.add(element,"keydown",this.onKeydown_.bind(this));this.eventTracker.add(element,"mousedown",this.onMousedown_.bind(this));return true},destroy:function(){this.eventTracker.removeAll()},getCustomEquivalent:function(sampleElement){return assert(this.getFirstFocusable())},getElements:function(){var elements=this.root.querySelectorAll("[focus-type]");return Array.prototype.slice.call(elements)},getEquivalentElement:function(sampleElement){if(this.getFocusableElements().indexOf(sampleElement)>=0)return sampleElement;var sampleFocusType=this.getTypeForElement(sampleElement);if(sampleFocusType){var sameType=this.getFirstFocusable(sampleFocusType);if(sameType)return sameType}return this.getCustomEquivalent(sampleElement)},getFirstFocusable:function(opt_type){var filter=opt_type?'="'+opt_type+'"':"";var elements=this.root.querySelectorAll("[focus-type"+filter+"]");for(var i=0;i<elements.length;++i){if(cr.ui.FocusRow.isFocusable(elements[i]))return elements[i]}return null},getFocusableElements:function(){return this.getElements().filter(cr.ui.FocusRow.isFocusable)},getTypeForElement:function(element){return element.getAttribute("focus-type")||""},isActive:function(){return this.root.classList.contains(FocusRow.ACTIVE_CLASS)},makeActive:function(active){if(active==this.isActive())return;this.getElements().forEach(function(element){element.tabIndex=active?0:-1});this.root.classList.toggle(FocusRow.ACTIVE_CLASS,active)},onBlur_:function(e){if(!this.boundary_.contains(e.relatedTarget))return;var currentTarget=e.currentTarget;if(this.getFocusableElements().indexOf(currentTarget)>=0)this.makeActive(false)},onFocus_:function(e){if(this.delegate)this.delegate.onFocus(this,e)},onMousedown_:function(e){if(e.button)return;if(!e.currentTarget.disabled)e.currentTarget.tabIndex=0},onKeydown_:function(e){var elements=this.getFocusableElements();var currentElement=e.currentTarget;var elementIndex=elements.indexOf(currentElement);assert(elementIndex>=0);if(this.delegate&&this.delegate.onKeydown(this,e))return;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;var index=-1;if(e.key=="ArrowLeft")index=elementIndex+(isRTL()?1:-1);else if(e.key=="ArrowRight")index=elementIndex+(isRTL()?-1:1);else if(e.key=="Home")index=0;else if(e.key=="End")index=elements.length-1;var elementToFocus=elements[index];if(elementToFocus){this.getEquivalentElement(elementToFocus).focus();e.preventDefault()}}};return{FocusRow:FocusRow}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-cr.define('cr.icon', function() {
- function getSupportedScaleFactors() {
- var supportedScaleFactors = [];
- if (!cr.isIOS) {
- supportedScaleFactors.push(1);
- }
- if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux) {
- supportedScaleFactors.push(2);
- } else {
- supportedScaleFactors.push(window.devicePixelRatio);
- }
- return supportedScaleFactors;
- }
- function getImageSet(path) {
- var supportedScaleFactors = getSupportedScaleFactors();
- var replaceStartIndex = path.indexOf('scalefactor');
- if (replaceStartIndex < 0) return url(path);
- var s = '';
- for (var i = 0; i < supportedScaleFactors.length; ++i) {
- var scaleFactor = supportedScaleFactors[i];
- var pathWithScaleFactor = path.substr(0, replaceStartIndex) + scaleFactor + path.substr(replaceStartIndex + 'scalefactor'.length);
- s += url(pathWithScaleFactor) + ' ' + scaleFactor + 'x';
- if (i != supportedScaleFactors.length - 1) s += ', ';
- }
- return '-webkit-image-set(' + s + ')';
- }
- function getImage(path) {
- var chromeThemePath = 'chrome://theme';
- var isChromeThemeUrl = path.slice(0, chromeThemePath.length) == chromeThemePath;
- return isChromeThemeUrl ? getImageSet(path + '@scalefactorx') : url(path);
- }
- var FAVICON_URL_REGEX = /\.ico$/i;
- function getFavicon(url, opt_size, opt_type) {
- var size = opt_size || 16;
- var type = opt_type || 'favicon';
- return getImageSet('chrome://' + type + '/size/' + size + '@scalefactorx/' + (FAVICON_URL_REGEX.test(url) ? 'iconurl/' : '') + url);
- }
- return {
- getImage: getImage,
- getFavicon: getFavicon
- };
-});
-
+cr.define("cr.icon",function(){function getSupportedScaleFactors(){var supportedScaleFactors=[];if(!cr.isIOS){supportedScaleFactors.push(1)}if(cr.isMac||cr.isChromeOS||cr.isWindows||cr.isLinux){supportedScaleFactors.push(2)}else{supportedScaleFactors.push(window.devicePixelRatio)}return supportedScaleFactors}function getImageSet(path){var supportedScaleFactors=getSupportedScaleFactors();var replaceStartIndex=path.indexOf("scalefactor");if(replaceStartIndex<0)return url(path);var s="";for(var i=0;i<supportedScaleFactors.length;++i){var scaleFactor=supportedScaleFactors[i];var pathWithScaleFactor=path.substr(0,replaceStartIndex)+scaleFactor+path.substr(replaceStartIndex+"scalefactor".length);s+=url(pathWithScaleFactor)+" "+scaleFactor+"x";if(i!=supportedScaleFactors.length-1)s+=", "}return"-webkit-image-set("+s+")"}function getImage(path){var chromeThemePath="chrome://theme";var isChromeThemeUrl=path.slice(0,chromeThemePath.length)==chromeThemePath;return isChromeThemeUrl?getImageSet(path+"@scalefactorx"):url(path)}var FAVICON_URL_REGEX=/\.ico$/i;function getFavicon(url,opt_size,opt_type){var size=opt_size||16;var type=opt_type||"favicon";return getImageSet("chrome://"+type+"/size/"+size+"@scalefactorx/"+(FAVICON_URL_REGEX.test(url)?"iconurl/":"")+url)}return{getImage:getImage,getFavicon:getFavicon}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'history-searched-label',
- properties: {
- title: String,
- searchTerm: String
- },
- observers: [ 'setSearchedTextToBold_(title, searchTerm)' ],
- setSearchedTextToBold_: function() {
- var i = 0;
- var titleText = this.title;
- if (this.searchTerm == '' || this.searchTerm == null) {
- this.textContent = titleText;
- return;
- }
- var re = new RegExp(quoteString(this.searchTerm), 'gim');
- var match;
- this.textContent = '';
- while (match = re.exec(titleText)) {
- if (match.index > i) this.appendChild(document.createTextNode(titleText.slice(i, match.index)));
- i = re.lastIndex;
- var b = document.createElement('b');
- b.textContent = titleText.substring(match.index, i);
- this.appendChild(b);
- }
- if (i < titleText.length) this.appendChild(document.createTextNode(titleText.slice(i)));
- }
-});
-
+Polymer({is:"history-searched-label",properties:{title:String,searchTerm:String},observers:["setSearchedTextToBold_(title, searchTerm)"],setSearchedTextToBold_:function(){var i=0;var titleText=this.title;if(this.searchTerm==""||this.searchTerm==null){this.textContent=titleText;return}var re=new RegExp(quoteString(this.searchTerm),"gim");var match;this.textContent="";while(match=re.exec(titleText)){if(match.index>i)this.appendChild(document.createTextNode(titleText.slice(i,match.index)));i=re.lastIndex;var b=document.createElement("b");b.textContent=titleText.substring(match.index,i);this.appendChild(b)}if(i<titleText.length)this.appendChild(document.createTextNode(titleText.slice(i)))}});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-function HistoryFocusRow(root, boundary, delegate) {
- cr.ui.FocusRow.call(this, root, boundary, delegate);
- this.addItems();
-}
-
-HistoryFocusRow.prototype = {
- __proto__: cr.ui.FocusRow.prototype,
- getCustomEquivalent: function(sampleElement) {
- var equivalent;
- if (this.getTypeForElement(sampleElement) == 'star') equivalent = this.getFirstFocusable('title');
- return equivalent || cr.ui.FocusRow.prototype.getCustomEquivalent.call(this, sampleElement);
- },
- addItems: function() {
- this.destroy();
- assert(this.addItem('checkbox', '#checkbox'));
- assert(this.addItem('title', '#title'));
- assert(this.addItem('menu-button', '#menu-button'));
- this.addItem('star', '#bookmark-star');
- }
-};
-
-cr.define('md_history', function() {
- function FocusRowDelegate(historyItemElement) {
- this.historyItemElement = historyItemElement;
- }
- FocusRowDelegate.prototype = {
- onFocus: function(row, e) {
- this.historyItemElement.lastFocused = e.path[0];
- },
- onKeydown: function(row, e) {
- if (e.key == 'Enter') e.stopPropagation();
- return false;
- }
- };
- var HistoryItem = Polymer({
- is: 'history-item',
- properties: {
- item: {
- type: Object,
- observer: 'showIcon_'
- },
- searchTerm: {
- type: String
- },
- selected: {
- type: Boolean,
- reflectToAttribute: true
- },
- isCardStart: {
- type: Boolean,
- reflectToAttribute: true
- },
- isCardEnd: {
- type: Boolean,
- reflectToAttribute: true
- },
- embedded: {
- type: Boolean,
- reflectToAttribute: true
- },
- hasTimeGap: {
- type: Boolean
- },
- numberOfItems: {
- type: Number
- },
- path: String,
- index: Number,
- lastFocused: {
- type: Object,
- notify: true
- },
- ironListTabIndex: {
- type: Number,
- observer: 'ironListTabIndexChanged_'
- }
- },
- row_: null,
- attached: function() {
- Polymer.RenderStatus.afterNextRender(this, function() {
- this.row_ = new HistoryFocusRow(this.$['sizing-container'], null, new FocusRowDelegate(this));
- this.row_.makeActive(this.ironListTabIndex == 0);
- this.listen(this, 'focus', 'onFocus_');
- this.listen(this, 'dom-change', 'onDomChange_');
- });
- },
- detached: function() {
- this.unlisten(this, 'focus', 'onFocus_');
- this.unlisten(this, 'dom-change', 'onDomChange_');
- if (this.row_) this.row_.destroy();
- },
- onFocus_: function() {
- if (this.lastFocused) this.row_.getEquivalentElement(this.lastFocused).focus(); else this.row_.getFirstFocusable().focus();
- this.tabIndex = -1;
- },
- ironListTabIndexChanged_: function() {
- if (this.row_) this.row_.makeActive(this.ironListTabIndex == 0);
- },
- onDomChange_: function() {
- if (this.row_) this.row_.addItems();
- },
- onCheckboxSelected_: function(e) {
- this.fire('history-checkbox-select', {
- element: this,
- shiftKey: e.shiftKey
- });
- e.preventDefault();
- },
- onCheckboxMousedown_: function(e) {
- if (e.shiftKey) e.preventDefault();
- },
- getEntrySummary_: function() {
- var item = this.item;
- return loadTimeData.getStringF('entrySummary', item.dateTimeOfDay, item.starred ? loadTimeData.getString('bookmarked') : '', item.title, item.domain);
- },
- getAriaChecked_: function(selected) {
- return selected ? 'true' : 'false';
- },
- onRemoveBookmarkTap_: function() {
- if (!this.item.starred) return;
- if (this.$$('#bookmark-star') == this.root.activeElement) this.$['menu-button'].focus();
- var browserService = md_history.BrowserService.getInstance();
- browserService.removeBookmark(this.item.url);
- browserService.recordAction('BookmarkStarClicked');
- this.fire('remove-bookmark-stars', this.item.url);
- },
- onMenuButtonTap_: function(e) {
- this.fire('toggle-menu', {
- target: Polymer.dom(e).localTarget,
- index: this.index,
- item: this.item,
- path: this.path
- });
- e.stopPropagation();
- },
- onLinkClick_: function() {
- var browserService = md_history.BrowserService.getInstance();
- browserService.recordAction('EntryLinkClick');
- if (this.searchTerm) browserService.recordAction('SearchResultClick');
- if (this.index == undefined) return;
- browserService.recordHistogram('HistoryPage.ClickPosition', this.index, UMA_MAX_BUCKET_VALUE);
- if (this.index <= UMA_MAX_SUBSET_BUCKET_VALUE) {
- browserService.recordHistogram('HistoryPage.ClickPositionSubset', this.index, UMA_MAX_SUBSET_BUCKET_VALUE);
- }
- },
- onLinkRightClick_: function() {
- md_history.BrowserService.getInstance().recordAction('EntryLinkRightClick');
- },
- showIcon_: function() {
- this.$.icon.style.backgroundImage = cr.icon.getFavicon(this.item.url);
- },
- selectionNotAllowed_: function() {
- return !loadTimeData.getBoolean('allowDeletingHistory');
- },
- cardTitle_: function(numberOfItems, historyDate, search) {
- if (!search) return this.item.dateRelativeDay;
- var resultId = numberOfItems == 1 ? 'searchResult' : 'searchResults';
- return loadTimeData.getStringF('foundSearchResults', numberOfItems, loadTimeData.getString(resultId), search);
- }
- });
- HistoryItem.needsTimeGap = function(visits, currentIndex, searchedTerm) {
- if (currentIndex >= visits.length - 1 || visits.length == 0) return false;
- var currentItem = visits[currentIndex];
- var nextItem = visits[currentIndex + 1];
- if (searchedTerm) return currentItem.dateShort != nextItem.dateShort;
- return currentItem.time - nextItem.time > BROWSING_GAP_TIME && currentItem.dateRelativeDay == nextItem.dateRelativeDay;
- };
- return {
- HistoryItem: HistoryItem
- };
-});
-
+function HistoryFocusRow(root,boundary,delegate){cr.ui.FocusRow.call(this,root,boundary,delegate);this.addItems()}HistoryFocusRow.prototype={__proto__:cr.ui.FocusRow.prototype,getCustomEquivalent:function(sampleElement){var equivalent;if(this.getTypeForElement(sampleElement)=="star")equivalent=this.getFirstFocusable("title");return equivalent||cr.ui.FocusRow.prototype.getCustomEquivalent.call(this,sampleElement)},addItems:function(){this.destroy();assert(this.addItem("checkbox","#checkbox"));assert(this.addItem("title","#title"));assert(this.addItem("menu-button","#menu-button"));this.addItem("star","#bookmark-star")}};cr.define("md_history",function(){function FocusRowDelegate(historyItemElement){this.historyItemElement=historyItemElement}FocusRowDelegate.prototype={onFocus:function(row,e){this.historyItemElement.lastFocused=e.path[0]},onKeydown:function(row,e){if(e.key=="Enter")e.stopPropagation();return false}};var HistoryItem=Polymer({is:"history-item",properties:{item:{type:Object,observer:"showIcon_"},searchTerm:{type:String},selected:{type:Boolean,reflectToAttribute:true},isCardStart:{type:Boolean,reflectToAttribute:true},isCardEnd:{type:Boolean,reflectToAttribute:true},embedded:{type:Boolean,reflectToAttribute:true},hasTimeGap:{type:Boolean},numberOfItems:{type:Number},path:String,index:Number,lastFocused:{type:Object,notify:true},ironListTabIndex:{type:Number,observer:"ironListTabIndexChanged_"}},row_:null,attached:function(){Polymer.RenderStatus.afterNextRender(this,function(){this.row_=new HistoryFocusRow(this.$["sizing-container"],null,new FocusRowDelegate(this));this.row_.makeActive(this.ironListTabIndex==0);this.listen(this,"focus","onFocus_");this.listen(this,"dom-change","onDomChange_")})},detached:function(){this.unlisten(this,"focus","onFocus_");this.unlisten(this,"dom-change","onDomChange_");if(this.row_)this.row_.destroy()},onFocus_:function(){if(this.lastFocused)this.row_.getEquivalentElement(this.lastFocused).focus();else this.row_.getFirstFocusable().focus();this.tabIndex=-1},ironListTabIndexChanged_:function(){if(this.row_)this.row_.makeActive(this.ironListTabIndex==0)},onDomChange_:function(){if(this.row_)this.row_.addItems()},onCheckboxSelected_:function(e){this.fire("history-checkbox-select",{element:this,shiftKey:e.shiftKey});e.preventDefault()},onCheckboxMousedown_:function(e){if(e.shiftKey)e.preventDefault()},getEntrySummary_:function(){var item=this.item;return loadTimeData.getStringF("entrySummary",item.dateTimeOfDay,item.starred?loadTimeData.getString("bookmarked"):"",item.title,item.domain)},getAriaChecked_:function(selected){return selected?"true":"false"},onRemoveBookmarkTap_:function(){if(!this.item.starred)return;if(this.$$("#bookmark-star")==this.root.activeElement)this.$["menu-button"].focus();var browserService=md_history.BrowserService.getInstance();browserService.removeBookmark(this.item.url);browserService.recordAction("BookmarkStarClicked");this.fire("remove-bookmark-stars",this.item.url)},onMenuButtonTap_:function(e){this.fire("toggle-menu",{target:Polymer.dom(e).localTarget,index:this.index,item:this.item,path:this.path});e.stopPropagation()},onLinkClick_:function(){var browserService=md_history.BrowserService.getInstance();browserService.recordAction("EntryLinkClick");if(this.searchTerm)browserService.recordAction("SearchResultClick");if(this.index==undefined)return;browserService.recordHistogram("HistoryPage.ClickPosition",this.index,UMA_MAX_BUCKET_VALUE);if(this.index<=UMA_MAX_SUBSET_BUCKET_VALUE){browserService.recordHistogram("HistoryPage.ClickPositionSubset",this.index,UMA_MAX_SUBSET_BUCKET_VALUE)}},onLinkRightClick_:function(){md_history.BrowserService.getInstance().recordAction("EntryLinkRightClick")},showIcon_:function(){this.$.icon.style.backgroundImage=cr.icon.getFavicon(this.item.url)},selectionNotAllowed_:function(){return!loadTimeData.getBoolean("allowDeletingHistory")},cardTitle_:function(numberOfItems,historyDate,search){if(!search)return this.item.dateRelativeDay;var resultId=numberOfItems==1?"searchResult":"searchResults";return loadTimeData.getStringF("foundSearchResults",numberOfItems,loadTimeData.getString(resultId),search)}});HistoryItem.needsTimeGap=function(visits,currentIndex,searchedTerm){if(currentIndex>=visits.length-1||visits.length==0)return false;var currentItem=visits[currentIndex];var nextItem=visits[currentIndex+1];if(searchedTerm)return currentItem.dateShort!=nextItem.dateShort;return currentItem.time-nextItem.time>BROWSING_GAP_TIME&&currentItem.dateRelativeDay==nextItem.dateRelativeDay};return{HistoryItem:HistoryItem}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-var SelectionTreeNode = function(currentPath) {
- this.currentPath = currentPath;
- this.leaf = false;
- this.indexes = [];
- this.children = [];
-};
-
-SelectionTreeNode.prototype.addChild = function(index, path) {
- this.indexes.push(index);
- this.children[index] = new SelectionTreeNode(path);
-};
-
-var HistoryListBehavior = {
- properties: {
- selectedPaths: {
- type: Object,
- value: function() {
- return new Set();
- }
- },
- lastSelectedPath: String
- },
- listeners: {
- 'history-checkbox-select': 'itemSelected_'
- },
- hasResults: function(historyDataLength) {
- return historyDataLength > 0;
- },
- noResultsMessage: function(searchedTerm, isLoading) {
- if (isLoading) return '';
- var messageId = searchedTerm !== '' ? 'noSearchResults' : 'noResults';
- return loadTimeData.getString(messageId);
- },
- unselectAllItems: function() {
- this.selectedPaths.forEach(function(path) {
- this.set(path + '.selected', false);
- }.bind(this));
- this.selectedPaths.clear();
- },
- deleteSelected: function() {
- var toBeRemoved = Array.from(this.selectedPaths.values()).map(function(path) {
- return this.get(path);
- }.bind(this));
- md_history.BrowserService.getInstance().deleteItems(toBeRemoved).then(function() {
- this.removeItemsByPath(Array.from(this.selectedPaths));
- this.fire('unselect-all');
- }.bind(this));
- },
- removeItemsByPath: function(paths) {
- if (paths.length == 0) return;
- this.removeItemsBeneathNode_(this.buildRemovalTree_(paths));
- },
- buildRemovalTree_: function(paths) {
- var rootNode = new SelectionTreeNode(paths[0].split('.')[0]);
- paths.forEach(function(path) {
- var components = path.split('.');
- var node = rootNode;
- components.shift();
- while (components.length > 1) {
- var index = Number(components.shift());
- var arrayName = components.shift();
- if (!node.children[index]) node.addChild(index, [ node.currentPath, index, arrayName ].join('.'));
- node = node.children[index];
- }
- node.leaf = true;
- node.indexes.push(Number(components.shift()));
- });
- return rootNode;
- },
- removeItemsBeneathNode_: function(node) {
- var array = this.get(node.currentPath);
- var splices = [];
- node.indexes.sort(function(a, b) {
- return b - a;
- });
- node.indexes.forEach(function(index) {
- if (node.leaf || this.removeItemsBeneathNode_(node.children[index])) {
- var item = array.splice(index, 1)[0];
- splices.push({
- index: index,
- removed: [ item ],
- addedCount: 0,
- object: array,
- type: 'splice'
- });
- }
- }.bind(this));
- if (array.length == 0 && node.currentPath.indexOf('.') != -1) return true;
- this.notifySplices(node.currentPath, splices);
- return false;
- },
- itemSelected_: function(e) {
- var item = e.detail.element;
- var paths = [];
- var itemPath = item.path;
- if (e.detail.shiftKey && this.lastSelectedPath) {
- var itemPathComponents = itemPath.split('.');
- var itemIndex = Number(itemPathComponents.pop());
- var itemArrayPath = itemPathComponents.join('.');
- var lastItemPathComponents = this.lastSelectedPath.split('.');
- var lastItemIndex = Number(lastItemPathComponents.pop());
- if (itemArrayPath == lastItemPathComponents.join('.')) {
- for (var i = Math.min(itemIndex, lastItemIndex); i <= Math.max(itemIndex, lastItemIndex); i++) {
- paths.push(itemArrayPath + '.' + i);
- }
- }
- }
- if (paths.length == 0) paths.push(item.path);
- var selected = !this.selectedPaths.has(item.path);
- paths.forEach(function(path) {
- this.set(path + '.selected', selected);
- if (selected) {
- this.selectedPaths.add(path);
- return;
- }
- this.selectedPaths.delete(path);
- }.bind(this));
- this.lastSelectedPath = itemPath;
- }
-};
-
+var SelectionTreeNode=function(currentPath){this.currentPath=currentPath;this.leaf=false;this.indexes=[];this.children=[]};SelectionTreeNode.prototype.addChild=function(index,path){this.indexes.push(index);this.children[index]=new SelectionTreeNode(path)};var HistoryListBehavior={properties:{selectedPaths:{type:Object,value:function(){return new Set}},lastSelectedPath:String},listeners:{"history-checkbox-select":"itemSelected_"},hasResults:function(historyDataLength){return historyDataLength>0},noResultsMessage:function(searchedTerm,isLoading){if(isLoading)return"";var messageId=searchedTerm!==""?"noSearchResults":"noResults";return loadTimeData.getString(messageId)},unselectAllItems:function(){this.selectedPaths.forEach(function(path){this.set(path+".selected",false)}.bind(this));this.selectedPaths.clear()},deleteSelected:function(){var toBeRemoved=Array.from(this.selectedPaths.values()).map(function(path){return this.get(path)}.bind(this));md_history.BrowserService.getInstance().deleteItems(toBeRemoved).then(function(){this.removeItemsByPath(Array.from(this.selectedPaths));this.fire("unselect-all")}.bind(this))},removeItemsByPath:function(paths){if(paths.length==0)return;this.removeItemsBeneathNode_(this.buildRemovalTree_(paths))},buildRemovalTree_:function(paths){var rootNode=new SelectionTreeNode(paths[0].split(".")[0]);paths.forEach(function(path){var components=path.split(".");var node=rootNode;components.shift();while(components.length>1){var index=Number(components.shift());var arrayName=components.shift();if(!node.children[index])node.addChild(index,[node.currentPath,index,arrayName].join("."));node=node.children[index]}node.leaf=true;node.indexes.push(Number(components.shift()))});return rootNode},removeItemsBeneathNode_:function(node){var array=this.get(node.currentPath);var splices=[];node.indexes.sort(function(a,b){return b-a});node.indexes.forEach(function(index){if(node.leaf||this.removeItemsBeneathNode_(node.children[index])){var item=array.splice(index,1)[0];splices.push({index:index,removed:[item],addedCount:0,object:array,type:"splice"})}}.bind(this));if(array.length==0&&node.currentPath.indexOf(".")!=-1)return true;this.notifySplices(node.currentPath,splices);return false},itemSelected_:function(e){var item=e.detail.element;var paths=[];var itemPath=item.path;if(e.detail.shiftKey&&this.lastSelectedPath){var itemPathComponents=itemPath.split(".");var itemIndex=Number(itemPathComponents.pop());var itemArrayPath=itemPathComponents.join(".");var lastItemPathComponents=this.lastSelectedPath.split(".");var lastItemIndex=Number(lastItemPathComponents.pop());if(itemArrayPath==lastItemPathComponents.join(".")){for(var i=Math.min(itemIndex,lastItemIndex);i<=Math.max(itemIndex,lastItemIndex);i++){paths.push(itemArrayPath+"."+i)}}}if(paths.length==0)paths.push(item.path);var selected=!this.selectedPaths.has(item.path);paths.forEach(function(path){this.set(path+".selected",selected);if(selected){this.selectedPaths.add(path);return}this.selectedPaths.delete(path)}.bind(this));this.lastSelectedPath=itemPath}};
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'history-list',
- behaviors: [ HistoryListBehavior ],
- properties: {
- searchedTerm: {
- type: String,
- value: ''
- },
- querying: Boolean,
- historyData_: Array,
- resultLoadingDisabled_: {
- type: Boolean,
- value: false
- },
- lastFocused_: Object
- },
- listeners: {
- scroll: 'notifyListScroll_',
- 'remove-bookmark-stars': 'removeBookmarkStars_'
- },
- attached: function() {
- this.$['infinite-list'].notifyResize();
- this.$['infinite-list'].scrollTarget = this;
- this.$['scroll-threshold'].scrollTarget = this;
- },
- removeBookmarkStars_: function(e) {
- var url = e.detail;
- if (this.historyData_ === undefined) return;
- for (var i = 0; i < this.historyData_.length; i++) {
- if (this.historyData_[i].url == url) this.set('historyData_.' + i + '.starred', false);
- }
- },
- disableResultLoading: function() {
- this.resultLoadingDisabled_ = true;
- },
- addNewResults: function(historyResults, incremental) {
- var results = historyResults.slice();
- this.$['scroll-threshold'].clearTriggers();
- if (!incremental) {
- this.resultLoadingDisabled_ = false;
- if (this.historyData_) this.splice('historyData_', 0, this.historyData_.length);
- this.fire('unselect-all');
- }
- if (this.historyData_) {
- results.unshift('historyData_');
- this.push.apply(this, results);
- } else {
- this.set('historyData_', results);
- }
- },
- loadMoreData_: function() {
- if (this.resultLoadingDisabled_ || this.querying) return;
- this.fire('load-more-history');
- },
- needsTimeGap_: function(item, index, length) {
- return md_history.HistoryItem.needsTimeGap(this.historyData_, index, this.searchedTerm);
- },
- isCardStart_: function(item, i, length) {
- if (length == 0 || i > length - 1) return false;
- return i == 0 || this.historyData_[i].dateRelativeDay != this.historyData_[i - 1].dateRelativeDay;
- },
- isCardEnd_: function(item, i, length) {
- if (length == 0 || i > length - 1) return false;
- return i == length - 1 || this.historyData_[i].dateRelativeDay != this.historyData_[i + 1].dateRelativeDay;
- },
- notifyListScroll_: function() {
- this.fire('history-list-scrolled');
- },
- pathForItem_: function(index) {
- return 'historyData_.' + index;
- }
-});
-
+Polymer({is:"history-list",behaviors:[HistoryListBehavior],properties:{searchedTerm:{type:String,value:""},querying:Boolean,historyData_:Array,resultLoadingDisabled_:{type:Boolean,value:false},lastFocused_:Object},listeners:{scroll:"notifyListScroll_","remove-bookmark-stars":"removeBookmarkStars_"},attached:function(){this.$["infinite-list"].notifyResize();this.$["infinite-list"].scrollTarget=this;this.$["scroll-threshold"].scrollTarget=this},removeBookmarkStars_:function(e){var url=e.detail;if(this.historyData_===undefined)return;for(var i=0;i<this.historyData_.length;i++){if(this.historyData_[i].url==url)this.set("historyData_."+i+".starred",false)}},disableResultLoading:function(){this.resultLoadingDisabled_=true},addNewResults:function(historyResults,incremental){var results=historyResults.slice();this.$["scroll-threshold"].clearTriggers();if(!incremental){this.resultLoadingDisabled_=false;if(this.historyData_)this.splice("historyData_",0,this.historyData_.length);this.fire("unselect-all")}if(this.historyData_){results.unshift("historyData_");this.push.apply(this,results)}else{this.set("historyData_",results)}},loadMoreData_:function(){if(this.resultLoadingDisabled_||this.querying)return;this.fire("load-more-history")},needsTimeGap_:function(item,index,length){return md_history.HistoryItem.needsTimeGap(this.historyData_,index,this.searchedTerm)},isCardStart_:function(item,i,length){if(length==0||i>length-1)return false;return i==0||this.historyData_[i].dateRelativeDay!=this.historyData_[i-1].dateRelativeDay},isCardEnd_:function(item,i,length){if(length==0||i>length-1)return false;return i==length-1||this.historyData_[i].dateRelativeDay!=this.historyData_[i+1].dateRelativeDay},notifyListScroll_:function(){this.fire("history-list-scrolled")},pathForItem_:function(index){return"historyData_."+index}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'history-list-container',
- properties: {
- selectedPage_: String,
- grouped: Boolean,
- groupedRange: {
- type: Number,
- observer: 'groupedRangeChanged_'
- },
- queryState: Object,
- queryResult: Object
- },
- observers: [ 'searchTermChanged_(queryState.searchTerm)' ],
- listeners: {
- 'history-list-scrolled': 'closeMenu_',
- 'load-more-history': 'loadMoreHistory_',
- 'toggle-menu': 'toggleMenu_'
- },
- historyResult: function(info, results) {
- this.initializeResults_(info, results);
- this.closeMenu_();
- if (this.selectedPage_ == 'grouped-list') {
- this.$$('#grouped-list').historyData = results;
- return;
- }
- var list = this.$['infinite-list'];
- list.addNewResults(results, this.queryState.incremental);
- if (info.finished) list.disableResultLoading();
- },
- queryHistory: function(incremental) {
- var queryState = this.queryState;
- var noResults = !this.queryResult || this.queryResult.results == null;
- if (queryState.queryingDisabled || !this.queryState.searchTerm && noResults) {
- return;
- }
- var dialog = this.$.dialog.getIfExists();
- if (!incremental && dialog && dialog.open) dialog.close();
- this.set('queryState.querying', true);
- this.set('queryState.incremental', incremental);
- var lastVisitTime = 0;
- if (incremental) {
- var lastVisit = this.queryResult.results.slice(-1)[0];
- lastVisitTime = lastVisit ? lastVisit.time : 0;
- }
- var maxResults = this.groupedRange == HistoryRange.ALL_TIME ? RESULTS_PER_PAGE : 0;
- chrome.send('queryHistory', [ queryState.searchTerm, queryState.groupedOffset, queryState.range, lastVisitTime, maxResults ]);
- },
- historyDeleted: function() {
- if (this.getSelectedItemCount() > 0) return;
- this.queryHistory(false);
- },
- getContentScrollTarget: function() {
- return this.getSelectedList_();
- },
- getSelectedItemCount: function() {
- return this.getSelectedList_().selectedPaths.size;
- },
- unselectAllItems: function(count) {
- var selectedList = this.getSelectedList_();
- if (selectedList) selectedList.unselectAllItems(count);
- },
- deleteSelectedWithPrompt: function() {
- if (!loadTimeData.getBoolean('allowDeletingHistory')) return;
- var browserService = md_history.BrowserService.getInstance();
- browserService.recordAction('RemoveSelected');
- if (this.queryState.searchTerm != '') browserService.recordAction('SearchResultRemove');
- this.$.dialog.get().showModal();
- },
- groupedRangeChanged_: function(range, oldRange) {
- this.selectedPage_ = range == HistoryRange.ALL_TIME ? 'infinite-list' : 'grouped-list';
- if (oldRange == undefined) return;
- this.queryHistory(false);
- this.fire('history-view-changed');
- },
- searchTermChanged_: function() {
- this.queryHistory(false);
- if (this.queryState.searchTerm) md_history.BrowserService.getInstance().recordAction('Search');
- },
- loadMoreHistory_: function() {
- this.queryHistory(true);
- },
- initializeResults_: function(info, results) {
- if (results.length == 0) return;
- var currentDate = results[0].dateRelativeDay;
- for (var i = 0; i < results.length; i++) {
- results[i].selected = false;
- results[i].readableTimestamp = info.term == '' ? results[i].dateTimeOfDay : results[i].dateShort;
- if (results[i].dateRelativeDay != currentDate) {
- currentDate = results[i].dateRelativeDay;
- }
- }
- },
- onDialogConfirmTap_: function() {
- md_history.BrowserService.getInstance().recordAction('ConfirmRemoveSelected');
- this.getSelectedList_().deleteSelected();
- var dialog = assert(this.$.dialog.getIfExists());
- dialog.close();
- },
- onDialogCancelTap_: function() {
- md_history.BrowserService.getInstance().recordAction('CancelRemoveSelected');
- var dialog = assert(this.$.dialog.getIfExists());
- dialog.close();
- },
- closeMenu_: function() {
- var menu = this.$.sharedMenu.getIfExists();
- if (menu) menu.closeMenu();
- },
- toggleMenu_: function(e) {
- var target = e.detail.target;
- var menu = this.$.sharedMenu.get();
- menu.toggleMenu(target, e.detail);
- },
- onMoreFromSiteTap_: function() {
- md_history.BrowserService.getInstance().recordAction('EntryMenuShowMoreFromSite');
- var menu = assert(this.$.sharedMenu.getIfExists());
- this.set('queryState.searchTerm', menu.itemData.item.domain);
- menu.closeMenu();
- },
- onRemoveFromHistoryTap_: function() {
- var browserService = md_history.BrowserService.getInstance();
- browserService.recordAction('EntryMenuRemoveFromHistory');
- var menu = assert(this.$.sharedMenu.getIfExists());
- var itemData = menu.itemData;
- browserService.deleteItems([ itemData.item ]).then(function(items) {
- this.getSelectedList_().removeItemsByPath([ itemData.path ]);
- this.fire('unselect-all');
- var index = itemData.index;
- if (index == undefined) return;
- var browserService = md_history.BrowserService.getInstance();
- browserService.recordHistogram('HistoryPage.RemoveEntryPosition', index, UMA_MAX_BUCKET_VALUE);
- if (index <= UMA_MAX_SUBSET_BUCKET_VALUE) {
- browserService.recordHistogram('HistoryPage.RemoveEntryPositionSubset', index, UMA_MAX_SUBSET_BUCKET_VALUE);
- }
- }.bind(this));
- menu.closeMenu();
- },
- getSelectedList_: function() {
- return this.$.content.selectedItem;
- }
-});
-
-(function() {
- 'use strict';
- Polymer({
- is: 'iron-location',
- properties: {
- path: {
- type: String,
- notify: true,
- value: function() {
- return window.decodeURIComponent(window.location.pathname);
- }
- },
- query: {
- type: String,
- notify: true,
- value: function() {
- return window.decodeURIComponent(window.location.search.slice(1));
- }
- },
- hash: {
- type: String,
- notify: true,
- value: function() {
- return window.decodeURIComponent(window.location.hash.slice(1));
- }
- },
- dwellTime: {
- type: Number,
- value: 2e3
- },
- urlSpaceRegex: {
- type: String,
- value: ''
- },
- _urlSpaceRegExp: {
- computed: '_makeRegExp(urlSpaceRegex)'
- },
- _lastChangedAt: {
- type: Number
- },
- _initialized: {
- type: Boolean,
- value: false
- }
- },
- hostAttributes: {
- hidden: true
- },
- observers: [ '_updateUrl(path, query, hash)' ],
- attached: function() {
- this.listen(window, 'hashchange', '_hashChanged');
- this.listen(window, 'location-changed', '_urlChanged');
- this.listen(window, 'popstate', '_urlChanged');
- this.listen(document.body, 'click', '_globalOnClick');
- this._lastChangedAt = window.performance.now() - (this.dwellTime - 200);
- this._initialized = true;
- this._urlChanged();
- },
- detached: function() {
- this.unlisten(window, 'hashchange', '_hashChanged');
- this.unlisten(window, 'location-changed', '_urlChanged');
- this.unlisten(window, 'popstate', '_urlChanged');
- this.unlisten(document.body, 'click', '_globalOnClick');
- this._initialized = false;
- },
- _hashChanged: function() {
- this.hash = window.decodeURIComponent(window.location.hash.substring(1));
- },
- _urlChanged: function() {
- this._dontUpdateUrl = true;
- this._hashChanged();
- this.path = window.decodeURIComponent(window.location.pathname);
- this.query = window.decodeURIComponent(window.location.search.substring(1));
- this._dontUpdateUrl = false;
- this._updateUrl();
- },
- _getUrl: function() {
- var partiallyEncodedPath = window.encodeURI(this.path).replace(/\#/g, '%23').replace(/\?/g, '%3F');
- var partiallyEncodedQuery = '';
- if (this.query) {
- partiallyEncodedQuery = '?' + window.encodeURI(this.query).replace(/\#/g, '%23');
- }
- var partiallyEncodedHash = '';
- if (this.hash) {
- partiallyEncodedHash = '#' + window.encodeURI(this.hash);
- }
- return partiallyEncodedPath + partiallyEncodedQuery + partiallyEncodedHash;
- },
- _updateUrl: function() {
- if (this._dontUpdateUrl || !this._initialized) {
- return;
- }
- if (this.path === window.decodeURIComponent(window.location.pathname) && this.query === window.decodeURIComponent(window.location.search.substring(1)) && this.hash === window.decodeURIComponent(window.location.hash.substring(1))) {
- return;
- }
- var newUrl = this._getUrl();
- var fullNewUrl = new URL(newUrl, window.location.protocol + '//' + window.location.host).href;
- var now = window.performance.now();
- var shouldReplace = this._lastChangedAt + this.dwellTime > now;
- this._lastChangedAt = now;
- if (shouldReplace) {
- window.history.replaceState({}, '', fullNewUrl);
- } else {
- window.history.pushState({}, '', fullNewUrl);
- }
- this.fire('location-changed', {}, {
- node: window
- });
- },
- _globalOnClick: function(event) {
- if (event.defaultPrevented) {
- return;
- }
- var href = this._getSameOriginLinkHref(event);
- if (!href) {
- return;
- }
- event.preventDefault();
- if (href === window.location.href) {
- return;
- }
- window.history.pushState({}, '', href);
- this.fire('location-changed', {}, {
- node: window
- });
- },
- _getSameOriginLinkHref: function(event) {
- if (event.button !== 0) {
- return null;
- }
- if (event.metaKey || event.ctrlKey) {
- return null;
- }
- var eventPath = Polymer.dom(event).path;
- var anchor = null;
- for (var i = 0; i < eventPath.length; i++) {
- var element = eventPath[i];
- if (element.tagName === 'A' && element.href) {
- anchor = element;
- break;
- }
- }
- if (!anchor) {
- return null;
- }
- if (anchor.target === '_blank') {
- return null;
- }
- if ((anchor.target === '_top' || anchor.target === '_parent') && window.top !== window) {
- return null;
- }
- var href = anchor.href;
- var url;
- if (document.baseURI != null) {
- url = new URL(href, document.baseURI);
- } else {
- url = new URL(href);
- }
- var origin;
- if (window.location.origin) {
- origin = window.location.origin;
- } else {
- origin = window.location.protocol + '//' + window.location.hostname;
- if (window.location.port) {
- origin += ':' + window.location.port;
- }
- }
- if (url.origin !== origin) {
- return null;
- }
- var normalizedHref = url.pathname + url.search + url.hash;
- if (this._urlSpaceRegExp && !this._urlSpaceRegExp.test(normalizedHref)) {
- return null;
- }
- var fullNormalizedHref = new URL(normalizedHref, window.location.href).href;
- return fullNormalizedHref;
- },
- _makeRegExp: function(urlSpaceRegex) {
- return RegExp(urlSpaceRegex);
- }
- });
-})();
-
-'use strict';
-
-Polymer({
- is: 'iron-query-params',
- properties: {
- paramsString: {
- type: String,
- notify: true,
- observer: 'paramsStringChanged'
- },
- paramsObject: {
- type: Object,
- notify: true,
- value: function() {
- return {};
- }
- },
- _dontReact: {
- type: Boolean,
- value: false
- }
- },
- hostAttributes: {
- hidden: true
- },
- observers: [ 'paramsObjectChanged(paramsObject.*)' ],
- paramsStringChanged: function() {
- this._dontReact = true;
- this.paramsObject = this._decodeParams(this.paramsString);
- this._dontReact = false;
- },
- paramsObjectChanged: function() {
- if (this._dontReact) {
- return;
- }
- this.paramsString = this._encodeParams(this.paramsObject);
- },
- _encodeParams: function(params) {
- var encodedParams = [];
- for (var key in params) {
- var value = params[key];
- if (value === '') {
- encodedParams.push(encodeURIComponent(key));
- } else if (value) {
- encodedParams.push(encodeURIComponent(key) + '=' + encodeURIComponent(value.toString()));
- }
- }
- return encodedParams.join('&');
- },
- _decodeParams: function(paramString) {
- var params = {};
- paramString = (paramString || '').replace(/\+/g, '%20');
- var paramList = paramString.split('&');
- for (var i = 0; i < paramList.length; i++) {
- var param = paramList[i].split('=');
- if (param[0]) {
- params[decodeURIComponent(param[0])] = decodeURIComponent(param[1] || '');
- }
- }
- return params;
- }
-});
-
+Polymer({is:"history-list-container",properties:{selectedPage_:String,grouped:Boolean,groupedRange:{type:Number,observer:"groupedRangeChanged_"},queryState:Object,queryResult:Object},observers:["searchTermChanged_(queryState.searchTerm)"],listeners:{"history-list-scrolled":"closeMenu_","load-more-history":"loadMoreHistory_","toggle-menu":"toggleMenu_"},historyResult:function(info,results){this.initializeResults_(info,results);this.closeMenu_();if(this.selectedPage_=="grouped-list"){this.$$("#grouped-list").historyData=results;return}var list=this.$["infinite-list"];list.addNewResults(results,this.queryState.incremental);if(info.finished)list.disableResultLoading()},queryHistory:function(incremental){var queryState=this.queryState;var noResults=!this.queryResult||this.queryResult.results==null;if(queryState.queryingDisabled||!this.queryState.searchTerm&&noResults){return}var dialog=this.$.dialog.getIfExists();if(!incremental&&dialog&&dialog.open)dialog.close();this.set("queryState.querying",true);this.set("queryState.incremental",incremental);var lastVisitTime=0;if(incremental){var lastVisit=this.queryResult.results.slice(-1)[0];lastVisitTime=lastVisit?lastVisit.time:0}var maxResults=this.groupedRange==HistoryRange.ALL_TIME?RESULTS_PER_PAGE:0;chrome.send("queryHistory",[queryState.searchTerm,queryState.groupedOffset,queryState.range,lastVisitTime,maxResults])},historyDeleted:function(){if(this.getSelectedItemCount()>0)return;this.queryHistory(false)},getContentScrollTarget:function(){return this.getSelectedList_()},getSelectedItemCount:function(){return this.getSelectedList_().selectedPaths.size},unselectAllItems:function(count){var selectedList=this.getSelectedList_();if(selectedList)selectedList.unselectAllItems(count)},deleteSelectedWithPrompt:function(){if(!loadTimeData.getBoolean("allowDeletingHistory"))return;var browserService=md_history.BrowserService.getInstance();browserService.recordAction("RemoveSelected");if(this.queryState.searchTerm!="")browserService.recordAction("SearchResultRemove");this.$.dialog.get().showModal()},groupedRangeChanged_:function(range,oldRange){this.selectedPage_=range==HistoryRange.ALL_TIME?"infinite-list":"grouped-list";if(oldRange==undefined)return;this.queryHistory(false);this.fire("history-view-changed")},searchTermChanged_:function(){this.queryHistory(false);if(this.queryState.searchTerm)md_history.BrowserService.getInstance().recordAction("Search")},loadMoreHistory_:function(){this.queryHistory(true)},initializeResults_:function(info,results){if(results.length==0)return;var currentDate=results[0].dateRelativeDay;for(var i=0;i<results.length;i++){results[i].selected=false;results[i].readableTimestamp=info.term==""?results[i].dateTimeOfDay:results[i].dateShort;if(results[i].dateRelativeDay!=currentDate){currentDate=results[i].dateRelativeDay}}},onDialogConfirmTap_:function(){md_history.BrowserService.getInstance().recordAction("ConfirmRemoveSelected");this.getSelectedList_().deleteSelected();var dialog=assert(this.$.dialog.getIfExists());dialog.close()},onDialogCancelTap_:function(){md_history.BrowserService.getInstance().recordAction("CancelRemoveSelected");var dialog=assert(this.$.dialog.getIfExists());dialog.close()},closeMenu_:function(){var menu=this.$.sharedMenu.getIfExists();if(menu)menu.closeMenu()},toggleMenu_:function(e){var target=e.detail.target;var menu=this.$.sharedMenu.get();menu.toggleMenu(target,e.detail)},onMoreFromSiteTap_:function(){md_history.BrowserService.getInstance().recordAction("EntryMenuShowMoreFromSite");var menu=assert(this.$.sharedMenu.getIfExists());this.set("queryState.searchTerm",menu.itemData.item.domain);menu.closeMenu()},onRemoveFromHistoryTap_:function(){var browserService=md_history.BrowserService.getInstance();browserService.recordAction("EntryMenuRemoveFromHistory");var menu=assert(this.$.sharedMenu.getIfExists());var itemData=menu.itemData;browserService.deleteItems([itemData.item]).then(function(items){this.getSelectedList_().removeItemsByPath([itemData.path]);this.fire("unselect-all");var index=itemData.index;if(index==undefined)return;var browserService=md_history.BrowserService.getInstance();browserService.recordHistogram("HistoryPage.RemoveEntryPosition",index,UMA_MAX_BUCKET_VALUE);if(index<=UMA_MAX_SUBSET_BUCKET_VALUE){browserService.recordHistogram("HistoryPage.RemoveEntryPositionSubset",index,UMA_MAX_SUBSET_BUCKET_VALUE)}}.bind(this));menu.closeMenu()},getSelectedList_:function(){return this.$.content.selectedItem}});(function(){"use strict";Polymer({is:"iron-location",properties:{path:{type:String,notify:true,value:function(){return window.decodeURIComponent(window.location.pathname)}},query:{type:String,notify:true,value:function(){return window.decodeURIComponent(window.location.search.slice(1))}},hash:{type:String,notify:true,value:function(){return window.decodeURIComponent(window.location.hash.slice(1))}},dwellTime:{type:Number,value:2e3},urlSpaceRegex:{type:String,value:""},_urlSpaceRegExp:{computed:"_makeRegExp(urlSpaceRegex)"},_lastChangedAt:{type:Number},_initialized:{type:Boolean,value:false}},hostAttributes:{hidden:true},observers:["_updateUrl(path, query, hash)"],attached:function(){this.listen(window,"hashchange","_hashChanged");this.listen(window,"location-changed","_urlChanged");this.listen(window,"popstate","_urlChanged");this.listen(document.body,"click","_globalOnClick");this._lastChangedAt=window.performance.now()-(this.dwellTime-200);this._initialized=true;this._urlChanged()},detached:function(){this.unlisten(window,"hashchange","_hashChanged");this.unlisten(window,"location-changed","_urlChanged");this.unlisten(window,"popstate","_urlChanged");this.unlisten(document.body,"click","_globalOnClick");this._initialized=false},_hashChanged:function(){this.hash=window.decodeURIComponent(window.location.hash.substring(1))},_urlChanged:function(){this._dontUpdateUrl=true;this._hashChanged();this.path=window.decodeURIComponent(window.location.pathname);this.query=window.decodeURIComponent(window.location.search.substring(1));this._dontUpdateUrl=false;this._updateUrl()},_getUrl:function(){var partiallyEncodedPath=window.encodeURI(this.path).replace(/\#/g,"%23").replace(/\?/g,"%3F");var partiallyEncodedQuery="";if(this.query){partiallyEncodedQuery="?"+window.encodeURI(this.query).replace(/\#/g,"%23")}var partiallyEncodedHash="";if(this.hash){partiallyEncodedHash="#"+window.encodeURI(this.hash)}return partiallyEncodedPath+partiallyEncodedQuery+partiallyEncodedHash},_updateUrl:function(){if(this._dontUpdateUrl||!this._initialized){return}if(this.path===window.decodeURIComponent(window.location.pathname)&&this.query===window.decodeURIComponent(window.location.search.substring(1))&&this.hash===window.decodeURIComponent(window.location.hash.substring(1))){return}var newUrl=this._getUrl();var fullNewUrl=new URL(newUrl,window.location.protocol+"//"+window.location.host).href;var now=window.performance.now();var shouldReplace=this._lastChangedAt+this.dwellTime>now;this._lastChangedAt=now;if(shouldReplace){window.history.replaceState({},"",fullNewUrl)}else{window.history.pushState({},"",fullNewUrl)}this.fire("location-changed",{},{node:window})},_globalOnClick:function(event){if(event.defaultPrevented){return}var href=this._getSameOriginLinkHref(event);if(!href){return}event.preventDefault();if(href===window.location.href){return}window.history.pushState({},"",href);this.fire("location-changed",{},{node:window})},_getSameOriginLinkHref:function(event){if(event.button!==0){return null}if(event.metaKey||event.ctrlKey){return null}var eventPath=Polymer.dom(event).path;var anchor=null;for(var i=0;i<eventPath.length;i++){var element=eventPath[i];if(element.tagName==="A"&&element.href){anchor=element;break}}if(!anchor){return null}if(anchor.target==="_blank"){return null}if((anchor.target==="_top"||anchor.target==="_parent")&&window.top!==window){return null}var href=anchor.href;var url;if(document.baseURI!=null){url=new URL(href,document.baseURI)}else{url=new URL(href)}var origin;if(window.location.origin){origin=window.location.origin}else{origin=window.location.protocol+"//"+window.location.hostname;if(window.location.port){origin+=":"+window.location.port}}if(url.origin!==origin){return null}var normalizedHref=url.pathname+url.search+url.hash;if(this._urlSpaceRegExp&&!this._urlSpaceRegExp.test(normalizedHref)){return null}var fullNormalizedHref=new URL(normalizedHref,window.location.href).href;return fullNormalizedHref},_makeRegExp:function(urlSpaceRegex){return RegExp(urlSpaceRegex)}})})();"use strict";Polymer({is:"iron-query-params",properties:{paramsString:{type:String,notify:true,observer:"paramsStringChanged"},paramsObject:{type:Object,notify:true,value:function(){return{}}},_dontReact:{type:Boolean,value:false}},hostAttributes:{hidden:true},observers:["paramsObjectChanged(paramsObject.*)"],paramsStringChanged:function(){this._dontReact=true;this.paramsObject=this._decodeParams(this.paramsString);this._dontReact=false},paramsObjectChanged:function(){if(this._dontReact){return}this.paramsString=this._encodeParams(this.paramsObject)},_encodeParams:function(params){var encodedParams=[];for(var key in params){var value=params[key];if(value===""){encodedParams.push(encodeURIComponent(key))}else if(value){encodedParams.push(encodeURIComponent(key)+"="+encodeURIComponent(value.toString()))}}return encodedParams.join("&")},_decodeParams:function(paramString){var params={};paramString=(paramString||"").replace(/\+/g,"%20");var paramList=paramString.split("&");for(var i=0;i<paramList.length;i++){var param=paramList[i].split("=");if(param[0]){params[decodeURIComponent(param[0])]=decodeURIComponent(param[1]||"")}}return params}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'history-router',
- properties: {
- selectedPage: {
- type: String,
- observer: 'serializePath_',
- notify: true
- },
- queryState: {
- type: Object,
- notify: true
- },
- path_: {
- type: String,
- observer: 'pathChanged_'
- },
- queryParams_: Object
- },
- observers: [ 'queryParamsChanged_(queryParams_.*)', 'searchTermChanged_(queryState.searchTerm)' ],
- attached: function() {
- if (window.location.hash) {
- window.location.href = window.location.href.split('#')[0] + '?' + window.location.hash.substr(1);
- }
- },
- serializePath_: function() {
- var page = this.selectedPage == 'history' ? '' : this.selectedPage;
- this.path_ = '/' + page;
- },
- pathChanged_: function() {
- var sections = this.path_.substr(1).split('/');
- this.selectedPage = sections[0] || 'history';
- },
- queryParamsChanged_: function() {
- this.set('queryState.searchTerm', this.queryParams_.q || '');
- },
- searchTermChanged_: function() {
- this.set('queryParams_.q', this.queryState.searchTerm || null);
- }
-});
-
-Polymer.IronMultiSelectableBehaviorImpl = {
- properties: {
- multi: {
- type: Boolean,
- value: false,
- observer: 'multiChanged'
- },
- selectedValues: {
- type: Array,
- notify: true
- },
- selectedItems: {
- type: Array,
- readOnly: true,
- notify: true
- }
- },
- observers: [ '_updateSelected(selectedValues.splices)' ],
- select: function(value) {
- if (this.multi) {
- if (this.selectedValues) {
- this._toggleSelected(value);
- } else {
- this.selectedValues = [ value ];
- }
- } else {
- this.selected = value;
- }
- },
- multiChanged: function(multi) {
- this._selection.multi = multi;
- },
- get _shouldUpdateSelection() {
- return this.selected != null || this.selectedValues != null && this.selectedValues.length;
- },
- _updateAttrForSelected: function() {
- if (!this.multi) {
- Polymer.IronSelectableBehavior._updateAttrForSelected.apply(this);
- } else if (this._shouldUpdateSelection) {
- this.selectedValues = this.selectedItems.map(function(selectedItem) {
- return this._indexToValue(this.indexOf(selectedItem));
- }, this).filter(function(unfilteredValue) {
- return unfilteredValue != null;
- }, this);
- }
- },
- _updateSelected: function() {
- if (this.multi) {
- this._selectMulti(this.selectedValues);
- } else {
- this._selectSelected(this.selected);
- }
- },
- _selectMulti: function(values) {
- if (values) {
- var selectedItems = this._valuesToItems(values);
- this._selection.clear(selectedItems);
- for (var i = 0; i < selectedItems.length; i++) {
- this._selection.setItemSelected(selectedItems[i], true);
- }
- if (this.fallbackSelection && this.items.length && !this._selection.get().length) {
- var fallback = this._valueToItem(this.fallbackSelection);
- if (fallback) {
- this.selectedValues = [ this.fallbackSelection ];
- }
- }
- } else {
- this._selection.clear();
- }
- },
- _selectionChange: function() {
- var s = this._selection.get();
- if (this.multi) {
- this._setSelectedItems(s);
- } else {
- this._setSelectedItems([ s ]);
- this._setSelectedItem(s);
- }
- },
- _toggleSelected: function(value) {
- var i = this.selectedValues.indexOf(value);
- var unselected = i < 0;
- if (unselected) {
- this.push('selectedValues', value);
- } else {
- this.splice('selectedValues', i, 1);
- }
- },
- _valuesToItems: function(values) {
- return values == null ? null : values.map(function(value) {
- return this._valueToItem(value);
- }, this);
- }
-};
-
-Polymer.IronMultiSelectableBehavior = [ Polymer.IronSelectableBehavior, Polymer.IronMultiSelectableBehaviorImpl ];
-
-Polymer({
- is: 'iron-selector',
- behaviors: [ Polymer.IronMultiSelectableBehavior ]
-});
-
+Polymer({is:"history-router",properties:{selectedPage:{type:String,observer:"serializePath_",notify:true},queryState:{type:Object,notify:true},path_:{type:String,observer:"pathChanged_"},queryParams_:Object},observers:["queryParamsChanged_(queryParams_.*)","searchTermChanged_(queryState.searchTerm)"],attached:function(){if(window.location.hash){window.location.href=window.location.href.split("#")[0]+"?"+window.location.hash.substr(1)}},serializePath_:function(){var page=this.selectedPage=="history"?"":this.selectedPage;this.path_="/"+page},pathChanged_:function(){var sections=this.path_.substr(1).split("/");this.selectedPage=sections[0]||"history"},queryParamsChanged_:function(){this.set("queryState.searchTerm",this.queryParams_.q||"")},searchTermChanged_:function(){this.set("queryParams_.q",this.queryState.searchTerm||null)}});Polymer.IronMultiSelectableBehaviorImpl={properties:{multi:{type:Boolean,value:false,observer:"multiChanged"},selectedValues:{type:Array,notify:true},selectedItems:{type:Array,readOnly:true,notify:true}},observers:["_updateSelected(selectedValues.splices)"],select:function(value){if(this.multi){if(this.selectedValues){this._toggleSelected(value)}else{this.selectedValues=[value]}}else{this.selected=value}},multiChanged:function(multi){this._selection.multi=multi},get _shouldUpdateSelection(){return this.selected!=null||this.selectedValues!=null&&this.selectedValues.length},_updateAttrForSelected:function(){if(!this.multi){Polymer.IronSelectableBehavior._updateAttrForSelected.apply(this)}else if(this._shouldUpdateSelection){this.selectedValues=this.selectedItems.map(function(selectedItem){return this._indexToValue(this.indexOf(selectedItem))},this).filter(function(unfilteredValue){return unfilteredValue!=null},this)}},_updateSelected:function(){if(this.multi){this._selectMulti(this.selectedValues)}else{this._selectSelected(this.selected)}},_selectMulti:function(values){if(values){var selectedItems=this._valuesToItems(values);this._selection.clear(selectedItems);for(var i=0;i<selectedItems.length;i++){this._selection.setItemSelected(selectedItems[i],true)}if(this.fallbackSelection&&this.items.length&&!this._selection.get().length){var fallback=this._valueToItem(this.fallbackSelection);if(fallback){this.selectedValues=[this.fallbackSelection]}}}else{this._selection.clear()}},_selectionChange:function(){var s=this._selection.get();if(this.multi){this._setSelectedItems(s)}else{this._setSelectedItems([s]);this._setSelectedItem(s)}},_toggleSelected:function(value){var i=this.selectedValues.indexOf(value);var unselected=i<0;if(unselected){this.push("selectedValues",value)}else{this.splice("selectedValues",i,1)}},_valuesToItems:function(values){return values==null?null:values.map(function(value){return this._valueToItem(value)},this)}};Polymer.IronMultiSelectableBehavior=[Polymer.IronSelectableBehavior,Polymer.IronMultiSelectableBehaviorImpl];Polymer({is:"iron-selector",behaviors:[Polymer.IronMultiSelectableBehavior]});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-Polymer({
- is: 'history-side-bar',
- behaviors: [ Polymer.IronA11yKeysBehavior ],
- properties: {
- selectedPage: {
- type: String,
- notify: true
- },
- showFooter: Boolean,
- drawer: {
- type: Boolean,
- reflectToAttribute: true
- }
- },
- keyBindings: {
- 'space:keydown': 'onSpacePressed_'
- },
- onSpacePressed_: function(e) {
- e.detail.keyboardEvent.path[0].click();
- },
- onSelectorActivate_: function() {
- this.fire('history-close-drawer');
- },
- onClearBrowsingDataTap_: function(e) {
- var browserService = md_history.BrowserService.getInstance();
- browserService.recordAction('InitClearBrowsingData');
- browserService.openClearBrowsingData();
- this.$['cbd-ripple'].upAction();
- e.preventDefault();
- },
- onItemClick_: function(e) {
- e.preventDefault();
- }
-});
-
+Polymer({is:"history-side-bar",behaviors:[Polymer.IronA11yKeysBehavior],properties:{selectedPage:{type:String,notify:true},showFooter:Boolean,drawer:{type:Boolean,reflectToAttribute:true}},keyBindings:{"space:keydown":"onSpacePressed_"},onSpacePressed_:function(e){e.detail.keyboardEvent.path[0].click()},onSelectorActivate_:function(){this.fire("history-close-drawer")},onClearBrowsingDataTap_:function(e){var browserService=md_history.BrowserService.getInstance();browserService.recordAction("InitClearBrowsingData");browserService.openClearBrowsingData();this.$["cbd-ripple"].upAction();e.preventDefault()},onItemClick_:function(e){e.preventDefault()}});
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-cr.define('md_history', function() {
- var lazyLoadPromise = null;
- function ensureLazyLoaded() {
- if (!lazyLoadPromise) {
- lazyLoadPromise = new Promise(function(resolve, reject) {
- Polymer.Base.importHref('chrome://history/lazy_load.html', resolve, reject, true);
- });
- }
- return lazyLoadPromise;
- }
- return {
- ensureLazyLoaded: ensureLazyLoaded
- };
-});
-
-Polymer({
- is: 'history-app',
- behaviors: [ Polymer.IronScrollTargetBehavior ],
- properties: {
- showSidebarFooter: Boolean,
- hasSyncedResults: Boolean,
- selectedPage_: {
- type: String,
- observer: 'selectedPageChanged_'
- },
- grouped_: {
- type: Boolean,
- reflectToAttribute: true
- },
- queryState_: {
- type: Object,
- value: function() {
- return {
- incremental: false,
- querying: true,
- queryingDisabled: false,
- _range: HistoryRange.ALL_TIME,
- searchTerm: '',
- groupedOffset: 0,
- set range(val) {
- this._range = Number(val);
- },
- get range() {
- return this._range;
- }
- };
- }
- },
- queryResult_: {
- type: Object,
- value: function() {
- return {
- info: null,
- results: null,
- sessionList: null
- };
- }
- },
- hasDrawer_: Boolean,
- isUserSignedIn_: {
- type: Boolean,
- value: loadTimeData.getBoolean('isUserSignedIn')
- },
- toolbarShadow_: {
- type: Boolean,
- reflectToAttribute: true,
- notify: true
- }
- },
- listeners: {
- 'cr-menu-tap': 'onMenuTap_',
- 'history-checkbox-select': 'checkboxSelected',
- 'unselect-all': 'unselectAll',
- 'delete-selected': 'deleteSelected',
- 'history-close-drawer': 'closeDrawer_',
- 'history-view-changed': 'historyViewChanged_'
- },
- ready: function() {
- this.grouped_ = loadTimeData.getBoolean('groupByDomain');
- cr.ui.decorate('command', cr.ui.Command);
- document.addEventListener('canExecute', this.onCanExecute_.bind(this));
- document.addEventListener('command', this.onCommand_.bind(this));
- },
- onFirstRender: function() {
- setTimeout(function() {
- chrome.send('metricsHandler:recordTime', [ 'History.ResultsRenderedTime', window.performance.now() ]);
- });
- var searchField = this.$.toolbar.searchField;
- if (!searchField.narrow) {
- searchField.getSearchInput().focus();
- }
- md_history.ensureLazyLoaded();
- },
- _scrollHandler: function() {
- if (this.scrollTarget) this.toolbarShadow_ = this.scrollTarget.scrollTop != 0;
- },
- onMenuTap_: function() {
- var drawer = this.$$('#drawer');
- if (drawer) drawer.toggle();
- },
- checkboxSelected: function(e) {
- var toolbar = this.$.toolbar;
- toolbar.count = this.$.history.getSelectedItemCount();
- },
- unselectAll: function() {
- var listContainer = this.$.history;
- var toolbar = this.$.toolbar;
- listContainer.unselectAllItems(toolbar.count);
- toolbar.count = 0;
- },
- deleteSelected: function() {
- this.$.history.deleteSelectedWithPrompt();
- },
- historyResult: function(info, results) {
- this.set('queryState_.querying', false);
- this.set('queryResult_.info', info);
- this.set('queryResult_.results', results);
- var listContainer = this.$['history'];
- listContainer.historyResult(info, results);
- },
- focusToolbarSearchField: function() {
- this.$.toolbar.showSearchField();
- },
- onCanExecute_: function(e) {
- e = e;
- switch (e.command.id) {
- case 'find-command':
- e.canExecute = true;
- break;
-
- case 'slash-command':
- e.canExecute = !this.$.toolbar.searchField.isSearchFocused();
- break;
-
- case 'delete-command':
- e.canExecute = this.$.toolbar.count > 0;
- break;
- }
- },
- onCommand_: function(e) {
- if (e.command.id == 'find-command' || e.command.id == 'slash-command') this.focusToolbarSearchField();
- if (e.command.id == 'delete-command') this.deleteSelected();
- },
- setForeignSessions: function(sessionList, isTabSyncEnabled) {
- if (!isTabSyncEnabled) {
- var syncedDeviceManagerElem = this.$$('history-synced-device-manager');
- if (syncedDeviceManagerElem) syncedDeviceManagerElem.tabSyncDisabled();
- return;
- }
- this.set('queryResult_.sessionList', sessionList);
- },
- historyDeleted: function() {
- this.$.history.historyDeleted();
- },
- updateSignInState: function(isUserSignedIn) {
- this.isUserSignedIn_ = isUserSignedIn;
- },
- syncedTabsSelected_: function(selectedPage) {
- return selectedPage == 'syncedTabs';
- },
- shouldShowSpinner_: function(querying, incremental, searchTerm) {
- return querying && !incremental && searchTerm != '';
- },
- showSyncNotice_: function(hasSyncedResults, selectedPage) {
- return hasSyncedResults && selectedPage != 'syncedTabs';
- },
- selectedPageChanged_: function() {
- this.unselectAll();
- this.historyViewChanged_();
- },
- historyViewChanged_: function() {
- requestAnimationFrame(function() {
- if (!this.$.content.selectedItem) return;
- this.scrollTarget = this.$.content.selectedItem.getContentScrollTarget();
- this._scrollHandler();
- }.bind(this));
- this.recordHistoryPageView_();
- },
- getSelectedPage_: function(selectedPage, items) {
- return selectedPage;
- },
- closeDrawer_: function() {
- var drawer = this.$$('#drawer');
- if (drawer) drawer.close();
- },
- recordHistoryPageView_: function() {
- var histogramValue = HistoryPageViewHistogram.END;
- switch (this.selectedPage_) {
- case 'syncedTabs':
- histogramValue = this.isUserSignedIn_ ? HistoryPageViewHistogram.SYNCED_TABS : HistoryPageViewHistogram.SIGNIN_PROMO;
- break;
-
- default:
- switch (this.queryState_.range) {
- case HistoryRange.ALL_TIME:
- histogramValue = HistoryPageViewHistogram.HISTORY;
- break;
-
- case HistoryRange.WEEK:
- histogramValue = HistoryPageViewHistogram.GROUPED_WEEK;
- break;
-
- case HistoryRange.MONTH:
- histogramValue = HistoryPageViewHistogram.GROUPED_MONTH;
- break;
- }
- break;
- }
- md_history.BrowserService.getInstance().recordHistogram('History.HistoryPageView', histogramValue, HistoryPageViewHistogram.END);
- }
-});
+cr.define("md_history",function(){var lazyLoadPromise=null;function ensureLazyLoaded(){if(!lazyLoadPromise){lazyLoadPromise=new Promise(function(resolve,reject){Polymer.Base.importHref("chrome://history/lazy_load.html",resolve,reject,true)})}return lazyLoadPromise}return{ensureLazyLoaded:ensureLazyLoaded}});Polymer({is:"history-app",behaviors:[Polymer.IronScrollTargetBehavior],properties:{showSidebarFooter:Boolean,hasSyncedResults:Boolean,selectedPage_:{type:String,observer:"selectedPageChanged_"},grouped_:{type:Boolean,reflectToAttribute:true},queryState_:{type:Object,value:function(){return{incremental:false,querying:true,queryingDisabled:false,_range:HistoryRange.ALL_TIME,searchTerm:"",groupedOffset:0,set range(val){this._range=Number(val)},get range(){return this._range}}}},queryResult_:{type:Object,value:function(){return{info:null,results:null,sessionList:null}}},hasDrawer_:Boolean,isUserSignedIn_:{type:Boolean,value:loadTimeData.getBoolean("isUserSignedIn")},toolbarShadow_:{type:Boolean,reflectToAttribute:true,notify:true}},listeners:{"cr-menu-tap":"onMenuTap_","history-checkbox-select":"checkboxSelected","unselect-all":"unselectAll","delete-selected":"deleteSelected","history-close-drawer":"closeDrawer_","history-view-changed":"historyViewChanged_"},ready:function(){this.grouped_=loadTimeData.getBoolean("groupByDomain");cr.ui.decorate("command",cr.ui.Command);document.addEventListener("canExecute",this.onCanExecute_.bind(this));document.addEventListener("command",this.onCommand_.bind(this))},onFirstRender:function(){setTimeout(function(){chrome.send("metricsHandler:recordTime",["History.ResultsRenderedTime",window.performance.now()])});var searchField=this.$.toolbar.searchField;if(!searchField.narrow){searchField.getSearchInput().focus()}md_history.ensureLazyLoaded()},_scrollHandler:function(){if(this.scrollTarget)this.toolbarShadow_=this.scrollTarget.scrollTop!=0},onMenuTap_:function(){var drawer=this.$$("#drawer");if(drawer)drawer.toggle()},checkboxSelected:function(e){var toolbar=this.$.toolbar;toolbar.count=this.$.history.getSelectedItemCount()},unselectAll:function(){var listContainer=this.$.history;var toolbar=this.$.toolbar;listContainer.unselectAllItems(toolbar.count);toolbar.count=0},deleteSelected:function(){this.$.history.deleteSelectedWithPrompt()},historyResult:function(info,results){this.set("queryState_.querying",false);this.set("queryResult_.info",info);this.set("queryResult_.results",results);var listContainer=this.$["history"];listContainer.historyResult(info,results)},focusToolbarSearchField:function(){this.$.toolbar.showSearchField()},onCanExecute_:function(e){e=e;switch(e.command.id){case"find-command":e.canExecute=true;break;case"slash-command":e.canExecute=!this.$.toolbar.searchField.isSearchFocused();break;case"delete-command":e.canExecute=this.$.toolbar.count>0;break}},onCommand_:function(e){if(e.command.id=="find-command"||e.command.id=="slash-command")this.focusToolbarSearchField();if(e.command.id=="delete-command")this.deleteSelected()},setForeignSessions:function(sessionList,isTabSyncEnabled){if(!isTabSyncEnabled){var syncedDeviceManagerElem=this.$$("history-synced-device-manager");if(syncedDeviceManagerElem)syncedDeviceManagerElem.tabSyncDisabled();return}this.set("queryResult_.sessionList",sessionList)},historyDeleted:function(){this.$.history.historyDeleted()},updateSignInState:function(isUserSignedIn){this.isUserSignedIn_=isUserSignedIn},syncedTabsSelected_:function(selectedPage){return selectedPage=="syncedTabs"},shouldShowSpinner_:function(querying,incremental,searchTerm){return querying&&!incremental&&searchTerm!=""},showSyncNotice_:function(hasSyncedResults,selectedPage){return hasSyncedResults&&selectedPage!="syncedTabs"},selectedPageChanged_:function(){this.unselectAll();this.historyViewChanged_()},historyViewChanged_:function(){requestAnimationFrame(function(){if(!this.$.content.selectedItem)return;this.scrollTarget=this.$.content.selectedItem.getContentScrollTarget();this._scrollHandler()}.bind(this));this.recordHistoryPageView_()},getSelectedPage_:function(selectedPage,items){return selectedPage},closeDrawer_:function(){var drawer=this.$$("#drawer");if(drawer)drawer.close()},recordHistoryPageView_:function(){var histogramValue=HistoryPageViewHistogram.END;switch(this.selectedPage_){case"syncedTabs":histogramValue=this.isUserSignedIn_?HistoryPageViewHistogram.SYNCED_TABS:HistoryPageViewHistogram.SIGNIN_PROMO;break;default:switch(this.queryState_.range){case HistoryRange.ALL_TIME:histogramValue=HistoryPageViewHistogram.HISTORY;break;case HistoryRange.WEEK:histogramValue=HistoryPageViewHistogram.GROUPED_WEEK;break;case HistoryRange.MONTH:histogramValue=HistoryPageViewHistogram.GROUPED_MONTH;break}break}md_history.BrowserService.getInstance().recordHistogram("History.HistoryPageView",histogramValue,HistoryPageViewHistogram.END)}});
« no previous file with comments | « chrome/browser/resources/md_downloads/vulcanized.html ('k') | chrome/browser/resources/md_history/app.vulcanized.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698