forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExtensionUtils.js
More file actions
1 lines (1 loc) · 3.43 KB
/
ExtensionUtils.js
File metadata and controls
1 lines (1 loc) · 3.43 KB
1
define(function(require,exports,module){const FileSystem=require("filesystem/FileSystem"),PathUtils=require("thirdparty/path-utils/path-utils"),Package=require("extensibility/Package");function addEmbeddedStyleSheet(css){return $("<style>").text(css).appendTo("head")[0]}function addLinkedStyleSheet(url,deferred){var attributes={type:"text/css",rel:"stylesheet",href:url},$link=$("<link/>").attr(attributes);return deferred&&$link.on("load",deferred.resolve).on("error",deferred.reject),$link.appendTo("head"),$link[0]}function isAbsolutePathOrUrl(pathOrUrl){return"win"===brackets.platform?PathUtils.isAbsoluteUrl(pathOrUrl):FileSystem.isAbsolutePath(pathOrUrl)}function parseLessCode(code,url){var result=new $.Deferred,options;if(url){var dir=url.slice(0,url.lastIndexOf("/")+1);options={filename:url,rootpath:dir},isAbsolutePathOrUrl(url)&&(options.currentFileInfo={currentDirectory:dir,entryPath:dir,filename:url,rootFilename:url,rootpath:dir})}return less.render(code,options,function onParse(err,tree){err?result.reject(err):result.resolve(tree.css)}),result.promise()}function getModulePath(module,path){var modulePath=module.uri.substr(0,module.uri.lastIndexOf("/")+1);return path&&(modulePath+=path),modulePath}function getModuleUrl(module,path){return encodeURI(getModulePath(module,path))}function loadFile(module,path){var url=PathUtils.isAbsoluteUrl(path)?path:getModuleUrl(module,path);let result=new $.Deferred;return $.get(url).done(function(content){result.resolve(content,url)}).fail(result.reject),result}function loadStyleSheet(module,path){var result=new $.Deferred;return loadFile(module,path).done(function(content,URL){var url=URL||this.url;if(".less"===url.slice(-5))parseLessCode(content,url).done(function(css){result.resolve(addEmbeddedStyleSheet(css))}).fail(result.reject);else{var deferred=new $.Deferred,link=addLinkedStyleSheet(url,deferred);deferred.done(function(){result.resolve(link)}).fail(result.reject)}}).fail(result.reject),result.fail(function(error,textStatus,httpError){void 0!==error.readyState?console.error("[Extension] Unable to read stylesheet "+path+":",textStatus,httpError):console.error("[Extension] Unable to process stylesheet "+path,error)}),result.promise()}function _loadExtensionMetadata(baseExtensionUrl,extensionName){const packageJSONFile=baseExtensionUrl+"/package.json",result=new $.Deferred;let json={name:extensionName||path.basename(baseExtensionUrl)};return $.getJSON(packageJSONFile).then(function(packageResult){json=packageResult}).always(function(){let disabled,defaultDisabled=JSON.parse(PhStore.getItem(Package.DEFAULT_DISABLED_EXTENSIONS_KEY)||"[]");Array.isArray(defaultDisabled)&&-1!==defaultDisabled.indexOf(baseExtensionUrl)&&(console.warn("Extension has been disabled on startup: "+baseExtensionUrl),disabled=!0),json.disabled=disabled,result.resolve(json)}),result.promise()}function loadMetadata(metadataURL,extensionName){if(metadataURL.startsWith("http://")||metadataURL.startsWith("https://")||metadataURL.startsWith("phtauri://")||metadataURL.startsWith("asset://"))return _loadExtensionMetadata(metadataURL,extensionName);throw new Error(`Cannot load extension metadata for ${extensionName} at path ${metadataURL}`)}exports.addEmbeddedStyleSheet=addEmbeddedStyleSheet,exports.addLinkedStyleSheet=addLinkedStyleSheet,exports.parseLessCode=parseLessCode,exports.getModulePath=getModulePath,exports.getModuleUrl=getModuleUrl,exports.loadFile=loadFile,exports.loadStyleSheet=loadStyleSheet,exports.loadMetadata=loadMetadata});