{"version":3,"sources":["jsdelivr-header.js","/npm/nodebb-plugin-blog-comments2@0.9.8/library.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCNC,SAAS,GACT,aAEA,IAAI,EAAW,CAAC,EAEZ,EAAK,EAAO,OAAO,QAAQ,sBAC9B,EAAO,EAAO,OAAO,QAAQ,kBAC7B,EAAQ,EAAO,OAAO,QAAQ,mBAC9B,EAAS,EAAO,OAAO,QAAQ,oBAC/B,EAAO,EAAO,OAAO,QAAQ,kBAC7B,EAAS,EAAO,OAAO,QAAQ,oBAC/B,EAAK,EAAO,OAAO,QAAQ,MAC3B,EAAO,EAAO,OAAO,QAAQ,QAC7B,EAAQ,EAAO,OAAO,QAAQ,SAC9B,EAAU,EAAO,OAAO,QAAQ,WAIjC,SAAS,EAAa,GACrB,IACC,EADG,GAAY,EAAK,OAAO,sBAAwB,IAAI,MAAM,KAiB9D,OAdA,EAAS,SAAQ,SAAS,GAEW,OADpC,EAAU,EAAQ,QACN,EAAQ,OAAS,KAC5B,EAAU,EAAQ,UAAU,EAAG,EAAQ,OAAS,IAG7C,IAAY,EAAI,IAAI,YACvB,EAAM,EAAI,IAAI,UAEhB,IAEK,GACJ,EAAQ,KAAK,0CAA4C,EAAI,IAAI,UAAY,8BAAgC,EAAS,KAAK,OAErH,CACR,CAEA,SAAS,EAAY,EAAK,GACzB,IAAI,EAAM,EAAY,GAEtB,GAAK,EAOL,OAHA,EAAI,OAAO,8BAA+B,GAC1C,EAAI,OAAO,+BAAgC,kEAC3C,EAAI,OAAO,mCAAoC,QACxC,CACR,CA4PA,SAAS,EAAY,EAAK,EAAK,GAC9B,EAAI,OAAO,iBAAkB,CAAC,EAC/B,CAhSA,EAAO,QAAU,EAoCjB,EAAS,sBAAwB,SAAS,EAAW,EAAS,GAC7D,EAAG,eAAe,iBAAiB,EAAS,GAAW,SAAS,EAAK,GACpE,EAAS,EAAK,EACf,GACD,EAEA,EAAS,eAAiB,SAAS,EAAK,GACvC,IAAI,EAAY,EAAI,OAAO,GAC1B,EAAU,EAAI,OAAO,SAAW,UAChC,EAAM,EAAI,KAAO,EAAI,KAAK,IAAM,EAEjC,EAAS,sBAAsB,EAAW,GAAS,SAAS,EAAK,GAGhE,EAAM,SAAS,CACd,MAAO,SAAS,GAId,EAAO,cAAc,EAAK,OAAS,EAAM,SAAU,EAA4B,GAAxB,EAAI,OAAO,WAAiB,EAA4B,EAAxB,EAAI,OAAO,WAAgB,GAAK,EAAM,EAE/H,EACA,UAAW,SAAS,GACnB,EAAO,cAAc,EAAK,YAAa,EACxC,EACA,KAAM,SAAS,GACd,EAAK,YAAY,EAAK,EACvB,EACA,gBAAiB,SAAS,GACzB,EAAK,gBAAgB,EAAK,EAC3B,EACA,YAAa,SAAS,GACrB,EAAO,SAAS,EAAK,aAAc,EACpC,EACA,SAAU,SAAS,GAClB,EAAO,gBAAgB,EAAK,EAC7B,EACA,SAAU,SAAS,GAClB,EAAO,YAAY,EAAK,EAAK,EAC9B,IACE,SAAS,EAAK,GAChB,EAAW,EAAK,GAEhB,IAAI,EAAQ,EAAK,MAAM,QAAO,SAAS,GACtC,OAAwB,IAAjB,EAAK,OACb,IACA,EAAM,SAAQ,SAAS,GACtB,EAAK,QAAU,EAAK,eAAe,UAAY,SAAS,EAAK,SAAW,SAAS,EAAK,KAAO,EAC7F,EAAK,eAAiB,EAAK,QAAS,EAAK,OAAO,UAAiB,GACjE,EAAK,gBAAgB,EAAK,QAAW,EAAK,OAAO,SAClD,IAEA,IAAI,GAAM,EACN,GAAS,EAEW,UADD,EAAK,OAAO,oCACA,GAAS,EAAM,GAAM,GAExD,EAAI,KAAK,CACR,MAAO,EACP,UAAW,EAAK,UAChB,KAAM,EAAK,KACX,SAAU,EAAS,SACnB,MAAO,EAAI,YACX,QAAU,EAAK,gBAAqC,EAAK,gBAAxB,EAAK,YACtC,aAAc,EACd,IAAK,EACL,SAAU,EAAK,SACf,SAAU,EAAK,SACf,UAAW,EAAK,YAAc,EAC9B,SAAU,EACV,MAAO,EACP,UAAW,EAAK,OAAO,OAEzB,GACD,GACD,EAkBA,EAAS,SAAW,SAAU,EAAK,EAAK,GACvC,GAAK,EAAY,GAAjB,CAGA,IAAI,EAAQ,EAAI,KAAK,MACjB,EAAW,KAAK,MAAM,EAAI,KAAK,UAClC,EAAM,EAAI,KAAO,EAAI,KAAK,IAAM,EAIjC,EAFW,EAAW,SAAW,UAErB,EAAO,GAAK,SAAU,EAAK,GACtC,EAAW,EAAK,GAChB,EAAI,KAAK,CAAC,MAAO,GAAO,EAAI,QAAS,OAAQ,GAC9C,GAVA,CAWD,EAEA,EAAS,aAAe,SAAU,EAAK,EAAK,GAC3C,GAAK,EAAY,GAAjB,CAGA,IAAI,EAAQ,EAAI,KAAK,MACpB,EAAa,KAAK,MAAM,EAAI,KAAK,YACjC,EAAM,EAAI,KAAO,EAAI,KAAK,IAAM,EAIjC,EAFW,EAAa,WAAa,cAEzB,EAAO,GAAK,SAAU,EAAK,GACtC,EAAW,EAAK,GAChB,EAAI,KAAK,CAAC,MAAO,GAAO,EAAI,QAAS,OAAQ,GAC9C,GAVA,CAWD,EAEA,EAAS,eAAiB,SAAS,EAAK,EAAK,GAC5C,IAAI,EAAU,EAAI,KAAK,QACtB,EAAM,EAAI,KAAK,IACf,EAAM,EAAI,KAAK,IACf,EAAQ,EAAI,KAAK,MACjB,EAAM,EAAI,KAAO,EAAI,KAAK,IAAM,EAEjC,EAAO,MAAM,CACZ,IAAK,EACL,IAAK,EACL,MAAO,EACP,QAAS,IACP,SAAS,EAAK,GAChB,EAAI,SA7DN,SAA0B,EAAK,GAC9B,IAAI,EAAO,EAAM,mBAYjB,OAX0B,IAAtB,EAAI,QAAQ,OAEf,EAAO,GAGL,IACF,EAAO,EAAM,UAAY,EAAI,QAAU,oBACb,IAAtB,EAAI,QAAQ,OACf,EAAO,EAAI,MAAM,KAAK,GAAK,UAAY,EAAI,QAAU,IAAM,EAAI,MAAM,KAAK,KAGrE,CACR,CA+Ce,CAAiB,EAAK,GACpC,GACD,EAEA,EAAS,eAAiB,SAAS,EAAK,EAAK,GAC5C,IAAI,EAAW,EAAI,KAAK,SACvB,EAAQ,EAAI,KAAK,MACjB,EAAM,EAAI,KAAK,IACf,EAAY,EAAI,KAAK,GACrB,EAAO,EAAI,KAAK,KAChB,EAAU,EAAI,KAAK,SAAW,UAC9B,EAAM,EAAI,KAAO,EAAI,KAAK,IAAM,EAChC,EAAM,KAAK,MAAM,EAAI,KAAK,KAE3B,IAAa,IAAT,EAAY,CACf,IAAI,GAAY,EAAK,OAAO,sBAAwB,IAAI,MAAM,KAC7D,EAAW,EAEZ,EAAS,SAAQ,SAAS,EAAS,GAEE,OADpC,EAAU,EAAQ,QACN,EAAQ,OAAS,KAC5B,EAAU,EAAQ,UAAU,EAAG,EAAQ,OAAS,IAG7C,IAAY,EAAI,IAAI,YACvB,EAAW,EAEb,IAEA,EAAM,EAAK,OAAO,qBAAqB,YAAc,GACrD,EAAM,SAAS,EAAI,MAAM,KAAK,GAAW,KAAO,SAAS,EAAI,MAAM,KAAK,GAAI,KAAO,CACpF,CAEA,EAAM,SAAS,CACd,gBAAiB,SAAS,GACzB,EAAK,gBAAgB,EAAK,EAC3B,EACA,YAAa,SAAS,GACrB,EAAO,SAAS,EAAK,aAAc,EACpC,IACE,SAAS,EAAK,GAChB,IAAK,EAAW,kBAAoB,EAAW,YAC9C,OAAO,EAAI,KAAK,CAAC,MAAO,gFAGzB,EAAO,KAAK,CACX,IAAK,EACL,MAAO,EACP,QAAS,EACT,KAAM,EAAO,KAAK,MAAM,GAAQ,GAChC,IAAK,EACL,aAAc,EACd,gBAAiB,EACjB,IAAK,IACH,SAAS,EAAK,IACX,GAAO,GAAU,EAAO,UAAY,EAAO,SAAS,IACxD,EAAM,aAAa,EAAO,SAAS,IAAK,oBAAqB,GAAK,SAAS,GAC1E,GAAI,EACH,OAAO,EAAI,KAAK,CAAC,MAAO,uBAAwB,OAAQ,IAGzD,EAAG,eAAe,iBAAiB,EAAS,EAAW,EAAO,SAAS,KACvE,IAAI,GAAQ,EAAI,OAAO,YAAc,KAAO,oBAClB,IAAtB,EAAI,QAAQ,OAEf,EAAO,GAGR,EAAI,SAAS,EACd,IAEA,EAAI,KAAK,CAAC,MAAO,uBAAwB,OAAQ,GAEnD,GACD,GAED,EAEA,EAAS,qBAAuB,SAAS,EAAM,GAC9C,IACC,EADG,GAAY,EAAK,OAAO,sBAAwB,IAAI,MAAM,KAG9D,EAAM,aAAa,EAAK,IAAK,qBAAqB,SAAS,EAAK,GAC/D,GAAI,EAAK,CACR,EAAS,SAAQ,SAAS,EAAS,IAC+B,IAA7D,EAAI,QAAQ,EAAQ,OAAO,QAAQ,eAAgB,OACtD,EAAW,EAEb,IAEA,IAAI,EAAY,EAAK,OAAO,uBAAyB,GACrD,EAAW,SAAS,EAAS,MAAM,KAAK,GAAW,KAAO,SAAS,EAAS,MAAM,KAAK,GAAI,KAAO,EAElG,EAAK,QAAQ,KAAK,CACjB,QAAS,+BAAgC,EAAK,mBAAqB,EAAW,iBAEhF,CAEA,EAAS,EAAK,EACf,GACD,EAEA,EAAS,aAAe,SAAS,EAAe,GAC/C,EAAc,QAAQ,KAAK,CAC1B,MAAS,iBACT,KAAQ,UACR,KAAQ,kBAGT,EAAS,KAAM,EAChB,EAMA,EAAS,KAAO,SAAS,EAAQ,GAChC,IAAI,EAAM,EAAO,OAChB,EAAa,EAAO,WACN,EAAO,YAEtB,EAAG,SAAS,EAAK,QAAQ,UAAW,6CAA6C,SAAU,EAAK,GAC/F,EAAS,SAAW,EAAK,UAC1B,IAEA,EAAI,IAAI,0CAA2C,EAAW,UAAW,EAAS,gBAClF,EAAI,KAAK,kBAAmB,EAAS,gBACrC,EAAI,KAAK,oBAAqB,EAAS,gBACvC,EAAI,KAAK,iBAAkB,EAAS,UACpC,EAAI,KAAK,qBAAsB,EAAS,cAExC,EAAI,IAAI,uBAAwB,EAAW,MAAM,YAAa,GAC9D,EAAI,IAAI,2BAA4B,GAEpC,GACD,CAED,CAvUA,CAuUE","file":"/npm/nodebb-plugin-blog-comments2@0.9.8/library.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/nodebb-plugin-blog-comments2@0.9.8/library.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function(module) {\n\t\"use strict\";\n\n\tvar Comments = {};\n\n\tvar db = module.parent.require('../src/database.js'),\n\t\tmeta = module.parent.require('../src/meta.js'),\n\t\tposts = module.parent.require('../src/posts.js'),\n\t\ttopics = module.parent.require('../src/topics.js'),\n\t\tuser = module.parent.require('../src/user.js'),\n\t\tgroups = module.parent.require('../src/groups.js'),\n\t\tfs = module.parent.require('fs'),\n\t\tpath = module.parent.require('path'),\n\t\tasync = module.parent.require('async'),\n\t\twinston = module.parent.require('winston');\n\n\tmodule.exports = Comments;\n\n\tfunction CORSSafeReq (req) {\n\t\tvar hostUrls = (meta.config['blog-comments:url'] || '').split(','),\n\t\t\turl;\n\n\t\thostUrls.forEach(function(hostUrl) {\n\t\t\thostUrl = hostUrl.trim();\n\t\t\tif (hostUrl[hostUrl.length - 1] === '/') {\n\t\t\t\thostUrl = hostUrl.substring(0, hostUrl.length - 1);\n\t\t\t}\n\n\t\t\tif (hostUrl === req.get('origin')) {\n\t\t\t\turl = req.get('origin');\n\t\t\t}\n\t\t});\n\n\t\tif (!url) {\n\t\t\twinston.warn('[nodebb-plugin-blog-comments2] Origin (' + req.get('origin') + ') does not match hostUrls: ' + hostUrls.join(', '));\n\t\t}\n\t\treturn url;\n\t}\n\n\tfunction CORSFilter (req, res) {\n\t\tvar url = CORSSafeReq(req);\n\n\t\tif (!url) {\n\t\t\treturn;\n\t\t}\n\n\t\tres.header(\"Access-Control-Allow-Origin\", url);\n\t\tres.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');\n\t\tres.header(\"Access-Control-Allow-Credentials\", \"true\");\n\t\treturn res;\n\t}\n\n\tComments.getTopicIDByCommentID = function(commentID, blogger, callback) {\n\t\tdb.getObjectField('blog-comments:'+blogger, commentID, function(err, tid) {\n\t\t\tcallback(err, tid);\n\t\t});\n\t};\n\n\tComments.getCommentData = function(req, res) {\n\t\tvar commentID = req.params.id,\n\t\t\tblogger = req.params.blogger || 'default',\n\t\t\tuid = req.user ? req.user.uid : 0;\n\n\t\tComments.getTopicIDByCommentID(commentID, blogger, function(err, tid) {\n\t\t\tvar disabled = false;\n\n\t\t\tasync.parallel({\n\t\t\t\tposts: function(next) {\n\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\tnext(err, []);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttopics.getTopicPosts(tid, 'tid:' + tid + ':posts', 0 + req.params.pagination * 10, 9 + req.params.pagination * 9, uid, true, next);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostCount: function(next) {\n\t\t\t\t\ttopics.getTopicField(tid, 'postcount', next);\n\t\t\t\t},\n\t\t\t\tuser: function(next) {\n\t\t\t\t\tuser.getUserData(uid, next);\n\t\t\t\t},\n\t\t\t\tisAdministrator: function(next) {\n\t\t\t\t\tuser.isAdministrator(uid, next);\n\t\t\t\t},\n\t\t\t\tisPublisher: function(next) {\n\t\t\t\t\tgroups.isMember(uid, 'publishers', next);\n\t\t\t\t},\n\t\t\t\tcategory: function(next) {\n\t\t\t\t\ttopics.getCategoryData(tid, next);\n\t\t\t\t},\n\t\t\t\tmainPost: function(next) {\n\t\t\t\t\ttopics.getMainPost(tid, uid, next);\n\t\t\t\t}\n\t\t\t}, function(err, data) {\n\t\t\t\tCORSFilter(req, res);\n\n\t\t\t\tvar posts = data.posts.filter(function(post) {\n\t\t\t\t\treturn post.deleted === false;\n\t\t\t\t});\n\t\t\t\tposts.forEach(function(post){\n\t\t\t\t\tpost.isReply = post.hasOwnProperty('toPid') && parseInt(post.toPid) !== parseInt(data.tid) - 1;\n\t\t\t\t\tpost.parentUsername = post.parent ? post.parent.username || '' : '';\n\t\t\t\t\tpost.deletedReply = (post.parent && !post.parent.username) ? true : false;\n\t\t\t\t});\n\n\t\t\t\tvar top = true;\n\t\t\t\tvar bottom = false;\n\t\t\t\tvar compose_location = meta.config['blog-comments:compose-location'];\n\t\t\t\tif (compose_location == \"bottom\"){ bottom = true; top = false;}\n\n\t\t\t\tres.json({\n\t\t\t\t\tposts: posts,\n\t\t\t\t\tpostCount: data.postCount,\n\t\t\t\t\tuser: data.user,\n\t\t\t\t\ttemplate: Comments.template,\n\t\t\t\t\ttoken: req.csrfToken(),\n\t\t\t\t\tisAdmin: !data.isAdministrator ? data.isPublisher : data.isAdministrator,\n\t\t\t\t\tisLoggedIn: !!uid,\n\t\t\t\t\ttid: tid,\n\t\t\t\t\tcategory: data.category,\n\t\t\t\t\tmainPost: data.mainPost,\n\t\t\t\t\tisValid: !!data.mainPost && !!tid,\n\t\t\t\t\tatBottom: bottom,\n\t\t\t\t\tatTop: top,\n\t\t\t\t\tsiteTitle: meta.config.title\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t};\n\n\tfunction get_redirect_url(url, err) {\n\t\tvar rurl = url + '#nodebb-comments';\n\t\tif (url.indexOf('#') !== -1) {\n\t\t\t// compatible for mmmw's blog, he uses hash in url;\n\t\t\trurl = url;\n\t\t}\n\n\t\tif(err) {\n\t\t\trurl = url + '?error=' + err.message + '#nodebb-comments';\n\t\t\tif (url.indexOf('#') !== -1) {\n\t\t\t\trurl = url.split('#')[0] + '?error=' + err.message + '#' + url.split('#')[1];\n\t\t\t}\n\t\t}\n\t\treturn rurl;\n\t}\n\n\tComments.votePost = function (req, res, callback) {\n\t\tif (!CORSSafeReq(req)) {\n\t\t\treturn;\n\t\t}\n\t\tvar toPid = req.body.toPid,\n\t\t    isUpvote = JSON.parse(req.body.isUpvote),\n\t\t\tuid = req.user ? req.user.uid : 0;\n\n\t\tvar func = isUpvote ? 'upvote' : 'unvote';\n\n\t\tposts[func](toPid, uid, function (err, result) {\n\t\t\tCORSFilter(req, res);\n\t\t\tres.json({error: err && err.message, result: result});\n\t\t});\n\t};\n\n\tComments.bookmarkPost = function (req, res, callback) {\n\t\tif (!CORSSafeReq(req)) {\n\t\t\treturn;\n\t\t}\n\t\tvar toPid = req.body.toPid,\n\t\t\tisBookmark = JSON.parse(req.body.isBookmark),\n\t\t\tuid = req.user ? req.user.uid : 0;\n\n\t\tvar func = isBookmark ? 'bookmark' : 'unbookmark';\n\n\t\tposts[func](toPid, uid, function (err, result) {\n\t\t\tCORSFilter(req, res);\n\t\t\tres.json({error: err && err.message, result: result});\n\t\t});\n\t};\n\n\tComments.replyToComment = function(req, res, callback) {\n\t\tvar content = req.body.content,\n\t\t\ttid = req.body.tid,\n\t\t\turl = req.body.url,\n\t\t\ttoPid = req.body.toPid,\n\t\t\tuid = req.user ? req.user.uid : 0;\n\n\t\ttopics.reply({\n\t\t\ttid: tid,\n\t\t\tuid: uid,\n\t\t\ttoPid: toPid,\n\t\t\tcontent: content\n\t\t}, function(err, postData) {\n\t\t\tres.redirect(get_redirect_url(url, err));\n\t\t});\n\t};\n\n\tComments.publishArticle = function(req, res, callback) {\n\t\tvar markdown = req.body.markdown,\n\t\t\ttitle = req.body.title,\n\t\t\turl = req.body.url,\n\t\t\tcommentID = req.body.id,\n\t\t\ttags = req.body.tags,\n\t\t\tblogger = req.body.blogger || 'default',\n\t\t\tuid = req.user ? req.user.uid : 0,\n\t\t\tcid = JSON.parse(req.body.cid);\n\n\t\tif (cid === -1) {\n\t\t\tvar hostUrls = (meta.config['blog-comments:url'] || '').split(','),\n\t\t\t\tposition = 0;\n\n\t\t\thostUrls.forEach(function(hostUrl, i) {\n\t\t\t\thostUrl = hostUrl.trim();\n\t\t\t\tif (hostUrl[hostUrl.length - 1] === '/') {\n\t\t\t\t\thostUrl = hostUrl.substring(0, hostUrl.length - 1);\n\t\t\t\t}\n\n\t\t\t\tif (hostUrl === req.get('origin')) {\n\t\t\t\t\tposition = i;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcid = meta.config['blog-comments:cid'].toString() || '';\n\t\t\tcid = parseInt(cid.split(',')[position], 10) || parseInt(cid.split(',')[0], 10) || 1;\n\t\t}\n\n\t\tasync.parallel({\n\t\t\tisAdministrator: function(next) {\n\t\t\t\tuser.isAdministrator(uid, next);\n\t\t\t},\n\t\t\tisPublisher: function(next) {\n\t\t\t\tgroups.isMember(uid, 'publishers', next);\n\t\t\t}\n\t\t}, function(err, userStatus) {\n\t\t\tif (!userStatus.isAdministrator && !userStatus.isPublisher) {\n\t\t\t\treturn res.json({error: \"Only Administrators or members of the publishers group can publish articles\"});\n\t\t\t}\n\n\t\t\ttopics.post({\n\t\t\t\tuid: uid,\n\t\t\t\ttitle: title,\n\t\t\t\tcontent: markdown,\n\t\t\t\ttags: tags ? JSON.parse(tags) : [],\n\t\t\t\treq: req,\n\t\t\t\texternalLink: url,  // save externalLink and externalComment to topic, only v2mm theme can do this.\n\t\t\t\texternalComment: markdown,\n\t\t\t\tcid: cid\n\t\t\t}, function(err, result) {\n\t\t\t\tif (!err && result && result.postData && result.postData.tid) {\n\t\t\t\t\tposts.setPostField(result.postData.pid, 'blog-comments:url', url, function(err) {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treturn res.json({error: \"Unable to post topic\", result: result});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdb.setObjectField('blog-comments:'+blogger, commentID, result.postData.tid);\n\t\t\t\t\t\tvar rurl = (req.header('Referer') || '/') + '#nodebb-comments';\n\t\t\t\t\t\tif (url.indexOf('#') !== -1) {\n\t\t\t\t\t\t\t// compatible for mmmw's blog, he uses hash in url;\n\t\t\t\t\t\t\trurl = url;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tres.redirect(rurl);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tres.json({error: \"Unable to post topic\", result: result});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t};\n\n\tComments.addLinkbackToArticle = function(post, callback) {\n\t\tvar hostUrls = (meta.config['blog-comments:url'] || '').split(','),\n\t\t\tposition;\n\n\t\tposts.getPostField(post.pid, 'blog-comments:url', function(err, url) {\n\t\t\tif (url) {\n\t\t\t\thostUrls.forEach(function(hostUrl, i) {\n\t\t\t\t\tif (url.indexOf(hostUrl.trim().replace(/^https?:\\/\\//, '')) !== -1) {\n\t\t\t\t\t\tposition = i;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tvar blogName = (meta.config['blog-comments:name'] || '');\n\t\t\t\tblogName = parseInt(blogName.split(',')[position], 10) || parseInt(blogName.split(',')[0], 10) || 1;\n\n\t\t\t\tpost.profile.push({\n\t\t\t\t\tcontent: \"Posted from <strong><a href=\"+ url +\" target='blank'>\" + blogName + \"</a></strong>\"\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcallback(err, post);\n\t\t});\n\t};\n\n\tComments.addAdminLink = function(custom_header, callback) {\n\t\tcustom_header.plugins.push({\n\t\t\t\"route\": \"/blog-comments\",\n\t\t\t\"icon\": \"fa-book\",\n\t\t\t\"name\": \"Blog Comments\"\n\t\t});\n\n\t\tcallback(null, custom_header);\n\t};\n\n\tfunction renderAdmin(req, res, callback) {\n\t\tres.render('comments/admin', {});\n\t}\n\n\tComments.init = function(params, callback) {\n\t\tvar app = params.router,\n\t\t\tmiddleware = params.middleware,\n\t\t\tcontrollers = params.controllers;\n\n\t\tfs.readFile(path.resolve(__dirname, './public/templates/comments/comments.tpl'), function (err, data) {\n\t\t\tComments.template = data.toString();\n\t\t});\n\n\t\tapp.get('/comments/get/:blogger/:id/:pagination?', middleware.applyCSRF, Comments.getCommentData);\n\t\tapp.post('/comments/reply', Comments.replyToComment);\n\t\tapp.post('/comments/publish', Comments.publishArticle);\n\t\tapp.post('/comments/vote', Comments.votePost);\n\t\tapp.post('/comments/bookmark', Comments.bookmarkPost);\n\n\t\tapp.get('/admin/blog-comments', middleware.admin.buildHeader, renderAdmin);\n\t\tapp.get('/api/admin/blog-comments', renderAdmin);\n\n\t\tcallback();\n\t};\n\n}(module));\n"]}