|
66 | 66 | }
|
67 | 67 | loadModules(code, callback);
|
68 | 68 | });
|
| 69 | + |
| 70 | + // Append the 'getModule' processor as the last (plugins get initialized after Espruino.Core modules) |
| 71 | + Espruino.Plugins.CoreModules = { |
| 72 | + init: function() { |
| 73 | + Espruino.addProcessor("getModule", function(data, callback) { |
| 74 | + if (data.moduleCode!==undefined) { // already provided be previous getModule processor |
| 75 | + return callback(data); |
| 76 | + } |
| 77 | + |
| 78 | + fetchGetModule(data, callback); |
| 79 | + }); |
| 80 | + } |
| 81 | + }; |
69 | 82 | }
|
70 | 83 |
|
71 | 84 | function isBuiltIn(module) {
|
|
108 | 121 | return modules;
|
109 | 122 | };
|
110 | 123 |
|
| 124 | + /** Download modules from MODULE_URL/.. */ |
| 125 | + function fetchGetModule(data, callback) { |
| 126 | + var fullModuleName = data.moduleName; |
| 127 | + |
| 128 | + // try and load the module the old way... |
| 129 | + console.log("loadModule("+fullModuleName+")"); |
| 130 | + |
| 131 | + var urls = []; // Array of where to look for this module |
| 132 | + var modName; // Simple name of the module |
| 133 | + if(Espruino.Core.Utils.isURL(fullModuleName)) { |
| 134 | + modName = fullModuleName.substr(fullModuleName.lastIndexOf("/") + 1).split(".")[0]; |
| 135 | + urls = [ fullModuleName ]; |
| 136 | + } else { |
| 137 | + modName = fullModuleName; |
| 138 | + Espruino.Config.MODULE_URL.split("|").forEach(function (url) { |
| 139 | + url = url.trim(); |
| 140 | + if (url.length!=0) |
| 141 | + Espruino.Config.MODULE_EXTENSIONS.split("|").forEach(function (extension) { |
| 142 | + urls.push(url + "/" + fullModuleName + extension); |
| 143 | + }) |
| 144 | + }); |
| 145 | + }; |
| 146 | + |
| 147 | + // Recursively go through all the urls |
| 148 | + (function download(urls) { |
| 149 | + if (urls.length==0) { |
| 150 | + return callback(data); |
| 151 | + } |
| 152 | + var dlUrl = urls[0]; |
| 153 | + Espruino.Core.Utils.getURL(dlUrl, function (code) { |
| 154 | + if (code!==undefined) { |
| 155 | + // we got it! |
| 156 | + data.moduleCode = code; |
| 157 | + data.isMinified = dlUrl.substr(-7)==".min.js"; |
| 158 | + return callback(data); |
| 159 | + } else { |
| 160 | + // else try next |
| 161 | + download(urls.slice(1)); |
| 162 | + } |
| 163 | + }); |
| 164 | + })(urls); |
| 165 | + } |
| 166 | + |
| 167 | + |
111 | 168 | /** Called from loadModule when a module is loaded. Parse it for other modules it might use
|
112 | 169 | * and resolve dfd after all submodules have been loaded */
|
113 | 170 | function moduleLoaded(resolve, requires, modName, data, loadedModuleData, alreadyMinified){
|
|
147 | 204 | return new Promise(function(resolve, reject) {
|
148 | 205 | // First off, try and find this module using callProcessor
|
149 | 206 | Espruino.callProcessor("getModule",
|
150 |
| - { moduleName:fullModuleName, moduleCode:undefined }, |
| 207 | + { moduleName:fullModuleName, moduleCode:undefined, isMinified:false }, |
151 | 208 | function(data) {
|
152 |
| - if (data.moduleCode!==undefined) { |
153 |
| - // great! it found something. Use it. |
154 |
| - moduleLoaded(resolve, requires, fullModuleName, data.moduleCode, loadedModuleData, false); |
155 |
| - } else { |
156 |
| - // otherwise try and load the module the old way... |
157 |
| - console.log("loadModule("+fullModuleName+")"); |
158 |
| - |
159 |
| - var urls = []; // Array of where to look for this module |
160 |
| - var modName; // Simple name of the module |
161 |
| - if(Espruino.Core.Utils.isURL(fullModuleName)) { |
162 |
| - modName = fullModuleName.substr(fullModuleName.lastIndexOf("/") + 1).split(".")[0]; |
163 |
| - urls = [ fullModuleName ]; |
164 |
| - } else { |
165 |
| - modName = fullModuleName; |
166 |
| - Espruino.Config.MODULE_URL.split("|").forEach(function (url) { |
167 |
| - url = url.trim(); |
168 |
| - if (url.length!=0) |
169 |
| - Espruino.Config.MODULE_EXTENSIONS.split("|").forEach(function (extension) { |
170 |
| - urls.push(url + "/" + fullModuleName + extension); |
171 |
| - }) |
172 |
| - }); |
173 |
| - }; |
174 |
| - |
175 |
| - // Recursively go through all the urls |
176 |
| - (function download(urls) { |
177 |
| - if (urls.length==0) { |
178 |
| - Espruino.Core.Notifications.warning("Module "+fullModuleName+" not found"); |
179 |
| - return resolve(); |
180 |
| - } |
181 |
| - var dlUrl = urls[0]; |
182 |
| - Espruino.Core.Utils.getURL(dlUrl, function (data) { |
183 |
| - if (data!==undefined) { |
184 |
| - // we got it! |
185 |
| - moduleLoaded(resolve, requires, fullModuleName, data, loadedModuleData, dlUrl.substr(-7)==".min.js"); |
186 |
| - } else { |
187 |
| - // else try next |
188 |
| - download(urls.slice(1)); |
189 |
| - } |
190 |
| - }); |
191 |
| - })(urls); |
| 209 | + if (data.moduleCode===undefined) { |
| 210 | + Espruino.Core.Notifications.warning("Module "+fullModuleName+" not found"); |
| 211 | + return resolve(); |
192 | 212 | }
|
193 |
| - }); |
194 | 213 |
|
| 214 | + // great! it found something. Use it. |
| 215 | + moduleLoaded(resolve, requires, fullModuleName, data.moduleCode, loadedModuleData, data.isMinified); |
| 216 | + }); |
195 | 217 | });
|
196 | 218 | }
|
197 | 219 |
|
|
0 commit comments