mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Make theme able to load custom javascript (#1211)
* Make theme able to load custom javascript - Look for the field 'customScript' in editorTheme (settings.js) - Add it to mustach context - Load list on template side (index.mst) * Add unit tests for customScripts * Code review edits : generic behavior for theme.page.[css|scripts] - Use the same way to share css and javascript files from a theme - Allow string instead of array for theme.page.scripts - Remove old customScript field
This commit is contained in:
parent
67337e013a
commit
62b29ecb65
@ -199,6 +199,9 @@
|
|||||||
<script src="vendor/ace/ext-language_tools.js"></script>
|
<script src="vendor/ace/ext-language_tools.js"></script>
|
||||||
<script src="{{ asset.red }}"></script>
|
<script src="{{ asset.red }}"></script>
|
||||||
<script src="{{ asset.main }}"></script>
|
<script src="{{ asset.main }}"></script>
|
||||||
|
{{# page.scripts }}
|
||||||
|
<script src="{{.}}"></script>
|
||||||
|
{{/ page.scripts }}
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -57,6 +57,24 @@ function serveFile(app,baseUrl,file) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function serveFilesFromTheme(themeValue, themeApp, directory) {
|
||||||
|
var result = [];
|
||||||
|
if (themeValue) {
|
||||||
|
var array = themeValue;
|
||||||
|
if (!util.isArray(array)) {
|
||||||
|
array = [array];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<array.length;i++) {
|
||||||
|
url = serveFile(themeApp,directory,array[i]);
|
||||||
|
if (url) {
|
||||||
|
result.push(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
init: function(runtime) {
|
init: function(runtime) {
|
||||||
var settings = runtime.settings;
|
var settings = runtime.settings;
|
||||||
@ -76,20 +94,15 @@ module.exports = {
|
|||||||
var themeApp = express();
|
var themeApp = express();
|
||||||
|
|
||||||
if (theme.page) {
|
if (theme.page) {
|
||||||
if (theme.page.css) {
|
|
||||||
var styles = theme.page.css;
|
|
||||||
if (!util.isArray(styles)) {
|
|
||||||
styles = [styles];
|
|
||||||
}
|
|
||||||
themeContext.page.css = [];
|
|
||||||
|
|
||||||
for (i=0;i<styles.length;i++) {
|
themeContext.page.css = serveFilesFromTheme(
|
||||||
url = serveFile(themeApp,"/css/",styles[i]);
|
themeContext.page.css,
|
||||||
if (url) {
|
themeApp,
|
||||||
themeContext.page.css.push(url);
|
"/css/")
|
||||||
}
|
themeContext.page.scripts = serveFilesFromTheme(
|
||||||
}
|
themeContext.page.scripts,
|
||||||
}
|
themeApp,
|
||||||
|
"/scripts/")
|
||||||
|
|
||||||
if (theme.page.favicon) {
|
if (theme.page.favicon) {
|
||||||
url = serveFile(themeApp,"/favicon/",theme.page.favicon)
|
url = serveFile(themeApp,"/favicon/",theme.page.favicon)
|
||||||
|
@ -55,7 +55,8 @@ describe("theme handler", function() {
|
|||||||
page: {
|
page: {
|
||||||
title: "Test Page Title",
|
title: "Test Page Title",
|
||||||
favicon: "/absolute/path/to/theme/icon",
|
favicon: "/absolute/path/to/theme/icon",
|
||||||
css: "/absolute/path/to/custom/css/file"
|
css: "/absolute/path/to/custom/css/file",
|
||||||
|
scripts: "/absolute/path/to/script.js"
|
||||||
},
|
},
|
||||||
header: {
|
header: {
|
||||||
title: "Test Header Title",
|
title: "Test Header Title",
|
||||||
@ -68,6 +69,10 @@ describe("theme handler", function() {
|
|||||||
icon: "/absolute/path/to/deploy/button/image" // or null to remove image
|
icon: "/absolute/path/to/deploy/button/image" // or null to remove image
|
||||||
},
|
},
|
||||||
|
|
||||||
|
customScripts: [
|
||||||
|
"/absolute/path/to/script.js"
|
||||||
|
],
|
||||||
|
|
||||||
menu: { // Hide unwanted menu items by id. see editor/js/main.js:loadEditor for complete list
|
menu: { // Hide unwanted menu items by id. see editor/js/main.js:loadEditor for complete list
|
||||||
"menu-item-import-library": false,
|
"menu-item-import-library": false,
|
||||||
"menu-item-export-library": false,
|
"menu-item-export-library": false,
|
||||||
@ -93,6 +98,8 @@ describe("theme handler", function() {
|
|||||||
context.page.should.have.a.property("title","Test Page Title");
|
context.page.should.have.a.property("title","Test Page Title");
|
||||||
context.should.have.a.property("header");
|
context.should.have.a.property("header");
|
||||||
context.header.should.have.a.property("title","Test Header Title");
|
context.header.should.have.a.property("title","Test Header Title");
|
||||||
|
context.page.should.have.a.property("css");
|
||||||
|
context.page.should.have.a.property("scripts");
|
||||||
|
|
||||||
var settings = theme.settings();
|
var settings = theme.settings();
|
||||||
settings.should.have.a.property("deployButton");
|
settings.should.have.a.property("deployButton");
|
||||||
|
Loading…
Reference in New Issue
Block a user