all repos — litestore @ 4a98b83501b5373777c99a52c463dac0aced9272

A minimalist nosql document store.

app/js/app.js

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
var Page = {}

Page.get = function(id) {
  var content = m.prop("");
  return m.request({
      method: "GET", 
      url: "md/"+id+".md",
      deserialize: function(value) {return value;}
    }).then(function(content){ return marked(content)});
}

var app = {}

app.vm = {};

app.controller = function(){
  this.navbar = new app.navbar.controller();
  app.vm.init();
}

app.vm.init = function() {
  this.pageid = m.prop(m.route.param("page"));
  this.content = Page.get(this.pageid());
}
  
app.view = function(ctrl){
  return m("div", [
    m(".container", [
      app.navbar.view(ctrl.navbar),
        m("main.row", [
          m("article", m.trust(app.vm.content()))
        ])
      ])
    ])
}

app.navlinks = {
  controller: function() {
    this.links = m.prop([
      {id: "overview", title: "Overview"},
      {id: "getting-started", title: "Getting Started"},
      {id: "usage", title: "Usage"},
      {id: "api", title: "API"},
      {id: "credits", title: "Credits"}
    ]);
  },
  view: function(ctrl) {
    return m("ul#nav-links.nav.navbar-nav", 
      ctrl.links().map(function(e){
        return m("li", {id: "nav-"+e.id, class: (app.vm.pageid() == e.id) ? "active" : ""}, 
          [m("a", {href: "/pages/"+e.id, config: m.route}, e.title)])}));
  }
}

app.navheader = {
  controller: function() {},
  view: function(ctrl) {
    return m(".navbar-header", [
      m("button.navbar-toggle.collapsed[data-toggle='collapse'][data-target='#nav-collapse'][type='button']", [
        m("span.sr-only", "Toggle navigation"),
        m("span.icon-bar"),
        m("span.icon-bar"),
        m("span.icon-bar")
      ]),
      m("a.navbar-brand", {href: "/", config:m.route}, "LiteStore")
    ])
  }
}

app.searchbox = {
  controller: function() {},
  view: function(ctrl) {
    return m("form.navbar-form.navbar-right[role='search']", [
        m(".input-group", [
          m("input.form-control[type='text'i][placeholder='Search...']"),
          m("span.input-group-btn", 
            m("button.btn.btn-default[type='button']", [m("i.fa.fa-search")]))
        ])
      ]
    )
  }
}

app.navbar = {
  controller: function() {
    this.navheader = new app.navheader.controller();
    this.navlinks = new app.navlinks.controller();
    this.searchbox = new app.searchbox.controller();
  },
  view: function(ctrl) {
    return m("nav.navbar.navbar-inverse.navbar-fixed-top", [
      m(".container-fluid", [
        app.navheader.view(ctrl.navheader),
        m("#nav-collapse.collapse.navbar-collapse", [
          app.navlinks.view(ctrl.navlinks),
          app.searchbox.view(ctrl.searchbox)
        ])
      ])  
    ])
  }
}

m.route.mode = "hash";

m.route(document.body, "/pages/overview", {
    "/pages/:page": app
});