Răsfoiți Sursa

add presentation page break setting

Seiya Tashiro 7 ani în urmă
părinte
comite
87a193ab6c

+ 9 - 0
resource/locales/en-US/translation.json

@@ -424,6 +424,15 @@
     "Enable Line Break desc": "Treat line break in the text page as <code>&lt;br&gt;</code> in HTML",
     "Enable Line Break desc": "Treat line break in the text page as <code>&lt;br&gt;</code> in HTML",
     "Enable Line Break for comment": "Enable Line Break in comment",
     "Enable Line Break for comment": "Enable Line Break in comment",
     "Enable Line Break for comment desc": "Treat line break in comment as <code>&lt;br&gt;</code> in HTML",
     "Enable Line Break for comment desc": "Treat line break in comment as <code>&lt;br&gt;</code> in HTML",
+    "presentation_setting": "Presentation Setting",
+    "presentation_setting_desc": "You can change presentation settings.",
+    "Page break setting": "Page break Setting",
+    "Preset one separator": "Preset 1",
+    "Preset one separator desc": "Blank line 3 lines",
+    "Preset two separator": "Preset 2",
+    "Preset two separator desc": "Horizontal Rule",
+    "Custom separator": "Custom",
+    "Custom separator desc": "Any character",
     "XSS_setting": "Prevent XSS(Cross Site Scripting) Setting",
     "XSS_setting": "Prevent XSS(Cross Site Scripting) Setting",
     "XSS_setting_desc": "You can change the handling of HTML tags in markdown text.",
     "XSS_setting_desc": "You can change the handling of HTML tags in markdown text.",
     "Enable XSS prevention": "Enable XSS Prevention",
     "Enable XSS prevention": "Enable XSS Prevention",

+ 9 - 0
resource/locales/ja/translation.json

@@ -441,6 +441,15 @@
     "Enable Line Break desc": "ページテキスト中の改行を、HTML内で<code>&lt;br&gt;</code>として扱います",
     "Enable Line Break desc": "ページテキスト中の改行を、HTML内で<code>&lt;br&gt;</code>として扱います",
     "Enable Line Break for comment": "コメント欄で Line Break を有効にする",
     "Enable Line Break for comment": "コメント欄で Line Break を有効にする",
     "Enable Line Break for comment desc": "コメント中の改行を、HTML内で<code>&lt;br&gt;</code>として扱います",
     "Enable Line Break for comment desc": "コメント中の改行を、HTML内で<code>&lt;br&gt;</code>として扱います",
+    "presentation_setting": "プレゼンテーション設定",
+    "presentation_setting_desc": "プレゼンテーションの設定を変更できます。",
+    "Page break setting": "改頁を設定する",
+    "Preset one separator": "プリセット 1",
+    "Preset one separator desc": "空行を3行で改頁します",
+    "Preset two separator": "プリセット 2",
+    "Preset two separator desc": "Markdown の区切り線で改頁します",
+    "Custom separator": "カスタム",
+    "Custom separator desc": "任意の文字で改頁します",
     "XSS_setting": "XSS(Cross Site Scripting)対策設定",
     "XSS_setting": "XSS(Cross Site Scripting)対策設定",
     "XSS_setting_desc": "マークダウンテキスト内の HTML タグの扱いを設定し、悪意のあるプログラムからの攻撃を防ぎます",
     "XSS_setting_desc": "マークダウンテキスト内の HTML タグの扱いを設定し、悪意のあるプログラムからの攻撃を防ぎます",
     "Enable XSS prevention": "XSSを抑制する",
     "Enable XSS prevention": "XSSを抑制する",

+ 9 - 0
src/server/form/admin/markdownPresentation.js

@@ -0,0 +1,9 @@
+'use strict';
+
+var form = require('express-form')
+  , field = form.field;
+
+module.exports = form(
+  field('markdownSetting[markdown:pageBreakSeparator]').trim().toInt(),
+  field('markdownSetting[markdown:xss:option]markdownSetting[markdown:pageBreakCustomSeparator]').trim()
+);

+ 1 - 0
src/server/form/index.js

@@ -27,6 +27,7 @@ module.exports = {
     securityPassportTwitter: require('./admin/securityPassportTwitter'),
     securityPassportTwitter: require('./admin/securityPassportTwitter'),
     markdown: require('./admin/markdown'),
     markdown: require('./admin/markdown'),
     markdownXss: require('./admin/markdownXss'),
     markdownXss: require('./admin/markdownXss'),
+    markdownPresentation: require('./admin/markdownPresentation'),
     customcss: require('./admin/customcss'),
     customcss: require('./admin/customcss'),
     customscript: require('./admin/customscript'),
     customscript: require('./admin/customscript'),
     customheader: require('./admin/customheader'),
     customheader: require('./admin/customheader'),

+ 24 - 0
src/server/models/config.js

@@ -116,6 +116,8 @@ module.exports = function(crowi) {
       'markdown:xss:attrWhiteList': [],
       'markdown:xss:attrWhiteList': [],
       'markdown:isEnabledLinebreaks': false,
       'markdown:isEnabledLinebreaks': false,
       'markdown:isEnabledLinebreaksInComments': true,
       'markdown:isEnabledLinebreaksInComments': true,
+      'markdown:pageBreakSeparator': 1,
+      'markdown:pageBreakCustomSeparator': '',
     };
     };
   }
   }
 
 
@@ -357,6 +359,28 @@ module.exports = function(crowi) {
     return config.markdown[key];
     return config.markdown[key];
   };
   };
 
 
+  configSchema.statics.pageBreakSeparator = function(config) {
+    const key = 'markdown:pageBreakSeparator';
+
+    // return default value if undefined
+    if (undefined === config.markdown || undefined === config.markdown[key]) {
+      return getDefaultMarkdownConfigs[key];
+    }
+
+    return config.markdown[key];
+  };
+
+  configSchema.statics.pageBreakCustomSeparator = function(config) {
+    const key = 'markdown:pageBreakCustomSeparator';
+
+    // return default value if undefined
+    if (undefined === config.markdown || undefined === config.markdown[key]) {
+      return getDefaultMarkdownConfigs[key];
+    }
+
+    return config.markdown[key];
+  };
+
   configSchema.statics.isEnabledXssPrevention = function(config) {
   configSchema.statics.isEnabledXssPrevention = function(config) {
     const key = 'markdown:xss:isEnabledPrevention';
     const key = 'markdown:xss:isEnabledPrevention';
 
 

+ 19 - 0
src/server/routes/admin.js

@@ -138,6 +138,25 @@ module.exports = function(crowi, app) {
     }
     }
   };
   };
 
 
+  // app.post('/admin/markdown/presentationSetting' , admin.markdown.presentationSetting);
+  actions.markdown.presentationSetting = function(req, res) {
+    let presentationSetting = req.form.markdownSetting;
+
+    req.session.markdownSetting = presentationSetting;
+    if (req.form.isValid) {
+      Config.updateNamespaceByArray('markdown', presentationSetting, 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.post('/admin/markdown/xss-setting' , admin.markdown.xssSetting);
   // app.post('/admin/markdown/xss-setting' , admin.markdown.xssSetting);
   actions.markdown.xssSetting = function(req, res) {
   actions.markdown.xssSetting = function(req, res) {
     let xssSetting = req.form.markdownSetting;
     let xssSetting = req.form.markdownSetting;

+ 1 - 0
src/server/routes/index.js

@@ -86,6 +86,7 @@ module.exports = function(crowi, app) {
   app.get('/admin/markdown'                   , loginRequired(crowi, app) , middleware.adminRequired() , admin.markdown.index);
   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); //change form name
   app.post('/admin/markdown/lineBreaksSetting', loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.markdown, admin.markdown.lineBreaksSetting); //change form name
   app.post('/admin/markdown/xss-setting'      , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.markdownXss, admin.markdown.xssSetting);
   app.post('/admin/markdown/xss-setting'      , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.markdownXss, admin.markdown.xssSetting);
+  app.post('/admin/markdown/presentationSetting', loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.markdownPresentation, admin.markdown.presentationSetting);
 
 
   // markdown admin
   // markdown admin
   app.get('/admin/customize'                , loginRequired(crowi, app) , middleware.adminRequired() , admin.customize.index);
   app.get('/admin/customize'                , loginRequired(crowi, app) , middleware.adminRequired() , admin.customize.index);

+ 53 - 0
src/server/views/admin/markdown.html

@@ -89,6 +89,59 @@
         </fieldset>
         </fieldset>
       </form>
       </form>
 
 
+      <form action="/admin/markdown/presentationSetting" method="post" class="form-horizontal" id="markdownSettingForm" role="form">
+        <legend>{{ t('markdown_setting.presentation_setting') }}</legend>
+        <p class="well">{{ t("markdown_setting.presentation_setting_desc") }}</p>
+
+        <fieldset class="form-group row my-2">
+            {% set nameForPageBreakOption = "markdownSetting[markdown:pageBreakSeparator]" %}
+            {% set pageBreakSeparator = markdownSetting['markdown:pageBreakSeparator'] %}
+
+          <label class="col-xs-3 control-label">
+            {{ t('markdown_setting.Page break setting') }}
+          </label>
+
+          <div class="col-xs-3 radio radio-primary">
+              <input type="radio" id="option1" name="{{nameForPageBreakOption}}" value="1" {% if pageBreakSeparator === 1 %}checked{% endif %}>
+              <label for="option1">
+                <p class="font-weight-bold">{{ t('markdown_setting.Preset one separator') }}</p>
+                <div class="m-t-15">
+                    {{ t('markdown_setting.Preset one separator desc') }}
+                </div>
+              </label>
+          </div>
+
+          <div class="col-xs-3 radio radio-primary">
+              <input type="radio" id="option2" name="{{nameForPageBreakOption}}" value="2" {% if pageBreakSeparator === 2 %}checked{% endif %}>
+              <label for="option2">
+                <p class="font-weight-bold">{{ t('markdown_setting.Preset two separator') }}</p>
+                <div class="m-t-15">
+                    {{ t('markdown_setting.Preset two separator desc') }}
+                </div>
+              </label>
+          </div>
+
+          <div class="col-xs-3 radio radio-primary">
+            <input type="radio" id="option3" name="{{nameForPageBreakOption}}" value="3" {% if pageBreakSeparator === 3 %}checked{% endif %}>
+            <label for="option3">
+              <p class="font-weight-bold">{{ t('markdown_setting.Custom separator') }}</p>
+              <div class="m-t-15">
+                  {{ t('markdown_setting.Custom separator desc') }}
+                  <input class="form-control" type="text" name="markdownSetting[markdown:pageBreakCustomSeparator]" value="{{markdownSetting['markdown:pageBreakCustomSeparator']|default('') }}">
+              </div>
+            </label>
+          </div>
+
+        </fieldset>
+
+        <div class="form-group my-3">
+          <div class="col-xs-offset-4 col-xs-5">
+            <input type="hidden" name="_csrf" value="{{ csrf() }}">
+            <button type="submit" class="btn btn-primary">{{ t("Update") }}</button>
+          </div>
+        </div>
+      </form>
+
       <form action="/admin/markdown/xss-setting" method="post" class="form-horizontal" id="markdownSettingForm" role="form">
       <form action="/admin/markdown/xss-setting" method="post" class="form-horizontal" id="markdownSettingForm" role="form">
         {% set nameForIsXssEnabled = "markdownSetting[markdown:xss:isEnabledPrevention]" %}
         {% set nameForIsXssEnabled = "markdownSetting[markdown:xss:isEnabledPrevention]" %}
         {% set isXssEnabled = markdownSetting['markdown:xss:isEnabledPrevention'] %}
         {% set isXssEnabled = markdownSetting['markdown:xss:isEnabledPrevention'] %}