all repos — litestore @ b05e562820052a0229e16fd794fa4d5cb7af198e

A minimalist nosql document store.

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
(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/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/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)
          ])
        ])
      ]);
    }
  };
}());