Răsfoiți Sursa

Merge pull request #116 from weseek/imprv/115-disable-pushing-state

Imprv/115 disable pushing state
Yuki Takei 8 ani în urmă
părinte
comite
1fe2f2dc38

+ 2 - 1
lib/form/admin/customfeatures.js

@@ -4,6 +4,7 @@ var form = require('express-form')
   , field = form.field;
 
 module.exports = form(
-  field('settingForm[customize:isEnabledTimeline]').trim().toBooleanStrict()
+  field('settingForm[customize:isEnabledTimeline]').trim().toBooleanStrict(),
+  field('settingForm[customize:isSavedStatesOfTabChanges]').trim().toBooleanStrict()
 );
 

+ 16 - 1
lib/models/config.js

@@ -21,7 +21,7 @@ module.exports = function(crowi) {
   });
 
   /**
-   * default values when crowi-plus installed
+   * default values when crowi-plus is cleanly installed
    */
   function getArrayForInstalling() {
     let config = getDefaultCrowiConfigs();
@@ -29,6 +29,7 @@ module.exports = function(crowi) {
     // overwrite
     config['customize:behavior'] = 'crowi-plus';
     config['customize:layout'] = 'crowi-plus';
+    config['customize:isSavedStatesOfTabChanges'] = false;
 
     return config;
   }
@@ -70,6 +71,7 @@ module.exports = function(crowi) {
       'customize:behavior' : 'crowi',
       'customize:layout' : 'crowi',
       'customize:isEnabledTimeline' : true,
+      'customize:isSavedStatesOfTabChanges' : true,
     };
   }
 
@@ -318,6 +320,18 @@ module.exports = function(crowi) {
     return config.crowi['customize:isEnabledTimeline'];
   };
 
+  configSchema.statics.isSavedStatesOfTabChanges = function(config)
+  {
+    const key = 'customize:isSavedStatesOfTabChanges';
+
+    // return the default value if undefined
+    if (undefined === config.crowi || undefined === config.crowi[key]) {
+      return getDefaultCrowiConfigs()[key];
+    }
+
+    return config.crowi[key];
+  };
+
   configSchema.statics.fileUploadEnabled = function(config)
   {
     const Config = this;
@@ -371,6 +385,7 @@ module.exports = function(crowi) {
       },
       behaviorType: Config.behaviorType(config),
       layoutType: Config.layoutType(config),
+      isSavedStatesOfTabChanges: Config.isSavedStatesOfTabChanges(config),
       env: {
         PLANTUML_URI: env.PLANTUML_URI || null,
         MATHJAX: env.MATHJAX || null,

+ 26 - 3
lib/views/admin/customize.html

@@ -150,7 +150,7 @@
         <p class="well">機能の有効/無効を選択できます。</p>
 
         <div class="form-group">
-          <label for="settingForm[customize:isEnabledTimeline]" class="col-xs-3 control-label">タイムライン表示機能</label>
+          <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 btn-default {% if settingForm['customize:isEnabledTimeline'] %}active{% endif %}" data-active-class="primary">
@@ -164,11 +164,34 @@
             </div>
 
             <p class="help-block">
-              無効化することで、リストページの表示を高速化できます。<br>
-              配下ページが多い場合に効果があります。
+              配下ページのタイムラインを表示できます。
+            </p>
+            <p class="help-block">
+              配下ページが多い場合はページロード時のパフォーマンスが落ちます。<br>
+              無効化することでリストページの表示を高速化できます。
             </p>
           </div>
+        </div>
 
+        <div class="form-group">
+          <label for="settingForm[customize:isSavedStatesOfTabChanges]" class="col-xs-3 control-label">タブ変更をブラウザ履歴に保存</label>
+          <div class="col-xs-9">
+            <div class="btn-group btn-toggle" data-toggle="buttons">
+              <label class="btn btn-default {% if settingForm['customize:isSavedStatesOfTabChanges'] %}active{% endif %}" data-active-class="primary">
+                <input name="settingForm[customize:isSavedStatesOfTabChanges]" value="true" type="radio"
+                    {% if true === settingForm['customize:isSavedStatesOfTabChanges'] %}checked{% endif %}> 有効
+              </label>
+              <label class="btn btn-default {% if !settingForm['customize:isSavedStatesOfTabChanges'] %}active{% endif %}" data-active-class="primary">
+                <input name="settingForm[customize:isSavedStatesOfTabChanges]" value="false" type="radio"
+                    {% if !settingForm['customize:isSavedStatesOfTabChanges'] %}checked{% endif %}> 無効
+              </label>
+            </div>
+
+            <p class="help-block">
+              編集タブやヒストリータブ等の切り替えをブラウザ履歴に保存し、ブラウザバック操作の対象にします。<br>
+              無効化することで、ページ遷移のみをブラウザバック操作の対象にすることができます。
+            </p>
+          </div>
         </div>
 
         <div class="form-group">

+ 14 - 9
resource/js/legacy/crowi.js

@@ -180,6 +180,8 @@ Crowi.modifyScrollTop = function() {
 
 
 $(function() {
+  var config = JSON.parse(document.getElementById('crowi-context-hydrate').textContent || '{}');
+
   var pageId = $('#content-main').data('page-id');
   var revisionId = $('#content-main').data('page-revision-id');
   var revisionCreatedAt = $('#content-main').data('page-revision-created');
@@ -187,6 +189,7 @@ $(function() {
   var isSeen = $('#content-main').data('page-is-seen');
   var pagePath= $('#content-main').data('path');
   var isEnabledLineBreaks = $('#content-main').data('linebreaks-enabled');
+  var isSavedStatesOfTabChanges = config['isSavedStatesOfTabChanges'];
 
   // generate options obj
   var rendererOptions = {
@@ -752,15 +755,17 @@ $(function() {
   } // end if pageId
 
   // hash handling
-  $('a[data-toggle="tab"][href="#revision-history"]').on('show.bs.tab', function() {
-    window.history.pushState('', 'History', '#revision-history');
-  });
-  $('a[data-toggle="tab"][href="#edit-form"]').on('show.bs.tab', function() {
-    window.history.pushState('', 'Edit', '#edit-form');
-  });
-  $('a[data-toggle="tab"][href="#revision-body"]').on('show.bs.tab', function() {
-    window.history.pushState('', '',  location.href.replace(location.hash, ''));
-  });
+  if (isSavedStatesOfTabChanges) {
+    $('a[data-toggle="tab"][href="#revision-history"]').on('show.bs.tab', function() {
+      window.history.pushState('', 'History', '#revision-history');
+    });
+    $('a[data-toggle="tab"][href="#edit-form"]').on('show.bs.tab', function() {
+      window.history.pushState('', 'Edit', '#edit-form');
+    });
+    $('a[data-toggle="tab"][href="#revision-body"]').on('show.bs.tab', function() {
+      window.history.pushState('', '',  location.href.replace(location.hash, ''));
+    });
+  }
 });
 
 Crowi.getRevisionBodyContent = function() {