all repos — litestore @ c80d024f523a678edf3b4b3d124959cc67cd9bd4

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
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
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()))
        ])
      ])
    ])
}

var bsNavDropdown = function() {
  var dropdown = {}
  dropdown.view = function(ctrl) {
    return m("li.dropdown", [
      m("a.dropdown-toggle[href='#'][data-toggle='dropdown'][role='button'][aria-expanded='false']",
        [m("span", ctrl.title()+" "), m("span.caret")]),
      m("ul.dropdown-menu[role='menu']", 
        ctrl.links().map(function(e){
          return m("li", 
            [m("a", {href: e.path, config: m.route}, e.title)])}))
      ])
  };
  return dropdown;
};

app.navlinks = {
  controller: function(){
    app.navlinks.vm.init();
  },
  vm: {
    init: function(){
      this.links = m.prop([
        {path: "/pages/overview", title: "Overview"},
        {path: "/pages/getting-started", title: "Getting Started"},
        {path: "/pages/usage", title: "Usage"},
        {path: "/pages/api", title: "API"},
        {path: "/pages/credits", title: "Credits"}
      ]);
      this.title = m.prop("Guide");
      this.guideDropdown = new bsNavDropdown();
    }
  },
  view: function(ctrl){
    var vm = app.navlinks.vm;
    return m("ul.nav.navbar-nav", [
      m("li", [m("a", {href: "/admin", config: m.route}, "Admin")]),
      vm.guideDropdown.view({title: vm.title, links: vm.links})
    ])
  }
}

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
});