OSDN Git Service

js: deprecate ns-util.js, use newslash-util.js
authorhylom <hylom@users.sourceforge.jp>
Wed, 15 May 2019 14:27:29 +0000 (23:27 +0900)
committerhylom <hylom@users.sourceforge.jp>
Wed, 15 May 2019 14:27:29 +0000 (23:27 +0900)
src/newslash_web/public/js/bundle-config.json
src/newslash_web/public/js/comment-tree.js
src/newslash_web/public/js/newslash-util.js [new file with mode: 0644]
src/newslash_web/public/js/newslash.js
src/newslash_web/public/js/ns-util.js
src/newslash_web/public/js/vote.js

index 1632d4a..e31f54a 100644 (file)
@@ -6,6 +6,7 @@
       "dom-util.js",
       "ui.js",
       "newslash.js",
+      "newslash-util.js",
       "escape-html.js",
       "base.js",
       "ns-util.js",
index 07b067e..0bb64ec 100644 (file)
@@ -123,8 +123,8 @@ commentTree.run = function (params) {
     computed: {
       commentLocalTime: function () {
         if (this.comment.create_time == "") return "";
-        var dt = nsUtil.decodeMySQLDateTime(this.comment.create_time);
-        return nsUtil.formatToLocalDateTime(dt);
+        var dt = newslash.util.decodeMySQLDateTime(this.comment.create_time);
+        return newslash.util.formatToLocalDateTime(dt);
       },
       isIpidVisible: function () { return user.is_admin; },
       isM2able: function () { return user.is_login; },
diff --git a/src/newslash_web/public/js/newslash-util.js b/src/newslash_web/public/js/newslash-util.js
new file mode 100644 (file)
index 0000000..055902d
--- /dev/null
@@ -0,0 +1,88 @@
+/* newslash-util.js */
+
+(function () {
+  var nsUtil = {};
+  Newslash.prototype.util = nsUtil;
+
+  nsUtil.formatToLocalISOString = function formatToLocalISOString(dt) {
+    function pad(number) {
+      return (number < 10) ? ('0' + number) : number;
+    }
+    return dt.getFullYear() +
+      '-' + pad(dt.getMonth() + 1) +
+      '-' + pad(dt.getDate()) +
+      'T' + pad(dt.getHours()) +
+      ':' + pad(dt.getMinutes()) +
+      ':' + pad(dt.getSeconds());
+  };
+  
+  nsUtil.formatToLocalDateTime = function formatToLocalDateTime(dt) {
+    function pad(number) {
+      return (number < 10) ? ('0' + number) : number;
+    }
+    return dt.getFullYear() +
+      '年' + (dt.getMonth() + 1) +
+      '月' + (dt.getDate()) +
+      '日' + (dt.getHours()) +
+      '時' + pad(dt.getMinutes()) +
+      '分';
+  };
+
+  nsUtil.decodeMySQLDateTime = function decodeMySQLDateTime(mysqlDateTime) {
+    var rex = /^(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2}:\d{2})$/;
+    var m = rex.exec(mysqlDateTime);
+    if (!m) return undefined;
+
+    var date = m[1];
+    var time = m[2];
+    
+    var utcString = date + "T" + time + "+00:00";
+    return new Date(utcString);
+  };
+
+  nsUtil.encodeMySQLDateTime = function encodeMySQLDateTime(dt) {
+    function pad(number) {
+      return (number < 10) ? ('0' + number) : number;
+    }
+    return dt.getUTCFullYear() +
+      '/' + pad(dt.getUTCMonth() + 1) +
+      '/' + pad(dt.getUTCDate()) +
+      ' ' + pad(dt.getUTCHours()) +
+      ':' + pad(dt.getUTCMinutes()) +
+      ':' + pad(dt.getUTCSecondes());
+  };
+
+  nsUtil.topicIconURL = function topicIconURL(keyword) {
+    var topics = siteConfig.topics;
+    if (keyword && topics[keyword] && topics[keyword].image) {
+      return siteConfig.siteInfo.topic_icon_base_url + "/" + topics[keyword].image;
+    }
+    return "";
+  };
+  
+  nsUtil.quoteHtml = function quoteHtml(html, allowedTags) {
+    var escaped = eh.escape(allowedTags, html);
+    var quoted = eh.blank_line_to_paragraph(escaped);
+    var parsed = $.parseHTML(quoted, null);
+    var result = [];
+    parsed.forEach((i) => {
+      i.normalize();
+      result.push(i.outerHTML);
+    });
+    return result.join('\n');
+  };
+
+  nsUtil.quoteTitle = function quoteTitle(html, allowedTags) {
+    var escaped = '<div>' + eh.escape(allowedTags, html) + '</div>';
+    var parsed = $.parseHTML(escaped, null);
+    var result = [];
+    parsed.forEach((i) => {
+      i.normalize();
+      var t = i.innerHTML || i.wholeText;
+      result.push(t);
+    });
+    return result.join('');
+  };
+
+}).apply();
+
index ec76931..0227af2 100644 (file)
@@ -41,6 +41,13 @@ function _initNewslash() {
     return path + "/";
   };
 
+  /* CSRF securiry token */
+  Newslash.getCsrfToken = function getCsrfToken(resourceID) {
+    if (!resourceID) { return this.fail(); }
+    var url = "/api/v1/token?rc=" + resourceID;
+    return this.get(url);
+  };
+
   /* base get.post API */
   Newslash.prototype.get = function (path) {
     var url = this.baseUrl + path;
index fcb2ed3..4a38602 100644 (file)
@@ -1,3 +1,5 @@
+/* ns-util.js - deprecated! use newslash.util. */
+
 var nsUtil = {
     getCsrfToken: function getCstfToken(resourceID, callback) {
     if (callback && typeof(callback) != "function") {
index c98e9bb..ad70307 100644 (file)
@@ -16,24 +16,25 @@ $(".vote-body input.vote-btn").on('click', function(ev) {
   if (value.length == 0) {
     return false;
   }
-  nsUtil.getCsrfToken("vote", function (result) {
-    if (!result || result.error) {
-      if(statusBar) {
-        statusBar.error(result.message);
+  newslash.getCsrfToken("vote").then(
+    resp => {
+      var csrfToken = resp.token;
+      if(!csrfToken) {
+        if(statusBar) {
+          statusBar.error("invalid token");
+        }
+        return;
       }
+      $("#vote_token_" + qid).val(csrfToken);
+      formElement.submit();
       return;
-    }
-    var csrfToken = result.token;
-    if(!csrfToken) {
+    },
+    fail => {
       if(statusBar) {
-        statusBar.error("invalid token");
+        statusBar.error("failed");
       }
-      return;
     }
-    $("#vote_token_" + qid).val(csrfToken);
-    formElement.submit();
-    return;
-  });
+  );
   return false;
 });