Sotaro KARASAWA 9 лет назад
Родитель
Сommit
3e98ac7157

+ 10 - 0
resource/css/_wiki.scss

@@ -140,6 +140,16 @@ div.body {
     }
   }
 
+  .page-template-builder {
+    position: relative;
+
+    .template-create-button {
+      position: absolute;
+      top: 8px;
+      right: 8px;
+    }
+  }
+
   .highlighted {
     &em {
       padding: 2px;

+ 10 - 6
resource/js/crowi-form.js

@@ -16,12 +16,6 @@ $(function() {
     });
   }
 
-  // restore draft
-  var draft = crowi.findDraft(pagePath);
-  if (draft) {
-    // TODO
-  }
-
   var slackConfigured = $('#page-form-setting').data('slack-configured');
 
   // for new page
@@ -55,6 +49,16 @@ $(function() {
 
   // preview watch
   var originalContent = $('#form-body').val();
+
+  // restore draft
+  // とりあえず、originalContent がない場合のみ復元する。(それ以外の場合は後で考える)
+  var draft = crowi.findDraft(pagePath);
+  var originalRevision = $('#page-form [name="pageForm[currentRevision]"]').val();
+  if (!originalRevision && draft) {
+    // TODO
+    $('#form-body').val(draft)
+  }
+
   var prevContent = originalContent;
 
   function renderPreview() {

+ 3 - 0
resource/js/util/Crowi.js

@@ -17,6 +17,9 @@ export default class Crowi {
     this.apiPost = this.apiPost.bind(this);
     this.apiRequest = this.apiRequest.bind(this);
 
+    // FIXME
+    this.me = context.me;
+
     this.users = [];
     this.userByName = {};
     this.draft = {};

+ 21 - 10
resource/js/util/LangProcessor/Template.js

@@ -24,30 +24,41 @@ export default class Template {
   }
 
   getUser() {
-    return '/user/sotarok';
+    // FIXME
+    const username = window.crowi.me || null;
+
+    if (!username) {
+      return '';
+    }
+
+    return `/user/${username}`;
   }
 
-  getPageName(pageNameTemplate) {
-    let pageName = pageNameTemplate;
+  parseTemplateString(templateString) {
+    let parsed = templateString;
 
     Object.keys(this.templatePattern).forEach(key => {
-      const matcher = new RegExp(`{${key}}`, 'g');
-      if (pageName.match(matcher)) {
+      const k = key .replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+      const matcher = new RegExp(`{${k}}`, 'g');
+      if (parsed.match(matcher)) {
         const replacer = this.templatePattern[key]();
-        pageName = pageName.replace(matcher, replacer);
+        parsed = parsed.replace(matcher, replacer);
       }
     });
 
-    return pageName;
+    return parsed;
   }
 
   process(code, lang) {
     const templateId = new Date().getTime().toString(16) + Math.floor(1000 * Math.random()).toString(16);
     let pageName = lang;
     if (lang.match(':')) {
-      pageName = this.getPageName(lang.split(':')[1]);
+      pageName = this.parseTemplateString(lang.split(':')[1]);
     }
-    return `<button class="template-create-button btn btn-primary" data-template="${templateId}" data-path="${pageName}">${pageName} のページを作成する</button>
-      <pre><code id="${templateId}" class="lang-${lang}">${code}\n</code></pre>\n`;
+    //code = this.parseTemplateString(code);
+    return `
+    <div class="page-template-builder">
+    <button class="template-create-button btn btn-default" data-template="${templateId}" data-path="${pageName}"><i class="fa fa-pencil"></i> ${pageName}</button>
+      <pre><code id="${templateId}" class="lang-${lang}">${code}\n</code></pre></div>\n`;
   }
 }

+ 1 - 1
resource/js/util/PreProcessor/MarkdownFixer.js

@@ -2,7 +2,7 @@
 export default class MarkdownFixer {
   process(markdown) {
     var x = markdown
-      .replace(/^(#{1,})([^\s]+)?(.*)$/gm, '$1 $2$3') // spacer for section
+      .replace(/^(#{1,})((?![\s\#]+).+)$/gm, '$1 $2') // spacer for section
       .replace(/>[\s]*\n>[\s]*\n/g, '> <br>\n> \n');
 
     return x;