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

ensure to be able to disable timeline feature

Yuki Takei 8 лет назад
Родитель
Сommit
c800fe3abf

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

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

+ 1 - 0
lib/form/index.js

@@ -21,6 +21,7 @@ module.exports = {
     customcss: require('./admin/customcss'),
     customcss: require('./admin/customcss'),
     custombehavior: require('./admin/custombehavior'),
     custombehavior: require('./admin/custombehavior'),
     customlayout: require('./admin/customlayout'),
     customlayout: require('./admin/customlayout'),
+    customfeatures: require('./admin/customfeatures'),
     userInvite: require('./admin/userInvite'),
     userInvite: require('./admin/userInvite'),
     slackSetting: require('./admin/slackSetting'),
     slackSetting: require('./admin/slackSetting'),
   },
   },

+ 13 - 0
lib/models/config.js

@@ -53,6 +53,7 @@ module.exports = function(crowi) {
       'customize:css' : '',
       'customize:css' : '',
       'customize:behavior' : 'crowi',
       'customize:behavior' : 'crowi',
       'customize:layout' : 'crowi',
       'customize:layout' : 'crowi',
+      'customize:isEnabledTimeline' : true,
     };
     };
   }
   }
 
 
@@ -289,6 +290,18 @@ module.exports = function(crowi) {
     return config.crowi['customize:layout'] || 'crowi';
     return config.crowi['customize:layout'] || 'crowi';
   }
   }
 
 
+  configSchema.statics.isEnabledTimeline = function(config)
+  {
+    var defaultValue = getArrayForInstalling()['customize:isEnabledTimeline'];
+
+    // return defaultValue if undefined
+    if (undefined === config.crowi || undefined === config.crowi['customize:isEnabledTimeline']) {
+      return defaultValue;
+    }
+
+    return config.crowi['customize:isEnabledTimeline'];
+  };
+
   configSchema.statics.fileUploadEnabled = function(config)
   configSchema.statics.fileUploadEnabled = function(config)
   {
   {
     const Config = this;
     const Config = this;

+ 6 - 1
lib/models/page.js

@@ -633,7 +633,6 @@ module.exports = function(crowi) {
 
 
     return new Promise(function(resolve, reject) {
     return new Promise(function(resolve, reject) {
       var q = Page.generateQueryToListByStartWith(path, userData, option)
       var q = Page.generateQueryToListByStartWith(path, userData, option)
-        .populate('revision')
         .sort(sortOpt)
         .sort(sortOpt)
         .skip(opt.offset)
         .skip(opt.offset)
         .limit(opt.limit);
         .limit(opt.limit);
@@ -651,6 +650,7 @@ module.exports = function(crowi) {
     var Page = this;
     var Page = this;
     var pathCondition = [];
     var pathCondition = [];
     var includeDeletedPage = option.includeDeletedPage || false;
     var includeDeletedPage = option.includeDeletedPage || false;
+    var isPopulateRevision = option.isPopulateRevision || false;
 
 
     var queryReg = new RegExp('^' + path);
     var queryReg = new RegExp('^' + path);
     pathCondition.push({path: queryReg});
     pathCondition.push({path: queryReg});
@@ -681,6 +681,11 @@ module.exports = function(crowi) {
       });
       });
     }
     }
 
 
+    // retrieve revision data
+    if (isPopulateRevision) {
+      q = q.populate('revision');
+    }
+
     return q;
     return q;
   }
   }
 
 

+ 1 - 0
lib/routes/index.js

@@ -56,6 +56,7 @@ module.exports = function(crowi, app) {
   app.post('/_api/admin/customize/css'      , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.customcss, admin.api.customizeSetting);
   app.post('/_api/admin/customize/css'      , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.customcss, admin.api.customizeSetting);
   app.post('/_api/admin/customize/behavior' , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.custombehavior, admin.api.customizeSetting);
   app.post('/_api/admin/customize/behavior' , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.custombehavior, admin.api.customizeSetting);
   app.post('/_api/admin/customize/layout'   , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.customlayout, admin.api.customizeSetting);
   app.post('/_api/admin/customize/layout'   , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.customlayout, admin.api.customizeSetting);
+  app.post('/_api/admin/customize/features' , loginRequired(crowi, app) , middleware.adminRequired() , csrf, form.admin.customfeatures, admin.api.customizeSetting);
 
 
   // search admin
   // search admin
   app.get('/admin/search'              , loginRequired(crowi, app) , middleware.adminRequired() , admin.search.index);
   app.get('/admin/search'              , loginRequired(crowi, app) , middleware.adminRequired() , admin.search.index);

+ 4 - 2
lib/routes/page.js

@@ -106,7 +106,8 @@ module.exports = function(crowi, app) {
     };
     };
     var queryOptions = {
     var queryOptions = {
       offset: offset,
       offset: offset,
-      limit : limit + 1
+      limit : limit + 1,
+      isPopulateRevision: Config.isEnabledTimeline(config),
     };
     };
 
 
     var renderVars = {
     var renderVars = {
@@ -170,7 +171,8 @@ module.exports = function(crowi, app) {
     };
     };
     var queryOptions = {
     var queryOptions = {
       offset: offset,
       offset: offset,
-      limit : limit + 1
+      limit : limit + 1,
+      isPopulateRevision: Config.isEnabledTimeline(config),
     };
     };
 
 
     var renderVars = {
     var renderVars = {

+ 5 - 0
lib/util/swigFunctions.js

@@ -65,6 +65,11 @@ module.exports = function(crowi, app, req, locals) {
     return Config.layoutType(config);
     return Config.layoutType(config);
   }
   }
 
 
+  locals.isEnabledTimeline = function() {
+    var config = crowi.getConfig()
+    return Config.isEnabledTimeline(config);
+  }
+
   locals.slackConfigured = function() {
   locals.slackConfigured = function() {
     var config = crowi.getConfig()
     var config = crowi.getConfig()
     if (Config.hasSlackToken(config)) {
     if (Config.hasSlackToken(config)) {

+ 60 - 1
lib/views/admin/customize.html

@@ -144,6 +144,44 @@
       </form>
       </form>
 
 
 
 
+      <form action="/_api/admin/customize/features" method="post" class="form-horizontal" id="customfeaturesSettingForm" role="form">
+      <fieldset>
+      <legend>機能</legend>
+        <p class="well">機能の有効/無効を選択できます。</p>
+
+        <div class="form-group">
+          <label for="settingForm[customize:isEnabledTimeline]" class="col-xs-3 control-label">タイムライン表示機能</label>
+          <div class="col-xs-9">
+            <div class="btn-group btn-toggle" data-toggle="buttons">
+              <label class="btn {% if settingForm['customize:isEnabledTimeline'] %}btn-primary active{% else %}btn-default{% endif %}">
+                <input name="settingForm[customize:isEnabledTimeline]" value="true" type="radio"
+                    {% if true === settingForm['customize:isEnabledTimeline'] %}checked{% endif %}> 有効
+              </label>
+              <label class="btn {% if !settingForm['customize:isEnabledTimeline'] %}btn-primary active{% else %}btn-default{% endif %}">
+                <input name="settingForm[customize:isEnabledTimeline]" value="false" type="radio"
+                    {% if !settingForm['customize:isEnabledTimeline'] %}checked{% endif %}> 無効
+              </label>
+            </div>
+
+            <p class="help-block">
+              無効化することで、リストページの表示を高速化できます。<br>
+              配下ページが多い場合に効果があります。
+            </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>
+
+
       <form action="/_api/admin/customize/css" method="post" class="form-horizontal" id="cutomcssSettingForm" role="form">
       <form action="/_api/admin/customize/css" method="post" class="form-horizontal" id="cutomcssSettingForm" role="form">
       <fieldset>
       <fieldset>
         <legend>カスタムCSS</legend>
         <legend>カスタムCSS</legend>
@@ -179,7 +217,7 @@
   </div>
   </div>
 
 
   <script>
   <script>
-    $('#cutomcssSettingForm, #cutomlayoutSettingForm, #cutombehaviorSettingForm').each(function() {
+    $('#cutomcssSettingForm, #cutomlayoutSettingForm, #cutombehaviorSettingForm, #customfeaturesSettingForm').each(function() {
       $(this).submit(function()
       $(this).submit(function()
       {
       {
         function showMessage(formId, msg, status) {
         function showMessage(formId, msg, status) {
@@ -251,6 +289,27 @@
         editor.setSize($(this).width(), $(this).height());
         editor.setSize($(this).width(), $(this).height());
       }
       }
     });
     });
+
+    // Bootstrap 3 Toggle Switch Snippet
+    // http://www.bootply.com/92189
+    $('.btn-toggle').click(function() {
+      $(this).find('.btn').toggleClass('active');
+
+      if ($(this).find('.btn-primary').length>0) {
+        $(this).find('.btn').toggleClass('btn-primary');
+      }
+      if ($(this).find('.btn-danger').length>0) {
+        $(this).find('.btn').toggleClass('btn-danger');
+      }
+      if ($(this).find('.btn-success').length>0) {
+        $(this).find('.btn').toggleClass('btn-success');
+      }
+      if ($(this).find('.btn-info').length>0) {
+        $(this).find('.btn').toggleClass('btn-info');
+      }
+
+      $(this).find('.btn').toggleClass('btn-default');
+    });
   </script>
   </script>
 
 
 </div>
 </div>

+ 4 - 0
lib/views/crowi-plus/widget/page_list_container.html

@@ -1,7 +1,9 @@
 <div class="page-list-container">
 <div class="page-list-container">
   <ul class="nav nav-tabs">
   <ul class="nav nav-tabs">
       <li class="active"><a href="#view-list" data-toggle="tab">{{ t('List View') }}</a></li>
       <li class="active"><a href="#view-list" data-toggle="tab">{{ t('List View') }}</a></li>
+      {% if isEnabledTimeline() %}
       <li><a href="#view-timeline" data-toggle="tab">{{ t('Timeline View') }}</a></li>
       <li><a href="#view-timeline" data-toggle="tab">{{ t('Timeline View') }}</a></li>
+      {% endif %}
   </ul>
   </ul>
 
 
   <div class="tab-content">
   <div class="tab-content">
@@ -20,6 +22,7 @@
     </div>
     </div>
 
 
     {# timeline view #}
     {# timeline view #}
+    {% if isEnabledTimeline() %}
     <div class="tab-pane" id="view-timeline" data-shown=0>
     <div class="tab-pane" id="view-timeline" data-shown=0>
       {% for page in pages %}
       {% for page in pages %}
       <div class="timeline-body" id="id-{{ page.id }}">
       <div class="timeline-body" id="id-{{ page.id }}">
@@ -30,5 +33,6 @@
       <hr>
       <hr>
       {% endfor %}
       {% endfor %}
     </div>
     </div>
+    {% endif %}
   </div>
   </div>
 </div>
 </div>

+ 4 - 0
lib/views/page_list.html

@@ -178,7 +178,9 @@
 <div class="page-list-container">
 <div class="page-list-container">
   <ul class="nav nav-tabs">
   <ul class="nav nav-tabs">
       <li class="active"><a href="#view-list" data-toggle="tab">{{ t('List View') }}</a></li>
       <li class="active"><a href="#view-list" data-toggle="tab">{{ t('List View') }}</a></li>
+      {% if isEnabledTimeline() %}
       <li><a href="#view-timeline" data-toggle="tab">{{ t('Timeline View') }}</a></li>
       <li><a href="#view-timeline" data-toggle="tab">{{ t('Timeline View') }}</a></li>
+      {% endif %}
   </ul>
   </ul>
 
 
   <div class="tab-content">
   <div class="tab-content">
@@ -212,6 +214,7 @@
     </div>
     </div>
 
 
     {# timeline view #}
     {# timeline view #}
+    {% if isEnabledTimeline() %}
     <div class="tab-pane" id="view-timeline" data-shown=0>
     <div class="tab-pane" id="view-timeline" data-shown=0>
       {% for page in pages %}
       {% for page in pages %}
       <div class="timeline-body" id="id-{{ page.id }}">
       <div class="timeline-body" id="id-{{ page.id }}">
@@ -222,6 +225,7 @@
       <hr>
       <hr>
       {% endfor %}
       {% endfor %}
     </div>
     </div>
+    {% endif %}
   </div>
   </div>
 </div>
 </div>