| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Enabale a global exception logger |
| var exceptionLogger = require('./exception-logger'); |
| |
| exceptionLogger.init(); |
| |
| var debug = require('debug')('app'); |
| var domready = require('domready'); |
| var window = require('global/window'); |
| var document = require('global/document'); |
| var hg = require('mercury'); |
| var render = require('./render'); |
| var router = require('./router'); |
| var bundle = require('./components/bundle'); |
| var bundles = require('./components/bundles'); |
| var toast = require('./components/toast'); |
| var error = require('./components/error'); |
| var api = require('./api'); |
| |
| // Make the debug module accessible via the console. This allows the module's |
| // output to be toggled by opening the developer console and typing: |
| // |
| // debug.enable('*') |
| // |
| // It is also possible to only enable specific, namespaced statements. For |
| // example to only see comments from components. |
| // |
| // debug.enable('component:*') |
| // |
| // SEE: https://www.npmjs.com/package/debug |
| window.debug = require('debug'); |
| |
| domready(function domisready() { |
| debug('DOM is ready, initializing mercury app.'); |
| |
| var state = hg.state({ |
| bundles: bundles(), |
| uuid: hg.value(''), |
| toast: toast(), |
| title: hg.value('Vanadium Playground'), |
| error: hg.value(null) |
| }); |
| |
| router({ |
| '/#!/': index, |
| '/#!/:uuid': show |
| }).on('notfound', notfound); |
| |
| hg.app(document.body, state, render); |
| |
| // Route: "/#!/" - The homepage, show list of available bundles. |
| function index(params, route) { |
| // Unset state.uuid from previous route. |
| state.uuid.set(''); |
| |
| api.bundles(function(err, list) { |
| if (err) { |
| state.error.set(error({ |
| title: 'Coming soon', |
| body: 'A web-based code editing application for experimenting ' + |
| 'with Vanadium.', |
| error: err |
| })); |
| |
| return; |
| } |
| |
| var length = list.length; |
| |
| for (var i = 0; i < length; i++) { |
| var data = list[i]; |
| state.bundles.put(data.uuid, bundle(data)); |
| } |
| }); |
| } |
| |
| // Route: "/#!/:uuid" - Show a single bundle |
| function show(params) { |
| state.uuid.set(params.uuid); |
| |
| // TODO(jasoncampbell): If there is not an entry for `params.uuid` show a |
| // spinner/loader. |
| // |
| // SEE: https://github.com/vanadium/issues/issues/39 |
| |
| api.get(params.uuid, function(err, data) { |
| if (err) { |
| return console.error('TODO: API GET error', err); |
| } |
| |
| // Set and or update bundle |
| state.bundles.put(data.uuid, bundle(data)); |
| }); |
| } |
| |
| // SEE: https://github.com/vanadium/issues/issues/39 |
| function notfound(href) { |
| console.error('TODO: not found error - %s', href); |
| } |
| }); |