2column.html 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. {% extends 'layout.html' %}
  2. {% block layout_head_nav %}
  3. <nav class="crowi-header navbar navbar-default" role="navigation">
  4. <!-- Brand and toggle get grouped for better mobile display -->
  5. <div class="navbar-header">
  6. <a class="navbar-brand" href="/">{% block title %}{{ config.app.title }}{% endblock %}</a>
  7. </div>
  8. <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbarCollapse">
  9. <span class="sr-only">Toggle navigation</span>
  10. <span class="icon-bar"></span>
  11. <span class="icon-bar"></span>
  12. <span class="icon-bar"></span>
  13. </button>
  14. <!-- Collect the nav links, forms, and other content for toggling -->
  15. <div class="collapse navbar-collapse" id="navbarCollapse">
  16. <ul class="nav navbar-nav">
  17. <li class=""><a href="/INDEX">INDEX</a></li>
  18. </ul>
  19. <form id="headerSearch" class="navbar-form navbar-left form-inline" role="search">
  20. <div class="form-group">
  21. <input id="searchQuery" name="q" type="text" class="form-control" placeholder="検索文字...">
  22. <button type="submit" class="btn btn-default">検索</button>
  23. <script>
  24. function Searcher () {
  25. };
  26. Searcher.prototype = {
  27. baseUrl: "{{ config.searcher.url }}",
  28. currentQuery: "",
  29. searchData: [],
  30. setData: function (data) {
  31. this.searchData = data;
  32. },
  33. search: function (query) {
  34. var self = this;
  35. self.currentQuery = query;
  36. if (query == "") {
  37. return false;
  38. }
  39. $("#searchQuery").addClass('searching');
  40. $.ajax({
  41. url: self.baseUrl + '/search?type=json&callback=?',
  42. data: {q: query},
  43. cache: false,
  44. dataType: 'jsonp'
  45. }).done(function (data) {
  46. self.setData(data);
  47. self.showSearchWidget();
  48. $("#searchQuery").removeClass('searching');
  49. });
  50. },
  51. showSearchWidget: function () {
  52. if (this.searchData.length > 0) {
  53. $('#headerSearch').popover('show');
  54. }
  55. $("#searchQuery").removeClass('searching');
  56. },
  57. createSearchContent: function () {
  58. var self = this;
  59. var contentHtml = $('<ul class=\"search-list\"></ul>');
  60. $.each(self.searchData.slice(0, 6), function (i, d) {
  61. var $li = $("<li class=\"list-link\"></li>");
  62. var $a = $("<a></a>");
  63. $a.attr('href', d.path).html(d.path + "<br>");
  64. var $span = $("<span class=\"search-description\"></span>");
  65. $span.text(d.body.substr(0, 50) + "...");
  66. $a.append($span);
  67. $li.append($a);
  68. contentHtml.append($li);
  69. });
  70. var $li = $("<li class=\"divider\"></li>");
  71. contentHtml.append($li);
  72. $li = $("<li class=\"next-link\"></li>");
  73. $li.html("<a href=\"" + self.baseUrl + "/search?q=" + encodeURIComponent(self.currentQuery) + "\">もっと見る</a>");
  74. contentHtml.append($li);
  75. return contentHtml;
  76. },
  77. jump: function (query) {
  78. self = this;
  79. top.location.href = self.baseUrl + '/search?q=' + query;
  80. }
  81. };
  82. var SearcherObject = new Searcher();
  83. $('#headerSearch').popover({
  84. placement: 'bottom',
  85. trigger: 'manual',
  86. html: 'true',
  87. content: function () {
  88. return SearcherObject.createSearchContent();
  89. }
  90. });
  91. $('#searchQuery').on('focus', function(e) {
  92. SearcherObject.showSearchWidget();
  93. });
  94. $('#searchQuery').on('blur', function(e) {
  95. $('#headerSearch').popover('hide');
  96. });
  97. $('#headerSearch').on('submit', function(e) {
  98. SearcherObject.jump($("#searchQuery").val());
  99. return false;
  100. });
  101. var previousText = "";
  102. setInterval(function (e) {
  103. var text = $("#searchQuery").val();
  104. if (text != previousText) {
  105. SearcherObject.search(text);
  106. }
  107. previousText = text;
  108. }, 1000);
  109. </script>
  110. </div>
  111. </form>
  112. <ul class="nav navbar-nav navbar-right">
  113. <li class="aside-shown">
  114. <a href="" class="layout-control to-show" id="toggle-sidebar-to-show"><i class="fa fa-caret-left"></i> サイドバー表示</a>
  115. <script>
  116. {# TODO 整理する #}
  117. $('#toggle-sidebar-to-show').click(function(e) {
  118. $('.main-container').removeClass('aside-hidden');
  119. $.cookie('aside-hidden', 0, { expires: 30, path: '/' });
  120. return false;
  121. });
  122. </script>
  123. </li>
  124. {% if user and user.admin %}
  125. <li id="">
  126. <a href="/admin" id="link-mypage">
  127. <i class="fa fa-cube"></i> 管理
  128. </a>
  129. </li>
  130. {% endif %}
  131. {% if user %}
  132. {#
  133. <li id="" class="notif">
  134. <a href="" id="notif-opener">
  135. <i class="fa fa-globe"></i> <span class="badge badge-danger">6</span>
  136. </a>
  137. <script>
  138. $('#notif-opener').popover({
  139. placement: 'bottom',
  140. trigger: 'manual',
  141. html: 'true',
  142. content: function () {
  143. return '<div></div>';
  144. }
  145. });
  146. $('#notif-opener').click(function(e) {
  147. $('#notif-opener').popover('show');
  148. return false;
  149. });
  150. </script>
  151. </li>
  152. #}
  153. <li id="login-user">
  154. <a href="/user/{{ user.username }}" id="link-mypage">
  155. <img src="{{ user|picture }}" class="picture picture-rounded" width="25" /> マイページ
  156. </a>
  157. </li>
  158. <li class="dropdown">
  159. <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-bars"></i> <label class="sr-only">メニュー</label></a>
  160. <ul class="dropdown-menu">
  161. <li><a href="" data-target="#createMemo" data-toggle="modal"><i class="fa fa-pencil"></i> 今日のメモを作成</a></li>
  162. <li class="divider"></li>
  163. <li><a href="/me"><i class="fa fa-gears"></i> ユーザー設定</a></li>
  164. <li class="divider"></li>
  165. <li><a href="/logout"><i class="fa fa-sign-out"></i> ログアウト</a></li>
  166. {# <li><a href="#">今日の日報を作成</a></li> #}
  167. {# <li class="divider"></li> #}
  168. {# <li class="divider"></li> #}
  169. {# <li><a href="#">ログアウト</a></li> #}
  170. </ul>
  171. </li>
  172. {% else %}
  173. <li id="login-user"><a href="/login" id="login"><i class="fa fa-user"></i> Login</a></li>
  174. {% endif %}
  175. {% if config.security.confidential != '' %}
  176. <li class="confidential"><a href="#">{{ config.security.confidential }}</a></li>
  177. {% endif %}
  178. </ul>
  179. </div><!-- /.navbar-collapse -->
  180. </nav>
  181. {% include '../modal/widget_today_memo.html' %}
  182. {% endblock %} {# layout_head_nav #}
  183. {% block layout_sidebar %}
  184. <a href="" class="layout-control to-hide" id="toggle-sidebar-to-hide"><i class="fa fa-chevron-right"></i> <span class="hide-on-affix-top"></span></a>
  185. <script>
  186. $('#toggle-sidebar-to-hide').click(function(e) {
  187. $('.main-container').addClass('aside-hidden');
  188. $.cookie('aside-hidden', 1, { expires: 30, path: '/' });
  189. return false;
  190. });
  191. </script>
  192. <aside class="sidebar col-md-3 hidden-xs hidden-sm hidden-print">
  193. {% block side_header %}
  194. {% endblock %}
  195. <div class="side-content">
  196. {% block side_content %}
  197. {% endblock %}
  198. </div>
  199. {% block side_footer %}
  200. {% endblock %}
  201. <div id="footer-container" class="footer">
  202. <footer class="">
  203. <p>&copy; 2012 {{ config.app.title }}. <a href="" data-target="#helpModal" data-toggle="modal"><i class="fa fa-question-circle"></i> ヘルプ</a></p>
  204. </footer>
  205. </div>
  206. </aside>
  207. {% include '../modal/widget_help.html' %}
  208. <script>
  209. $(function() {
  210. console.log($.cookie('aside-hidden'));
  211. if ($.cookie('aside-hidden') == 1) {
  212. console.log("add aside-hidden");
  213. $('.main-container').addClass('aside-hidden');
  214. }
  215. });
  216. </script>
  217. {% endblock %} {# layout_sidebar #}
  218. {% block layout_main %}
  219. <div id="main" class="main col-md-9 {% if page %}{{ css.grant(page) }}{% endif %}" ng-controller="WikiPageController">
  220. {% if page && page.grant != 1 %}
  221. <p class="page-grant">
  222. <i class="fa fa-lock"></i> {{ consts.pageGrants[page.grant] }} (このページの閲覧は制限されています)
  223. </p>
  224. {% endif %}
  225. <article>
  226. {% block content_head %}
  227. <header>
  228. <h2>-</h2>
  229. <p>-</p>
  230. </header>
  231. {% endblock %}
  232. {% block content_main %}
  233. //
  234. {% endblock content_main %}
  235. {% block content_footer %}
  236. <footer>
  237. <h3>-</h3>
  238. <p>-</p>
  239. </footer>
  240. {% endblock %}
  241. </article>
  242. </div>
  243. {% endblock %} {# layout_main #}