Changeset 659
- Timestamp:
- 02/11/08 06:01:07 (10 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/config-service/src/chrome/chromeFiles/content/config.js
r658 r659 134 134 }; 135 135 136 Config.prototype.parse = function(source, uri) 137 { 138 var ioservice = Components.classes["@mozilla.org/network/io-service;1"] 139 .getService(Components.interfaces.nsIIOService); 140 141 var script = new Script(this); 142 script.enabled = true; 143 script.includes = []; 144 script.excludes = []; 145 146 // read one line at a time looking for start meta delimiter or EOF 147 var lines = source.match(/.+/g); 148 var lnIdx = 0; 149 var result = {}; 150 var foundMeta = false; 151 152 while ((result = lines[lnIdx++])) { 153 if (result.indexOf("// ==UserScript==") == 0) { 154 foundMeta = true; 155 break; 156 } 157 } 158 159 // gather up meta lines 160 if (foundMeta) { 161 // used for duplicate resource name detection 162 var previousResourceNames = {}; 163 164 while ((result = lines[lnIdx++])) { 165 if (result.indexOf("// ==/UserScript==") == 0) { 166 break; 167 } 168 169 var match = result.match(/\/\/ \@(\S+)\s+([^\n]+)/); 170 if (match != null) { 171 switch (match[1]) { 172 case "name": 173 case "namespace": 174 case "description": 175 script[match[1]] = match[2]; 176 break; 177 case "include": 178 case "exclude": 179 script[match[1]+"s"].push(match[2]); 180 break; 181 case "require": 182 var reqUri = ioservice.newURI(match[2], null, uri); 183 var scriptRequire = new ScriptRequire(script); 184 scriptRequire.url = reqUri.spec; 185 script.requires.push(scriptRequire); 186 break; 187 case "resource": 188 var res = match[2].match(/(\S+)\s+(.*)/); 189 if (res === null) { 190 // NOTE: Unlocalized strings 191 throw new Error("Invalid syntax for @resource declaration '" + 192 match[2] + "'. Resources are declared like: " + 193 "@resource <name> <url>."); 194 } 195 196 var resName = res[1]; 197 if (previousResourceNames[resName]) { 198 throw new Error("Duplicate resource name '" + resName + "' " + 199 "detected. Each resource must have a unique " + 200 "name."); 201 } else { 202 previousResourceNames[resName] = true; 203 } 204 205 var resUri = ioservice.newURI(res[2], null, uri); 206 var scriptResource = new ScriptResource(script); 207 scriptResource.name = resName; 208 scriptResource.url = resUri.spec; 209 script.resources.push(scriptResource); 210 break; 211 } 212 } 213 } 214 } 215 216 // if no meta info, default to reasonable values 217 if (script.name == null) { 218 script.name = parseScriptName(uri); 219 } 220 221 if (script.namespace == null) { 222 script.namespace = uri.host; 223 } 224 225 if (script.includes.length == 0) { 226 script.includes.push("*"); 227 } 228 229 return script; 230 } 231 136 232 Config.prototype.install = function(script) { 137 233 GM_log("> Config.install"); branches/config-service/src/chrome/chromeFiles/content/newscript.js
r658 r659 32 32 33 33 // create a script object with parsed metadata, 34 // via the script downloader object 35 var sd = new ScriptDownloader(null, tempFile, null); 36 sd.parseScript(script, tempFile); 37 script = sd.script; 34 script = config.parse(script, tempFile); 38 35 39 36 // make sure entered details will not ruin an existing file branches/config-service/src/chrome/chromeFiles/content/scriptdownloader.js
r655 r659 53 53 var source = this.req_.responseText; 54 54 55 this.parseScript(source, this.uri_); 55 var config = new Config(); // This is fragile, but temporary until config becomes a service 56 this.script = config.parse(source, this.uri_); 56 57 57 58 var file = Components.classes["@mozilla.org/file/directory_service;1"] … … 226 227 }; 227 228 228 ScriptDownloader.prototype.parseScript = function(source, uri) {229 var ioservice = Components.classes["@mozilla.org/network/io-service;1"]230 .getService(Components.interfaces.nsIIOService);231 232 var config = new Config(); // This is fragile, but temporary until config becomes a service233 var script = new Script(config);234 script.enabled = true;235 script.includes = [];236 script.excludes = [];237 238 // read one line at a time looking for start meta delimiter or EOF239 var lines = source.match(/.+/g);240 var lnIdx = 0;241 var result = {};242 var foundMeta = false;243 244 while ((result = lines[lnIdx++])) {245 if (result.indexOf("// ==UserScript==") == 0) {246 foundMeta = true;247 break;248 }249 }250 251 // gather up meta lines252 if (foundMeta) {253 // used for duplicate resource name detection254 var previousResourceNames = {};255 256 while ((result = lines[lnIdx++])) {257 if (result.indexOf("// ==/UserScript==") == 0) {258 break;259 }260 261 var match = result.match(/\/\/ \@(\S+)\s+([^\n]+)/);262 if (match != null) {263 switch (match[1]) {264 case "name":265 case "namespace":266 case "description":267 script[match[1]] = match[2];268 break;269 case "include":270 case "exclude":271 script[match[1]+"s"].push(match[2]);272 break;273 case "require":274 var reqUri = ioservice.newURI(match[2], null, uri);275 var scriptRequire = new ScriptRequire(script);276 scriptRequire.url = reqUri.spec;277 script.requires.push(scriptRequire);278 break;279 case "resource":280 var res = match[2].match(/(\S+)\s+(.*)/);281 if (res === null) {282 // NOTE: Unlocalized strings283 throw new Error("Invalid syntax for @resource declaration '" +284 match[2] + "'. Resources are declared like: " +285 "@resource <name> <url>.");286 }287 288 var resName = res[1];289 if (previousResourceNames[resName]) {290 throw new Error("Duplicate resource name '" + resName + "' " +291 "detected. Each resource must have a unique " +292 "name.");293 } else {294 previousResourceNames[resName] = true;295 }296 297 var resUri = ioservice.newURI(res[2], null, uri);298 var scriptResource = new ScriptResource(script);299 scriptResource.name = resName;300 scriptResource.url = resUri.spec;301 script.resources.push(scriptResource);302 break;303 }304 }305 }306 }307 308 // if no meta info, default to reasonable values309 if (script.name == null) {310 script.name = parseScriptName(uri);311 }312 313 if (script.namespace == null) {314 script.namespace = uri.host;315 }316 317 if (script.includes.length == 0) {318 script.includes.push("*");319 }320 321 this.script = script;322 };323 324 325 229 function NotificationCallbacks() { 326 230 };
