diff --git a/app.js b/app.js index 2fcb97f..c733e0c 100644 --- a/app.js +++ b/app.js @@ -6,7 +6,7 @@ const path = require("path"); let app = express(); -app.set("view engine", "jade"); +app.set("view engine", "pug"); app.set("views", path.join(__dirname, "views")); app.use(express.static(path.join(__dirname, "public"))); @@ -15,6 +15,6 @@ app.use(bodyParser.urlencoded({ extended: true })); -app.use("/", require("./lib/routes/index")); +app.use("/", require("./routes/index")); -app.listen(3000); \ No newline at end of file +app.listen(3000); diff --git a/src/components/app/component.tag b/components/app/component.tag similarity index 74% rename from src/components/app/component.tag rename to components/app/component.tag index 858edc8..193a60d 100644 --- a/src/components/app/component.tag +++ b/components/app/component.tag @@ -1,10 +1,10 @@ app - window(each="{windows}", router="{router}", window-title="{title}", width=640, height=480, x="{x}", y="{y}", z=0, resizable="true", url="{url}") + window(each="{windowItem in windows}", router="{parent.router}", window-title="{windowItem.title}", width=640, height=480, x="{windowItem.x}", y="{windowItem.y}", z=0, resizable="true", url="{windowItem.url}") script. - const stateRouter = require("../../frontend/riot-state-router"); + const stateRouter = require("../../lib/frontend/riot-state-router"); - this.mixin(require("../../frontend/riot-on-child")); + this.mixin(require("../../lib/frontend/riot-on-child")); this.mixin(require("riot-query").mixin); this.windows = [ @@ -47,4 +47,4 @@ app }); window.focus(); - }); \ No newline at end of file + }); diff --git a/components/app/index.js b/components/app/index.js new file mode 100644 index 0000000..771a85a --- /dev/null +++ b/components/app/index.js @@ -0,0 +1,9 @@ +'use strict'; + +require("../window"); + +require("../../views/riot/sample-view"); + +require("../../views/riot/node/create"); + +require("./component"); diff --git a/src/components/uikit/autocomplete/component.tag b/components/uikit/autocomplete/component.tag similarity index 100% rename from src/components/uikit/autocomplete/component.tag rename to components/uikit/autocomplete/component.tag diff --git a/lib/components/uikit/autocomplete/index.js b/components/uikit/autocomplete/index.js similarity index 100% rename from lib/components/uikit/autocomplete/index.js rename to components/uikit/autocomplete/index.js diff --git a/src/components/uikit/button/component.tag b/components/uikit/button/component.tag similarity index 100% rename from src/components/uikit/button/component.tag rename to components/uikit/button/component.tag diff --git a/lib/components/uikit/button/index.js b/components/uikit/button/index.js similarity index 100% rename from lib/components/uikit/button/index.js rename to components/uikit/button/index.js diff --git a/src/components/uikit/form-section/component.tag b/components/uikit/form-section/component.tag similarity index 100% rename from src/components/uikit/form-section/component.tag rename to components/uikit/form-section/component.tag diff --git a/lib/components/uikit/form-section/index.js b/components/uikit/form-section/index.js similarity index 100% rename from lib/components/uikit/form-section/index.js rename to components/uikit/form-section/index.js diff --git a/src/components/uikit/frame/component.tag b/components/uikit/frame/component.tag similarity index 55% rename from src/components/uikit/frame/component.tag rename to components/uikit/frame/component.tag index 115e3e9..9df1b97 100644 --- a/src/components/uikit/frame/component.tag +++ b/components/uikit/frame/component.tag @@ -1,11 +1,11 @@ uikit-frame .frame-wrapper != "" - + script. - this.mixin(require("../../../riot/mixins/dockable-container")); - this.mixin(require("../../../riot/mixins/dockable")); - + this.mixin(require("../../../lib/riot/mixins/dockable-container")); + this.mixin(require("../../../lib/riot/mixins/dockable")); + style(type="scss"). uikit-frame { position: absolute; @@ -13,4 +13,4 @@ uikit-frame right: 0px; top: 0px; bottom: 0px; - } \ No newline at end of file + } diff --git a/lib/components/uikit/frame/index.js b/components/uikit/frame/index.js similarity index 100% rename from lib/components/uikit/frame/index.js rename to components/uikit/frame/index.js diff --git a/src/components/uikit/input-spawner/component.tag b/components/uikit/input-spawner/component.tag similarity index 100% rename from src/components/uikit/input-spawner/component.tag rename to components/uikit/input-spawner/component.tag diff --git a/lib/components/uikit/input-spawner/index.js b/components/uikit/input-spawner/index.js similarity index 100% rename from lib/components/uikit/input-spawner/index.js rename to components/uikit/input-spawner/index.js diff --git a/src/components/uikit/input/component.tag b/components/uikit/input/component.tag similarity index 57% rename from src/components/uikit/input/component.tag rename to components/uikit/input/component.tag index a8cc8df..879b4e8 100644 --- a/src/components/uikit/input/component.tag +++ b/components/uikit/input/component.tag @@ -2,7 +2,9 @@ uikit-input label {opts.label} input(type="{opts.type}", name="{opts.name}") - style. - + style(scoped, type="scss"). + label { + margin-right: 8px; + } script. \ No newline at end of file diff --git a/lib/components/uikit/input/index.js b/components/uikit/input/index.js similarity index 100% rename from lib/components/uikit/input/index.js rename to components/uikit/input/index.js diff --git a/src/components/uikit/textarea/component.tag b/components/uikit/textarea/component.tag similarity index 100% rename from src/components/uikit/textarea/component.tag rename to components/uikit/textarea/component.tag diff --git a/lib/components/uikit/textarea/index.js b/components/uikit/textarea/index.js similarity index 100% rename from lib/components/uikit/textarea/index.js rename to components/uikit/textarea/index.js diff --git a/components/uikit/toolbar/component.tag b/components/uikit/toolbar/component.tag new file mode 100644 index 0000000..7dc9b0f --- /dev/null +++ b/components/uikit/toolbar/component.tag @@ -0,0 +1,8 @@ +uikit-toolbar + div + != "" + + style. + + script. + this.mixin(require("../../../lib/riot/mixins/dockable")); diff --git a/lib/components/uikit/toolbar/index.js b/components/uikit/toolbar/index.js similarity index 100% rename from lib/components/uikit/toolbar/index.js rename to components/uikit/toolbar/index.js diff --git a/src/components/view-manager/component.tag b/components/view-manager/component.tag similarity index 99% rename from src/components/view-manager/component.tag rename to components/view-manager/component.tag index 2eb844a..91ec944 100644 --- a/src/components/view-manager/component.tag +++ b/components/view-manager/component.tag @@ -38,4 +38,4 @@ view-manager ["get", "post", "put", "delete", "patch", "head"].forEach((method) => { this[method] = this.navigate.bind(this, method); - }); \ No newline at end of file + }); diff --git a/lib/components/view-manager/index.js b/components/view-manager/index.js similarity index 100% rename from lib/components/view-manager/index.js rename to components/view-manager/index.js diff --git a/src/components/window-meta/component.tag b/components/window-meta/component.tag similarity index 100% rename from src/components/window-meta/component.tag rename to components/window-meta/component.tag diff --git a/lib/components/window-meta/index.js b/components/window-meta/index.js similarity index 100% rename from lib/components/window-meta/index.js rename to components/window-meta/index.js diff --git a/src/components/window/component.tag b/components/window/component.tag similarity index 94% rename from src/components/window/component.tag rename to components/window/component.tag index e9b5c65..52881d4 100644 --- a/src/components/window/component.tag +++ b/components/window/component.tag @@ -7,18 +7,18 @@ window .outer .inner-wrapper .inner - view-manager(router="{router}", view-prefix="openng-view") + view-manager(router="{opts.router}", view-prefix="openng-view") .resizer(show="{opts.resizable}") - + script. const $ = require("jquery"); const debounce = require("debounce"); const query = require("riot-query"); - require("../../jquery/draggable")($); - + require("../../lib/jquery/draggable")($); + this.mixin(query.mixin); - this.mixin(require("../../frontend/riot-change")); + this.mixin(require("../../lib/frontend/riot-change")); Object.assign(this, { dragged: false, @@ -27,10 +27,10 @@ window width: parseInt(opts.width), height: parseInt(opts.height), windowTitle: opts.windowTitle, - //x: parseInt(opts.x), - //y: parseInt(opts.y), + x: parseInt(opts.x), + y: parseInt(opts.y), z: parseInt(opts.z), - + focus: () => { this.trigger("focused"); this.change({ @@ -72,14 +72,13 @@ window reportClose: () => { this.trigger("closing"); }, - + _handleMouseDown: (event) => { this.focus(); } }); - this.on("updated", () => { - //console.log("UPDATED", this, opts); + let updatePosition = () => { $(this.queryOne("//.wrapper")).css({ left: `${this.x}px`, top: `${this.y}px`, @@ -87,99 +86,105 @@ window height: `${this.height}px`, zIndex: this.z }); + } + + this.on("updated", () => { + updatePosition(); }); - + this.on("mount", () => { let viewManager = this.queryOne("view-manager"); let resizeHandle = $(this.queryOne("//.resizer")); let titleBar = $(this.queryOne("//.title")); let closeButton = $(this.queryOne("//.close")); - + if (opts.url != null) { viewManager.get(opts.url); } - + viewManager.on("switched", () => { query(viewManager.currentView, "window-meta").forEach((windowMeta) => { if (windowMeta.windowTitle != null) { this.setTitle(windowMeta.windowTitle); } - + if (windowMeta.requestedWidth != null) { this.setWidth(windowMeta.requestedWidth); } - + if (windowMeta.requestedHeight != null) { this.setHeight(windowMeta.requestedHeight); } }) }); - + closeButton.on("click", (event) => { event.stopPropagation(); event.preventDefault; - + this.trigger("requestClose"); }) - + let startWidth, startHeight; - + resizeHandle.draggable(); - + resizeHandle.on("draggable:start", (event) => { startWidth = this.width; startHeight = this.height; - + this.change({ resized: true }); }); - + resizeHandle.on("draggable:end", (event) => { this.change({ resized: false }); }); - + resizeHandle.on("draggable:move", (event, data) => { this.change({ width: startWidth + data.offsetX, height: startHeight + data.offsetY }); }); - - + + let startX, startY; - + titleBar.draggable(); - + titleBar.on("draggable:start", (event) => { startX = this.x; startY = this.y; - + this.change({ dragged: true }); }); - + titleBar.on("draggable:end", (event) => { this.change({ dragged: false }); }); - + titleBar.on("draggable:move", (event, data) => { this.change({ x: startX + data.offsetX, y: startY + data.offsetY }); }); - + $(this.queryOne("//.wrapper")).on("mousedown", () => { this._handleMouseDown(); }); + + updatePosition(); }); - + style(scoped, type="scss"). .noscroll { @@ -341,10 +346,10 @@ window -moz-box-shadow: none; box-shadow: none; } - + @mixin unselectable { cursor: default; - user-select: none; + user-select: none; -webkit-user-select: none; /* Chrome/Safari/Opera */ -moz-user-select: none; /* Firefox */ -ms-user-select: none; /* IE/Edge */ @@ -371,7 +376,7 @@ window visibility: hidden; } } - + .resized { @include unselectable; } diff --git a/lib/components/window/index.js b/components/window/index.js similarity index 100% rename from lib/components/window/index.js rename to components/window/index.js diff --git a/gulpfile.js b/gulpfile.js index 148997a..d8194a0 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -5,10 +5,10 @@ var rename = require('gulp-rename'); var livereload = require('gulp-livereload'); var nodemon = require("gulp-nodemon"); var net = require("net"); -var webpack = require("webpack-stream"); +var webpack = require("webpack-stream-fixed"); var webpackLib = require("webpack") -var presetES2015 = require("@joepie91/gulp-preset-es2015");4 +const presetSCSS = require("@joepie91/gulp-preset-scss"); var nodemonRestarting = false; @@ -23,16 +23,8 @@ process.once("SIGINT", function() { process.exit(0); }); -gulp.task("babel", function() { - return gulp.src("./src/**/*.js") - .pipe(presetES2015({ - basePath: __dirname - })) - .pipe(gulp.dest("./lib")); -}) - gulp.task('webpack', function(){ - return gulp.src("./src/frontend/index.js") + return gulp.src("./lib/frontend/index.js") .pipe(webpack({ watch: true, module: { @@ -41,8 +33,15 @@ gulp.task('webpack', function(){ loader: "riotjs-loader", exclude: /node_modules/, query: { - type: "babel", - template: "jade" + type: "es6", + template: "pug", + /* NOTE: `node-sass` is implicitly required based on the + `type` attribute in the components */ + parserOptions: { + js: { + presets: ["es2015-riot"] + } + } } }], loaders: [ @@ -67,6 +66,14 @@ gulp.task('webpack', function(){ .pipe(gulp.dest("./public/js")); }); +gulp.task("scss", () => { + return gulp.src("./scss/**/*") + .pipe(presetSCSS({ + livereload: livereload + })) + .pipe(gulp.dest("./public/stylesheets/")); +}); + function checkServerUp(){ setTimeout(function(){ var sock = new net.Socket(); @@ -83,7 +90,7 @@ function checkServerUp(){ }, 70); } -gulp.task("nodemon", ["babel"], function() { +gulp.task("nodemon", function() { nodemon({ script: "./app.js", delay: 500, @@ -95,8 +102,8 @@ gulp.task("nodemon", ["babel"], function() { gulp.task('watch', ["nodemon"], function () { livereload.listen(); - gulp.watch(['./**/*.css', 'views/**/*.jade', '!views/client/**/*.jade', 'package.json', "./public/js/**/*.js"]).on('change', tryReload); + gulp.watch(['./**/*.css', 'views/**/*.pug', '!views/client/**/*.pug', 'package.json', "./public/js/**/*.js"]).on('change', tryReload); gulp.watch(['public/views/**/*.html', 'public/elements/**/*']).on('change', function() { tryReload("*"); }); // We need to explicitly reload everything here; Polymer doesn't do partial reloading }); -gulp.task("default", ["watch", "webpack"]); \ No newline at end of file +gulp.task("default", ["watch", "webpack"]); diff --git a/lib/components/app/index.js b/lib/components/app/index.js deleted file mode 100644 index 760d992..0000000 --- a/lib/components/app/index.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -require("../window"); - -require("../../views/sample-view"); - -require("../../views/node/create"); - -require("./component"); \ No newline at end of file diff --git a/lib/frontend/index.js b/lib/frontend/index.js index ca82778..24bc48d 100644 --- a/lib/frontend/index.js +++ b/lib/frontend/index.js @@ -1,12 +1,12 @@ 'use strict'; -var $ = require("jquery"); -var riot = require("riot"); +const $ = require("jquery"); +const riot = require("riot"); require("debug").enable("*"); -require("../components/app"); +require("../../components/app"); -$(function () { +$(() => { riot.mount("*"); -}); \ No newline at end of file +}); diff --git a/lib/frontend/riot-change.js b/lib/frontend/riot-change.js index 5ace20a..47fb432 100644 --- a/lib/frontend/riot-change.js +++ b/lib/frontend/riot-change.js @@ -1,8 +1,8 @@ 'use strict'; module.exports = { - change: function change(data) { + change: function(data) { Object.assign(this, data); this.update(); } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/lib/frontend/riot-on-child.js b/lib/frontend/riot-on-child.js index d043cae..fc01855 100644 --- a/lib/frontend/riot-on-child.js +++ b/lib/frontend/riot-on-child.js @@ -1,43 +1,39 @@ 'use strict'; -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var riotQuery = require("riot-query"); -var arrayDiff = require("arraydiff"); +const riotQuery = require("riot-query"); +const arrayDiff = require("arraydiff"); module.exports = { - init: function init() { - var _this = this; - - var knownTags = []; - var listeners = {}; + init: function() { + let knownTags = []; + let listeners = {}; function triggerEvent(action, query, item) { if (listeners[query] != null && listeners[query][action] != null) { - listeners[query][action].forEach(function (handler) { + listeners[query][action].forEach((handler) => { handler(item); }); } } - this.on("updated", function () { - Object.keys(listeners).forEach(function (query) { - var currentTags = riotQuery(_this, query); - var diff = arrayDiff(knownTags, currentTags); + this.on("updated", () => { + Object.keys(listeners).forEach((query) => { + let currentTags = riotQuery(this, query); + let diff = arrayDiff(knownTags, currentTags); - diff.forEach(function (item) { + diff.forEach((item) => { if (item.type === "remove") { - for (var i = item.index; i < item.index + item.howMany; i++) { + for (let i = item.index; i < (item.index + item.howMany); i++) { triggerEvent("remove", query, knownTags[i]); } } else if (item.type === "move") { - for (var _i = item.index; _i < item.from + item.howMany; _i++) { - triggerEvent("move", query, knownTags[_i]); + for (let i = item.index; i < (item.from + item.howMany); i++) { + triggerEvent("move", query, knownTags[i]); } } else if (item.type === "insert") { - item.values.forEach(function (value) { + item.values.forEach((value) => { triggerEvent("create", query, value); - }); + }) } }); @@ -45,14 +41,8 @@ module.exports = { }); }); - this.onChild = function (eventName, handler) { - var _eventName$split = eventName.split(":", 2); - - var _eventName$split2 = _slicedToArray(_eventName$split, 2); - - var action = _eventName$split2[0]; - var query = _eventName$split2[1]; - + this.onChild = function(eventName, handler) { + let [action, query] = eventName.split(":", 2); if (listeners[query] == null) { listeners[query] = {}; @@ -63,6 +53,6 @@ module.exports = { } listeners[query][action].push(handler); - }; + } } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/lib/frontend/riot-state-router.js b/lib/frontend/riot-state-router.js index 629cdf7..9582545 100644 --- a/lib/frontend/riot-state-router.js +++ b/lib/frontend/riot-state-router.js @@ -1,144 +1,111 @@ -"use strict"; +const Promise = require("bluebird"); +const pathToRegexp = require("path-to-regexp"); +const url = require("url"); +const xtend = require("xtend"); +const defaultValue = require("default-value"); -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - -var Promise = require("bluebird"); -var pathToRegexp = require("path-to-regexp"); -var url = require("url"); -var xtend = require("xtend"); -var defaultValue = require("default-value"); - -module.exports = function () { - var routes = []; +module.exports = function() { + let routes = []; function addRoute(method, path, handler) { // Mutable arguments? WTF. - var keys = []; - var regex = pathToRegexp(path, keys); + let keys = []; + let regex = pathToRegexp(path, keys); - routes.push({ method: method, path: path, regex: regex, keys: keys, handler: handler }); + routes.push({ method, path, regex, keys, handler }); } function getRoute(method, path) { - var matches = void 0; - var matchingRoute = routes.find(function (route) { - return route.method === method && (matches = route.regex.exec(path)); - }); + let matches; + let matchingRoute = routes.find((route) => route.method === method && (matches = route.regex.exec(path))); if (matchingRoute == null) { throw new Error("No matching routes found"); } else { - var _ret = function () { - var params = {}; + let params = {}; - matchingRoute.keys.forEach(function (key, i) { - params[key] = matches[i + 1]; - }); - - return { - v: { - handler: matchingRoute.handler, - params: params - } - }; - }(); + matchingRoute.keys.forEach((key, i) => { + params[key] = matches[i + 1]; + }); - if ((typeof _ret === "undefined" ? "undefined" : _typeof(_ret)) === "object") return _ret.v; + return { + handler: matchingRoute.handler, + params: params + } } } function handle(method, uri, data) { - return Promise.try(function () { - var _url$parse = url.parse(uri, true); - - var path = _url$parse.path; - var query = _url$parse.query; + return Promise.try(() => { + let {path, query} = url.parse(uri, true); + let route = getRoute(method, path); + let tasks = []; - var route = getRoute(method, path); - var tasks = []; - - var req = { + let req = { path: path, query: query, body: data, params: route.params, - pass: function pass() { + pass: function(options = {}) { // FIXME: window.fetch passthrough - - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; }, - passRender: function passRender(viewName) { - var _this = this; - - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - return Promise.try(function () { - return _this.pass(options); - }).then(function (response) { - var locals = defaultValue(options.locals, {}); - var combinedLocals = xtend(locals, response.body); + passRender: function(viewName, options = {}) { + return Promise.try(() => { + return this.pass(options); + }).then((response) => { + let locals = defaultValue(options.locals, {}); + let combinedLocals = xtend(locals, response.body); res.render(viewName, combinedLocals, options); }); } - }; - - var res = { - render: function render(viewName) { - var locals = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; + } + let res = { + render: function(viewName, locals = {}, options = {}) { tasks.push({ type: "render", - viewName: viewName, locals: locals, options: options + viewName, locals, options }); }, - open: function open(path) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - + open: function(path, options = {}) { tasks.push({ type: "open", - path: path, options: options + path, options }); }, - close: function close() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - + close: function(options = {}) { tasks.push({ type: "close", - options: options + options }); }, - notify: function notify(message) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - + notify: function(message, options = {}) { tasks.push({ type: "notify", - message: message, options: options + message, options }); }, - error: function error(_error) { - var context = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - + error: function(error, context = {}) { tasks.push({ type: "error", - error: _error, context: context + error, context }); } - }; + } - return Promise.try(function () { + return Promise.try(() => { return route.handler(req, res); - }).then(function (result) { + }).then((result) => { return { result: result, actions: tasks - }; + } }); }); } - var api = { + let api = { get: addRoute.bind(api, "get"), post: addRoute.bind(api, "post"), put: addRoute.bind(api, "put"), @@ -147,7 +114,7 @@ module.exports = function () { patch: addRoute.bind(api, "patch"), addRoute: addRoute, handle: handle - }; + } return api; -}; \ No newline at end of file +} \ No newline at end of file diff --git a/lib/jquery/draggable.js b/lib/jquery/draggable.js index ac6ede1..ac4e87f 100644 --- a/lib/jquery/draggable.js +++ b/lib/jquery/draggable.js @@ -1,26 +1,22 @@ 'use strict'; -var debounce = require("debounce"); -var defaultValue = require("default-value"); +const debounce = require("debounce"); +const defaultValue = require("default-value"); -var selectable = require("./selectable"); +const selectable = require("./selectable"); -module.exports = function ($) { +module.exports = function($) { selectable($); - $.fn.draggable = function () { - var _this = this; + $.fn.draggable = function(options = {}) { + let debounceInterval = defaultValue(options.debounce, 10); - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + this.on("mousedown", (event) => { + let startX = event.pageX; + let startY = event.pageY; - var debounceInterval = defaultValue(options.debounce, 10); - - this.on("mousedown", function (event) { - var startX = event.pageX; - var startY = event.pageY; - - var moveHandler = debounce(function (event) { - _this.trigger("draggable:move", [{ + let moveHandler = debounce((event) => { + this.trigger("draggable:move", [{ offsetX: event.pageX - startX, offsetY: event.pageY - startY }]); @@ -28,16 +24,16 @@ module.exports = function ($) { $(document).on("mousemove", moveHandler); - $(document).one("mouseup", function (event) { + $(document).one("mouseup", (event) => { $(document).off("mousemove", moveHandler); $(document).enableSelection(); - _this.trigger("draggable:end"); + this.trigger("draggable:end"); }); $(document).disableSelection(); - _this.trigger("draggable:start"); + this.trigger("draggable:start"); }); - }; -}; \ No newline at end of file + } +} \ No newline at end of file diff --git a/lib/jquery/selectable.js b/lib/jquery/selectable.js index 055ff8b..9edeb31 100644 --- a/lib/jquery/selectable.js +++ b/lib/jquery/selectable.js @@ -1,11 +1,17 @@ 'use strict'; -module.exports = function ($) { - $.fn.disableSelection = function () { - return this.attr("unselectable", "on").css("user-select", "none").on("selectstart", false); - }; +module.exports = function($) { + $.fn.disableSelection = function() { + return this + .attr("unselectable", "on") + .css("user-select", "none") + .on("selectstart", false); + } - $.fn.enableSelection = function () { - return this.removeAttr("unselectable").css("user-select", "auto").off("selectstart", false); - }; -}; \ No newline at end of file + $.fn.enableSelection = function() { + return this + .removeAttr("unselectable") + .css("user-select", "auto") + .off("selectstart", false); + } +} \ No newline at end of file diff --git a/lib/riot/mixins/dockable-container.js b/lib/riot/mixins/dockable-container.js index 31923c9..6c820f5 100644 --- a/lib/riot/mixins/dockable-container.js +++ b/lib/riot/mixins/dockable-container.js @@ -1,54 +1,43 @@ 'use strict'; -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var elementSize = require("element-size"); -var sortDockable = require("./util/sort-dockables"); +const elementSize = require("element-size"); +const sortDockable = require("./util/sort-dockables"); function px(pixels) { - return pixels + "px"; + return `${pixels}px`; } module.exports = { - init: function init() { - var _this = this; - - console.log("foo", this); - var dockableAPI = { - isActive: function isActive() { - return _this.opts.dockableContainer != null; + init: function() { + let dockableAPI = { + isActive: () => { + return (this.opts.dockableContainer != null); }, stack: [], fillElement: null, - recalculateLayout: function recalculateLayout() { - dockableAPI.stack.forEach(function (item, i) { + recalculateLayout: () => { + dockableAPI.stack.forEach((item, i) => { item.stackIndex = i; }); - var orderedStack = dockableAPI.stack.slice().sort(sortDockable); + let orderedStack = dockableAPI.stack.slice().sort(sortDockable); - var reservedLeft = 0; - var reservedRight = 0; - var reservedTop = 0; - var reservedBottom = 0; + let reservedLeft = 0; + let reservedRight = 0; + let reservedTop = 0; + let reservedBottom = 0; - orderedStack.forEach(function (item) { - var element = item.tag.root; + orderedStack.forEach((item) => { + let element = item.tag.root; /* We set the positioning to absolute *before* attempting - * to obtain the element size - this way, we can be sure - * that the element won't try to stretch to its container. - * Instead, it'll be auto-sized, which is exactly what we - * want. */ + * to obtain the element size - this way, we can be sure + * that the element won't try to stretch to its container. + * Instead, it'll be auto-sized, which is exactly what we + * want. */ element.style.position = "absolute"; - var _elementSize = elementSize(element); - - var _elementSize2 = _slicedToArray(_elementSize, 2); - - var width = _elementSize2[0]; - var height = _elementSize2[1]; - + let [width, height] = elementSize(element); if (item.heightHint != null) { height = item.heightHint; @@ -106,14 +95,12 @@ module.exports = { reservedBottom += height; } + }) - console.log("reserved", reservedLeft, reservedRight, reservedTop, reservedBottom); - }); - - var item = dockableAPI.fillElement; + let item = dockableAPI.fillElement; if (item != null) { - var element = item.root; + let element = item.root; Object.assign(element.style, { position: "absolute", @@ -123,18 +110,15 @@ module.exports = { bottom: px(reservedBottom) }); } - - console.log("ordered stack", orderedStack); } - }; + } this._uikitDockableContainer = dockableAPI; - this.on("mount", function () { - console.log("dockable-container mounted"); + this.on("mount", () => { if (dockableAPI.isActive()) { dockableAPI.recalculateLayout(); } - }); + }) } -}; \ No newline at end of file +} diff --git a/lib/riot/mixins/dockable.js b/lib/riot/mixins/dockable.js index af6a22f..f8d921f 100644 --- a/lib/riot/mixins/dockable.js +++ b/lib/riot/mixins/dockable.js @@ -1,13 +1,13 @@ 'use strict'; -var inArray = require("in-array"); +const inArray = require("in-array"); function findContainer(tag) { - var lastTag = tag; - var dockableContainer = void 0; + let lastTag = tag; + let dockableContainer; while (dockableContainer == null && lastTag != null) { - var candidate = lastTag.parent; + let candidate = lastTag.parent; if (candidate != null && candidate._uikitDockableContainer != null && candidate._uikitDockableContainer.isActive()) { dockableContainer = candidate; @@ -25,10 +25,10 @@ function findContainer(tag) { } module.exports = { - init: function init() { + init: function() { if (this.opts.dock != null) { - var dockableContainer = findContainer(this); - var containerData = dockableContainer._uikitDockableContainer; + let dockableContainer = findContainer(this); + let containerData = dockableContainer._uikitDockableContainer; if (inArray(["bottom", "top", "left", "right"], this.opts.dock)) { containerData.stack.push({ @@ -49,4 +49,4 @@ module.exports = { } } } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/lib/riot/mixins/util/sort-dockables.js b/lib/riot/mixins/util/sort-dockables.js index 2c6d23b..8348117 100644 --- a/lib/riot/mixins/util/sort-dockables.js +++ b/lib/riot/mixins/util/sort-dockables.js @@ -1,8 +1,7 @@ 'use strict'; -module.exports = function (a, b) { - var aOrder = void 0, - bOrder = void 0; +module.exports = function(a, b) { + let aOrder, bOrder; if (a.order != null) { aOrder = parseInt(a.order); @@ -33,4 +32,4 @@ module.exports = function (a, b) { return 0; } } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/lib/routes/index.js b/lib/routes/index.js deleted file mode 100644 index beccafa..0000000 --- a/lib/routes/index.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -var router = require("express-promise-router")(); - -router.get("/", function (req, res) { - res.render("layout"); -}); - -router.get("/node/:uuid", function (req, res) { - res.json({ uuid: req.params.uuid }); -}); - -router.get("/test1", function (req, res) { - res.send("test ONE go to 2 instead or in a new window"); -}); - -router.get("/test2", function (req, res) { - res.send("test TWO go to 1 instead or in a new window"); -}); - -module.exports = router; \ No newline at end of file diff --git a/lib/util/errors.js b/lib/util/errors.js new file mode 100644 index 0000000..138fde9 --- /dev/null +++ b/lib/util/errors.js @@ -0,0 +1,7 @@ +'use strict'; + +const createError = require("create-error"); + +module.exports = { + NotFoundError: createError("NotFoundError", {statusCode: 404}) +}; diff --git a/lib/views/node/create/index.js b/lib/views/node/create/index.js deleted file mode 100644 index b93aff2..0000000 --- a/lib/views/node/create/index.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -require("../../../components/uikit/frame"); -require("../../../components/uikit/toolbar"); -require("../../../components/uikit/button"); -require("../../../components/uikit/form-section"); -require("../../../components/uikit/input-spawner"); -require("../../../components/uikit/input"); -require("../../../components/uikit/textarea"); -require("../../../components/uikit/autocomplete"); - -require("../../../components/window-meta"); - -require("./component"); \ No newline at end of file diff --git a/package.json b/package.json index 30ffe17..f5c498d 100644 --- a/package.json +++ b/package.json @@ -10,21 +10,24 @@ "bhttp": "^1.2.1", "bluebird": "^3.0.6", "body-parser": "^1.15.1", + "create-error": "^0.3.1", "debug": "^2.2.0", - "default-value": "0.0.3", + "default-value": "^1.0.0", + "elasticsearch": "^13.0.0-rc2", "express": "^4.13.3", "express-promise-router": "^1.0.0", "in-array": "^0.1.2", - "jade": "^1.11.0", - "jquery": "^2.1.1", - "node-sass": "^3.7.0", - "riot": "^2.4.0", - "riot-query": "0.0.3", - "uuid": "^2.0.1", + "jquery": "^3.2.1", + "pug": "^2.0.0-beta11", + "rfr": "^1.2.3", + "riot": "^3.4.2", + "riot-query": "^1.0.0", + "uuid": "^3.0.1", "xtend": "^4.0.1" }, "devDependencies": { "@joepie91/gulp-preset-es2015": "^1.0.1", + "@joepie91/gulp-preset-scss": "^1.0.3", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.6.0", "babel-preset-es2015-riot": "^1.1.0", @@ -35,8 +38,9 @@ "gulp-nodemon": "^2.0.4", "gulp-rename": "^1.2.0", "json-loader": "^0.5.4", + "node-sass": "^4.5.2", "path-to-regexp": "^1.2.1", - "riotjs-loader": "^3.0.0", - "webpack-stream": "^3.2.0" + "riotjs-loader": "^4.0.0", + "webpack-stream-fixed": "^3.2.2" } } diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..1809243 --- /dev/null +++ b/routes/index.js @@ -0,0 +1,37 @@ +const Promise = require("bluebird"); +const rfr = require("rfr"); +const errors = rfr("lib/util/errors"); +let router = require("express-promise-router")(); + +router.get("/", (req, res) => { + res.render("layout"); +}); + +router.get("/node/:uuid", (req, res) => { + return Promise.try(() => { + return db.Node.find(req.params.uuid); + }).then((node) => { + res.json(node); + }).catch(db.Node.NotFoundError, (err) => { + throw new errors.NotFoundError("Could not find a Node with that UUID"); + }); +}); + +router.post("/autocomplete/type", (req, res) => { + return Promise.try(() => { + // FIXME: suggest, https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html + return elasticCloud.search({ + index: "types" + }) + }) +}) + +router.get("/test1", (req, res) => { + res.send("test ONE go to 2 instead or in a new window"); +}); + +router.get("/test2", (req, res) => { + res.send("test TWO go to 1 instead or in a new window"); +}); + +module.exports = router; diff --git a/sample/elasticsearch-node-types.json b/sample/elasticsearch-node-types.json new file mode 100644 index 0000000..e58cf10 --- /dev/null +++ b/sample/elasticsearch-node-types.json @@ -0,0 +1,19 @@ +[{ + "name": "Domain Name" +}, { + "name": "IP Address" +}, { + "name": "Person" +}, { + "name": "News Article" +}, { + "name": "Event" +}, { + "name": "MAC Address" +}, { + "name": "Organization" +}, { + "name": "Product" +}, { + "name": "Software" +}] \ No newline at end of file diff --git a/sample/populate-samples.js b/sample/populate-samples.js new file mode 100644 index 0000000..fde358d --- /dev/null +++ b/sample/populate-samples.js @@ -0,0 +1,20 @@ +'use strict'; + +const fs = require("fs"); +const Promise = require("bluebird"); +const elasticSearch = new require("elasticsearch").Client({ + host: "localhost:9200", + log: "trace" +}); + +let nodeTypes = JSON.parse(fs.readFileSync("./sample/elasticsearch-node-types.json")); + +Promise.map(nodeTypes, (type) => { + return elasticSearch.create({ + index: "node_types", + type: "node_type", + body: type + }); +}).then((results) => { + console.log(results); +}); \ No newline at end of file diff --git a/src/scss/_pure_grids.scss b/scss/_pure_grids.scss similarity index 100% rename from src/scss/_pure_grids.scss rename to scss/_pure_grids.scss diff --git a/src/scss/openng.scss b/scss/openng.scss similarity index 100% rename from src/scss/openng.scss rename to scss/openng.scss diff --git a/src/scss/style.scss b/scss/style.scss similarity index 100% rename from src/scss/style.scss rename to scss/style.scss diff --git a/src/components/app/index.js b/src/components/app/index.js deleted file mode 100644 index 760d992..0000000 --- a/src/components/app/index.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -require("../window"); - -require("../../views/sample-view"); - -require("../../views/node/create"); - -require("./component"); \ No newline at end of file diff --git a/src/components/uikit/autocomplete/index.js b/src/components/uikit/autocomplete/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/uikit/autocomplete/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/uikit/button/index.js b/src/components/uikit/button/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/uikit/button/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/uikit/form-section/index.js b/src/components/uikit/form-section/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/uikit/form-section/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/uikit/frame/index.js b/src/components/uikit/frame/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/uikit/frame/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/uikit/input-spawner/index.js b/src/components/uikit/input-spawner/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/uikit/input-spawner/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/uikit/input/index.js b/src/components/uikit/input/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/uikit/input/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/uikit/textarea/index.js b/src/components/uikit/textarea/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/uikit/textarea/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/uikit/toolbar/component.tag b/src/components/uikit/toolbar/component.tag deleted file mode 100644 index b2eb897..0000000 --- a/src/components/uikit/toolbar/component.tag +++ /dev/null @@ -1,8 +0,0 @@ -uikit-toolbar - div - != "" - - style. - - script. - this.mixin(require("../../../riot/mixins/dockable")); \ No newline at end of file diff --git a/src/components/uikit/toolbar/index.js b/src/components/uikit/toolbar/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/uikit/toolbar/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/view-manager/index.js b/src/components/view-manager/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/view-manager/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/window-meta/index.js b/src/components/window-meta/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/components/window-meta/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/src/components/window/index.js b/src/components/window/index.js deleted file mode 100644 index 24de1fe..0000000 --- a/src/components/window/index.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -require("../view-manager"); - -require("./component"); \ No newline at end of file diff --git a/src/frontend/index.js b/src/frontend/index.js deleted file mode 100644 index 6c956a9..0000000 --- a/src/frontend/index.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -const $ = require("jquery"); -const riot = require("riot"); - -require("debug").enable("*"); - -require("../components/app"); - -$(() => { - riot.mount("*"); -}); \ No newline at end of file diff --git a/src/frontend/riot-change.js b/src/frontend/riot-change.js deleted file mode 100644 index 47fb432..0000000 --- a/src/frontend/riot-change.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -module.exports = { - change: function(data) { - Object.assign(this, data); - this.update(); - } -} \ No newline at end of file diff --git a/src/frontend/riot-on-child.js b/src/frontend/riot-on-child.js deleted file mode 100644 index fc01855..0000000 --- a/src/frontend/riot-on-child.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -const riotQuery = require("riot-query"); -const arrayDiff = require("arraydiff"); - -module.exports = { - init: function() { - let knownTags = []; - let listeners = {}; - - function triggerEvent(action, query, item) { - if (listeners[query] != null && listeners[query][action] != null) { - listeners[query][action].forEach((handler) => { - handler(item); - }); - } - } - - this.on("updated", () => { - Object.keys(listeners).forEach((query) => { - let currentTags = riotQuery(this, query); - let diff = arrayDiff(knownTags, currentTags); - - diff.forEach((item) => { - if (item.type === "remove") { - for (let i = item.index; i < (item.index + item.howMany); i++) { - triggerEvent("remove", query, knownTags[i]); - } - } else if (item.type === "move") { - for (let i = item.index; i < (item.from + item.howMany); i++) { - triggerEvent("move", query, knownTags[i]); - } - } else if (item.type === "insert") { - item.values.forEach((value) => { - triggerEvent("create", query, value); - }) - } - }); - - knownTags = currentTags; - }); - }); - - this.onChild = function(eventName, handler) { - let [action, query] = eventName.split(":", 2); - - if (listeners[query] == null) { - listeners[query] = {}; - } - - if (listeners[query][action] == null) { - listeners[query][action] = []; - } - - listeners[query][action].push(handler); - } - } -} \ No newline at end of file diff --git a/src/frontend/riot-state-router.js b/src/frontend/riot-state-router.js deleted file mode 100644 index 9582545..0000000 --- a/src/frontend/riot-state-router.js +++ /dev/null @@ -1,120 +0,0 @@ -const Promise = require("bluebird"); -const pathToRegexp = require("path-to-regexp"); -const url = require("url"); -const xtend = require("xtend"); -const defaultValue = require("default-value"); - -module.exports = function() { - let routes = []; - - function addRoute(method, path, handler) { - // Mutable arguments? WTF. - let keys = []; - let regex = pathToRegexp(path, keys); - - routes.push({ method, path, regex, keys, handler }); - } - - function getRoute(method, path) { - let matches; - let matchingRoute = routes.find((route) => route.method === method && (matches = route.regex.exec(path))); - - if (matchingRoute == null) { - throw new Error("No matching routes found"); - } else { - let params = {}; - - matchingRoute.keys.forEach((key, i) => { - params[key] = matches[i + 1]; - }); - - return { - handler: matchingRoute.handler, - params: params - } - } - } - - function handle(method, uri, data) { - return Promise.try(() => { - let {path, query} = url.parse(uri, true); - let route = getRoute(method, path); - let tasks = []; - - let req = { - path: path, - query: query, - body: data, - params: route.params, - pass: function(options = {}) { - // FIXME: window.fetch passthrough - }, - passRender: function(viewName, options = {}) { - return Promise.try(() => { - return this.pass(options); - }).then((response) => { - let locals = defaultValue(options.locals, {}); - let combinedLocals = xtend(locals, response.body); - - res.render(viewName, combinedLocals, options); - }); - } - } - - let res = { - render: function(viewName, locals = {}, options = {}) { - tasks.push({ - type: "render", - viewName, locals, options - }); - }, - open: function(path, options = {}) { - tasks.push({ - type: "open", - path, options - }); - }, - close: function(options = {}) { - tasks.push({ - type: "close", - options - }); - }, - notify: function(message, options = {}) { - tasks.push({ - type: "notify", - message, options - }); - }, - error: function(error, context = {}) { - tasks.push({ - type: "error", - error, context - }); - } - } - - return Promise.try(() => { - return route.handler(req, res); - }).then((result) => { - return { - result: result, - actions: tasks - } - }); - }); - } - - let api = { - get: addRoute.bind(api, "get"), - post: addRoute.bind(api, "post"), - put: addRoute.bind(api, "put"), - delete: addRoute.bind(api, "delete"), - head: addRoute.bind(api, "head"), - patch: addRoute.bind(api, "patch"), - addRoute: addRoute, - handle: handle - } - - return api; -} \ No newline at end of file diff --git a/src/jquery/draggable.js b/src/jquery/draggable.js deleted file mode 100644 index ac4e87f..0000000 --- a/src/jquery/draggable.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -const debounce = require("debounce"); -const defaultValue = require("default-value"); - -const selectable = require("./selectable"); - -module.exports = function($) { - selectable($); - - $.fn.draggable = function(options = {}) { - let debounceInterval = defaultValue(options.debounce, 10); - - this.on("mousedown", (event) => { - let startX = event.pageX; - let startY = event.pageY; - - let moveHandler = debounce((event) => { - this.trigger("draggable:move", [{ - offsetX: event.pageX - startX, - offsetY: event.pageY - startY - }]); - }, debounceInterval); - - $(document).on("mousemove", moveHandler); - - $(document).one("mouseup", (event) => { - $(document).off("mousemove", moveHandler); - $(document).enableSelection(); - - this.trigger("draggable:end"); - }); - - $(document).disableSelection(); - - this.trigger("draggable:start"); - }); - } -} \ No newline at end of file diff --git a/src/jquery/selectable.js b/src/jquery/selectable.js deleted file mode 100644 index 9edeb31..0000000 --- a/src/jquery/selectable.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -module.exports = function($) { - $.fn.disableSelection = function() { - return this - .attr("unselectable", "on") - .css("user-select", "none") - .on("selectstart", false); - } - - $.fn.enableSelection = function() { - return this - .removeAttr("unselectable") - .css("user-select", "auto") - .off("selectstart", false); - } -} \ No newline at end of file diff --git a/src/riot/mixins/dockable-container.js b/src/riot/mixins/dockable-container.js deleted file mode 100644 index 756e715..0000000 --- a/src/riot/mixins/dockable-container.js +++ /dev/null @@ -1,130 +0,0 @@ -'use strict'; - -const elementSize = require("element-size"); -const sortDockable = require("./util/sort-dockables"); - -function px(pixels) { - return `${pixels}px`; -} - -module.exports = { - init: function() { - console.log("foo", this); - let dockableAPI = { - isActive: () => { - return (this.opts.dockableContainer != null); - }, - stack: [], - fillElement: null, - recalculateLayout: () => { - dockableAPI.stack.forEach((item, i) => { - item.stackIndex = i; - }); - - let orderedStack = dockableAPI.stack.slice().sort(sortDockable); - - let reservedLeft = 0; - let reservedRight = 0; - let reservedTop = 0; - let reservedBottom = 0; - - orderedStack.forEach((item) => { - let element = item.tag.root; - - /* We set the positioning to absolute *before* attempting - * to obtain the element size - this way, we can be sure - * that the element won't try to stretch to its container. - * Instead, it'll be auto-sized, which is exactly what we - * want. */ - element.style.position = "absolute"; - - let [width, height] = elementSize(element); - - if (item.heightHint != null) { - height = item.heightHint; - } - - if (item.widthHint != null) { - width = item.widthHint; - } - - // FIXME: Should the following really be errors? - if ((item.side === "left" || item.side === "right") && width === 0) { - throw new Error("Cannot horizontally dock an element without a width; you may need to specify a dock-width"); - } else if ((item.side === "top" || item.side === "bottom") && height === 0) { - throw new Error("Cannot vertically dock an element without a height; you may need to specify a dock-height"); - } - - if (item.side === "left") { - Object.assign(element.style, { - left: px(reservedLeft), - top: px(reservedTop), - bottom: px(reservedBottom) - }); - - delete element.style.right; - - reservedLeft += width; - } else if (item.side === "right") { - Object.assign(element.style, { - right: px(reservedRight), - top: px(reservedTop), - bottom: px(reservedBottom) - }); - - delete element.style.left; - - reservedRight += width; - } else if (item.side === "top") { - Object.assign(element.style, { - left: px(reservedLeft), - right: px(reservedRight), - top: px(reservedTop) - }); - - delete element.style.bottom; - - reservedTop += height; - } else if (item.side === "bottom") { - Object.assign(element.style, { - left: px(reservedLeft), - right: px(reservedRight), - bottom: px(reservedBottom) - }); - - delete element.style.top; - - reservedBottom += height; - } - - console.log("reserved", reservedLeft, reservedRight, reservedTop, reservedBottom); - }) - - let item = dockableAPI.fillElement; - - if (item != null) { - let element = item.root; - - Object.assign(element.style, { - position: "absolute", - left: px(reservedLeft), - right: px(reservedRight), - top: px(reservedTop), - bottom: px(reservedBottom) - }); - } - - console.log("ordered stack", orderedStack); - } - } - - this._uikitDockableContainer = dockableAPI; - - this.on("mount", () => { - console.log("dockable-container mounted"); - if (dockableAPI.isActive()) { - dockableAPI.recalculateLayout(); - } - }) - } -} \ No newline at end of file diff --git a/src/riot/mixins/dockable.js b/src/riot/mixins/dockable.js deleted file mode 100644 index f8d921f..0000000 --- a/src/riot/mixins/dockable.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -const inArray = require("in-array"); - -function findContainer(tag) { - let lastTag = tag; - let dockableContainer; - - while (dockableContainer == null && lastTag != null) { - let candidate = lastTag.parent; - - if (candidate != null && candidate._uikitDockableContainer != null && candidate._uikitDockableContainer.isActive()) { - dockableContainer = candidate; - } else { - lastTag = candidate; - } - } - - if (dockableContainer != null) { - return dockableContainer; - } else { - // FIXME: Better error reporting? - throw new Error("Could not find a dockable container for tag"); - } -} - -module.exports = { - init: function() { - if (this.opts.dock != null) { - let dockableContainer = findContainer(this); - let containerData = dockableContainer._uikitDockableContainer; - - if (inArray(["bottom", "top", "left", "right"], this.opts.dock)) { - containerData.stack.push({ - tag: this, - side: this.opts.dock, - order: this.opts.dockOrder, - widthHint: this.opts.dockWidth, - heightHint: this.opts.dockHeight - }); - } else if (this.opts.dock === "fill") { - if (containerData.fillElement != null) { - throw new Error("There can be only one tag with a `dock` setting of `fill` within a dockable container"); - } else { - containerData.fillElement = this; - } - } else { - throw new Error("Invalid `dock` property; must be one of bottom, top, left, right, fill"); - } - } - } -} \ No newline at end of file diff --git a/src/riot/mixins/util/sort-dockables.js b/src/riot/mixins/util/sort-dockables.js deleted file mode 100644 index 8348117..0000000 --- a/src/riot/mixins/util/sort-dockables.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -module.exports = function(a, b) { - let aOrder, bOrder; - - if (a.order != null) { - aOrder = parseInt(a.order); - } - - if (b.order != null) { - bOrder = parseInt(b.order); - } - - if (aOrder != null && bOrder == null) { - return -1; - } else if (aOrder == null && bOrder != null) { - return 1; - } else if (aOrder != null && bOrder != null) { - if (aOrder < bOrder) { - return -1; - } else if (aOrder > bOrder) { - return 1; - } else { - return 0; - } - } else { - if (a.stackIndex < b.stackIndex) { - return -1; - } else if (a.stackIndex > b.stackIndex) { - return 1; - } else { - return 0; - } - } -} \ No newline at end of file diff --git a/src/routes/index.js b/src/routes/index.js deleted file mode 100644 index aa559ff..0000000 --- a/src/routes/index.js +++ /dev/null @@ -1,19 +0,0 @@ -let router = require("express-promise-router")(); - -router.get("/", (req, res) => { - res.render("layout"); -}); - -router.get("/node/:uuid", (req, res) => { - res.json({uuid: req.params.uuid}); -}); - -router.get("/test1", (req, res) => { - res.send("test ONE go to 2 instead or in a new window"); -}); - -router.get("/test2", (req, res) => { - res.send("test TWO go to 1 instead or in a new window"); -}); - -module.exports = router; \ No newline at end of file diff --git a/src/views/node/create/index.js b/src/views/node/create/index.js deleted file mode 100644 index b93aff2..0000000 --- a/src/views/node/create/index.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -require("../../../components/uikit/frame"); -require("../../../components/uikit/toolbar"); -require("../../../components/uikit/button"); -require("../../../components/uikit/form-section"); -require("../../../components/uikit/input-spawner"); -require("../../../components/uikit/input"); -require("../../../components/uikit/textarea"); -require("../../../components/uikit/autocomplete"); - -require("../../../components/window-meta"); - -require("./component"); \ No newline at end of file diff --git a/src/views/sample-view/index.js b/src/views/sample-view/index.js deleted file mode 100644 index 919fc91..0000000 --- a/src/views/sample-view/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require("./component"); \ No newline at end of file diff --git a/views/error.jade b/views/error.pug similarity index 100% rename from views/error.jade rename to views/error.pug diff --git a/views/layout.jade b/views/layout.pug similarity index 100% rename from views/layout.jade rename to views/layout.pug diff --git a/src/views/node/create/component.tag b/views/riot/node/create/component.tag similarity index 94% rename from src/views/node/create/component.tag rename to views/riot/node/create/component.tag index 55ac7d6..ad8d0e8 100644 --- a/src/views/node/create/component.tag +++ b/views/riot/node/create/component.tag @@ -20,8 +20,6 @@ openng-view-node-create script. this.mixin(require("riot-query").mixin); - console.log(this.query("**/uikit-button")); - style(scoped, type="scss"). uikit-toolbar.main { padding: 6px; @@ -29,4 +27,4 @@ openng-view-node-create uikit-frame.main { padding: 8px; - } \ No newline at end of file + } diff --git a/views/riot/node/create/index.js b/views/riot/node/create/index.js new file mode 100644 index 0000000..4564c40 --- /dev/null +++ b/views/riot/node/create/index.js @@ -0,0 +1,14 @@ +'use strict'; + +require("../../../../components/uikit/frame"); +require("../../../../components/uikit/toolbar"); +require("../../../../components/uikit/button"); +require("../../../../components/uikit/form-section"); +require("../../../../components/uikit/input-spawner"); +require("../../../../components/uikit/input"); +require("../../../../components/uikit/textarea"); +require("../../../../components/uikit/autocomplete"); + +require("../../../../components/window-meta"); + +require("./component"); diff --git a/src/views/sample-view/component.tag b/views/riot/sample-view/component.tag similarity index 100% rename from src/views/sample-view/component.tag rename to views/riot/sample-view/component.tag diff --git a/lib/views/sample-view/index.js b/views/riot/sample-view/index.js similarity index 100% rename from lib/views/sample-view/index.js rename to views/riot/sample-view/index.js