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

Side by Side Diff: chrome/browser/resources/md_history/lazy_render.js

Issue 2282403005: MD WebUI: Move history-lazy-render into cr-elements (Closed)
Patch Set: Rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * @fileoverview
7 * history-lazy-render is a simple variant of dom-if designed for lazy rendering
8 * of elements that are accessed imperatively.
9 * Usage:
10 * <template is="history-lazy-render" id="menu">
11 * <heavy-menu></heavy-menu>
12 * </template>
13 *
14 * this.$.menu.get().then(function(menu) {
15 * menu.show();
16 * });
17 */
18
19 Polymer({
20 is: 'history-lazy-render',
21 extends: 'template',
22
23 behaviors: [
24 Polymer.Templatizer
25 ],
26
27 /** @private {Promise<Element>} */
28 _renderPromise: null,
29
30 /** @private {TemplateInstance} */
31 _instance: null,
32
33 /**
34 * Stamp the template into the DOM tree asynchronously
35 * @return {Promise<Element>} Promise which resolves when the template has
36 * been stamped.
37 */
38 get: function() {
39 if (!this._renderPromise) {
40 this._renderPromise = new Promise(function(resolve) {
41 this._debounceTemplate(function() {
42 this._render();
43 this._renderPromise = null;
44 resolve(this.getIfExists());
45 }.bind(this));
46 }.bind(this));
47 }
48 return this._renderPromise;
49 },
50
51 /**
52 * @return {?Element} The element contained in the template, if it has
53 * already been stamped.
54 */
55 getIfExists: function() {
56 if (this._instance) {
57 var children = this._instance._children;
58
59 for (var i = 0; i < children.length; i++) {
60 if (children[i].nodeType == Node.ELEMENT_NODE)
61 return children[i];
62 }
63 }
64 return null;
65 },
66
67 _render: function() {
68 if (!this.ctor)
69 this.templatize(this);
70 var parentNode = this.parentNode;
71 if (parentNode && !this._instance) {
72 this._instance = /** @type {TemplateInstance} */(this.stamp({}));
73 var root = this._instance.root;
74 parentNode.insertBefore(root, this);
75 }
76 },
77
78 /**
79 * @param {string} prop
80 * @param {Object} value
81 */
82 _forwardParentProp: function(prop, value) {
83 if (this._instance)
84 this._instance.__setProperty(prop, value, true);
85 },
86
87 /**
88 * @param {string} path
89 * @param {Object} value
90 */
91 _forwardParentPath: function(path, value) {
92 if (this._instance)
93 this._instance._notifyPath(path, value, true);
94 }
95 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698