diff --git a/editor/templates/index.mst b/editor/templates/index.mst new file mode 100644 index 000000000..103ffa76b --- /dev/null +++ b/editor/templates/index.mst @@ -0,0 +1,182 @@ + + + + + + + + +{{ page.title }} + + + + + + +{{#page.css}} + +{{/page.css}} + + + + + + +
+
Drop the flow here
+ +
+
+
+
+
+ +
+
+
+
+ +
+
+
+ Some of the nodes are not properly configured. Are you sure you want to deploy? +
+
+ The workspace contains some unknown node types: +
    + Are you sure you want to deploy? +
    +
    +
    + +
    +
    +
    + A called already exists. Overwrite? +
    +
    +
    + +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + + +
      +
      +
      +
      +
      +
      + Are you sure you want to delete ''? +
      +
      +
      + + + + + + + + + + + + diff --git a/red/api/index.js b/red/api/index.js index 222bc1436..30ad97f9a 100644 --- a/red/api/index.js +++ b/red/api/index.js @@ -24,6 +24,7 @@ var nodes = require("./nodes"); var flows = require("./flows"); var library = require("./library"); var info = require("./info"); +var theme = require("./theme"); var auth = require("./auth"); var needsPermission = auth.needsPermission; @@ -41,9 +42,13 @@ function init(adminApp,storage) { // Editor if (!settings.disableEditor) { + ui.init(settings); var editorApp = express(); editorApp.get("/",ui.ensureSlash,ui.editor); editorApp.get("/icons/:icon",ui.icon); + if (settings.editorTheme) { + editorApp.use("/theme",theme.init(settings)); + } editorApp.use("/",ui.editorResources); adminApp.use(editorApp); } diff --git a/red/api/info.js b/red/api/info.js index a0b78cbb0..6cdd20b94 100644 --- a/red/api/info.js +++ b/red/api/info.js @@ -14,6 +14,7 @@ * limitations under the License. **/ var settings = require('../settings'); +var theme = require("./theme"); var util = require('util'); @@ -23,7 +24,12 @@ module.exports = { httpNodeRoot: settings.httpNodeRoot, version: settings.version, user: req.user - }; + } + + var themeSettings = theme.settings(); + if (themeSettings) { + safeSettings.editorTheme = themeSettings; + } if (util.isArray(settings.paletteCategories)) { safeSettings.paletteCategories = settings.paletteCategories; diff --git a/red/api/theme.js b/red/api/theme.js new file mode 100644 index 000000000..872792c0a --- /dev/null +++ b/red/api/theme.js @@ -0,0 +1,113 @@ +/** + * Copyright 2015 IBM Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +var express = require("express"); +var util = require("util"); +var path = require("path"); +var fs = require("fs"); + +var themeContext = { + page: { + title: "Node-RED", + favicon: "favicon.ico" + //css: [""] + }, + header: { + title: "Node-RED", + image: "red/images/node-red.png" + } +}; + +var themeSettings = null; + +function serveFile(app,baseUrl,file) { + try { + var stats = fs.statSync(file); + var url = baseUrl+path.basename(file); + //console.log(url,"->",file); + app.get(url,function(req, res) { + res.sendfile(file); + }); + return url; + } catch(err) { + //TODO: log filenotfound + return null; + } +} + +module.exports = { + init: function(settings) { + var i; + var url; + if (settings.editorTheme) { + var theme = settings.editorTheme; + themeSettings = {}; + + var themeApp = express(); + + 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