tao-test/app/tao/views/build/tasks/helpers/extensions.js

105 lines
4.3 KiB
JavaScript
Raw Normal View History

2022-08-29 20:14:13 +02:00
var path = require('path');
module.exports = function(grunt, root){
return {
getExtensions : function getExtensions(clientSide) {
var options = {
cwd: root,
filter: function(src) {
return grunt.file.isDir(src) && grunt.file.exists(src + '/manifest.php') &&
(!clientSide || grunt.file.exists(src + '/views/js/controller/routes.js'));
}
};
return grunt.file.expand(options, '*');
},
getExtensionPath : function getExtensionPath(extension) {
extension = extension || 'tao';
return root + '/' + extension;
},
getExtensionSources : function getExtensionSources(extension, filePattern, amdify) {
var extPath = this.getExtensionPath(extension);
var jsSources = grunt.file.expand({cwd: extPath}, filePattern);
jsSources.forEach(function(source, index) {
var path = extPath + '/' + source;
if(amdify && amdify === true){
path = path.replace(extPath + '/views/js', extension === 'tao' ? '': extension).replace(/\.js$/, '').replace(/^\//, '');
}
jsSources[index] = path;
});
return jsSources;
},
getExtensionsSources : function getExtensionsSources(filePattern, amdify){
var self = this;
var sources = [];
this.getExtensions(true).forEach(function(extension){
sources = sources.concat(self.getExtensionSources(extension, filePattern, amdify));
});
return sources;
},
getExtensionsPaths : function getExtensionsPaths(extensions){
var self = this;
var paths = { };
extensions = extensions || self.getExtensions(true);
extensions.forEach(function(extension){
var jsPath = self.getExtensionPath(extension) + '/views/js';
var cssPath = self.getExtensionPath(extension) + '/views/css';
if(grunt.file.exists(jsPath)){
paths[extension] = path.relative('../js', jsPath);
}
if(grunt.file.exists(cssPath)){
paths[extension + 'Css'] = path.relative('../js', cssPath);
}
});
return paths;
},
// parse a 'paths.json' file in each extension, and if it exists,
// append its contents to a flat object
getExtensionsExtraPaths : function getExtensionsExtraPaths(extensions = this.getExtensions(true)) {
return extensions.reduce((extraPaths, extension) => {
try {
return {...extraPaths, ...require(path.join(this.getExtensionPath(extension), 'views', 'build', 'grunt', 'paths.json'))};
} catch(e) {
return extraPaths;
}
}, {});
},
// OUT OF DATE !!!
getExtensionsControllers : function getExtensionsControllers(extensions){
var self = this;
var modules = [];
extensions = extensions || self.getExtensions(true);
extensions.forEach(function(extension){
var extPath = self.getExtensionPath(extension);
modules = modules.concat(self.getExtensionSources(extension, 'views/js/controller/**/*.js').map(function(source){
return source.replace(extPath + '/views/js', extension === 'tao' ? '': extension).replace(/\.js$/, '').replace(/^\//, '');
}));
});
return modules;
},
getExtensionsLibs : function getExtensionsLibs(extensions){
var self = this;
var modules = [];
extensions = extensions || self.getExtensions(true);
extensions.forEach(function(extension){
var extPath = self.getExtensionPath(extension);
modules = modules.concat(self.getExtensionSources(extension, ['views/js/*.js', '!views/js/*.min.js', '!views/js/test/**/*.js']).map(function(source){
return source.replace(extPath + '/views/js', extension === 'tao' ? '': extension).replace(/\.js$/, '').replace(/^\//, '');
}));
});
return modules;
}
};
};