Просмотр исходного кода

save markdown config from admin page

Yuki Takei 9 лет назад
Родитель
Сommit
5c7b947cd7

+ 9 - 0
lib/form/admin/markdown.js

@@ -0,0 +1,9 @@
+'use strict';
+
+var form = require('express-form')
+  , field = form.field;
+
+module.exports = form(
+  field('markdownSetting[isEnabledLinebreaks]').trim().toBooleanStrict()
+);
+

+ 1 - 0
lib/form/index.js

@@ -16,6 +16,7 @@ module.exports = {
     aws: require('./admin/aws'),
     google: require('./admin/google'),
     plugin: require('./admin/plugin'),
+    markdown: require('./admin/markdown'),
     userInvite: require('./admin/userInvite'),
     slackSetting: require('./admin/slackSetting'),
   },

+ 31 - 1
lib/routes/admin.js

@@ -69,6 +69,7 @@ module.exports = function(crowi, app) {
     return res.render('admin/index');
   };
 
+  // app.get('/admin/app'                  , admin.app.index);
   actions.app = {};
   actions.app.index = function(req, res) {
     var settingForm;
@@ -82,6 +83,35 @@ module.exports = function(crowi, app) {
   actions.app.settingUpdate = function(req, res) {
   };
 
+  // app.get('/admin/markdonw'                  , admin.markdonw.index);
+  actions.markdown = {};
+  actions.markdown.index = function(req, res) {
+    var config = crowi.getConfig();
+    var markdownSetting = Config.setupCofigFormData('markdown', config);
+
+    return res.render('admin/markdown', {
+      markdownSetting: markdownSetting,
+    });
+  };
+
+  // app.post('/admin/markdown/lineBreaksSetting' , admin.markdown.lineBreaksSetting);
+  actions.markdown.lineBreaksSetting = function(req, res) {
+    var markdownSetting = req.form.markdownSetting;
+
+    req.session.markdownSetting = markdownSetting;
+    if (req.form.isValid) {
+      Config.updateNamespaceByArray('markdown', markdownSetting, function(err, config) {
+        Config.updateConfigCache('markdown', config);
+        req.session.markdownSetting = null;
+        req.flash('successMessage', ['Successfully updated!']);
+        return res.redirect('/admin/markdown');
+      });
+    } else {
+      req.flash('errorMessage', req.form.errors);
+      return res.redirect('/admin/markdown');
+    }
+  };
+
   // app.get('/admin/notification'               , admin.notification.index);
   actions.notification = {};
   actions.notification.index = function(req, res) {
@@ -117,7 +147,7 @@ module.exports = function(crowi, app) {
     });
   };
 
-  // app.post('/admin/notification/slackSetting' , admin.notification.slackauth);
+  // app.post('/admin/notification/slackSetting' , admin.notification.slackSetting);
   actions.notification.slackSetting = function(req, res) {
     var slackSetting = req.form.slackSetting;
 

+ 4 - 0
lib/routes/index.js

@@ -47,6 +47,10 @@ module.exports = function(crowi, app) {
   app.post('/_api/admin/settings/google', loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.google, admin.api.appSetting);
   app.post('/_api/admin/settings/plugin', loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.plugin, admin.api.appSetting);
 
+  // markdown admin
+  app.get('/admin/markdown'                   , loginRequired(crowi, app) , middleware.adminRequired() , admin.markdown.index);
+  app.post('/admin/markdown/lineBreaksSetting', loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.markdown, admin.markdown.lineBreaksSetting);
+
   // search admin
   app.get('/admin/search'              , loginRequired(crowi, app) , middleware.adminRequired() , admin.search.index);
   app.post('/admin/search/build'       , loginRequired(crowi, app) , middleware.adminRequired() , csrf, admin.search.buildIndex);

+ 83 - 0
lib/views/admin/markdown.html

@@ -0,0 +1,83 @@
+{% extends '../layout/admin.html' %}
+
+{% block html_title %}Markdown設定 · {{ path }}{% endblock %}
+
+{% block content_head %}
+<div class="header-wrap">
+  <header id="page-header">
+    <h1 class="title" id="">Markdown設定</h1>
+  </header>
+</div>
+{% endblock %}
+
+{% block content_main %}
+<div class="content-main">
+  <div class="row">
+    <div class="col-md-3">
+      {% include './widget/menu.html' with {current: 'markdown'} %}
+    </div>
+    <div class="col-md-9">
+
+      {% set smessage = req.flash('successMessage') %}
+      {% if smessage.length %}
+      <div class="alert alert-success">
+        {% for e in smessage %}
+          {{ e }}<br>
+        {% endfor %}
+      </div>
+      {% endif %}
+
+      {% set emessage = req.flash('errorMessage') %}
+      {% if emessage.length %}
+      <div class="alert alert-danger">
+        {% for e in emessage %}
+        {{ e }}<br>
+        {% endfor %}
+      </div>
+      {% endif %}
+
+      <form action="/admin/markdown/lineBreaksSetting" method="post" class="form-horizontal" id="markdownSettingForm" role="form">
+      <fieldset>
+      <legend>Markdown設定</legend>
+        <p class="well">Markdownレンダリングの設定を変更できます。</p>
+
+        <div class="form-group">
+          <label for="markdownSetting[isEnabledLinebreaks]" class="col-xs-3 control-label">
+            Line Break を有効にする
+          </label>
+          <div class="col-xs-6">
+            <div class="btn-group btn-toggle" data-toggle="buttons">
+              <label class="btn {% if markdownSetting['isEnabledLinebreaks'] %}btn-primary active{% else %}btn-default{% endif %}">
+                <input name="markdownSetting[isEnabledLinebreaks]" value="true" type="radio"
+                    {% if true === markdownSetting['isEnabledLinebreaks'] %}checked{% endif %}> 有効
+              </label>
+              <label class="btn {% if !markdownSetting['isEnabledLinebreaks'] %}btn-primary active{% else %}btn-default{% endif %}">
+                <input name="markdownSetting[isEnabledLinebreaks]" value="false" type="radio"
+                    {% if !markdownSetting['isEnabledLinebreaks'] %}checked{% endif %}> 無効
+              </label>
+            </div>
+            <p class="help-block">プレーンテキスト中の改行を、HTML内で&lt;br&gt;として扱います</p>
+          </div>
+        </div>
+
+        <div class="form-group">
+          <div class="col-xs-offset-3 col-xs-6">
+            <input type="hidden" name="_csrf" value="{{ csrf() }}">
+            <button type="submit" class="btn btn-primary">更新</button>
+          </div>
+        </div>
+
+      </fieldset>
+      </form>
+
+    </div>
+  </div>
+
+</div>
+{% endblock content_main %}
+
+{% block content_footer %}
+{% endblock content_footer %}
+
+
+

+ 1 - 0
lib/views/admin/widget/menu.html

@@ -4,6 +4,7 @@
 <ul class="nav nav-pills nav-stacked">
   <li class="{% if current == 'index'%}active{% endif %}"><a href="/admin"><i class="fa fa-cube"></i> Wiki管理トップ</a></li>
   <li class="{% if current == 'app'%}active{% endif %}"><a href="/admin/app"><i class="fa fa-gears"></i> アプリ設定</a></li>
+  <li class="{% if current == 'markdown'%}active{% endif %}"><a href="/admin/markdown"><i class="fa fa-gears"></i> Markdown設定</a></li>
   <li class="{% if current == 'notification'%}active{% endif %}"><a href="/admin/notification"><i class="fa fa-bell"></i> 通知設定</a></li>
   <li class="{% if current == 'user'%}active{% endif %}"><a href="/admin/users"><i class="fa fa-users"></i> ユーザー管理</a></li>
   {% if searchConfigured() %}