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