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