OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. |
| 3 * This code may only be used under the BSD style license found at http://polyme
r.github.io/LICENSE.txt |
| 4 * The complete set of authors may be found at http://polymer.github.io/AUTHORS.
txt |
| 5 * The complete set of contributors may be found at http://polymer.github.io/CON
TRIBUTORS.txt |
| 6 * Code distributed by Google as part of the polymer project is also |
| 7 * subject to an additional IP rights grant found at http://polymer.github.io/PA
TENTS.txt |
| 8 */ |
| 9 |
| 10 (function(scope) { |
| 11 |
| 12 /** |
| 13 * @class Polymer |
| 14 */ |
| 15 |
| 16 // imports |
| 17 var endOfMicrotask = scope.endOfMicrotask; |
| 18 |
| 19 // logging |
| 20 var log = window.WebComponents ? WebComponents.flags.log : {}; |
| 21 |
| 22 // inject style sheet |
| 23 var style = document.createElement('style'); |
| 24 style.textContent = 'template {display: none !important;} /* injected by platfor
m.js */'; |
| 25 var head = document.querySelector('head'); |
| 26 head.insertBefore(style, head.firstChild); |
| 27 |
| 28 |
| 29 /** |
| 30 * Force any pending data changes to be observed before |
| 31 * the next task. Data changes are processed asynchronously but are guaranteed |
| 32 * to be processed, for example, before paintin. This method should rarely be |
| 33 * needed. It does nothing when Object.observe is available; |
| 34 * when Object.observe is not available, Polymer automatically flushes data |
| 35 * changes approximately every 1/10 second. |
| 36 * Therefore, `flush` should only be used when a data mutation should be |
| 37 * observed sooner than this. |
| 38 * |
| 39 * @method flush |
| 40 */ |
| 41 // flush (with logging) |
| 42 var flushing; |
| 43 function flush() { |
| 44 if (!flushing) { |
| 45 flushing = true; |
| 46 endOfMicrotask(function() { |
| 47 flushing = false; |
| 48 log.data && console.group('flush'); |
| 49 Platform.performMicrotaskCheckpoint(); |
| 50 log.data && console.groupEnd(); |
| 51 }); |
| 52 } |
| 53 }; |
| 54 |
| 55 // polling dirty checker |
| 56 // flush periodically if platform does not have object observe. |
| 57 if (!Observer.hasObjectObserve) { |
| 58 var FLUSH_POLL_INTERVAL = 125; |
| 59 window.addEventListener('WebComponentsReady', function() { |
| 60 flush(); |
| 61 // watch document visiblity to toggle dirty-checking |
| 62 var visibilityHandler = function() { |
| 63 // only flush if the page is visibile |
| 64 if (document.visibilityState === 'hidden') { |
| 65 if (scope.flushPoll) { |
| 66 clearInterval(scope.flushPoll); |
| 67 } |
| 68 } else { |
| 69 scope.flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL); |
| 70 } |
| 71 }; |
| 72 if (typeof document.visibilityState === 'string') { |
| 73 document.addEventListener('visibilitychange', visibilityHandler); |
| 74 } |
| 75 visibilityHandler(); |
| 76 }); |
| 77 } else { |
| 78 // make flush a no-op when we have Object.observe |
| 79 flush = function() {}; |
| 80 } |
| 81 |
| 82 if (window.CustomElements && !CustomElements.useNative) { |
| 83 var originalImportNode = Document.prototype.importNode; |
| 84 Document.prototype.importNode = function(node, deep) { |
| 85 var imported = originalImportNode.call(this, node, deep); |
| 86 CustomElements.upgradeAll(imported); |
| 87 return imported; |
| 88 }; |
| 89 } |
| 90 |
| 91 // exports |
| 92 scope.flush = flush; |
| 93 // bc |
| 94 Platform.flush = flush; |
| 95 |
| 96 })(window.Polymer); |
| 97 |
OLD | NEW |