| 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&¤tItem.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)}});
|
|
|