|
| 1 | +/* |
| 2 | + * Copyright 2013 The Polymer Authors. All rights reserved. |
| 3 | + * Use of this source code is governed by a BSD-style |
| 4 | + * license that can be found in the LICENSE file. |
| 5 | + */ |
| 6 | +(function(scope) { |
| 7 | + /* |
| 8 | + Shim :unresolved via an attribute unresolved. |
| 9 | + TODO(sorvell): This is currently done once when the first |
| 10 | + round of elements are upgraded. This is incorrect, and it will |
| 11 | + need to be done dynamically. |
| 12 | + The 'resolved' attribute is experimental and may be removed. |
| 13 | + */ |
| 14 | + var TRANSITION_TIME = 0.3; |
| 15 | + var UNRESOLVED = 'unresolved'; |
| 16 | + var RESOLVED = 'resolved'; |
| 17 | + var UNRESOLVED_SELECTOR = '[' + UNRESOLVED + ']'; |
| 18 | + var RESOLVED_SELECTOR = '[' + RESOLVED + ']'; |
| 19 | + var style = document.createElement('style'); |
| 20 | + |
| 21 | + style.textContent = UNRESOLVED_SELECTOR + ' { ' + |
| 22 | + 'opacity: 0; display: block; overflow: hidden; } \n' + |
| 23 | + RESOLVED_SELECTOR + '{ display: block; overflow: hidden;\n' + |
| 24 | + '-webkit-transition: opacity ' + TRANSITION_TIME + 's; ' + |
| 25 | + 'transition: opacity ' + TRANSITION_TIME +'s; }\n'; |
| 26 | + var head = document.querySelector('head'); |
| 27 | + head.insertBefore(style, head.firstChild); |
| 28 | + |
| 29 | + // remove unresolved and apply resolved class |
| 30 | + function resolveElements() { |
| 31 | + requestAnimationFrame(function() { |
| 32 | + var nodes = document.querySelectorAll(UNRESOLVED_SELECTOR); |
| 33 | + for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) { |
| 34 | + n.removeAttribute(UNRESOLVED); |
| 35 | + n.setAttribute(RESOLVED, ''); |
| 36 | + } |
| 37 | + |
| 38 | + // NOTE: depends on transition end event to remove 'resolved' class. |
| 39 | + if (nodes.length) { |
| 40 | + var removeResolved = function() { |
| 41 | + for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) { |
| 42 | + n.removeAttribute(RESOLVED); |
| 43 | + } |
| 44 | + document.body.removeEventListener(endEvent, removeResolved, false); |
| 45 | + } |
| 46 | + document.body.addEventListener(endEvent, removeResolved, false); |
| 47 | + }; |
| 48 | + |
| 49 | + }); |
| 50 | + } |
| 51 | + |
| 52 | + // determine transition end event |
| 53 | + var endEvent = (document.documentElement.style.webkitTransition !== undefined) ? |
| 54 | + 'webkitTransitionEnd' : 'transitionend'; |
| 55 | + |
| 56 | + // hookup auto-unveiling |
| 57 | + window.addEventListener('WebComponentsReady', resolveElements); |
| 58 | + |
| 59 | +})(CustomElements); |
0 commit comments