src/admin/js/components/navbar.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 |
(function(){ 'use strict'; var app = window.LS || (window.LS = {}); var u = app.utils; app.navlinks = { controller: function(args){ var vm = {}; var caret = "<i class='fa fa-angle-right'></i> "; vm.activelink = function(url){ return (m.route().match(new RegExp("^\/"+url))) ? "active" : ""; }; vm.guidelinks = [ {path: "/guide/overview", title: "Overview"}, {path: "/guide/use-cases", title: caret+"Use Cases"}, {path: "/guide/architecture", title: caret+"Architecture"}, {path: "/guide/data_model", title: caret+"Data Model"}, {path: "/guide/getting-started", title: "Getting Started"}, {path: "/guide/usage", title: "Usage"}, {path: "/guide/auth", title: "Authorization"}, {path: "/guide/middleware", title: "Middleware"}, {path: "/guide/litestore_js_object", title: caret+"LiteStore Global Object"}, {path: "/guide/admin_app", title: "Administration App"}, {path: "/guide/api", title: "HTTP API Reference"}, {path: "/guide/api_info", title: caret+"info (LiteStore Information)"}, {path: "/guide/api_dir", title: caret+"dir (LiteStore Directory)"}, {path: "/guide/api_docs", title: caret+"docs (LiteStore Documents)"}, {path: "/guide/api_tags", title: caret+"tags (LiteStore Tags)"}, {path: "/guide/api_indexes", title: caret+"indexes (LiteStore Indexes)"}, {path: "/guide/api_custom", title: caret+"custom (LiteStore Custom Resources)"}, {path: "/guide/nim-api", title: "Nim API Reference"}, {path: "/guide/nim-api_high", title: caret+"High-Level Nim API"}, {path: "/guide/nim-api_low", title: caret+"Low-Level Nim API"}, {path: "/guide/credits", title: "Credits"} ]; vm.taglinks = function(info){ return info.tags.map(function(tag){ var key = Object.keys(tag)[0]; return {path: "/tags/"+key, title: key+" ("+tag[key]+")"}; }); }; return vm; }, view: function(ctrl){ var links = [ m("li", {class: ctrl.activelink("info")}, [m("a", {href: "/info", config: m.route}, [m("i.fa.fa-info-circle"), " Info"])]), u.dropdown({title: "Guide", icon:"fa-book", links: ctrl.guidelinks, active: ctrl.activelink("guide")}), u.dropdown({title: "Tags", icon:"fa-tags", links: ctrl.taglinks(app.system), active: ctrl.activelink("tags")})]; if (!app.system.read_only) { links.push(m("li", {class: ctrl.activelink("new")}, [m("a", {href: "/document/create/", config: m.route}, [m("i.fa.fa-plus-circle"), " New"])])); } return m("ul.nav.navbar-nav", links); } }; app.navheader = { view: function(ctrl, args) { 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 Admin") ]); } }; app.searchbox = { controller: function() { var vm = {}; vm.query = m.prop(""); vm.keySearch = function(el, isInitialized, context){ if (isInitialized) return; $(el).keypress(function(event){ if (isInitialized) return; vm.query($(el).val()); if (event.which == 13){ vm.search(); return false; } }); }; vm.search = function(){ m.route("/search/"+vm.query()); }; return vm; }, view: function(ctrl, args) { return m("form.navbar-form.navbar-right[role='search']", [ m(".input-group", [ m("input.form-control", { type:"text", placeholder:"Search...", onchange: m.withAttr("value", ctrl.query), config: ctrl.keySearch, value: ctrl.query() }), m("span.input-group-btn", m("button.btn.btn-default", { type: "button", onclick: ctrl.search }, [m("i.fa.fa-search")])) ]) ] ); } }; app.navbar = { view: function(ctrl, args) { return m("nav.navbar.navbar-inverse.navbar-fixed-top", [ m(".container-fluid", [ m.component(app.navheader), m("#nav-collapse.collapse.navbar-collapse", [ m.component(app.navlinks), m.component(app.searchbox) ]) ]) ]); } }; }()); |