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

Side by Side Diff: third_party/polymer/components-chromium/core-shared-lib/core-shared-lib-extracted.js

Issue 592593002: Inline scripts were extracted from Polymer elements. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: s/echo ""/echo/ Created 6 years, 2 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
2 (function() {
3
4 Polymer('core-shared-lib',{
5
6 notifyEvent: 'core-shared-lib-load',
7
8 ready: function() {
9 if (!this.url && this.defaultUrl) {
10 this.url = this.defaultUrl;
11 }
12 },
13
14 urlChanged: function() {
15 require(this.url, this, this.callbackName);
16 },
17
18 provide: function() {
19 this.async('notify');
20 },
21
22 notify: function() {
23 this.fire(this.notifyEvent, arguments);
24 }
25
26 });
27
28 var apiMap = {};
29
30 function require(url, notifiee, callbackName) {
31 // make hashable string form url
32 var name = nameFromUrl(url);
33 // lookup existing loader instance
34 var loader = apiMap[name];
35 // create a loader as needed
36 if (!loader) {
37 loader = apiMap[name] = new Loader(name, url, callbackName);
38 }
39 loader.requestNotify(notifiee);
40 }
41
42 function nameFromUrl(url) {
43 return url.replace(/[\:\/\%\?\&\.\=\-]/g, '_') + '_api';
44 }
45
46 var Loader = function(name, url, callbackName) {
47 this.instances = [];
48 this.callbackName = callbackName;
49 if (this.callbackName) {
50 window[this.callbackName] = this.success.bind(this);
51 } else {
52 if (url.indexOf(this.callbackMacro) >= 0) {
53 this.callbackName = name + '_loaded';
54 window[this.callbackName] = this.success.bind(this);
55 url = url.replace(this.callbackMacro, this.callbackName);
56 } else {
57 // TODO(sjmiles): we should probably fallback to listening to script.loa d
58 throw 'core-shared-api: a %%callback%% parameter is required in the API url';
59 }
60 }
61 //
62 this.addScript(url);
63 };
64
65 Loader.prototype = {
66
67 callbackMacro: '%%callback%%',
68 loaded: false,
69
70 addScript: function(src) {
71 var script = document.createElement('script');
72 script.src = src;
73 script.onerror = this.error.bind(this);
74 var s = document.querySelector('script');
75 s.parentNode.insertBefore(script, s);
76 this.script = script;
77 },
78
79 removeScript: function() {
80 if (this.script.parentNode) {
81 this.script.parentNode.removeChild(this.script);
82 }
83 this.script = null;
84 },
85
86 error: function() {
87 this.cleanup();
88 },
89
90 success: function() {
91 this.loaded = true;
92 this.cleanup();
93 this.result = Array.prototype.slice.call(arguments);
94 this.instances.forEach(this.provide, this);
95 this.instances = null;
96 },
97
98 cleanup: function() {
99 delete window[this.callbackName];
100 },
101
102 provide: function(instance) {
103 instance.notify(instance, this.result);
104 },
105
106 requestNotify: function(instance) {
107 if (this.loaded) {
108 this.provide(instance);
109 } else {
110 this.instances.push(instance);
111 }
112 }
113
114 };
115
116 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698