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

Unified Diff: pkg/polymer/lib/elements/polymer-shared-lib/polymer-shared-lib.html

Issue 175443005: [polymer] import all elements (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: updated from bower Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/polymer/lib/elements/polymer-shared-lib/polymer-shared-lib.html
diff --git a/pkg/polymer/lib/elements/polymer-shared-lib/polymer-shared-lib.html b/pkg/polymer/lib/elements/polymer-shared-lib/polymer-shared-lib.html
new file mode 100644
index 0000000000000000000000000000000000000000..28b6c28dffaf632a6a45f5564f86635f02e0b151
--- /dev/null
+++ b/pkg/polymer/lib/elements/polymer-shared-lib/polymer-shared-lib.html
@@ -0,0 +1,91 @@
+<!--
+Copyright 2013 The Polymer Authors. All rights reserved.
+Use of this source code is governed by a BSD-style
+license that can be found in the LICENSE file.
+-->
+<link rel="import" href="../polymer/polymer.html">
+
+<polymer-element name="polymer-shared-lib" attributes="url notifyEvent">
+ <script>
+ (function() {
+ Polymer('polymer-shared-lib', {
+ notifyEvent: 'polymer-shared-lib-loaded',
+ ready: function() {
+ },
+ urlChanged: function() {
+ requireApi(this);
+ },
+ provide: function() {
+ this.async('notify');
+ },
+ notify: function() {
+ this.fire(this.notifyEvent, arguments);
+ }
+ });
+
+ function nameFromInstance(instance) {
+ return instance.url.replace(/[\:\/\%\?\.\=]/g, '_') + '_api';
+ }
+
+ var apiMap = {};
+ function requireApi(instance) {
+ instance._api_name = nameFromInstance(instance);
+ var loader = apiMap[instance._api_name];
+ if (!loader) {
+ loader = new Loader(instance);
+ apiMap[name] = loader;
+ }
+ loader.requireApi(instance);
+ }
+
+ Loader = function(instance) {
+ this.instances = [];
+ this.load(instance);
+ };
+ Loader.prototype = {
+ loaded: false,
+ requireApi: function(instance) {
+ if (this.loaded) {
+ this.provide(instance);
+ } else {
+ this.instances.push(instance);
+ }
+ },
+ load: function(instance) {
+ this.callbackName = instance._api_name + '_loaded';
+ window[this.callbackName] = this.success.bind(this);
+ var url = instance.url.replace('%%callback%%', this.callbackName);
+ this.addScript(url);
+ },
+ addScript: function(src) {
+ var script = document.createElement('script');
+ script.src = src;
+ script.onerror = this.error.bind(this);
+ var s = document.querySelector('script');
+ s.parentNode.insertBefore(script, s);
+ this.script = script;
+ },
+ removeScript: function() {
+ if (this.script.parentNode) {
+ this.script.parentNode.removeChild(this.script);
+ }
+ this.script = null;
+ },
+ error: function() {
+ this.cleanup();
+ },
+ success: function() {
+ this.cleanup();
+ this.result = Array.prototype.slice.call(arguments);
+ this.instances.forEach(this.provide, this);
+ },
+ cleanup: function() {
+ delete window[this.callbackName];
+ },
+ provide: function(instance) {
+ instance.notify.apply(instance, this.result);
+ }
+ };
+ })();
+ </script>
+</polymer-element>
« no previous file with comments | « pkg/polymer/lib/elements/polymer-shared-lib/index.html ('k') | pkg/polymer/lib/elements/polymer-signals/.bower.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698