Răsfoiți Sursa

add new_page template for crowi-plus layout

Yuki Takei 8 ani în urmă
părinte
comite
2ff3d781f7

+ 10 - 2
lib/routes/index.js

@@ -15,6 +15,8 @@ module.exports = function(crowi, app) {
     , bookmark  = require('./bookmark')(crowi, app)
     , bookmark  = require('./bookmark')(crowi, app)
     , revision  = require('./revision')(crowi, app)
     , revision  = require('./revision')(crowi, app)
     , search    = require('./search')(crowi, app)
     , search    = require('./search')(crowi, app)
+    , Config    = crowi.model('Config')
+    , config    = crowi.getConfig()
     , loginRequired = middleware.loginRequired
     , loginRequired = middleware.loginRequired
     , accessTokenParser = middleware.accessTokenParser(crowi, app)
     , accessTokenParser = middleware.accessTokenParser(crowi, app)
     , csrf      = middleware.csrfVerify(crowi, app)
     , csrf      = middleware.csrfVerify(crowi, app)
@@ -139,7 +141,13 @@ module.exports = function(crowi, app) {
   app.post('/_/edit'                 , form.revision             , loginRequired(crowi, app) , csrf, page.pageEdit);
   app.post('/_/edit'                 , form.revision             , loginRequired(crowi, app) , csrf, page.pageEdit);
   app.get('/trash/$'                 , loginRequired(crowi, app, false) , page.deletedPageListShow);
   app.get('/trash/$'                 , loginRequired(crowi, app, false) , page.deletedPageListShow);
   app.get('/trash/*/$'               , loginRequired(crowi, app, false) , page.deletedPageListShow);
   app.get('/trash/*/$'               , loginRequired(crowi, app, false) , page.deletedPageListShow);
-  app.get('/*/$'                     , loginRequired(crowi, app, false) , page.pageListShow);
-  app.get('/*'                       , loginRequired(crowi, app, false) , page.pageShow);
 
 
+  // route for pages
+  if ('crowi-plus' === Config.layoutType(config)) {
+    app.get('/*'                     , loginRequired(crowi, app, false) , page.pageShowForCrowiPlus);
+  }
+  else {
+    app.get('/*/$'                   , loginRequired(crowi, app, false) , page.pageListShow);
+    app.get('/*'                     , loginRequired(crowi, app, false) , page.pageShow);
+  }
 };
 };

+ 111 - 0
lib/routes/page.js

@@ -119,6 +119,117 @@ module.exports = function(crowi, app) {
     });
     });
   };
   };
 
 
+  actions.pageShowForCrowiPlus = function(req, res) {
+    var path = getPathFromRequest(req);
+    // omit the slash of the last
+    path = path.replace((/\/$/), '');
+
+    var limit = 50;
+    var offset = parseInt(req.query.offset)  || 0;
+    var SEENER_THRESHOLD = 10;
+
+    // index page
+    var pagerOptions = {
+      offset: offset,
+      limit : limit
+    };
+    var queryOptions = {
+      offset: offset,
+      limit : limit + 1
+    };
+
+    var renderVars = {
+      path: path,
+      page: null,
+      revision: {},
+      author: false,
+      pages: [],
+      tree: [],
+    };
+
+    var pageTeamplate = 'customlayout-selector/page';
+
+    Page.findPage(path, req.user, req.query.revision)
+    .then(function(page) {
+      renderVars.page = page;
+
+      if (page) {
+        renderVars.path = page.path;
+        renderVars.revision = page.revision;
+        renderVars.author = page.revision.author;
+
+        return Revision.findRevisionList(page.path, {})
+        .then(function(tree) {
+          renderVars.tree = tree;
+          return Promise.resolve();
+        }).then(function() {
+          var userPage = isUserPage(page.path);
+          var userData = null;
+
+          if (userPage) {
+            // change template
+            pageTeamplate = 'user_page';
+
+            return User.findUserByUsername(User.getUsernameByPath(page.path))
+            .then(function(data) {
+              if (data === null) {
+                throw new Error('The user not found.');
+              }
+              userData = data;
+              renderVars.pageUser = userData;
+
+              return Bookmark.findByUser(userData, {limit: 10, populatePage: true, requestUser: req.user});
+            }).then(function(bookmarkList) {
+              renderVars.bookmarkList = bookmarkList;
+
+              return Page.findListByCreator(userData, {limit: 10}, req.user);
+            }).then(function(createdList) {
+              renderVars.createdList = createdList;
+              return Promise.resolve();
+            }).catch(function(err) {
+              debug('Error on finding user related entities', err);
+              // pass
+            });
+          }
+          else {
+            return Promise.resolve();
+          }
+        });
+      } else {
+        return Promise.resolve();
+      }
+    }).catch(function(err) {
+      // page not exists
+
+      renderVars.page = {};
+      pageTeamplate = 'crowi-plus/new_page';
+    }).then(function() {
+      return Page.findListByStartWith(path, req.user, queryOptions)
+        .then(function(pageList) {
+          if (pageList.length > limit) {
+            pageList.pop();
+          }
+
+          pagerOptions.length = pageList.length;
+
+          renderVars.viewConfig = {
+            seener_threshold: SEENER_THRESHOLD,
+          };
+          renderVars.pager = generatePager(pagerOptions);
+          renderVars.pages = pageList;
+
+          return Promise.resolve();
+        });
+    }).then(function() {
+      return interceptorManager.process('beforeRenderPage', req, res, renderVars);
+    }).then(function() {
+      res.render(req.query.presentation ? 'page_presentation' : pageTeamplate, renderVars);
+    }).catch(function(err) {
+      console.log(err);
+      debug('Error on rendering pageListShowForCrowiPlus', err);
+    });
+  }
+
   actions.deletedPageListShow = function(req, res) {
   actions.deletedPageListShow = function(req, res) {
     var path = '/trash' + getPathFromRequest(req);
     var path = '/trash' + getPathFromRequest(req);
     var limit = 50;
     var limit = 50;

+ 115 - 0
lib/views/crowi-plus/new_page.html

@@ -0,0 +1,115 @@
+{% extends 'base/page_nosidebar.html' %}
+
+{% block main_css_class %}
+  main-crowi-plus-customized
+  {% parent %}
+{% endblock %}
+
+{% block content_head %}
+
+  {% block content_head_before %}
+  {% endblock %}
+
+  <div class="header-wrap">
+    <header id="page-header">
+      <p class="stopper"><a href="#" data-affix-disable="#page-header"><i class="fa fa-chevron-up"></i></a></p>
+
+      <div class="flex-title-line">
+        <div>
+          <h1 class="title flex-item-title" id="revision-path"></h1>
+          <div id="revision-url" class="url-line"></div>
+        </div>
+      </div>
+
+    </header>
+  </div>
+
+  {% block content_head_after %}
+  {% endblock %}
+
+{% endblock %} {# /content_head #}
+
+{% block content_main %}
+  <div class="container-fluid">
+    <div class="row">
+
+      <div class="col-lg-10 col-md-9">
+
+        {% block content_main_before %}
+        {% endblock %}
+
+
+
+        <div id="content-main" class="content-main"
+          data-path="{{ path }}"
+          data-path-shortname="{{ path|path2name }}"
+          data-page-id="{% if page %}{{ page._id.toString() }}{% endif %}"
+          data-current-user="{% if user %}{{ user._id.toString() }}{% endif %}"
+          data-current-username="{% if user %}{{ user.username }}{% endif %}"
+          data-page-revision-id="{% if revision %}{{ revision._id.toString() }}{% endif %}"
+          data-page-revision-created="{% if revision %}{{ revision.createdAt|datetz('U') }}{% endif %}"
+          data-page-is-seen="{% if page and page.isSeenUser(user) %}1{% else %}0{% endif %}"
+          data-linebreaks-enabled="{{ isEnabledLinebreaks() }}"
+          data-csrftoken="{{ csrf() }}"
+          >
+
+          <h2 class="text-muted">Page is not exists</h2>
+
+          <ul class="nav nav-tabs hidden-print">
+            <li class="active"><a href="#revision-body" data-toggle="tab">{{ t('List View') }}</a></li>
+
+            <li>
+              <a {% if user %}href="#edit-form" data-toggle="tab"{% endif %} class="edit-button {% if not user %}edit-button-disabled{% endif %}">
+                <i class="fa fa-pencil-square-o"></i> {{ t('Edit') }}
+              </a>
+            </li>
+          </ul>
+
+          <div class="tab-content wiki-content">
+            {% if req.query.renamed %}
+            <div class="alert alert-info alert-moved">
+              <span>
+                <strong>{{ t('Moved') }}: </strong> {{ t('page_page.notice.moved', req.query.renamed) }}
+              </span>
+            </div>
+            {% endif %}
+            {% if req.query.unlinked %}
+            <div class="alert alert-info">
+              <strong>{{ t('Unlinked') }}: </strong> {{ t('page_page.notice.unlinked') }}
+            </div>
+            {% endif %}
+
+            {# list view #}
+            <div class="active tab-pane page-list-container" id="revision-body">
+              {% if pages.length == 0 %}
+                There are no pages under <strong>{{ path }}</strong>.
+              {% endif  %}
+
+              {% include '../widget/page_list.html' with { pages: pages, pager: pager, viewConfig: viewConfig } %}
+            </div>
+
+            {# edit view #}
+            <div class="edit-form tab-pane {% if req.body.pageForm %}active{% endif %}" id="edit-form">
+              {% include '../_form.html' %}
+            </div>
+
+          </div>
+        </div>
+
+        {% block content_main_after %}
+        {% endblock %}
+
+
+
+      </div> {# /.col- #}
+
+    </div>
+  </div>
+
+{% endblock %}
+
+{% block content_main_after %}
+{% endblock %}
+
+{% block content_footer %}
+{% endblock %}

+ 7 - 1
lib/views/crowi-plus/page.html

@@ -17,7 +17,6 @@
 
 
 {% endblock %} {# /content_head #}
 {% endblock %} {# /content_head #}
 
 
-
 {% block content_main %}
 {% block content_main %}
   <div class="container-fluid">
   <div class="container-fluid">
     <div class="row">
     <div class="row">
@@ -39,6 +38,13 @@
       </div> {# /.col- #}
       </div> {# /.col- #}
 
 
     </div>
     </div>
+
+    <div class="row">
+      <div class="col-md-12">
+        {% include './widget/page_list_container.html' %}
+      </div>
+    </div>
+
   </div>
   </div>
 {% endblock %}
 {% endblock %}
 
 

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

@@ -0,0 +1,34 @@
+<div class="page-list-container">
+  <ul class="nav nav-tabs">
+      <li class="active"><a href="#view-list" data-toggle="tab">{{ t('List View') }}</a></li>
+      <li><a href="#view-timeline" data-toggle="tab">{{ t('Timeline View') }}</a></li>
+  </ul>
+
+  <div class="tab-content">
+    {% if pages.length == 0 %}
+
+      {% if isTrashPage() %}
+      No deleted pages.
+      {% else %}
+      There are no pages under <strong>{{ path }}</strong>.
+      {% endif %}
+    {% endif  %}
+
+    {# list view #}
+    <div class="active tab-pane fade page-list-container in" id="view-list">
+      {% include '../../widget/page_list.html' with { pages: pages, pager: pager, viewConfig: viewConfig } %}
+    </div>
+
+    {# timeline view #}
+    <div class="tab-pane" id="view-timeline" data-shown=0>
+      {% for page in pages %}
+      <div class="timeline-body" id="id-{{ page.id }}">
+        <h3 class="revision-path"><a href="{{ page.path }}">{{ page.path }}</a></h3>
+        <div class="revision-body wiki"></div>
+        <script type="text/template">{{ page.revision.body }}</script>
+      </div>
+      <hr>
+      {% endfor %}
+    </div>
+  </div>
+</div>