From cc78247e3f1a492c2d49e21a1af012b6edff6cb7 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 12:28:12 +0800 Subject: [PATCH 001/329] Add axios to webpack. --- src/vender/axios.min.js | 9 +++++++++ webpack.config.js | 1 + 2 files changed, 10 insertions(+) create mode 100644 src/vender/axios.min.js diff --git a/src/vender/axios.min.js b/src/vender/axios.min.js new file mode 100644 index 00000000..0f368163 --- /dev/null +++ b/src/vender/axios.min.js @@ -0,0 +1,9 @@ +/* axios v0.19.0 | (c) 2019 by Matt Zabriskie */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new i(e),n=s(i.prototype.request,t);return o.extend(n,i.prototype,t),o.extend(n,t),n}var o=n(2),s=n(3),i=n(5),a=n(22),u=n(11),c=r(u);c.Axios=i,c.create=function(e){return r(a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(10),c.all=function(e){return Promise.all(e)},c.spread=n(25),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===j.call(e)}function o(e){return"[object ArrayBuffer]"===j.call(e)}function s(e){return"undefined"!=typeof FormData&&e instanceof FormData}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function a(e){return"string"==typeof e}function u(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function p(e){return"[object Date]"===j.call(e)}function d(e){return"[object File]"===j.call(e)}function l(e){return"[object Blob]"===j.call(e)}function h(e){return"[object Function]"===j.call(e)}function m(e){return f(e)&&h(e.pipe)}function y(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function g(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function x(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function v(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n + * @license MIT + */ +e.exports=function(e){return null!=e&&null!=e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},function(e,t,n){"use strict";function r(e){this.defaults=e,this.interceptors={request:new i,response:new i}}var o=n(2),s=n(6),i=n(7),a=n(8),u=n(22);r.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{},e.url=arguments[0]):e=e||{},e=u(this.defaults,e),e.method=e.method?e.method.toLowerCase():"get";var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},r.prototype.getUri=function(e){return e=u(this.defaults,e),s(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},o.forEach(["delete","get","head","options"],function(e){r.prototype[e]=function(t,n){return this.request(o.merge(n||{},{method:e,url:t}))}}),o.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(o.merge(r||{},{method:e,url:t,data:n}))}}),e.exports=r},function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=n(2);e.exports=function(e,t,n){if(!t)return e;var s;if(n)s=n(t);else if(o.isURLSearchParams(t))s=t.toString();else{var i=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)?t+="[]":e=[e],o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),i.push(r(t)+"="+r(e))}))}),s=i.join("&")}if(s){var a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+s}return e}},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(2);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t,n){"use strict";function r(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var o=n(2),s=n(9),i=n(10),a=n(11),u=n(20),c=n(21);e.exports=function(e){r(e),e.baseURL&&!u(e.url)&&(e.url=c(e.baseURL,e.url)),e.headers=e.headers||{},e.data=s(e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=e.adapter||a.adapter;return t(e).then(function(t){return r(e),t.data=s(t.data,t.headers,e.transformResponse),t},function(t){return i(t)||(r(e),t&&t.response&&(t.response.data=s(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){"use strict";function r(e,t){!s.isUndefined(e)&&s.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function o(){var e;return"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process)?e=n(13):"undefined"!=typeof XMLHttpRequest&&(e=n(13)),e}var s=n(2),i=n(12),a={"Content-Type":"application/x-www-form-urlencoded"},u={adapter:o(),transformRequest:[function(e,t){return i(t,"Accept"),i(t,"Content-Type"),s.isFormData(e)||s.isArrayBuffer(e)||s.isBuffer(e)||s.isStream(e)||s.isFile(e)||s.isBlob(e)?e:s.isArrayBufferView(e)?e.buffer:s.isURLSearchParams(e)?(r(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):s.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},s.forEach(["delete","get","head"],function(e){u.headers[e]={}}),s.forEach(["post","put","patch"],function(e){u.headers[e]=s.merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(14),s=n(6),i=n(17),a=n(18),u=n(15);e.exports=function(e){return new Promise(function(t,c){var f=e.data,p=e.headers;r.isFormData(f)&&delete p["Content-Type"];var d=new XMLHttpRequest;if(e.auth){var l=e.auth.username||"",h=e.auth.password||"";p.Authorization="Basic "+btoa(l+":"+h)}if(d.open(e.method.toUpperCase(),s(e.url,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,d.onreadystatechange=function(){if(d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in d?i(d.getAllResponseHeaders()):null,r=e.responseType&&"text"!==e.responseType?d.response:d.responseText,s={data:r,status:d.status,statusText:d.statusText,headers:n,config:e,request:d};o(t,c,s),d=null}},d.onabort=function(){d&&(c(u("Request aborted",e,"ECONNABORTED",d)),d=null)},d.onerror=function(){c(u("Network Error",e,null,d)),d=null},d.ontimeout=function(){c(u("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",d)),d=null},r.isStandardBrowserEnv()){var m=n(19),y=(e.withCredentials||a(e.url))&&e.xsrfCookieName?m.read(e.xsrfCookieName):void 0;y&&(p[e.xsrfHeaderName]=y)}if("setRequestHeader"in d&&r.forEach(p,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete p[t]:d.setRequestHeader(t,e)}),e.withCredentials&&(d.withCredentials=!0),e.responseType)try{d.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){d&&(d.abort(),c(e),d=null)}),void 0===f&&(f=null),d.send(f)})}},function(e,t,n){"use strict";var r=n(15);e.exports=function(e,t,n){var o=n.config.validateStatus;!o||o(n.status)?e(n):t(r("Request failed with status code "+n.status,n.config,null,n.request,n))}},function(e,t,n){"use strict";var r=n(16);e.exports=function(e,t,n,o,s){var i=new Error(e);return r(i,t,n,o,s)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,s,i={};return e?(r.forEach(e.split("\n"),function(e){if(s=e.indexOf(":"),t=r.trim(e.substr(0,s)).toLowerCase(),n=r.trim(e.substr(s+1)),t){if(i[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?i[t]=(i[t]?i[t]:[]).concat([n]):i[t]=i[t]?i[t]+", "+n:n}}),i):i}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,s,i){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(s)&&a.push("domain="+s),i===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){t=t||{};var n={};return r.forEach(["url","method","params","data"],function(e){"undefined"!=typeof t[e]&&(n[e]=t[e])}),r.forEach(["headers","auth","proxy"],function(o){r.isObject(t[o])?n[o]=r.deepMerge(e[o],t[o]):"undefined"!=typeof t[o]?n[o]=t[o]:r.isObject(e[o])?n[o]=r.deepMerge(e[o]):"undefined"!=typeof e[o]&&(n[o]=e[o])}),r.forEach(["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"],function(r){"undefined"!=typeof t[r]?n[r]=t[r]:"undefined"!=typeof e[r]&&(n[r]=e[r])}),n}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}}])}); +//# sourceMappingURL=axios.min.map \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 942aa285..38886aa4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -229,6 +229,7 @@ const webpack = require( 'webpack' ), nanoid : __dirname + '/node_modules/nanoid/generate.js', jquery : __dirname + '/src/vender/jquery-2.1.1.min.js', + axios : __dirname + '/src/vender/axios.min.js', mousetrap : __dirname + '/src/vender/mousetrap.min.js', velocity : __dirname + '/src/vender/velocity.min.js', timeago : __dirname + '/src/vender/timeago.min.js', From 5330e920c7e1e35777a1474207dd42c3af9a8f42 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 12:29:55 +0800 Subject: [PATCH 002/329] Add corb framework. --- src/manifest.json | 3 ++- src/options/corb.html | 5 +++++ src/options/corb.js | 23 +++++++++++++++++++++++ webpack.config.js | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/options/corb.html create mode 100644 src/options/corb.js diff --git a/src/manifest.json b/src/manifest.json index 8e450155..2b2b2be3 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -40,7 +40,8 @@ "options_page" : "options/options.html", "web_accessible_resources": [ "/assets/images/*", - "website_list.json" + "website_list.json", + "options/corb.html" ], "offline_enabled" : true, "update_url" : "https://clients2.google.com/service/update2/crx", diff --git a/src/options/corb.html b/src/options/corb.html new file mode 100644 index 00000000..d70608eb --- /dev/null +++ b/src/options/corb.html @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/options/corb.js b/src/options/corb.js new file mode 100644 index 00000000..1eeb0868 --- /dev/null +++ b/src/options/corb.js @@ -0,0 +1,23 @@ + +import axios from 'axios'; + +import {browser} from 'browser'; +import * as msg from 'message'; + +/** + * Listen runtime message, include: `axios` + */ +browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) { + if ( request.type == msg.MESSAGE_ACTION.AXIOS ) { + if ( request.value.type == "post" ) { + axios.post( request.value.url, request.value.data ) + .then( response => sendResponse({ done: response })) + .catch( error => sendResponse({ fail: error })); + } else if ( request.value.type == 'put' ) { + axios.put( request.value.url, request.value.content, request.value.data ) + .then( response => sendResponse({ done: response })) + .catch( error => sendResponse({ fail: error })); + } + } + return true; +}); diff --git a/webpack.config.js b/webpack.config.js index 38886aa4..5819e575 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -53,6 +53,7 @@ const webpack = require( 'webpack' ), { from : 'src/options/custom.html', to : '../options/' }, { from : 'src/options/sitemgr.html', to : '../options/' }, { from : 'src/options/notice.html', to : '../options/' }, + { from : 'src/options/corb.html', to : '../options/' }, { context: 'src/assets/images/', from : "*" , to : '../assets/images' }, { context: 'src/_locales/', from : "*/*" , to : '../_locales/' }, ]) @@ -174,6 +175,7 @@ const webpack = require( 'webpack' ), custom : './src/options/custom.js', sitemgr : './src/options/sitemgr.js', notice : './src/options/notice.js', + corb : './src/options/corb.js', }, output: { From 98e071c64e887ad1bfcc0d2edbd0267c72e5cfa8 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 12:31:23 +0800 Subject: [PATCH 003/329] Add notion icon. --- src/assets/images/notion_icon.png | Bin 0 -> 565 bytes src/service/config.js | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 src/assets/images/notion_icon.png diff --git a/src/assets/images/notion_icon.png b/src/assets/images/notion_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..33b4e0da2ab208a3161a770f7d96ee7732e898fc GIT binary patch literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc0wmQNuC@UwmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^> z;_2(k{+N@WSxX__2js@(g$?c&()Z5^77;5a_cQWvK3p${oE|M=EsZ8 z+K0Tqhd*DQaGASa^>*G`yI-jrEWU|7{%L=cCG6yxiI@Ie6yfQybqcc$SKS&u?ZJi3 z3*Se|%shGb@dX*yx?c~s=N|WPI%;kG&Z_jVzDw82)(AtzF$di#DrdI|=>vwX zYKdz^NlIc#s#S7PDv)9@GBC8%HL%n*Gzl>>wlXoYGBVLMFtIW)h?9?ghoT`jKP5A* W61N6@r^ld#!QkoY=d#Wzp$P!5@z*l| literal 0 HcmV?d00001 diff --git a/src/service/config.js b/src/service/config.js index 8dcbf47e..6c7822f3 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -333,6 +333,11 @@ const readItems = { "icon" : ss.IconPath("yuque_icon"), "color": "#00BCD4", }, + "notion" : { + "name" : "保存到 Notion", + "icon" : ss.IconPath("notion_icon"), + "color": "#00BCD4", + }, "kindle" : { "name" : "保存到 Kindle", "icon" : ss.IconPath("kindle_icon"), From 85918e948c64f96b7db300dac830475d810551d4 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 12:32:12 +0800 Subject: [PATCH 004/329] Add notion to storage.secret. --- src/service/storage.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/service/storage.js b/src/service/storage.js index 742accae..246454c8 100644 --- a/src/service/storage.js +++ b/src/service/storage.js @@ -241,6 +241,10 @@ let current = {}, access_token : "", repos_id: "", }, + "notion" : { + access_token : "", + folder_id: "", + }, "jianguo" : { username : "", password : "", From b832aca2a7d2ac24b087a50dc978d2b625ca70ea Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 12:33:00 +0800 Subject: [PATCH 005/329] Add Notion service. --- src/service/export.js | 191 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 189 insertions(+), 2 deletions(-) diff --git a/src/service/export.js b/src/service/export.js index cd3ff5e0..9e1a92ac 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1229,6 +1229,192 @@ class Yuque { } } +/** + * Notion + * + * @class + */ +class Notion { + + get id() { return "notion"; } + get name() { return name( this.id ); } + + get url() { + return "https://www.notion.so/"; + } + + UUID() { + var __extends=void 0&&(void 0).__extends||function(){var _extendStatics=function extendStatics(d,b){_extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return _extendStatics(d,b)};return function(d,b){_extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __())}}();var ValueUUID=function(){function ValueUUID(_value){this._value=_value;this._value=_value}ValueUUID.prototype.asHex=function(){return this._value};return ValueUUID}();var V4UUID=function(_super){__extends(V4UUID,_super);function V4UUID(){return _super.call(this,[V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-','4',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._oneOf(V4UUID._timeHighBits),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex()].join(''))||this}V4UUID._oneOf=function(array){return array[Math.floor(array.length*Math.random())]};V4UUID._randomHex=function(){return V4UUID._oneOf(V4UUID._chars)};V4UUID._chars=['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];V4UUID._timeHighBits=['8','9','a','b'];return V4UUID}(ValueUUID);function generateUuid(){return new V4UUID().asHex()} + return generateUuid(); + } + + Auth( callback ) { + $.ajax({ + url : this.url + "api/v3/loadUserContent", + type : "POST", + }).done( ( result, status, xhr ) => { + console.log( result, status, xhr ) + if ( result && status == "success" ) { + this.access_token = Object.values( result.recordMap.notion_user )[0].value.id; + this.folder_id = Object.values( result.recordMap.block )[0].value.id + callback( result, undefined ); + } + }).fail( ( xhr, status, error ) => { + console.error( error, status, xhr ) + }); + } + + Add( title, content, callback ) { + this.TempFile( this.folder_id, title, documentId => { + console.log( 'TempFile: ', documentId ) + this.GetFileUrl( `${title}.md`, urls => { + console.log( 'GetFileUrl: ', urls ) + this.WriteFile( urls.signedPutUrl, content, result => { + console.log( 'WriteFile: ', result ) + this.ImportFile( urls.url, `${title}.md`, documentId, result => { + console.log( 'ImportFile: ', result ) + result.done && callback( result, undefined ); + result.fail && callback( undefined, "error" ); + }); + }); + }); + }); + } + + TempFile( parentId, title, callback ) { + const documentId = this.UUID(), + userId = this.access_token, + time = new Date().getDate(), + operations = { + operations: [ + { + id: documentId, + table: 'block', + path: [], + command: 'set', + args: { + type: 'page', + id: documentId, + version: 1, + }, + }, + { + id: documentId, + table: 'block', + path: [], + command: 'update', + args: { + parent_id: parentId, + parent_table: 'block', + alive: true, + }, + }, + { + table: 'block', + id: parentId, + path: ['content'], + command: 'listAfter', + args: { id: documentId }, + }, + { + id: documentId, + table: 'block', + path: [], + command: 'update', + args: { + created_by: userId, + created_time: time, + last_edited_time: time, + last_edited_by: userId, + }, + }, + { + id: parentId, + table: 'block', + path: [], + command: 'update', + args: { last_edited_time: time }, + }, + { + id: documentId, + table: 'block', + path: ['properties', 'title'], + command: 'set', + args: [[title]], + }, + { + id: documentId, + table: 'block', + path: [], + command: 'update', + args: { last_edited_time: time }, + }, + ], + }; + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.AXIOS, { + type: "post", + url: this.url + "api/v3/submitTransaction", + data: operations + }), result => { + if ( result && result.done ) { + callback( documentId ); + } + }); + } + + GetFileUrl( name, callback ) { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.AXIOS, { + type: "post", + url: this.url + "api/v3/getUploadFileUrl", + data:{ + bucket: 'temporary', + name: name, + contentType: 'text/markdown', + } + }), result => { + if ( result && result.done ) { + callback( result.done.data ); + } + }); + } + + WriteFile( url, content, callback ) { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.AXIOS, { + type: "put", + url, + content, + data: { + headers: { + 'Content-Type': 'text/markdown' + } + } + }), result => { + if ( result && result.done ) { + callback( result.done ); + } + }); + } + + ImportFile( url, name, documentId, callback ) { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.AXIOS, { + type: "post", + url: this.url + "api/v3/enqueueTask", + data: { + task: { + eventName: 'importFile', + request: { + fileURL: url, + fileName: name, + importType: 'ReplaceBlock', + pageId: documentId, + }, + } + } + }), result => callback( result )); + } + +} + /** * Kindle * @@ -1292,7 +1478,7 @@ class Kindle { */ function name( type ) { type = type.toLowerCase(); - if ( [ "dropbox", "pocket", "instapaper", "linnk" , "evernote", "onenote" ].includes( type ) ) { + if ( [ "dropbox", "pocket", "instapaper", "linnk" , "evernote", "onenote", "notion" ].includes( type ) ) { return type.replace( /\S/i, $0=>$0.toUpperCase() ); } else if ( type == "yinxiang" ) { return "印象笔记"; @@ -1394,6 +1580,7 @@ const dropbox = new Dropbox(), gdrive = new GDrive(), yuque = new Yuque(), jianguo = new Jianguo(), + notion = new Notion(), webdav = new WebDAV(), kindle = new Kindle(); @@ -1407,7 +1594,7 @@ export { md2HTML as MD2HTML, unlink as Unlink, name as Name, - dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive,yuque, jianguo, webdav, + dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive,yuque, jianguo, webdav, notion, kindle, mdWrapper as MDWrapper, serviceCallback as svcCbWrapper, From 574e8f5d4d45231e251baeae4966aa4e7d2a5c4c Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 12:33:31 +0800 Subject: [PATCH 006/329] Add corb message. --- src/service/message.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/message.js b/src/service/message.js index 86017ec8..f5cf5d45 100644 --- a/src/service/message.js +++ b/src/service/message.js @@ -34,6 +34,7 @@ const action = { temp_site : "temp_site", // corb CORB : "corb", + AXIOS : "axios", // webdav jianguo : "jianguo", WebDAV : "webdav", From 6e29d872eb37405a856e7a39fced4ebc2c0f9179 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 12:35:13 +0800 Subject: [PATCH 007/329] Add export to notion workflow. --- src/read/controlbar.jsx | 2 +- src/service/output.js | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/read/controlbar.jsx b/src/read/controlbar.jsx index 9180e1d1..13838ce4 100644 --- a/src/read/controlbar.jsx +++ b/src/read/controlbar.jsx @@ -109,7 +109,7 @@ export default class ReadCtlbar extends React.Component { break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || - [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque" ].includes( type )) { + [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } diff --git a/src/service/output.js b/src/service/output.js index 39c167fe..b99f223b 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -138,8 +138,8 @@ function action( type, title, desc, content ) { } break; } - } else if ( [ "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque" ].includes( type ) ) { - const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque } = exp, + } else if ( [ "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion" ].includes( type ) ) { + const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion } = exp, id = type == "yinxiang" ? "evernote" : type; storage.Statistics( "service", type ); const service = type => { @@ -226,6 +226,19 @@ function action( type, title, desc, content ) { yuque.Add( title, result,( result, error ) => exp.svcCbWrapper( result, error, yuque.name, type, new Notify() )); }); break; + case "notion": + exp.MDWrapper( util.ClearMD( content ), undefined, new Notify() ).done( result => { + corbLoader(); + setTimeout( () => { + notion.access_token = storage.secret.notion.access_token; + notion.folder_id = storage.secret.notion.folder_id; + notion.Add( title, result.replace( /.jpeg!720/ig, '.jpeg' ), ( result, error ) => { + exp.svcCbWrapper( result, error, notion.name, type, new Notify() ) + corbLoader(); + }); + }, 500 ); + }); + break; } }; @@ -266,6 +279,15 @@ function action( type, title, desc, content ) { } } +/** + * Open and Remove CORB iframe + */ +function corbLoader() { + $( '#sr-corb' ).length == 0 ? + $( 'sr-read' ).after( `` ) + : $( '#sr-corb' ).remove(); +} + export { action as Action, } \ No newline at end of file From f82827280e38aa525a90bacada336b310193a824 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 12:39:26 +0800 Subject: [PATCH 008/329] Format source. --- src/service/export.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/export.js b/src/service/export.js index 9e1a92ac..fe3d240e 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -130,6 +130,7 @@ function unlink( id ) { "onenote" : "https://account.live.com/consent/Manage", "gdrive" : "https://drive.google.com/drive/my-drive", "yuque" : "https://www.yuque.com/yuque/developer/delete-oauth-apps", + "notion" : "http://ksria.com/simpread/docs/#/发送到-Notion", "jianguo" : "http://help.jianguoyun.com/?p=2064", "linnk" : "https://linnk.net/", } From 0898cf39dad8570e18b6858e4f41c29985c26964 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 15:00:02 +0800 Subject: [PATCH 009/329] Optimize Notion service logic. --- src/service/export.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/service/export.js b/src/service/export.js index fe3d240e..aa94b858 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1254,10 +1254,12 @@ class Notion { url : this.url + "api/v3/loadUserContent", type : "POST", }).done( ( result, status, xhr ) => { - console.log( result, status, xhr ) if ( result && status == "success" ) { this.access_token = Object.values( result.recordMap.notion_user )[0].value.id; - this.folder_id = Object.values( result.recordMap.block )[0].value.id + this.folder_id = Object.values( result.recordMap.block )[0].value.id; + this.blocks = Object.values( result.recordMap.block ).map( item => { + return { name: item.value.properties ? item.value.properties.title[0][0] : "Undefined", value: item.value.id } + }); callback( result, undefined ); } }).fail( ( xhr, status, error ) => { From 19963e2c4de5692a57c657cae164f10590ef24b7 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 15:03:08 +0800 Subject: [PATCH 010/329] Update storage.secret.version. --- src/service/storage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/storage.js b/src/service/storage.js index 246454c8..2667757b 100644 --- a/src/service/storage.js +++ b/src/service/storage.js @@ -208,7 +208,7 @@ let current = {}, }, plugins = {}, secret = { - version : "2019-06-08", + version : "2019-09-15", "dropbox" : { "access_token": "" }, From e6a841fb30ae6e8225d80af20b46c1ab0af75f29 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 15 Sep 2019 15:03:23 +0800 Subject: [PATCH 011/329] Add notion to auth page. --- src/module/authorize.jsx | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 103f806b..39150902 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -9,6 +9,7 @@ import Notify from 'notify'; import Switch from 'switch'; import TextField from 'textfield'; import Button from 'button'; +import Dropdown from 'dropdown'; export default class Auth extends React.Component { @@ -32,11 +33,12 @@ export default class Auth extends React.Component { linnk : undefined, instapaper : undefined, jianguo: undefined, + notion : undefined, } onChange( state, value, flag ) { let notify; - const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque } = exp, + const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion } = exp, clear = ( id, name ) => { Object.keys( storage.secret[id] ).forEach( item => storage.secret[id][item] = "" ); storage.Safe( ()=> { @@ -53,6 +55,7 @@ export default class Auth extends React.Component { id == "linnk" && this.setState({ secret: storage.secret, linnk: false }); id == "instapaper" && this.setState({ secret: storage.secret, instapaper: false }); id == "jianguo" && this.setState({ secret: storage.secret, jianguo: false }); + id == "notion" && this.setState({ secret: storage.secret, notion: notion.blocks }); if ( location.hash.startsWith( "#labs?auth=" ) ) { new Notify().Render( "3 秒钟将会关闭此页面..." ); setTimeout( () => { @@ -212,6 +215,12 @@ export default class Auth extends React.Component { }); }).fail( error => failed( error, yuque.id, yuque.name )); break; + case "notion": + notion.Auth( ( result, error ) => { + if ( error ) failed( error, notion.id, notion.name ); + else success( notion.id, notion.name, { access_token: notion.access_token, folder_id: notion.folder_id }); + }); + break; case "jianguo": jianguo.Auth( this.props.jianguo.username, this.props.jianguo.password, result => { if ( result && result.status == 401 ) { @@ -225,6 +234,7 @@ export default class Auth extends React.Component { save( state, value ) { state == "pocket" && ( storage.secret.pocket.tags = value.trim() ); state == "linnk" && ( storage.secret.linnk.group_name = value.trim() ); + state == "notion" && ( storage.secret.notion.folder_id = value.trim() ); storage.Safe( () => this.setState({ secret: storage.secret }), storage.secret ); } @@ -245,6 +255,12 @@ export default class Auth extends React.Component { storage.Safe( () => this.setState({ secret: storage.secret }), storage.secret ); } + notionChange() { + exp.notion.Auth( ( result, error ) => { + this.setState({ secret: storage.secret, notion: exp.notion.blocks }); + }); + } + webdavAuth() { this.state.secret.webdav.forEach( ( item, idx ) => { try { @@ -418,6 +434,21 @@ export default class Auth extends React.Component { onChange={ (s)=>this.onChange( "yuque", s ) } /> + this.onChange( "notion", s ) } /> + + { this.state.secret.notion.access_token && +
+ { this.state.notion ? this.save( "notion", v ) } /> + :
} +
WebDAV
简悦支持任意 WebDAV 的服务,包括:Box · TeraCLOUD 等
From b972dabbe8623db7c01e4bc2b8528058a053bc96 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 10:34:58 +0800 Subject: [PATCH 012/329] Add youdao icon to config. --- src/assets/images/youdao_icon.png | Bin 0 -> 316 bytes src/service/config.js | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 src/assets/images/youdao_icon.png diff --git a/src/assets/images/youdao_icon.png b/src/assets/images/youdao_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6b193061561ff00bb9beca01f01dfc4564f8a883 GIT binary patch literal 316 zcmV-C0mJ@@P)wJ_qY_~&wBx&U}6^l4pI65 O0000 Date: Mon, 16 Sep 2019 10:35:23 +0800 Subject: [PATCH 013/329] Add youdao to storage.secret. --- src/service/storage.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/service/storage.js b/src/service/storage.js index 2667757b..fe2f60c4 100644 --- a/src/service/storage.js +++ b/src/service/storage.js @@ -208,7 +208,7 @@ let current = {}, }, plugins = {}, secret = { - version : "2019-09-15", + version : "2019-09-16", "dropbox" : { "access_token": "" }, @@ -245,6 +245,10 @@ let current = {}, access_token : "", folder_id: "", }, + "youdao" : { + access_token : "", + folder_id : "", + }, "jianguo" : { username : "", password : "", From 89ad6b5dcc6acc8bfa82c980aa41cb0a03b5aba4 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 10:36:02 +0800 Subject: [PATCH 014/329] Add formData logic to corb. --- src/options/corb.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/options/corb.js b/src/options/corb.js index 1eeb0868..7abb3666 100644 --- a/src/options/corb.js +++ b/src/options/corb.js @@ -10,6 +10,11 @@ import * as msg from 'message'; browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) { if ( request.type == msg.MESSAGE_ACTION.AXIOS ) { if ( request.value.type == "post" ) { + if ( request.value.form ) { + const formData = new FormData(); + Object.keys( request.value.form ).forEach( key => formData.append( key, request.value.form[key] ) ); + request.value.data = formData; + } axios.post( request.value.url, request.value.data ) .then( response => sendResponse({ done: response })) .catch( error => sendResponse({ fail: error })); From af98531c2f98b3cf75c3e69a7112daa0ba6cdc7a Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 10:36:25 +0800 Subject: [PATCH 015/329] Add youdao to controlbar. --- src/read/controlbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/read/controlbar.jsx b/src/read/controlbar.jsx index 13838ce4..846a561a 100644 --- a/src/read/controlbar.jsx +++ b/src/read/controlbar.jsx @@ -109,7 +109,7 @@ export default class ReadCtlbar extends React.Component { break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || - [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion" ].includes( type )) { + [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } From c99f51938564d0fa87a236f8c6f381352b528edf Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 10:36:55 +0800 Subject: [PATCH 016/329] Add Youdao service. --- src/service/export.js | 90 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/src/service/export.js b/src/service/export.js index aa94b858..8690e8e8 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1418,6 +1418,91 @@ class Notion { } +/** + * Youdao + * + * @class + */ +class Youdao { + + get id() { return "youdao"; } + get name() { return name( this.id ); } + + get url() { + return "https://note.youdao.com"; + } + + UUID() { + var __extends=void 0&&(void 0).__extends||function(){var _extendStatics=function extendStatics(d,b){_extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return _extendStatics(d,b)};return function(d,b){_extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __())}}();var ValueUUID=function(){function ValueUUID(_value){this._value=_value;this._value=_value}ValueUUID.prototype.asHex=function(){return this._value};return ValueUUID}();var V4UUID=function(_super){__extends(V4UUID,_super);function V4UUID(){return _super.call(this,[V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-','4',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._oneOf(V4UUID._timeHighBits),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex()].join(''))||this}V4UUID._oneOf=function(array){return array[Math.floor(array.length*Math.random())]};V4UUID._randomHex=function(){return V4UUID._oneOf(V4UUID._chars)};V4UUID._chars=['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];V4UUID._timeHighBits=['8','9','a','b'];return V4UUID}(ValueUUID);function generateUuid(){return new V4UUID().asHex()} + return generateUuid(); + } + + Cookies( callback ) { + browser.cookies.get({ + url: this.url, + name: 'YNOTE_CSTK', + }, cookie => { + callback( cookie ); + }) + } + + Auth( callback ) { + this.Cookies( token => { + this.access_token = token.value; + const formData = new FormData(); + formData.append( 'path', '/' ); + formData.append( 'dirOnly', 'true' ); + formData.append( 'f', 'true'); + formData.append( 'cstk', this.access_token ); + $.ajax({ + url : this.url + `/yws/api/personal/file?method=listEntireByParentPath&keyfrom=web&cstk=${this.access_token}`, + type : "POST", + contentType: false, + processData: false, + data : formData + }).done( ( result, status, xhr ) => { + if ( result && result.length > 0 ) { + this.folder_id = result[0].fileEntry.id; + callback( result, undefined ); + } + }).fail( ( xhr, status, error ) => { + console.error( error, status, xhr ) + }); + }); + } + + Add( title, content, callback ) { + const timestamp = String( Math.floor( Date.now() / 1000 )), + uuid = this.UUID().replace( /-/g, '' ), + fileId = `WEB${uuid}`; + let formData = {}; + + formData['fileId'] = fileId; + formData['parentId'] = this.folder_id; + formData['name'] = `${title}.md`; + formData['domain'] = `1`; + formData['rootVersion'] = `-1`; + formData['dir'] = `false`; + formData['sessionId'] = ''; + formData['createTime'] = timestamp; + formData['modifyTime'] = timestamp; + formData['transactionId'] = fileId; + formData['bodyString'] = content; + formData['transactionTime'] = timestamp; + formData['cstk'] = this.access_token; + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.AXIOS, { + type: "post", + url: this.url + `/yws/api/personal/sync?method=push&keyfrom=web&cstk=${this.access_token}`, + //data: formData, + form: formData, + }), result => { + callback( result ); + }); + } + +} + + /** * Kindle * @@ -1491,6 +1576,8 @@ function name( type ) { return "坚果云"; } else if ( type == "yuque" ) { return "语雀"; + } else if ( type == "youdao" ) { + return "有道云笔记"; } return type; } @@ -1584,6 +1671,7 @@ const dropbox = new Dropbox(), yuque = new Yuque(), jianguo = new Jianguo(), notion = new Notion(), + youdao = new Youdao(), webdav = new WebDAV(), kindle = new Kindle(); @@ -1597,7 +1685,7 @@ export { md2HTML as MD2HTML, unlink as Unlink, name as Name, - dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive,yuque, jianguo, webdav, notion, + dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive,yuque, jianguo, webdav, notion, youdao, kindle, mdWrapper as MDWrapper, serviceCallback as svcCbWrapper, From 867c3d29d3c8beef0a722e21a04c39c1dfccfd58 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 10:40:05 +0800 Subject: [PATCH 017/329] Add export to youdao workflow. --- src/service/output.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/service/output.js b/src/service/output.js index b99f223b..462fa1fe 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -138,8 +138,8 @@ function action( type, title, desc, content ) { } break; } - } else if ( [ "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion" ].includes( type ) ) { - const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion } = exp, + } else if ( [ "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type ) ) { + const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion, youdao } = exp, id = type == "yinxiang" ? "evernote" : type; storage.Statistics( "service", type ); const service = type => { @@ -239,6 +239,19 @@ function action( type, title, desc, content ) { }, 500 ); }); break; + case "youdao": + exp.MDWrapper( util.ClearMD( content ), undefined, new Notify() ).done( result => { + corbLoader(); + setTimeout( () => { + youdao.access_token = storage.secret.youdao.access_token; + youdao.folder_id = storage.secret.youdao.folder_id; + youdao.Add( title, result, ( result, error ) => { + exp.svcCbWrapper( result, error, youdao.name, type, new Notify() ) + corbLoader(); + }); + }, 600 ); + }); + break; } }; From 75a7fdfa165dc8db6779f3c7315568a0b5a9fd32 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 10:45:50 +0800 Subject: [PATCH 018/329] Format source. --- src/service/export.js | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/service/export.js b/src/service/export.js index 8690e8e8..cfb9f847 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1476,24 +1476,23 @@ class Youdao { uuid = this.UUID().replace( /-/g, '' ), fileId = `WEB${uuid}`; let formData = {}; + formData[ 'fileId' ] = fileId; + formData[ 'parentId' ] = this.folder_id; + formData[ 'name' ] = `${title}.md`; + formData[ 'domain' ] = `1`; + formData[ 'rootVersion' ] = `-1`; + formData[ 'dir' ] = `false`; + formData[ 'sessionId' ] = ''; + formData[ 'createTime' ] = timestamp; + formData[ 'modifyTime' ] = timestamp; + formData[ 'transactionId' ] = fileId; + formData[ 'bodyString' ] = content; + formData[ 'transactionTime' ] = timestamp; + formData[ 'cstk' ] = this.access_token; - formData['fileId'] = fileId; - formData['parentId'] = this.folder_id; - formData['name'] = `${title}.md`; - formData['domain'] = `1`; - formData['rootVersion'] = `-1`; - formData['dir'] = `false`; - formData['sessionId'] = ''; - formData['createTime'] = timestamp; - formData['modifyTime'] = timestamp; - formData['transactionId'] = fileId; - formData['bodyString'] = content; - formData['transactionTime'] = timestamp; - formData['cstk'] = this.access_token; browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.AXIOS, { type: "post", - url: this.url + `/yws/api/personal/sync?method=push&keyfrom=web&cstk=${this.access_token}`, - //data: formData, + url : this.url + `/yws/api/personal/sync?method=push&keyfrom=web&cstk=${this.access_token}`, form: formData, }), result => { callback( result ); From 7f4621afc1df15e4a7dca9250ad4af629faced9e Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 10:51:20 +0800 Subject: [PATCH 019/329] Format source. --- src/options/corb.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/options/corb.js b/src/options/corb.js index 7abb3666..553cce9a 100644 --- a/src/options/corb.js +++ b/src/options/corb.js @@ -11,9 +11,8 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) if ( request.type == msg.MESSAGE_ACTION.AXIOS ) { if ( request.value.type == "post" ) { if ( request.value.form ) { - const formData = new FormData(); - Object.keys( request.value.form ).forEach( key => formData.append( key, request.value.form[key] ) ); - request.value.data = formData; + request.value.data = new FormData(); + Object.keys( request.value.form ).forEach( key => request.value.data.append( key, request.value.form[key] ) ); } axios.post( request.value.url, request.value.data ) .then( response => sendResponse({ done: response })) From 43b05409886d7a1f3cc838b5e0a1c1c24b300eaf Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 11:00:16 +0800 Subject: [PATCH 020/329] Format source. --- src/service/export.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/service/export.js b/src/service/export.js index cfb9f847..4d76b483 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -131,6 +131,7 @@ function unlink( id ) { "gdrive" : "https://drive.google.com/drive/my-drive", "yuque" : "https://www.yuque.com/yuque/developer/delete-oauth-apps", "notion" : "http://ksria.com/simpread/docs/#/发送到-Notion", + "youdao" : "http://ksria.com/simpread/docs/#/发送到有道云笔记", "jianguo" : "http://help.jianguoyun.com/?p=2064", "linnk" : "https://linnk.net/", } @@ -1463,6 +1464,10 @@ class Youdao { }).done( ( result, status, xhr ) => { if ( result && result.length > 0 ) { this.folder_id = result[0].fileEntry.id; + this.folders = result.map( item => { + return { name: item.fileEntry.name, value: item.fileEntry.id }; + }); + console.log( "asdfasdfasd", this.folders ) callback( result, undefined ); } }).fail( ( xhr, status, error ) => { From 138031f374acf24c5e5433c0be2ae4b65b56a081 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 11:02:16 +0800 Subject: [PATCH 021/329] Add youdao auth logic. --- src/module/authorize.jsx | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 39150902..2f247d5c 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -34,11 +34,12 @@ export default class Auth extends React.Component { instapaper : undefined, jianguo: undefined, notion : undefined, + youdao : undefined, } onChange( state, value, flag ) { let notify; - const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion } = exp, + const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion, youdao } = exp, clear = ( id, name ) => { Object.keys( storage.secret[id] ).forEach( item => storage.secret[id][item] = "" ); storage.Safe( ()=> { @@ -56,6 +57,7 @@ export default class Auth extends React.Component { id == "instapaper" && this.setState({ secret: storage.secret, instapaper: false }); id == "jianguo" && this.setState({ secret: storage.secret, jianguo: false }); id == "notion" && this.setState({ secret: storage.secret, notion: notion.blocks }); + id == "youdao" && this.setState({ secret: storage.secret, youdao: youdao.folders }); if ( location.hash.startsWith( "#labs?auth=" ) ) { new Notify().Render( "3 秒钟将会关闭此页面..." ); setTimeout( () => { @@ -221,6 +223,12 @@ export default class Auth extends React.Component { else success( notion.id, notion.name, { access_token: notion.access_token, folder_id: notion.folder_id }); }); break; + case "youdao": + youdao.Auth( ( result, error ) => { + if ( error ) failed( error, youdao.id, youdao.name ); + else success( youdao.id, youdao.name, { access_token: youdao.access_token, folder_id: youdao.folder_id }); + }); + break; case "jianguo": jianguo.Auth( this.props.jianguo.username, this.props.jianguo.password, result => { if ( result && result.status == 401 ) { @@ -235,6 +243,7 @@ export default class Auth extends React.Component { state == "pocket" && ( storage.secret.pocket.tags = value.trim() ); state == "linnk" && ( storage.secret.linnk.group_name = value.trim() ); state == "notion" && ( storage.secret.notion.folder_id = value.trim() ); + state == "youdao" && ( storage.secret.youdao.folder_id = value.trim() ); storage.Safe( () => this.setState({ secret: storage.secret }), storage.secret ); } @@ -261,6 +270,12 @@ export default class Auth extends React.Component { }); } + youdaoChange() { + exp.youdao.Auth( ( result, error ) => { + this.setState({ secret: storage.secret, youdao: exp.youdao.folders }); + }); + } + webdavAuth() { this.state.secret.webdav.forEach( ( item, idx ) => { try { @@ -449,6 +464,21 @@ export default class Auth extends React.Component { onClick={ (s)=>this.notionChange() } /> }
} + this.onChange( "youdao", s ) } /> + + { this.state.secret.youdao.access_token && +
+ { this.state.youdao ? this.save( "youdao", v ) } /> + :
} +
WebDAV
简悦支持任意 WebDAV 的服务,包括:Box · TeraCLOUD 等
From f71509316b62be5b06f77afb0aeedeb1f2b5d9a3 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 11:51:27 +0800 Subject: [PATCH 022/329] Format source. --- src/service/export.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/service/export.js b/src/service/export.js index 4d76b483..416662f1 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1467,7 +1467,6 @@ class Youdao { this.folders = result.map( item => { return { name: item.fileEntry.name, value: item.fileEntry.id }; }); - console.log( "asdfasdfasd", this.folders ) callback( result, undefined ); } }).fail( ( xhr, status, error ) => { From 915a99d768a065f4cd61e8d1eb6101770e0b6ee2 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 11:59:00 +0800 Subject: [PATCH 023/329] Optimize youdao cookies get failed workflow. --- src/service/export.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/export.js b/src/service/export.js index 416662f1..5d6be527 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1471,6 +1471,7 @@ class Youdao { } }).fail( ( xhr, status, error ) => { console.error( error, status, xhr ) + callback( undefined, xhr.status == 500 ? `请先 登录有道云笔记 ` : "请稍后再试" ); }); }); } From 048d560a78541272e38b48c494a06d828dc646f5 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 12:02:26 +0800 Subject: [PATCH 024/329] Optimize youdao failed workflow. --- src/module/authorize.jsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 2f247d5c..891d319d 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -69,6 +69,7 @@ export default class Auth extends React.Component { failed = ( error, id, name ) => { notify && notify.complete(); console.error( `${name} auth faild, error: ${error}` ) + id == "youdao" ? new Notify().Render( 2, `获取 ${name} 授权失败,${error}` ) : new Notify().Render( 2, `获取 ${name} 授权失败,请重新获取。` ); storage.secret[state].access_token = ""; this.setState({ secret: storage.secret }); @@ -224,10 +225,10 @@ export default class Auth extends React.Component { }); break; case "youdao": - youdao.Auth( ( result, error ) => { - if ( error ) failed( error, youdao.id, youdao.name ); - else success( youdao.id, youdao.name, { access_token: youdao.access_token, folder_id: youdao.folder_id }); - }); + youdao.Auth( ( result, error ) => { + if ( error ) failed( error, youdao.id, youdao.name ); + else success( youdao.id, youdao.name, { access_token: youdao.access_token, folder_id: youdao.folder_id }); + }); break; case "jianguo": jianguo.Auth( this.props.jianguo.username, this.props.jianguo.password, result => { @@ -272,7 +273,8 @@ export default class Auth extends React.Component { youdaoChange() { exp.youdao.Auth( ( result, error ) => { - this.setState({ secret: storage.secret, youdao: exp.youdao.folders }); + if ( result ) this.setState({ secret: storage.secret, youdao: exp.youdao.folders }); + else new Notify().Render( 2, `重新获取失败,${error}` ); }); } From 4c6d0105a3481102a3244bb8c8a18d0c7f90c319 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 12:14:55 +0800 Subject: [PATCH 025/329] Optimize youdao failed workflow. --- src/service/export.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/service/export.js b/src/service/export.js index 5d6be527..c04fb3fa 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1500,7 +1500,8 @@ class Youdao { url : this.url + `/yws/api/personal/sync?method=push&keyfrom=web&cstk=${this.access_token}`, form: formData, }), result => { - callback( result ); + if ( result.fail ) callback( undefined, result.fail.message.includes( '500' ) ? `授权已过期,请重新授权。` : "请稍后再试" ); + else callback( result, undefined ); }); } From 52fd2c5a98000b4d96e458e2b72268e364c737cc Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 12:32:17 +0800 Subject: [PATCH 026/329] Add notion failed workflow. --- src/service/export.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/service/export.js b/src/service/export.js index c04fb3fa..46fb1c3d 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1265,13 +1265,16 @@ class Notion { } }).fail( ( xhr, status, error ) => { console.error( error, status, xhr ) + callback( undefined, xhr.status == 401 ? `请先 登录 Notion ` : "请稍后再试" ); }); } Add( title, content, callback ) { - this.TempFile( this.folder_id, title, documentId => { + this.TempFile( this.folder_id, title, ( documentId, error ) => { console.log( 'TempFile: ', documentId ) - this.GetFileUrl( `${title}.md`, urls => { + if ( error ) { + callback( undefined, error ); + } else this.GetFileUrl( `${title}.md`, urls => { console.log( 'GetFileUrl: ', urls ) this.WriteFile( urls.signedPutUrl, content, result => { console.log( 'WriteFile: ', result ) @@ -1360,9 +1363,8 @@ class Notion { url: this.url + "api/v3/submitTransaction", data: operations }), result => { - if ( result && result.done ) { - callback( documentId ); - } + result.done && callback( documentId, undefined ); + result.fail && callback( undefined, result.fail.message.includes( '401' ) ? `授权已过期,请重新授权。` : "请稍后再试" ); }); } From fbbe677d8dc3cf2968139747387510af1ff37d8a Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 12:33:42 +0800 Subject: [PATCH 027/329] Format source. --- src/module/authorize.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 891d319d..715caa53 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -69,7 +69,7 @@ export default class Auth extends React.Component { failed = ( error, id, name ) => { notify && notify.complete(); console.error( `${name} auth faild, error: ${error}` ) - id == "youdao" ? new Notify().Render( 2, `获取 ${name} 授权失败,${error}` ) : + id == "youdao" || id == "notion" ? new Notify().Render( 2, `获取 ${name} 授权失败,${error}` ) : new Notify().Render( 2, `获取 ${name} 授权失败,请重新获取。` ); storage.secret[state].access_token = ""; this.setState({ secret: storage.secret }); From 6d0d1ff458b62632f86c2499ef9d1af8037b7ba7 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 14:27:49 +0800 Subject: [PATCH 028/329] Add youdao.permissions. --- src/service/export.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/service/export.js b/src/service/export.js index 46fb1c3d..9aefacaa 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1435,6 +1435,13 @@ class Youdao { return "https://note.youdao.com"; } + get permissions() { + return { + permissions: [ 'cookies' ], + origins: [ 'https://*.youdao.com/' ] + }; + } + UUID() { var __extends=void 0&&(void 0).__extends||function(){var _extendStatics=function extendStatics(d,b){_extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return _extendStatics(d,b)};return function(d,b){_extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __())}}();var ValueUUID=function(){function ValueUUID(_value){this._value=_value;this._value=_value}ValueUUID.prototype.asHex=function(){return this._value};return ValueUUID}();var V4UUID=function(_super){__extends(V4UUID,_super);function V4UUID(){return _super.call(this,[V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-','4',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._oneOf(V4UUID._timeHighBits),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),'-',V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex(),V4UUID._randomHex()].join(''))||this}V4UUID._oneOf=function(array){return array[Math.floor(array.length*Math.random())]};V4UUID._randomHex=function(){return V4UUID._oneOf(V4UUID._chars)};V4UUID._chars=['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];V4UUID._timeHighBits=['8','9','a','b'];return V4UUID}(ValueUUID);function generateUuid(){return new V4UUID().asHex()} return generateUuid(); @@ -1451,6 +1458,10 @@ class Youdao { Auth( callback ) { this.Cookies( token => { + if ( !token ) { + callback( undefined, `请先 登录有道云笔记 ` ); + return; + } this.access_token = token.value; const formData = new FormData(); formData.append( 'path', '/' ); From 8fca72eefbeac0b784a60f57806b7523d2e758b6 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 14:31:09 +0800 Subject: [PATCH 029/329] Add permission dynamic setting. --- src/manifest.json | 1 + src/service/permission.js | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 src/service/permission.js diff --git a/src/manifest.json b/src/manifest.json index 2b2b2be3..d556945e 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -17,6 +17,7 @@ "storage", "tts" ], + "optional_permissions": [ "cookies", "https://*.youdao.com/" ], "background": { "scripts" : [ "/bundle/common.js", "/bundle/background.js" ] }, diff --git a/src/service/permission.js b/src/service/permission.js new file mode 100644 index 00000000..5f696b68 --- /dev/null +++ b/src/service/permission.js @@ -0,0 +1,21 @@ + +import {browser} from 'browser'; + +function getPermissions( permissions, callback ) { + browser.permissions.contains({ permissions: permissions.permissions }, result => { + result == false ? chrome.permissions.request( permissions, granted => { + callback( granted ); + }): callback( result ); + }); +} + +function removePermissions( permissions, callback ) { + browser.permissions.remove( { permissions: permissions.permissions }, result => { + callback( result ) + }) +} + +export { + getPermissions, + removePermissions +} \ No newline at end of file From e8a717d3893948b3fb5cbeac6c8b9aabb2c60b0c Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 14:31:34 +0800 Subject: [PATCH 030/329] Add permission to webpack. --- webpack.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webpack.config.js b/webpack.config.js index 5819e575..1bf394a8 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -260,6 +260,7 @@ const webpack = require( 'webpack' ), highlight : __dirname + '/src/service/highlight.js', output : __dirname + '/src/service/output.js', runtime : __dirname + '/src/service/runtime.js', + permission : __dirname + '/src/service/permission.js', focus : __dirname + '/src/focus/focus.js', controlbar : __dirname + '/src/focus/controlbar.jsx', From f42861f78b5b6191710dfde1bd4cd7d4ff131c56 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 14:31:54 +0800 Subject: [PATCH 031/329] Add dynamic permission logic. --- src/module/authorize.jsx | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 715caa53..4c9301cf 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -4,6 +4,8 @@ import {storage} from 'storage'; import * as exp from 'export'; import * as msg from 'message'; import {browser} from 'browser'; +import * as permission + from 'permission'; import Notify from 'notify'; import Switch from 'switch'; @@ -225,10 +227,20 @@ export default class Auth extends React.Component { }); break; case "youdao": - youdao.Auth( ( result, error ) => { - if ( error ) failed( error, youdao.id, youdao.name ); - else success( youdao.id, youdao.name, { access_token: youdao.access_token, folder_id: youdao.folder_id }); - }); + permission.getPermissions( youdao.permissions, result => { + if ( !result ) { + new Notify().Render( 2, `此功能需要申请 cookies 权限后才能使用,授权成功后会自动取消。` ); + this.setState({ secret: storage.secret }); + return; + } + setTimeout( () => { + youdao.Auth( ( result, error ) => { + if ( error ) failed( error, youdao.id, youdao.name ); + else success( youdao.id, youdao.name, { access_token: youdao.access_token, folder_id: youdao.folder_id }); + permission.removePermissions( youdao.permissions, result => new Notify().Render( `已取消 cookies 权限。` )); + }); + }, 500 ); + }); break; case "jianguo": jianguo.Auth( this.props.jianguo.username, this.props.jianguo.password, result => { From 9961039d1374967ef73ca3eb3247681bc4ccbc2c Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 14:53:46 +0800 Subject: [PATCH 032/329] Add notion & youdao to focus mode. --- src/focus/controlbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/focus/controlbar.jsx b/src/focus/controlbar.jsx index a6cdf1dd..cde160d3 100644 --- a/src/focus/controlbar.jsx +++ b/src/focus/controlbar.jsx @@ -65,7 +65,7 @@ class FControl extends React.Component { break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || - [ "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive" ].includes( type )) { + [ "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "notion", "youdao" ].includes( type )) { const [ title, desc, content ] = [ $( "head title" ).text().trim(), "", $( ".simpread-focus-highlight" ).html().trim() ]; output.Action( type, title, desc, content ); } From 88aedf11a7756258dde138b085e48c6ffb160eca Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 15:07:32 +0800 Subject: [PATCH 033/329] Optimize corb load workflow. --- src/service/output.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/service/output.js b/src/service/output.js index 462fa1fe..c2232ae5 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -228,28 +228,24 @@ function action( type, title, desc, content ) { break; case "notion": exp.MDWrapper( util.ClearMD( content ), undefined, new Notify() ).done( result => { - corbLoader(); - setTimeout( () => { + corbLoader( "load", () => { notion.access_token = storage.secret.notion.access_token; notion.folder_id = storage.secret.notion.folder_id; notion.Add( title, result.replace( /.jpeg!720/ig, '.jpeg' ), ( result, error ) => { exp.svcCbWrapper( result, error, notion.name, type, new Notify() ) - corbLoader(); }); }, 500 ); }); break; case "youdao": exp.MDWrapper( util.ClearMD( content ), undefined, new Notify() ).done( result => { - corbLoader(); - setTimeout( () => { + corbLoader( "load", () => { youdao.access_token = storage.secret.youdao.access_token; youdao.folder_id = storage.secret.youdao.folder_id; youdao.Add( title, result, ( result, error ) => { exp.svcCbWrapper( result, error, youdao.name, type, new Notify() ) - corbLoader(); }); - }, 600 ); + }); }); break; } @@ -294,11 +290,16 @@ function action( type, title, desc, content ) { /** * Open and Remove CORB iframe + * + * @param {string} include: load & remove */ -function corbLoader() { - $( '#sr-corb' ).length == 0 ? - $( 'sr-read' ).after( `` ) - : $( '#sr-corb' ).remove(); +function corbLoader( state, callback ) { + if ( state == "load" ) { + if ( $( '#sr-corb' ).length == 0 ) { + $( 'html' ).append( `` ); + $( '#sr-corb' ).on( "load", event => callback()); + } else callback(); + } else $( '#sr-corb' ).remove(); } export { From 4f8f5e20b9395669baddefc66b3e237b60435818 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 15:14:04 +0800 Subject: [PATCH 034/329] Fix youdao some bug. --- src/module/authorize.jsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 4c9301cf..64d3f79f 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -284,9 +284,18 @@ export default class Auth extends React.Component { } youdaoChange() { - exp.youdao.Auth( ( result, error ) => { - if ( result ) this.setState({ secret: storage.secret, youdao: exp.youdao.folders }); - else new Notify().Render( 2, `重新获取失败,${error}` ); + permission.getPermissions( exp.youdao.permissions, result => { + if ( !result ) { + new Notify().Render( 2, `此功能需要申请 cookies 权限后才能使用,授权成功后会自动取消。` ); + this.setState({ secret: storage.secret }); + return; + } + setTimeout( () => { + exp.youdao.Auth( ( result, error ) => { + if ( result ) this.setState({ secret: storage.secret, youdao: exp.youdao.folders }); + else new Notify().Render( 2, `重新获取失败,${error}` ); + }); + }, 500 ); }); } From 62f9a662288c2080c2ab1726bf8b0912dad715f7 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 16:24:46 +0800 Subject: [PATCH 035/329] Optimize permissions.remove() logic. --- src/module/authorize.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 64d3f79f..955d7aed 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -106,6 +106,9 @@ export default class Auth extends React.Component { this.props.jianguo.username = ""; this.props.jianguo.password = ""; } + if ( state == "youdao" ) { + permission.removePermissions( youdao.permissions, result => new Notify().Render( `已取消 cookies 权限。` )); + } clear( state, exp.Name( state )); return; } @@ -237,7 +240,6 @@ export default class Auth extends React.Component { youdao.Auth( ( result, error ) => { if ( error ) failed( error, youdao.id, youdao.name ); else success( youdao.id, youdao.name, { access_token: youdao.access_token, folder_id: youdao.folder_id }); - permission.removePermissions( youdao.permissions, result => new Notify().Render( `已取消 cookies 权限。` )); }); }, 500 ); }); From 47d01069899b7a62936e953c65bf03b80ef03eaa Mon Sep 17 00:00:00 2001 From: Kenshin Date: Mon, 16 Sep 2019 16:27:18 +0800 Subject: [PATCH 036/329] Format source. --- src/module/authorize.jsx | 6 +++--- src/service/permission.js | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 955d7aed..b30ad855 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -107,7 +107,7 @@ export default class Auth extends React.Component { this.props.jianguo.password = ""; } if ( state == "youdao" ) { - permission.removePermissions( youdao.permissions, result => new Notify().Render( `已取消 cookies 权限。` )); + permission.Remove( youdao.permissions, result => new Notify().Render( `已取消 cookies 权限。` )); } clear( state, exp.Name( state )); return; @@ -230,7 +230,7 @@ export default class Auth extends React.Component { }); break; case "youdao": - permission.getPermissions( youdao.permissions, result => { + permission.Get( youdao.permissions, result => { if ( !result ) { new Notify().Render( 2, `此功能需要申请 cookies 权限后才能使用,授权成功后会自动取消。` ); this.setState({ secret: storage.secret }); @@ -286,7 +286,7 @@ export default class Auth extends React.Component { } youdaoChange() { - permission.getPermissions( exp.youdao.permissions, result => { + permission.Get( exp.youdao.permissions, result => { if ( !result ) { new Notify().Render( 2, `此功能需要申请 cookies 权限后才能使用,授权成功后会自动取消。` ); this.setState({ secret: storage.secret }); diff --git a/src/service/permission.js b/src/service/permission.js index 5f696b68..4919ddd1 100644 --- a/src/service/permission.js +++ b/src/service/permission.js @@ -1,7 +1,7 @@ import {browser} from 'browser'; -function getPermissions( permissions, callback ) { +function Get( permissions, callback ) { browser.permissions.contains({ permissions: permissions.permissions }, result => { result == false ? chrome.permissions.request( permissions, granted => { callback( granted ); @@ -9,13 +9,13 @@ function getPermissions( permissions, callback ) { }); } -function removePermissions( permissions, callback ) { +function Remove( permissions, callback ) { browser.permissions.remove( { permissions: permissions.permissions }, result => { callback( result ) }) } export { - getPermissions, - removePermissions + Get, + Remove } \ No newline at end of file From 593c75d0e15ea1a44e016a4883934e7d0cf3c76d Mon Sep 17 00:00:00 2001 From: Kenshin Date: Tue, 17 Dec 2019 15:22:25 +0800 Subject: [PATCH 037/329] Format source. --- src/service/message.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/message.js b/src/service/message.js index f5cf5d45..fbfa01c0 100644 --- a/src/service/message.js +++ b/src/service/message.js @@ -41,7 +41,7 @@ const action = { // event turn_tab : "turn_tab", welcome_close : "welcome_close", - "controlbar" : "simpread-plugin_controlbar", + controlbar : "simpread-plugin_controlbar", }; /** From a39e6d1a3c2266f6195a2d28592bd9b13025875a Mon Sep 17 00:00:00 2001 From: Kenshin Date: Tue, 17 Dec 2019 18:47:42 +0800 Subject: [PATCH 038/329] Add offline file. --- src/service/offline.js | 97 ++++++++++++++++++++++++++++++++++++++++++ webpack.config.js | 1 + 2 files changed, 98 insertions(+) create mode 100644 src/service/offline.js diff --git a/src/service/offline.js b/src/service/offline.js new file mode 100644 index 00000000..dcbeb30e --- /dev/null +++ b/src/service/offline.js @@ -0,0 +1,97 @@ +console.log( "=== simpread offline load ===" ) + +let currIdx = 0, maxCount = 0, urls = [], images, cb; + +function HTML( title, desc, content, styles ) { + const html = ` + + + + + + + + + + + 简悦 | ${title} + + + + ${title} + ${desc} + ${content} + + + + 全文完 + + + +
本文由 简悦 SimpRead 转码,用以提升阅读体验,原文地址
+
+
+
+ + `; + return html; +} + +function getImages( callback ) { + cb = callback; + images = new Map(); + $( "sr-rd-content" ).find( "img" ).map( ( idx, img ) => { + if ( !images.has( img.src ) ) { + images.set( img.src, img ); + } else { + //TO-DO + } + }); + urls = [...images.keys()]; + maxCount = urls.length; + currIdx = 0; + serialConvert( urls[0] ); +} + +function serialConvert( url ) { + toBase64( url, result => { + currIdx++; + if ( result && result.done ) { + setBase64( result.done.url, result.done.uri ); + } else { + // TO-DO + } + if ( currIdx < maxCount ) { + serialConvert( urls[currIdx] ); + } else { + console.log( "All images convert done" ) + cb && cb(); + } + }); +} + +function setBase64( url, uri ) { + const img = images.get( url ); + img.src = uri; +} + +function toBase64( url, callback ) { + fetch( url ) + .then( response => response.blob() ) + .then( blob => new Promise(( resolve, reject ) => { + const reader = new FileReader() + reader.onloadend = event => { + callback({ done: { url, uri: event.target.result }}); + }; + reader.onerror = error => { + callback({ fail: { error, url } }); + }; + reader.readAsDataURL( blob ); + })); +} + +export { + HTML, + getImages, + toBase64, +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 1bf394a8..f3fe730b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -261,6 +261,7 @@ const webpack = require( 'webpack' ), output : __dirname + '/src/service/output.js', runtime : __dirname + '/src/service/runtime.js', permission : __dirname + '/src/service/permission.js', + offline : __dirname + '/src/service/offline.js', focus : __dirname + '/src/focus/focus.js', controlbar : __dirname + '/src/focus/controlbar.jsx', From 0b2eaa60474f1c2aa30c7c4dfce2d38b694c8691 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Tue, 17 Dec 2019 18:48:12 +0800 Subject: [PATCH 039/329] Optimize theme logic and add th.Get(). --- src/service/theme.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/service/theme.js b/src/service/theme.js index 7dffc8fd..7db82e37 100644 --- a/src/service/theme.js +++ b/src/service/theme.js @@ -66,6 +66,10 @@ class Theme { tocTheme( theme ); } + Get( theme ) { + return themes[theme]; + } + constructor() { require( `../assets/css/theme_common.css` ); names.forEach( name => require( `../assets/css/theme_${name}.css` ) ); @@ -86,6 +90,10 @@ function findThemeStyle( callback ) { const arr = css.replace( flag, "" ).match( /\w+/ ), name = arr[ arr.length - 1 ]; callback( name, css, $target ); + } else if ( css.search( ".simpread-font" ) > -1 ) { + themes["global"] = css; + } else if ( css.search( ".simpread-theme-root" ) > -1 ) { + themes["common"] = css; } }); } From 2a7be0757f5145b534a0249a15c3095329192c9f Mon Sep 17 00:00:00 2001 From: Kenshin Date: Tue, 17 Dec 2019 18:48:41 +0800 Subject: [PATCH 040/329] Add offline html logic. --- src/service/output.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/service/output.js b/src/service/output.js index c2232ae5..48ef50a6 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -7,6 +7,8 @@ import {browser} from 'browser'; import * as msg from 'message'; import * as highlight from 'highlight'; import * as share from 'sharecard'; +import * as offline from 'offline'; +import th from 'theme'; /** * Controlbar common action, include: @@ -89,6 +91,19 @@ function action( type, title, desc, content ) { }); break; case "html": + /* + const notify2 = new Notify().Render({ content: "图片转换中吗,请稍等...", state: "loading" }); + offline.getImages( () => { + notify2.complete(); + new Notify().Render( 0, "全部图片已经转换完毕,马上开始下载,请稍等。" ); + }); + */ + const theme = th.Get( storage.read.theme ), + global = th.Get( "global" ), + common = th.Get( "common" ); + const html = offline.HTML( title, desc, content, { global, common, theme } ); + exp.Download( "data:text/plain;charset=utf-8," + encodeURIComponent(html), `simpread-${title}.html` ); + break; case "temp": case "kindle": const notify = new Notify().Render({ state: "loading", content: "开始转码阅读模式并上传到服务器,请稍后。" }); From d8bd48c6794881908fcfb3237d19721e5aa4a8bd Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 08:14:49 +0800 Subject: [PATCH 041/329] Format source. --- src/service/offline.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/offline.js b/src/service/offline.js index dcbeb30e..dabc00c0 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -19,7 +19,7 @@ function HTML( title, desc, content, styles ) { ${title} - ${desc} + ${desc} ${content} From d37d69e2fd6339b2e024a84f6db87e3fe2e16f83 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 08:39:55 +0800 Subject: [PATCH 042/329] Optimize toBase64 logic. --- src/service/offline.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/service/offline.js b/src/service/offline.js index dabc00c0..235ac44c 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -87,7 +87,10 @@ function toBase64( url, callback ) { callback({ fail: { error, url } }); }; reader.readAsDataURL( blob ); - })); + })) + .catch( error => { + callback({ fail: { error, url } }); + }); } export { From ba6d37138fed6e3f3c13579143df096274fcad82 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:15:00 +0800 Subject: [PATCH 043/329] Optimize offline html lgoic. --- src/service/output.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/service/output.js b/src/service/output.js index 48ef50a6..a816b983 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -91,18 +91,18 @@ function action( type, title, desc, content ) { }); break; case "html": - /* const notify2 = new Notify().Render({ content: "图片转换中吗,请稍等...", state: "loading" }); offline.getImages( () => { notify2.complete(); new Notify().Render( 0, "全部图片已经转换完毕,马上开始下载,请稍等。" ); + const theme = th.Get( storage.read.theme ), + global = th.Get( "global" ), + common = th.Get( "common" ), + html = offline.HTML( title, desc, $( "sr-rd-content" ).html(), { global, common, theme } ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.download, { data: html, name: `simpread-${title}.html` }), result => { + console.log( "Current download result: ", result ) + }); }); - */ - const theme = th.Get( storage.read.theme ), - global = th.Get( "global" ), - common = th.Get( "common" ); - const html = offline.HTML( title, desc, content, { global, common, theme } ); - exp.Download( "data:text/plain;charset=utf-8," + encodeURIComponent(html), `simpread-${title}.html` ); break; case "temp": case "kindle": From fdf9b24777bea0c67a13edb64429b4632f235252 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:17:42 +0800 Subject: [PATCH 044/329] Optimize toBase64 logic. --- src/service/offline.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/service/offline.js b/src/service/offline.js index 235ac44c..5650a948 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -1,5 +1,8 @@ console.log( "=== simpread offline load ===" ) +import {browser} from 'browser'; +import * as msg from 'message'; + let currIdx = 0, maxCount = 0, urls = [], images, cb; function HTML( title, desc, content, styles ) { @@ -54,7 +57,8 @@ function getImages( callback ) { } function serialConvert( url ) { - toBase64( url, result => { + //toBase64( url, result => { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.base64, { url }), result => { currIdx++; if ( result && result.done ) { setBase64( result.done.url, result.done.uri ); From 3108128f9132a21d05bf922e5fb52cd6333e5da0 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:22:27 +0800 Subject: [PATCH 045/329] Format source. --- src/service/offline.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/service/offline.js b/src/service/offline.js index 5650a948..cda13773 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -5,6 +5,16 @@ import * as msg from 'message'; let currIdx = 0, maxCount = 0, urls = [], images, cb; +/** + * Offline HTML + * + * @param {string} title + * @param {string} desc + * @param {string} content + * @param {object} styles, include: simpread(global), common, theme + * + * @return {string} html + */ function HTML( title, desc, content, styles ) { const html = ` @@ -40,6 +50,11 @@ function HTML( title, desc, content, styles ) { return html; } +/** + * Get current page( readmode ) all images and convert to base64 + * + * @param {func} callback + */ function getImages( callback ) { cb = callback; images = new Map(); @@ -56,8 +71,15 @@ function getImages( callback ) { serialConvert( urls[0] ); } +/** + * Convert url to base64 + * + * @param {string} url + */ function serialConvert( url ) { + // call contentscriptsa //toBase64( url, result => { + // call background browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.base64, { url }), result => { currIdx++; if ( result && result.done ) { @@ -74,11 +96,23 @@ function serialConvert( url ) { }); } +/** + * Change img.src to base64 + * + * @param {string} url + * @param {string} uri + */ function setBase64( url, uri ) { const img = images.get( url ); img.src = uri; } +/** + * toBase64 usage FileReader + * + * @param {string} url + * @param {func} callback + */ function toBase64( url, callback ) { fetch( url ) .then( response => response.blob() ) From bb48bb763031eb2378db3e10dbfa1c9bae06327b Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:36:54 +0800 Subject: [PATCH 046/329] Add custom css. --- src/service/offline.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/service/offline.js b/src/service/offline.js index cda13773..0cb66e68 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -11,7 +11,7 @@ let currIdx = 0, maxCount = 0, urls = [], images, cb; * @param {string} title * @param {string} desc * @param {string} content - * @param {object} styles, include: simpread(global), common, theme + * @param {object} styles, include: simpread(global), common, theme, css * * @return {string} html */ @@ -27,6 +27,7 @@ function HTML( title, desc, content, styles ) { + 简悦 | ${title} From ceecf5cae11d2f0bb167850f9bfddeb53595fe0e Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:39:09 +0800 Subject: [PATCH 047/329] Format source. --- src/service/output.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/service/output.js b/src/service/output.js index a816b983..9b172d0c 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -98,7 +98,8 @@ function action( type, title, desc, content ) { const theme = th.Get( storage.read.theme ), global = th.Get( "global" ), common = th.Get( "common" ), - html = offline.HTML( title, desc, $( "sr-rd-content" ).html(), { global, common, theme } ); + css = storage.read.custom.css, + html = offline.HTML( title, desc, $( "sr-rd-content" ).html(), { global, common, theme, css } ); browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.download, { data: html, name: `simpread-${title}.html` }), result => { console.log( "Current download result: ", result ) }); From bf1dead988843d5df7692853ac1e37c9390d7a9d Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:39:53 +0800 Subject: [PATCH 048/329] Add new message state. --- src/service/message.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/service/message.js b/src/service/message.js index fbfa01c0..e1de177a 100644 --- a/src/service/message.js +++ b/src/service/message.js @@ -42,6 +42,9 @@ const action = { turn_tab : "turn_tab", welcome_close : "welcome_close", controlbar : "simpread-plugin_controlbar", + // offline + download : "download", + base64 : "base64", }; /** From ad6d069391ef73aeef4d4eec05e65cfa4fa666bf Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:40:18 +0800 Subject: [PATCH 049/329] Add new permission: downloads. --- src/manifest.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/manifest.json b/src/manifest.json index d556945e..4bb735a6 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -15,7 +15,8 @@ "contextMenus", "tabs", "storage", - "tts" + "tts", + "downloads" ], "optional_permissions": [ "cookies", "https://*.youdao.com/" ], "background": { From b184420075fd3ee5d508aa2969e39884ab3a45af Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:40:36 +0800 Subject: [PATCH 050/329] Add new event hander: base64 & download. --- src/background.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/background.js b/src/background.js index 1f2c315f..6fe706ef 100644 --- a/src/background.js +++ b/src/background.js @@ -143,6 +143,43 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) //return true; }); +/** + * Listen runtime message, include: `corb` + */ +browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) { + if ( request.type == msg.MESSAGE_ACTION.download ) { + const { data, name } = request.value; + const blob = new Blob([data], { + type: "html/plain;charset=utf-8" + }); + const url = URL.createObjectURL(blob); + browser.downloads.download({ + url : url, + filename: name, + }, downloadId => { + sendResponse({ done: downloadId }); + }); + } else if ( request.type == msg.MESSAGE_ACTION.base64 ) { + const { url } = request.value; + fetch( url ) + .then( response => response.blob() ) + .then( blob => new Promise(( resolve, reject ) => { + const reader = new FileReader() + reader.onloadend = event => { + sendResponse({ done: { url, uri: event.target.result }}); + }; + reader.onerror = error => { + sendResponse({ fail: { error, url } }); + }; + reader.readAsDataURL( blob ); + })) + .catch( error => { + sendResponse({ fail: { error, url } }); + }); + } + return true; +}); + /** * Listen runtime message, include: `shortcuts` `browser_action` */ From 3f0e6031cf153689da130e75ce124216c68faf1c Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:41:58 +0800 Subject: [PATCH 051/329] Format source. --- src/background.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/background.js b/src/background.js index 6fe706ef..0b3c5eea 100644 --- a/src/background.js +++ b/src/background.js @@ -144,7 +144,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) }); /** - * Listen runtime message, include: `corb` + * Listen runtime message, include: `download` && `base64` */ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) { if ( request.type == msg.MESSAGE_ACTION.download ) { From 7776398f2c79002b4eddddcbe6801554a04dc342 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 10:53:28 +0800 Subject: [PATCH 052/329] Format source. --- src/service/offline.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/service/offline.js b/src/service/offline.js index 0cb66e68..ae09e330 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -17,7 +17,7 @@ let currIdx = 0, maxCount = 0, urls = [], images, cb; */ function HTML( title, desc, content, styles ) { const html = ` - + @@ -31,7 +31,7 @@ function HTML( title, desc, content, styles ) { 简悦 | ${title} - + ${title} ${desc} ${content} From fc7139f991f102821e47f7bbc235e0d6490bea5f Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:07:56 +0800 Subject: [PATCH 053/329] Add custom to offline html. --- src/service/offline.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/service/offline.js b/src/service/offline.js index ae09e330..c8d4c579 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -16,7 +16,14 @@ let currIdx = 0, maxCount = 0, urls = [], images, cb; * @return {string} html */ function HTML( title, desc, content, styles ) { - const html = ` + const custom = () => { + let styles = ""; + $( "head" ).find( "style" ).map( (index, item) => { + item.id.startsWith( "simpread-custom-" ) && ( styles += item.innerHTML ); + }); + return styles; + }, + html = ` @@ -27,6 +34,7 @@ function HTML( title, desc, content, styles ) { + 简悦 | ${title} From 978f6d5e4ac016a25c5a429f8408201cf94523ce Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:21:34 +0800 Subject: [PATCH 054/329] Add GetCustomCSS(). --- src/service/stylesheet.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/service/stylesheet.js b/src/service/stylesheet.js index 8591c44c..2938db2a 100644 --- a/src/service/stylesheet.js +++ b/src/service/stylesheet.js @@ -197,6 +197,14 @@ function vfyCustom( type, styles ) { } } +function getCustomCSS() { + let styles = ""; + $( "head" ).find( "style" ).map( (index, item) => { + item.id.startsWith( "simpread-custom-" ) && ( styles += item.innerHTML ); + }); + return styles; +} + export { iconPath as IconPath, getColor as GetColor, @@ -210,4 +218,5 @@ export { custom as Custom, css as CSS, vfyCustom as VerifyCustom, + getCustomCSS as GetCustomCSS, } \ No newline at end of file From 522d79e8a442d558a32f181a9c991919fa0217c3 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:22:03 +0800 Subject: [PATCH 055/329] Format source. --- src/service/offline.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/service/offline.js b/src/service/offline.js index c8d4c579..2768a9b5 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -16,14 +16,7 @@ let currIdx = 0, maxCount = 0, urls = [], images, cb; * @return {string} html */ function HTML( title, desc, content, styles ) { - const custom = () => { - let styles = ""; - $( "head" ).find( "style" ).map( (index, item) => { - item.id.startsWith( "simpread-custom-" ) && ( styles += item.innerHTML ); - }); - return styles; - }, - html = ` + const html = ` @@ -34,7 +27,6 @@ function HTML( title, desc, content, styles ) { - 简悦 | ${title} From 0d0bcd1b19f85c7fc3c003c65d62898597b5307c Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:22:34 +0800 Subject: [PATCH 056/329] Add ss.GetCustomCSS() to offline html. --- src/service/output.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/service/output.js b/src/service/output.js index 9b172d0c..5cc921be 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -9,6 +9,7 @@ import * as highlight from 'highlight'; import * as share from 'sharecard'; import * as offline from 'offline'; import th from 'theme'; +import * as ss from 'stylesheet'; /** * Controlbar common action, include: @@ -98,7 +99,7 @@ function action( type, title, desc, content ) { const theme = th.Get( storage.read.theme ), global = th.Get( "global" ), common = th.Get( "common" ), - css = storage.read.custom.css, + css = ss.GetCustomCSS(), html = offline.HTML( title, desc, $( "sr-rd-content" ).html(), { global, common, theme, css } ); browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.download, { data: html, name: `simpread-${title}.html` }), result => { console.log( "Current download result: ", result ) From bf6b0c4c6cba1b5f33174b821d15b0e7a8b7eade Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:24:47 +0800 Subject: [PATCH 057/329] Format source. --- src/service/stylesheet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/stylesheet.js b/src/service/stylesheet.js index 2938db2a..c91cd4fd 100644 --- a/src/service/stylesheet.js +++ b/src/service/stylesheet.js @@ -198,7 +198,7 @@ function vfyCustom( type, styles ) { } function getCustomCSS() { - let styles = ""; + let styles = $( "style#simpread-site-css" ).text() || ""; $( "head" ).find( "style" ).map( (index, item) => { item.id.startsWith( "simpread-custom-" ) && ( styles += item.innerHTML ); }); From 15f961290b36b6b821f0eab55985f17c71d066a0 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:51:17 +0800 Subject: [PATCH 058/329] Add 'downloads' to 'optional_permissions'. --- src/manifest.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/manifest.json b/src/manifest.json index 4bb735a6..b25ad546 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -15,10 +15,9 @@ "contextMenus", "tabs", "storage", - "tts", - "downloads" + "tts" ], - "optional_permissions": [ "cookies", "https://*.youdao.com/" ], + "optional_permissions": [ "cookies", "https://*.youdao.com/", "downloads" ], "background": { "scripts" : [ "/bundle/common.js", "/bundle/background.js" ] }, From e5a04bd3d84d142607eeed1993fd0aaeea162a6c Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:51:56 +0800 Subject: [PATCH 059/329] Add 'permission' state. --- src/service/message.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/message.js b/src/service/message.js index e1de177a..6e01377e 100644 --- a/src/service/message.js +++ b/src/service/message.js @@ -45,6 +45,7 @@ const action = { // offline download : "download", base64 : "base64", + permission : "permission", }; /** From 770afff149d652a3808c44239303cc7ef8dedf4d Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:52:23 +0800 Subject: [PATCH 060/329] Add background permission logic. --- src/background.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/background.js b/src/background.js index 0b3c5eea..aee2ad04 100644 --- a/src/background.js +++ b/src/background.js @@ -8,7 +8,8 @@ import * as ver from 'version'; import * as menu from 'menu'; import * as watch from 'watch'; import * as WebDAV from 'webdav'; - +import * as permission + from 'permission'; import PureRead from 'puread'; // global update site tab id @@ -176,6 +177,10 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) .catch( error => { sendResponse({ fail: { error, url } }); }); + } else if ( request.type == msg.MESSAGE_ACTION.permission ) { + permission.Get({ permissions: [ "downloads" ] }, result => { + sendResponse({ done: result }); + }); } return true; }); From cf38a3210130fb32f91c5fbe3fef612f17c62e3b Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 11:52:40 +0800 Subject: [PATCH 061/329] Add permission veify workflow. --- src/service/output.js | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/service/output.js b/src/service/output.js index 5cc921be..fcdd351d 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -92,18 +92,25 @@ function action( type, title, desc, content ) { }); break; case "html": - const notify2 = new Notify().Render({ content: "图片转换中吗,请稍等...", state: "loading" }); - offline.getImages( () => { - notify2.complete(); - new Notify().Render( 0, "全部图片已经转换完毕,马上开始下载,请稍等。" ); - const theme = th.Get( storage.read.theme ), - global = th.Get( "global" ), - common = th.Get( "common" ), - css = ss.GetCustomCSS(), - html = offline.HTML( title, desc, $( "sr-rd-content" ).html(), { global, common, theme, css } ); - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.download, { data: html, name: `simpread-${title}.html` }), result => { - console.log( "Current download result: ", result ) - }); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.permission ), result => { + if ( !result.done ) { + new Notify().Render( 2, `离线下载的文件体积较大,所以需要使用 Chrome 下载方案,请授权。` ); + return; + } else { + const notify2 = new Notify().Render({ content: "图片转换中吗,请稍等...", state: "loading" }); + offline.getImages( () => { + notify2.complete(); + new Notify().Render( 0, "全部图片已经转换完毕,马上开始下载,请稍等。" ); + const theme = th.Get( storage.read.theme ), + global = th.Get( "global" ), + common = th.Get( "common" ), + css = ss.GetCustomCSS(), + html = offline.HTML( title, desc, $( "sr-rd-content" ).html(), { global, common, theme, css } ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.download, { data: html, name: `simpread-${title}.html` }), result => { + console.log( "Current download result: ", result ) + }); + }); + } }); break; case "temp": From 26960eb0d8e36aa9de8880a7eecaa2afc93824e9 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 12:01:26 +0800 Subject: [PATCH 062/329] Add offline html to controlbar. --- src/assets/images/offline_html_icon.png | Bin 0 -> 310 bytes src/read/controlbar.jsx | 2 +- src/service/config.js | 10 ++++++++++ src/service/output.js | 4 ++-- 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 src/assets/images/offline_html_icon.png diff --git a/src/assets/images/offline_html_icon.png b/src/assets/images/offline_html_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5157782bd3f252965f71af2dd2b9f7b874929b GIT binary patch literal 310 zcmV-60m=S}P)b<85JcbHfpgF$9RgR8a)AgTrAtAF#05x|hAv%FBhexbKxoMY5NAPJwAMPZ72sO} zcXnm_&(7@5{QpJ6j~eEu6-YYVT2#*>GaEQk(ogYzuCly-3G4sMwRr|+W*C6K^C{a=j=ZDGTw96BM0=zyWv!z9hYvnKzXbsE&4BU!~`FKeFDb7b1i{#1_^=JAl?IOpbKp8nZX0_3rv6`&?y9Bl6*jK zvIzO#HZ6tvw-%xM_bx)ddJdeUy(;Qm6-m?$fHs4qd5v3i0xSEU8Q~0G&j0`b07*qo IM6N<$f{m4Vp8x;= literal 0 HcmV?d00001 diff --git a/src/read/controlbar.jsx b/src/read/controlbar.jsx index 846a561a..48c17fe3 100644 --- a/src/read/controlbar.jsx +++ b/src/read/controlbar.jsx @@ -109,7 +109,7 @@ export default class ReadCtlbar extends React.Component { break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || - [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { + [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } diff --git a/src/service/config.js b/src/service/config.js index b37badb0..db884751 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -28,6 +28,11 @@ const keyboard = { "kbd" : "hm", "type" : "html", "desc" : "导出为 HTML", + }, + ofh: { + "kbd" : "ofh", + "type" : "offlinehtml", + "desc" : "导出为 离线 HTML", } }, "控制栏 - 其它" : { @@ -291,6 +296,11 @@ const readItems = { "icon" : ss.IconPath("html_icon"), "color": "#D4237A", }, + "offlinehtml" : { + "name" : "导出为 离线 HTML", + "icon" : ss.IconPath("offline_html_icon"), + "color": "#D4237A", + } }, }, "send" : { diff --git a/src/service/output.js b/src/service/output.js index fcdd351d..beffc609 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -54,7 +54,7 @@ function action( type, title, desc, content ) { break; } type.split("_")[1] != "card" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url })); - } else if ( [ "save", "markdown", "png", "kindle", "pdf", "epub", "temp", "html" ].includes( type ) ) { + } else if ( [ "save", "markdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml" ].includes( type ) ) { storage.Statistics( "service", type ); switch ( type ) { case "save": @@ -91,7 +91,7 @@ function action( type, title, desc, content ) { !success && new Notify().Render( 2, `转换失败,这是一个实验性功能,不一定能导出成功,详细请看 epub.press` ); }); break; - case "html": + case "offlinehtml": browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.permission ), result => { if ( !result.done ) { new Notify().Render( 2, `离线下载的文件体积较大,所以需要使用 Chrome 下载方案,请授权。` ); From c875faa898ddcc9809a738fcdaf55f60b355b141 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 12:05:25 +0800 Subject: [PATCH 063/329] Optimize download html logic. --- src/service/output.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/service/output.js b/src/service/output.js index beffc609..09794f53 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -113,6 +113,14 @@ function action( type, title, desc, content ) { } }); break; + case "html": + const theme = th.Get( storage.read.theme ), + global = th.Get( "global" ), + common = th.Get( "common" ), + css = ss.GetCustomCSS(), + html = offline.HTML( title, desc, content, { global, common, theme, css } ); + exp.Download( "data:text/plain;charset=utf-8," + encodeURIComponent(html), `simpread-${title}.html` ); + break; case "temp": case "kindle": const notify = new Notify().Render({ state: "loading", content: "开始转码阅读模式并上传到服务器,请稍后。" }); @@ -137,15 +145,6 @@ function action( type, title, desc, content ) { new Notify().Render( "保存成功,3 秒钟后将跳转到临时页面。" ); setTimeout( ()=>{ exp.kindle.Temp(); }, 3000 ); break; - case "html": - new Notify().Render( "保存成功,开始下载..." ); - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.CORB, { settings: { url: `${exp.kindle.host}/${exp.kindle.id}.html`, type: "GET" }}), result => { - if ( result && result.done != "" ) { - result = result.done.replace( / Date: Wed, 18 Dec 2019 12:07:20 +0800 Subject: [PATCH 064/329] Format source. --- src/background.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/background.js b/src/background.js index aee2ad04..1c26dfb6 100644 --- a/src/background.js +++ b/src/background.js @@ -145,7 +145,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) }); /** - * Listen runtime message, include: `download` && `base64` + * Listen runtime message, include: `download`, `base64` && `permission` */ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) { if ( request.type == msg.MESSAGE_ACTION.download ) { From e0d36bd43ada929df386cc61df89d4034326c539 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 13:51:07 +0800 Subject: [PATCH 065/329] Format source. --- src/background.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/background.js b/src/background.js index 1c26dfb6..21ad0a02 100644 --- a/src/background.js +++ b/src/background.js @@ -156,7 +156,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) const url = URL.createObjectURL(blob); browser.downloads.download({ url : url, - filename: name, + filename: name.replace( /[|]/ig, "" ), }, downloadId => { sendResponse({ done: downloadId }); }); From b7f32abbd7dc817e25137471cb0eac96b823d827 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 14:54:41 +0800 Subject: [PATCH 066/329] Add save to bear. --- src/assets/images/bear_icon.png | Bin 0 -> 233 bytes src/read/controlbar.jsx | 2 +- src/service/config.js | 5 +++++ src/service/output.js | 8 +++++++- 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 src/assets/images/bear_icon.png diff --git a/src/assets/images/bear_icon.png b/src/assets/images/bear_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..263d59ba2cc29216d527f27bbc8c9d5e7272ae2b GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaADF*n2xVjhk+<)+3S&+}eyLXQr zIB@aw>Hq)#|M>Ca>z6NAuUvWd;>FsR4IhAt*-C=^f*F1boN;Nc^kVx96e;v{aSYKo zzjcx|-vI?4XU_RYp8R89w=lGwAv&9F$#;(@jZ^A6UIm`fk!jgx{OcH>jnCX85&6*v z8MKdAh*+6us=3e?tX_P%f#+Sf 0 && type.startsWith( "share" ) || - [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { + [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "bear", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } diff --git a/src/service/config.js b/src/service/config.js index db884751..244c4cf0 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -363,6 +363,11 @@ const readItems = { "icon" : ss.IconPath("temp_icon"), "color": "#00BCD4", }, + "bear" : { + "name" : "保存到 Bear", + "icon" : ss.IconPath("bear_icon"), + "color": "#00BCD4", + }, }, }, "dyslexia" : { diff --git a/src/service/output.js b/src/service/output.js index 09794f53..b98e1f6a 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -54,7 +54,7 @@ function action( type, title, desc, content ) { break; } type.split("_")[1] != "card" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url })); - } else if ( [ "save", "markdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml" ].includes( type ) ) { + } else if ( [ "save", "markdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml", "bear" ].includes( type ) ) { storage.Statistics( "service", type ); switch ( type ) { case "save": @@ -121,6 +121,12 @@ function action( type, title, desc, content ) { html = offline.HTML( title, desc, content, { global, common, theme, css } ); exp.Download( "data:text/plain;charset=utf-8," + encodeURIComponent(html), `simpread-${title}.html` ); break; + case "bear": + storage.pr.current.site.avatar[0].name != "" && ( content = util.MULTI2ENML( content ) ); + exp.MDWrapper( util.ClearMD( content ), undefined, new Notify() ).done( result => { + location.href = `bear://x-callback-url/create?title=${title}&text=${encodeURIComponent(result)}&tags=simpread`; + }); + break; case "temp": case "kindle": const notify = new Notify().Render({ state: "loading", content: "开始转码阅读模式并上传到服务器,请稍后。" }); From 2ca0d11fb8936d6463540da95276b9c6a88d3f87 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 15:03:30 +0800 Subject: [PATCH 067/329] Add save to ulysses. --- src/assets/images/ulysses_icon.png | Bin 0 -> 410 bytes src/read/controlbar.jsx | 2 +- src/service/config.js | 5 +++++ src/service/output.js | 8 +++++++- 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 src/assets/images/ulysses_icon.png diff --git a/src/assets/images/ulysses_icon.png b/src/assets/images/ulysses_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f4d6999d2a283cb22950d61582cd98acde7413 GIT binary patch literal 410 zcmV;L0cHM)P)Gl|FWs6(DqGc<1=s|>CW~L@EF&IB|X_51D1fn^o*oR7-xYl$UG 0 && type.startsWith( "share" ) || - [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "bear", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { + [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "bear", "ulysses", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } diff --git a/src/service/config.js b/src/service/config.js index 244c4cf0..b5ebac77 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -368,6 +368,11 @@ const readItems = { "icon" : ss.IconPath("bear_icon"), "color": "#00BCD4", }, + "ulysses" : { + "name" : "保存到 Ulysses", + "icon" : ss.IconPath("ulysses_icon"), + "color": "#00BCD4", + }, }, }, "dyslexia" : { diff --git a/src/service/output.js b/src/service/output.js index b98e1f6a..ac46e690 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -54,7 +54,7 @@ function action( type, title, desc, content ) { break; } type.split("_")[1] != "card" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url })); - } else if ( [ "save", "markdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml", "bear" ].includes( type ) ) { + } else if ( [ "save", "markdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml", "bear", "ulysses" ].includes( type ) ) { storage.Statistics( "service", type ); switch ( type ) { case "save": @@ -127,6 +127,12 @@ function action( type, title, desc, content ) { location.href = `bear://x-callback-url/create?title=${title}&text=${encodeURIComponent(result)}&tags=simpread`; }); break; + case "ulysses": + storage.pr.current.site.avatar[0].name != "" && ( content = util.MULTI2ENML( content ) ); + exp.MDWrapper( util.ClearMD( content ), undefined, new Notify() ).done( result => { + location.href = `ulysses://x-callback-url/new-sheet?text=${encodeURIComponent(result)}`; + }); + break; case "temp": case "kindle": const notify = new Notify().Render({ state: "loading", content: "开始转码阅读模式并上传到服务器,请稍后。" }); From 4bafd3b928a121714cc11b900c8e46551a40fa92 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 15:11:07 +0800 Subject: [PATCH 068/329] Add bear & ulysses to shortcuts. --- src/assets/css/simpread.css | 2 +- src/service/config.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 4a0cfa21..6a1781ec 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -497,7 +497,7 @@ kbd-mapping { flex-flow: row; width: 500px; - height: 590px; + height: 630px; background-color: #fff; diff --git a/src/service/config.js b/src/service/config.js index b5ebac77..2ad977a2 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -123,6 +123,16 @@ const keyboard = { "type" : "save", "desc" : "保存到 稍后读", }, + br: { + "kbd" : "br", + "type" : "bear", + "desc" : "保存到 Bear", + }, + ul: { + "kbd" : "ul", + "type" : "ulysses", + "desc" : "保存到 Ulysses", + }, tm: { "kbd" : "tm", "type" : "temp", From c22251a6940d43b186b9e8a7bf3e5ffcd27706b2 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 15:12:45 +0800 Subject: [PATCH 069/329] Format source. --- src/assets/css/simpread.css | 2 +- src/service/config.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 6a1781ec..f1c462d1 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -497,7 +497,7 @@ kbd-mapping { flex-flow: row; width: 500px; - height: 630px; + height: 610px; background-color: #fff; diff --git a/src/service/config.js b/src/service/config.js index 2ad977a2..d30bf331 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -33,7 +33,12 @@ const keyboard = { "kbd" : "ofh", "type" : "offlinehtml", "desc" : "导出为 离线 HTML", - } + }, + tm: { + "kbd" : "tm", + "type" : "temp", + "desc" : "导出为 临时页面", + }, }, "控制栏 - 其它" : { ff: { @@ -133,11 +138,6 @@ const keyboard = { "type" : "ulysses", "desc" : "保存到 Ulysses", }, - tm: { - "kbd" : "tm", - "type" : "temp", - "desc" : "生成临时页面", - }, }, "控制栏 - 无障碍" : { ts: { From 241f86b431295188d2067ff2835e109def7ce5c3 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 15:53:16 +0800 Subject: [PATCH 070/329] Add highlight verify. --- src/service/offline.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/service/offline.js b/src/service/offline.js index 2768a9b5..1b470034 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -16,7 +16,12 @@ let currIdx = 0, maxCount = 0, urls = [], images, cb; * @return {string} html */ function HTML( title, desc, content, styles ) { - const html = ` + const hightlight = () => { + if ( content.search( 'pre class="hljs' ) > -1 || content.search( 'code class="hljs' ) > -1 ) { + return `` + } else return ''; + }, + html = ` @@ -28,6 +33,7 @@ function HTML( title, desc, content, styles ) { + ${hightlight()} 简悦 | ${title} From 21fd403b09c354e81031ce9243bcd59a07aafb7a Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 15:55:16 +0800 Subject: [PATCH 071/329] Optimize offline html mete section. --- src/service/offline.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/service/offline.js b/src/service/offline.js index 1b470034..de59cacd 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -24,11 +24,20 @@ function HTML( title, desc, content, styles ) { html = ` - - - + + + + + + + + + + + + From d4a7c5a4e67348f9f8d7c5f07e599e6f64171318 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 16:01:08 +0800 Subject: [PATCH 072/329] Optimize send to kindle url. --- src/service/export.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/export.js b/src/service/export.js index 9aefacaa..6edb12e5 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -1538,7 +1538,7 @@ class Kindle { } get server() { - return "http://fivefilters.org/kindle-it/send.php"; + return "https://pushtokindle.fivefilters.org/send.php"; } Read( url, title, desc, content, style, callback ) { From 86edd8b838a314e06b7318d672fb8ffcd75b9a2e Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 18:31:45 +0800 Subject: [PATCH 073/329] Add new permission ''. --- src/manifest.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/manifest.json b/src/manifest.json index b25ad546..f37a7bc2 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -15,7 +15,8 @@ "contextMenus", "tabs", "storage", - "tts" + "tts", + "" ], "optional_permissions": [ "cookies", "https://*.youdao.com/", "downloads" ], "background": { From b635115da9624acbf8766dd3b422a6ca3994b38b Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 18:32:18 +0800 Subject: [PATCH 074/329] Add new message 'snapshot'. --- src/service/message.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/service/message.js b/src/service/message.js index 6e01377e..260b5098 100644 --- a/src/service/message.js +++ b/src/service/message.js @@ -46,6 +46,8 @@ const action = { download : "download", base64 : "base64", permission : "permission", + // snapshot + snapshot : "snapshot", }; /** From d78d718b8c02bed95e07658d491f85fde5167e91 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 18:32:44 +0800 Subject: [PATCH 075/329] Add test snapshot source. --- src/service/output.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/service/output.js b/src/service/output.js index ac46e690..ac97d302 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -68,6 +68,11 @@ function action( type, title, desc, content ) { const md = "simpread-" + title + ".md"; storage.pr.current.site.avatar[0].name != "" && ( content = util.MULTI2ENML( content ) ); exp.MDWrapper( util.ClearMD( content ), md, new Notify() ); + /* + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.snapshot ), result => { + $( "sr-rd-content" ).find( "img" )[0].src = result.done; + }); + */ break; case "png": try { From a3328e62674ef4849c504e860918d09a45e189c0 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 18 Dec 2019 18:33:03 +0800 Subject: [PATCH 076/329] Add test snapshot source. --- src/background.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/background.js b/src/background.js index 21ad0a02..6f626035 100644 --- a/src/background.js +++ b/src/background.js @@ -185,6 +185,29 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) return true; }); +/** + * Listen runtime message, include: `snapshot` + */ +browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) { + if ( request.type == msg.MESSAGE_ACTION.snapshot ) { + chrome.tabs.captureVisibleTab( { format: "png" }, base64 => { + const image = new Image(); + image.src = base64; + image.onload = () => { + const canvas = document.createElement( "canvas" ), + ctx = canvas.getContext( "2d" ); + + canvas.height = image.naturalHeight; + canvas.width = image.naturalWidth; + ctx.drawImage( image, 0, 0, 1000, 1000, 0, 0, 1000, 1000 ); + const uri = canvas.toDataURL( "image/png" ); + sendResponse({ done: uri }); + }; + }); + } + return true; +}); + /** * Listen runtime message, include: `shortcuts` `browser_action` */ From 21a390df100cabb537088dc3b0da1b4824fd4632 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Thu, 19 Dec 2019 12:42:11 +0800 Subject: [PATCH 077/329] Remove test source. --- src/service/output.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/service/output.js b/src/service/output.js index ac97d302..ac46e690 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -68,11 +68,6 @@ function action( type, title, desc, content ) { const md = "simpread-" + title + ".md"; storage.pr.current.site.avatar[0].name != "" && ( content = util.MULTI2ENML( content ) ); exp.MDWrapper( util.ClearMD( content ), md, new Notify() ); - /* - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.snapshot ), result => { - $( "sr-rd-content" ).find( "img" )[0].src = result.done; - }); - */ break; case "png": try { From d4ccb918517745e100f4c17e4f1f83dfd36afcc0 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Thu, 19 Dec 2019 12:48:53 +0800 Subject: [PATCH 078/329] Add snapshot to controlbar. --- src/assets/images/snapshot_icon.png | Bin 0 -> 441 bytes src/read/controlbar.jsx | 2 +- src/service/config.js | 7 ++++++- 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 src/assets/images/snapshot_icon.png diff --git a/src/assets/images/snapshot_icon.png b/src/assets/images/snapshot_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b345fac136bb41ffa490b38c1f49dc264d20d2ea GIT binary patch literal 441 zcmV;q0Y?6bP)@n%q%mn$Tnu?m#2Ym;6&0)g`Y#k jysE~|GI6 0 && type.startsWith( "share" ) || - [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "bear", "ulysses", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { + [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "bear", "ulysses", "html", "offlinehtml", "snapshot", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } diff --git a/src/service/config.js b/src/service/config.js index d30bf331..0e46cad8 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -310,7 +310,12 @@ const readItems = { "name" : "导出为 离线 HTML", "icon" : ss.IconPath("offline_html_icon"), "color": "#D4237A", - } + }, + "snapshot" : { + "name" : "截图", + "icon" : ss.IconPath("snapshot_icon"), + "color": "#D4237A", + }, }, }, "send" : { From 4ab315f959bca0068d86b9ffbddc3e67943b3cb4 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Thu, 19 Dec 2019 12:49:33 +0800 Subject: [PATCH 079/329] Add snapshot to webpack. --- src/service/snapshot.js | 38 ++++++++++++++++++++++++++++++++++++++ webpack.config.js | 1 + 2 files changed, 39 insertions(+) create mode 100644 src/service/snapshot.js diff --git a/src/service/snapshot.js b/src/service/snapshot.js new file mode 100644 index 00000000..0b502d09 --- /dev/null +++ b/src/service/snapshot.js @@ -0,0 +1,38 @@ +console.log( "=== simpread snapshot load ===" ) + +let startPos, endPos, dragStart = false, position; + +function start() { + const dtd = $.Deferred(); + dragStart = false; + $( ".simpread-read-root" ).append( `` ); + $( "sr-snapshot" ) + .on( "mousemove", event => { + if ( dragStart == false ) { + $( event.currentTarget ).css({ left: event.clientX, top: event.clientY }); + } else { + endPos = { left: event.clientX, top: event.clientY }; + position = { + left : startPos.left, + top : startPos.top, + width : endPos.left - startPos.left, + height: endPos.top - startPos.top, + } + $( event.currentTarget ).addClass( "active" ).find( "sr-mask" ).css( position ); + } + }) + .on( "mousedown", event => { + startPos = { left: event.clientX, top: event.clientY }; + $( event.currentTarget ).removeAttr( "style" ); + dragStart = true; + }) + .on( "mouseup", event =>{ + dragStart = false; + dtd.resolve( position ); + }); + return dtd; +} + +export { + start as Start, +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index f3fe730b..2fac282c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -262,6 +262,7 @@ const webpack = require( 'webpack' ), runtime : __dirname + '/src/service/runtime.js', permission : __dirname + '/src/service/permission.js', offline : __dirname + '/src/service/offline.js', + snapshot : __dirname + '/src/service/snapshot.js', focus : __dirname + '/src/focus/focus.js', controlbar : __dirname + '/src/focus/controlbar.jsx', From a9620269d5234d78594014d7a98bfd5fb9adaff4 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Thu, 19 Dec 2019 12:50:02 +0800 Subject: [PATCH 080/329] Add snapshot css. --- src/assets/css/simpread.css | 58 +++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index f1c462d1..8c26bd59 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -705,4 +705,62 @@ sharecard-control { height: 80px; background-color: #fff; +} + +/** + * Snapshot + */ + +sr-snapshot { + position: fixed; + left: 0; + top: 0; + + width: 100%; + height: 100%; + + z-index: 2147483645; +} + +sr-mask { + position: fixed; + left: 0; + top: 0; + background-color: rgba(0, 0, 0, .1); +} + +sr-snapshot::before { + content: ''; + + position: absolute; + left: -100%; + top: -100%; + + height: 100%; + width: 100%; + + border-right: 3px dashed #1976d2; + border-bottom: 3px dashed #1976d2; +} + +sr-snapshot.active::before { + border: none; +} + +sr-snapshot::after { + content: ''; + + position: absolute; + left: 0; + top: 0; + + height: 100%; + width: 100%; + + border-top: 3px dashed #1976d2; + border-left: 3px dashed #1976d2; +} + +sr-snapshot.active::after { + border: none; } \ No newline at end of file From e2f2de5cdde7cc3ce368d9e0cf35106078624e99 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Thu, 19 Dec 2019 13:00:04 +0800 Subject: [PATCH 081/329] Add remove() logic. --- src/service/snapshot.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/service/snapshot.js b/src/service/snapshot.js index 0b502d09..97a46fd4 100644 --- a/src/service/snapshot.js +++ b/src/service/snapshot.js @@ -33,6 +33,11 @@ function start() { return dtd; } +function remove() { + $( ".simpread-read-root" ).find( "sr-snapshot" ).remove(); +} + export { - start as Start, + start as Start, + remove as End, } \ No newline at end of file From e419d4d00854beaeceeefd5d03d49f0b440b9a37 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Thu, 19 Dec 2019 13:00:38 +0800 Subject: [PATCH 082/329] Add snapshot logic. --- src/service/output.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/service/output.js b/src/service/output.js index ac46e690..14f3536c 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -10,6 +10,7 @@ import * as share from 'sharecard'; import * as offline from 'offline'; import th from 'theme'; import * as ss from 'stylesheet'; +import * as snap from 'snapshot'; /** * Controlbar common action, include: @@ -54,7 +55,7 @@ function action( type, title, desc, content ) { break; } type.split("_")[1] != "card" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url })); - } else if ( [ "save", "markdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml", "bear", "ulysses" ].includes( type ) ) { + } else if ( [ "save", "markdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml", "snapshot", "bear", "ulysses" ].includes( type ) ) { storage.Statistics( "service", type ); switch ( type ) { case "save": @@ -121,6 +122,17 @@ function action( type, title, desc, content ) { html = offline.HTML( title, desc, content, { global, common, theme, css } ); exp.Download( "data:text/plain;charset=utf-8," + encodeURIComponent(html), `simpread-${title}.html` ); break; + case "snapshot": + $("panel-bg").click(); + setTimeout( () => { + snap.Start().done( result => { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.snapshot, result ), result => { + exp.Download( result.done, `simpread-${title}.png` ); + snap.End(); + }); + }); + }, 500 ); + break; case "bear": storage.pr.current.site.avatar[0].name != "" && ( content = util.MULTI2ENML( content ) ); exp.MDWrapper( util.ClearMD( content ), undefined, new Notify() ).done( result => { From 4c3b18a032559c934e31434a33dee449dfc7a2b6 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Thu, 19 Dec 2019 13:01:14 +0800 Subject: [PATCH 083/329] Optimize snapshot drawImage logic. --- src/background.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/background.js b/src/background.js index 6f626035..44164524 100644 --- a/src/background.js +++ b/src/background.js @@ -190,6 +190,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) */ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) { if ( request.type == msg.MESSAGE_ACTION.snapshot ) { + const { left, top, width, height } = request.value; chrome.tabs.captureVisibleTab( { format: "png" }, base64 => { const image = new Image(); image.src = base64; @@ -199,7 +200,8 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) canvas.height = image.naturalHeight; canvas.width = image.naturalWidth; - ctx.drawImage( image, 0, 0, 1000, 1000, 0, 0, 1000, 1000 ); + //ctx.drawImage( image, 0, 0, 1000, 1000, 0, 0, 1000, 1000 ); + ctx.drawImage( image, left, top, width, height, 0, 0, width, height ); const uri = canvas.toDataURL( "image/png" ); sendResponse({ done: uri }); }; From 7f5aaa194f0e3aef486e67af21affd9cb77842a7 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 10:32:16 +0800 Subject: [PATCH 084/329] Format source. --- src/assets/css/simpread.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 8c26bd59..1bc89685 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -644,7 +644,7 @@ sharecard-content { max-height: 500px; font-size: 20px; - text-align: left; + text-align: justify; background-color: rgb(33, 150, 243); From 023f13d10ed275128cf78791357f3ed33cbf4b7e Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 10:49:25 +0800 Subject: [PATCH 085/329] Optimize crop snapshot logic. --- src/background.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/background.js b/src/background.js index 44164524..99dab4ae 100644 --- a/src/background.js +++ b/src/background.js @@ -196,13 +196,16 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) image.src = base64; image.onload = () => { const canvas = document.createElement( "canvas" ), - ctx = canvas.getContext( "2d" ); - - canvas.height = image.naturalHeight; - canvas.width = image.naturalWidth; - //ctx.drawImage( image, 0, 0, 1000, 1000, 0, 0, 1000, 1000 ); - ctx.drawImage( image, left, top, width, height, 0, 0, width, height ); - const uri = canvas.toDataURL( "image/png" ); + ctx = canvas.getContext( "2d" ), + dpi = window.devicePixelRatio, + sx = left * dpi, + sy = top * dpi, + sWidth = width * dpi, + sHeight = height * dpi; + canvas.width = sWidth; + canvas.height = sHeight; + ctx.drawImage( image, sx, sy, sWidth, height * dpi, 0, 0, sWidth, sHeight ); + const uri = canvas.toDataURL( "image/png" ); sendResponse({ done: uri }); }; }); From 9d816a98b2e60acb7045a4eda4341cbfc80b3737 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 10:54:56 +0800 Subject: [PATCH 086/329] Add snapshot shortcuts. --- src/service/config.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/service/config.js b/src/service/config.js index 0e46cad8..d0325c90 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -39,6 +39,11 @@ const keyboard = { "type" : "temp", "desc" : "导出为 临时页面", }, + cp: { + "kbd" : "cp", + "type" : "snapshot", + "desc" : "截图", + }, }, "控制栏 - 其它" : { ff: { From fa9b5f63d33f697fd3336bdebf50ecad471a48e3 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 10:59:28 +0800 Subject: [PATCH 087/329] Optimize crop image logic. --- src/service/snapshot.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/service/snapshot.js b/src/service/snapshot.js index 97a46fd4..e3392d99 100644 --- a/src/service/snapshot.js +++ b/src/service/snapshot.js @@ -11,12 +11,14 @@ function start() { if ( dragStart == false ) { $( event.currentTarget ).css({ left: event.clientX, top: event.clientY }); } else { - endPos = { left: event.clientX, top: event.clientY }; - position = { - left : startPos.left, - top : startPos.top, - width : endPos.left - startPos.left, - height: endPos.top - startPos.top, + endPos = { left: event.clientX, top: event.clientY }; + const width = endPos.left - startPos.left, + height = endPos.top - startPos.top; + position = { + left : width >= 0 ? startPos.left : endPos.left, + top : height >= 0 ? startPos.top : endPos.top, + width : Math.abs( width ), + height: Math.abs( height ), } $( event.currentTarget ).addClass( "active" ).find( "sr-mask" ).css( position ); } From 784ad65a18a3e507c81e891b566159ecc581ce38 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 11:17:20 +0800 Subject: [PATCH 088/329] Change sr-snapshot to simpread-snapshot. --- src/assets/css/simpread.css | 10 +++++----- src/service/snapshot.js | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 1bc89685..a9e78c8b 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -711,7 +711,7 @@ sharecard-control { * Snapshot */ -sr-snapshot { +simpread-snapshot { position: fixed; left: 0; top: 0; @@ -729,7 +729,7 @@ sr-mask { background-color: rgba(0, 0, 0, .1); } -sr-snapshot::before { +simpread-snapshot::before { content: ''; position: absolute; @@ -743,11 +743,11 @@ sr-snapshot::before { border-bottom: 3px dashed #1976d2; } -sr-snapshot.active::before { +simpread-snapshot.active::before { border: none; } -sr-snapshot::after { +simpread-snapshot::after { content: ''; position: absolute; @@ -761,6 +761,6 @@ sr-snapshot::after { border-left: 3px dashed #1976d2; } -sr-snapshot.active::after { +simpread-snapshot.active::after { border: none; } \ No newline at end of file diff --git a/src/service/snapshot.js b/src/service/snapshot.js index e3392d99..0b93ede2 100644 --- a/src/service/snapshot.js +++ b/src/service/snapshot.js @@ -5,8 +5,8 @@ let startPos, endPos, dragStart = false, position; function start() { const dtd = $.Deferred(); dragStart = false; - $( ".simpread-read-root" ).append( `` ); - $( "sr-snapshot" ) + $( ".simpread-read-root" ).append( `` ); + $( "simpread-snapshot" ) .on( "mousemove", event => { if ( dragStart == false ) { $( event.currentTarget ).css({ left: event.clientX, top: event.clientY }); @@ -36,7 +36,7 @@ function start() { } function remove() { - $( ".simpread-read-root" ).find( "sr-snapshot" ).remove(); + $( ".simpread-read-root" ).find( "simpread-snapshot" ).remove(); } export { From 7d24b88bee8d13c54d55ec7ed55fc2d8f16cc717 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 11:49:28 +0800 Subject: [PATCH 089/329] Optimize snapshot crop design. --- src/assets/css/simpread.css | 37 +------------------------------------ src/service/snapshot.js | 4 +--- 2 files changed, 2 insertions(+), 39 deletions(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index a9e78c8b..484fc8b2 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -719,6 +719,7 @@ simpread-snapshot { width: 100%; height: 100%; + cursor: move; z-index: 2147483645; } @@ -727,40 +728,4 @@ sr-mask { left: 0; top: 0; background-color: rgba(0, 0, 0, .1); -} - -simpread-snapshot::before { - content: ''; - - position: absolute; - left: -100%; - top: -100%; - - height: 100%; - width: 100%; - - border-right: 3px dashed #1976d2; - border-bottom: 3px dashed #1976d2; -} - -simpread-snapshot.active::before { - border: none; -} - -simpread-snapshot::after { - content: ''; - - position: absolute; - left: 0; - top: 0; - - height: 100%; - width: 100%; - - border-top: 3px dashed #1976d2; - border-left: 3px dashed #1976d2; -} - -simpread-snapshot.active::after { - border: none; } \ No newline at end of file diff --git a/src/service/snapshot.js b/src/service/snapshot.js index 0b93ede2..2700ef96 100644 --- a/src/service/snapshot.js +++ b/src/service/snapshot.js @@ -9,7 +9,6 @@ function start() { $( "simpread-snapshot" ) .on( "mousemove", event => { if ( dragStart == false ) { - $( event.currentTarget ).css({ left: event.clientX, top: event.clientY }); } else { endPos = { left: event.clientX, top: event.clientY }; const width = endPos.left - startPos.left, @@ -20,12 +19,11 @@ function start() { width : Math.abs( width ), height: Math.abs( height ), } - $( event.currentTarget ).addClass( "active" ).find( "sr-mask" ).css( position ); + $( event.currentTarget ).find( "sr-mask" ).css( position ); } }) .on( "mousedown", event => { startPos = { left: event.clientX, top: event.clientY }; - $( event.currentTarget ).removeAttr( "style" ); dragStart = true; }) .on( "mouseup", event =>{ From b402ab2c9f55c22dfc6115dcc2327ff662844367 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 11:50:00 +0800 Subject: [PATCH 090/329] Format source. --- src/service/output.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/output.js b/src/service/output.js index 14f3536c..4ec37197 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -123,6 +123,7 @@ function action( type, title, desc, content ) { exp.Download( "data:text/plain;charset=utf-8," + encodeURIComponent(html), `simpread-${title}.html` ); break; case "snapshot": + new Notify().Render( "请移动鼠标,按住鼠标左键框选。" ); $("panel-bg").click(); setTimeout( () => { snap.Start().done( result => { From 310ade5baad9af4d2435269f262b61897f020325 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 12:39:02 +0800 Subject: [PATCH 091/329] Add snapshot controblar logic. --- src/assets/css/simpread.css | 4 ++- src/service/snapshot.js | 50 ++++++++++++++++++++++++++----------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 484fc8b2..81cc59fe 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -279,7 +279,8 @@ sr-rd-crlbar.controlbar:hover { } -simpread-highlight { +simpread-highlight, +sr-snapshot-ctlbar { position: fixed; top: 0; @@ -297,6 +298,7 @@ simpread-highlight { background-color: rgba(50, 50, 50, .9); box-shadow: 0 2px 5px rgba(0, 0, 0, .26); + box-sizing: border-box; z-index: 2147483640; } diff --git a/src/service/snapshot.js b/src/service/snapshot.js index 2700ef96..f7e5e913 100644 --- a/src/service/snapshot.js +++ b/src/service/snapshot.js @@ -1,26 +1,24 @@ console.log( "=== simpread snapshot load ===" ) -let startPos, endPos, dragStart = false, position; +let dtd, startPos, endPos, dragStart = false, position; function start() { - const dtd = $.Deferred(); + dtd = $.Deferred(); dragStart = false; $( ".simpread-read-root" ).append( `` ); $( "simpread-snapshot" ) .on( "mousemove", event => { - if ( dragStart == false ) { - } else { - endPos = { left: event.clientX, top: event.clientY }; - const width = endPos.left - startPos.left, - height = endPos.top - startPos.top; - position = { - left : width >= 0 ? startPos.left : endPos.left, - top : height >= 0 ? startPos.top : endPos.top, - width : Math.abs( width ), - height: Math.abs( height ), - } - $( event.currentTarget ).find( "sr-mask" ).css( position ); + if ( dragStart == false ) return; + endPos = { left: event.clientX, top: event.clientY }; + const width = endPos.left - startPos.left, + height = endPos.top - startPos.top; + position = { + left : width >= 0 ? startPos.left : endPos.left, + top : height >= 0 ? startPos.top : endPos.top, + width : Math.abs( width ), + height: Math.abs( height ), } + $( event.currentTarget ).find( "sr-mask" ).css( position ); }) .on( "mousedown", event => { startPos = { left: event.clientX, top: event.clientY }; @@ -28,7 +26,7 @@ function start() { }) .on( "mouseup", event =>{ dragStart = false; - dtd.resolve( position ); + controlbar(); }); return dtd; } @@ -37,6 +35,28 @@ function remove() { $( ".simpread-read-root" ).find( "simpread-snapshot" ).remove(); } +function controlbar() { + if ( $( "simpread-snapshot sr-highlight-ctl" ).length > 0 ) return; + const html = ` + + + + `; + $( "simpread-snapshot" ).append( html ); + $( "simpread-snapshot" ).on( "click", "sr-highlight-ctl", event => { + const cls = $( event.currentTarget ).attr( "class" ); + if ( cls == "done" ) { + dtd.resolve( position ); + } else if ( cls == "none" ) { + remove(); + } else if ( cls == "help" ) { + const $a = $( `` ).appendTo( "body" ); + $a[0].click(); + $a.remove(); + } + }); +} + export { start as Start, remove as End, From d3382a4586dd8590b9612373f60fd93096143847 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 20 Dec 2019 12:44:57 +0800 Subject: [PATCH 092/329] Optimize snapshot download workflow. --- src/service/output.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/service/output.js b/src/service/output.js index 4ec37197..76cfd9f1 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -123,14 +123,16 @@ function action( type, title, desc, content ) { exp.Download( "data:text/plain;charset=utf-8," + encodeURIComponent(html), `simpread-${title}.html` ); break; case "snapshot": - new Notify().Render( "请移动鼠标,按住鼠标左键框选。" ); + new Notify().Render( "请移动鼠标,按住鼠标左键框选,框选后可再次框选。" ); $("panel-bg").click(); setTimeout( () => { snap.Start().done( result => { - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.snapshot, result ), result => { - exp.Download( result.done, `simpread-${title}.png` ); - snap.End(); - }); + snap.End(); + setTimeout(() => { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.snapshot, result ), result => { + exp.Download( result.done, `simpread-${title}.png` ); + }); + }, 100 ); }); }, 500 ); break; From 07a94c116d6e552be1c518a5dc0185df6234ceca Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 21 Dec 2019 16:44:20 +0800 Subject: [PATCH 093/329] Add wiz to controlbar. --- src/assets/images/wiz_icon.png | Bin 0 -> 1326 bytes src/read/controlbar.jsx | 2 +- src/service/config.js | 5 +++++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/assets/images/wiz_icon.png diff --git a/src/assets/images/wiz_icon.png b/src/assets/images/wiz_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f12036f721c51339c2501172a9c6c068c59f9f27 GIT binary patch literal 1326 zcmV+}1=0G6P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Re3>5+_2+Cc)(f|MiGD$>1R5;7kl}l_?WfaH% z=Y03xx%23>(?TosLB%LxAwfyN7}V&-urbkun3%XB#)WPSiEFlMi0oV`dlM2jYT3X- zR1^V)1fo?+X)6KRncH^e&V78}`Hl;;kmy2odRAw1e)*p_@P9LU(14^@!g+-gMXM18 z;#JqO(uXWs2?H$m7>{hOJQ(!C^*&THsAgEra`KwP`4Y}sO3RXRS0ZyI03ZN>i;F3q zn5aP&nCs*e2h4>NQ6hK`giIV7CRO!WpENB!GACikl~UFg_RE5W{AZiDw;8b@5M>fXul;WXzLN=xHsZ)7eq5&8vQ z>lK2+Y60*#6YVraAR^jOytJAd1w=gdS3{m5pkcipY{q zZ)e-;k+~WLTnh~&Fl3eVaU%Sp3LYDX?>RtaL>;npZmU)(J#$t`gER5pRwR?|u83 zvA0%wMXi&TvUMnic)$z4+UeUZRt$oGeH0K3(f6&W?Zv?)t|lAc^&Gluyv82rEO*^` z0uB(-#6V2%E+&HCS96{iswxq|Iyuz0VoLFd0yd#x0DPLDP=Iz%DsVS@piv>*=?S+} zfmfXTb8O9)W@X5E!D5nAW`zJC4ui2Uq)oSbrLJZ+Ncv^g>C2gRDrl$9&#lnCInEsr zI`35#UU4dj$UD(sbRhCkz;tuH$dkTZ9UX`s3Yc{3U`&^mdRn-E4D;nGugo)*wC2YB z;?3fo;@L$)ZpBZvVoVRmR}{D)s%XZcAFhRH_uSQ5#P53rtf+1qsgYswoxVdmmD5YT z8Wy@krb3J(2V3{RFYk@vVbD&?U?nXfsxzvJ(2(8Sh>(@;{8TGGE~=?`HLY5p+lFIP zI1g1mSy)D4S)+<>tUv$dgzzZ5O71p_BqdC&3JRKNJ&$o-uwhTtMomV>k%`N@#;Pwqxa6foq4H$_Pxn*@;bfnH^&(tXO zii&iLQm4jZZpNlt3;E>M!`Jcpv!J#0IsmA+`u(VXcj(W~rI;ROh$xawsaXveP&$93 zCxca^M8MHcEoP34KIq^057{5XCt0>0FX~PJ001R)MObuXVRU6WV{&C-bY%cCFflnT zF)}SOFjO)zIy5snH8?FWH99ab>|-|i0000bbVXQnWMOn=I&E)cX=ZrgFf}?bFr7Y*MgRZ+07*qoM6N<$g5U>EApigX literal 0 HcmV?d00001 diff --git a/src/read/controlbar.jsx b/src/read/controlbar.jsx index c546343f..bee97478 100644 --- a/src/read/controlbar.jsx +++ b/src/read/controlbar.jsx @@ -109,7 +109,7 @@ export default class ReadCtlbar extends React.Component { break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || - [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "bear", "ulysses", "html", "offlinehtml", "snapshot", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type )) { + [ "fullscreen", "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "bear", "ulysses", "html", "offlinehtml", "snapshot", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao", "weizhi" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } diff --git a/src/service/config.js b/src/service/config.js index d0325c90..0f6f56c8 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -373,6 +373,11 @@ const readItems = { "icon" : ss.IconPath("youdao_icon"), "color": "#00BCD4", }, + "weizhi" : { + "name" : "保存到 为知笔记", + "icon" : ss.IconPath("wiz_icon"), + "color": "#00BCD4", + }, "kindle" : { "name" : "保存到 Kindle", "icon" : ss.IconPath("kindle_icon"), From b1ecdeb945dedb019caf3a9ef086dd167929b214 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 21 Dec 2019 16:44:55 +0800 Subject: [PATCH 094/329] Add vender: wiz. --- src/vender/wiz.js | 126 ++++++++++++++++++++++++++++++++++++++++++++++ webpack.config.js | 1 + 2 files changed, 127 insertions(+) create mode 100644 src/vender/wiz.js diff --git a/src/vender/wiz.js b/src/vender/wiz.js new file mode 100644 index 00000000..6e2942eb --- /dev/null +++ b/src/vender/wiz.js @@ -0,0 +1,126 @@ +/** + * Soure from https://github.com/xcffl/WizWebClipperWE + */ + +var Base64 = { + // private property + _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + // public method for encoding + encode : function(input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + input = Base64._utf8_encode(input); + + while (i < input.length) { + + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); + } + + return output; + }, + // private method for UTF-8 encoding + _utf8_encode : function(string) { + string = string.replace(/\r\n/g, "\n"); + var utftext = ""; + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + } +}; + +var wiz_base64Encode = function( str ) { + var scriptFilter = function (html) { + return html.replace(/]*\/>/ig, "").replace(/]*>(((?!<\/script>).)|(\r?\n))*<\/script>/ig, ""); + }; + if (!str || str.length < 1) { + return ""; + } + var base64str = Base64.encode(scriptFilter(str)); + return base64str; +} + +var genGuid = function() { + return (genGuidItem() + genGuidItem() + "-" + genGuidItem() + "-" + genGuidItem() + "-" + genGuidItem() + "-" + genGuidItem() + genGuidItem() + genGuidItem()); +} + +var genGuidItem = function() { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); +} + +function getParams( url, title, htmlStr ) { + var params = ""; + var docType = document.doctype; + var source_url = wiz_base64Encode( url ); + var source_html = ""; + var source_title = wiz_base64Encode( title ); + + if (!!docType && !!docType.systemId && !!docType.publicId) { + docType = ''; + } else { + docType = ''; + } + source_html = wiz_base64Encode( docType + htmlStr ); + + params = "param-location='" + source_url + "' "; + params += "param-title='" + source_title + "' "; + + params += "0_FrameURL='" + source_url + "' "; + params += "0_FrameHtml='" + source_html + "' "; + + params = "param-fcount='1' " + params; + + return params; +} + +function getInfos( info, access_token ) { + var docGuid = genGuid(); + + info.params = info.params + ' save-command="' + info.cmd + '" userid="' + info.userid + + '" location="' + wiz_base64Encode(info.category) + '" comment="' + wiz_base64Encode('') + + '" tag="' + wiz_base64Encode(info.tag) + '"'; + + info.params = "myWiz='" + access_token + "@userguid' SaveResources='true' document_guid='" + docGuid + "' " + info.params; + var params = { + type : 'clipper', + data : info.params, + customId: docGuid + }; + return params; +} + +if ( typeof module !== 'undefined' ) { + module.exports = { + getParams: getParams, + getInfos : getInfos, + }; +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 2fac282c..59ba733e 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -240,6 +240,7 @@ const webpack = require( 'webpack' ), filesaver : __dirname + '/src/vender/filesaver.min.js', instapaper : __dirname + '/src/vender/instapaper.js', webdav : __dirname + '/src/vender/webdav.js', + wiz : __dirname + '/src/vender/wiz.js', markdown : __dirname + '/src/vender/turndown/turndown.js', mdgfm : __dirname + '/src/vender/turndown/turndown-plugin-gfm.js', intro : __dirname + '/src/vender/intro/intro.min.js', From cabb6acff8e95c69be4cec86d1e98e7d4594054f Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 21 Dec 2019 16:46:51 +0800 Subject: [PATCH 095/329] Add Wiz(). --- src/service/export.js | 78 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 2 deletions(-) diff --git a/src/service/export.js b/src/service/export.js index 6edb12e5..0927baac 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -10,6 +10,7 @@ import Instapaper from 'instapaper'; import * as msg from 'message'; import {browser} from 'browser'; import * as puplugin from 'puplugin'; +import * as wiz from 'wiz'; /** * Create PNG @@ -1520,6 +1521,76 @@ class Youdao { } +/** + * Wiz + * + * @class + */ +class Wiz { + + get id() { return "weizhi"; } + get name() { return name( this.id ); } + + get tag() { + return "SimpRead"; + } + + get category() { + return "/My Notes/"; + } + + Auth( user, password, callback ) { + const data = { + userId : user, + password : password, + autoLogin: true, + }; + + $.ajax({ + url : "https://note.wiz.cn/as/user/login?clientType=webclip_chrome&clientVersion=4.0.10&apiVersion=10&lang=zh-CN", + type : "POST", + dataType: "JSON", + contentType: "application/json; charset=utf-8", + data : JSON.stringify(data), + }).done( ( result, textStatus, jqXHR ) => { + result && result.returnCode == 200 && ( this.access_token = result.result.userGuid ); + callback( result, undefined ); + }).fail( ( jqXHR, textStatus, error ) => { + console.error( jqXHR, textStatus, error ) + callback( undefined, textStatus ); + }); + } + + Add( url, title, content, callback ) { + const info = { + title, + url, + category: this.category, + cmd : "save_content", + comment : "", + tag : this.tag, + userid : this.username, + params : wiz.getParams( url, title, content ), + }; + let data = wiz.getInfos( info, this.access_token ); + data = JSON.stringify( data ); + const options = { + url : "https://kshttps0.wiz.cn/ks/gather?clientType=webclip_chrome&clientVersion=4.0.10&apiVersion=10&lang=zh-CN", + type : "POST", + dataType: "JSON", + contentType: "application/json; charset=utf-8", + async: true, + cache: false, + data, + }; + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.CORB, { settings: options }), result => { + if ( result && result.done && result.done.return_code == 200 ) callback( result, undefined ); + else if ( result && result.done ) callback( undefined, result.done.return_code == 301 ? `授权已过期,请重新授权。` : "请稍后再试" ); + else callback( undefined, result.fail ); + }); + } + +} /** * Kindle @@ -1596,6 +1667,8 @@ function name( type ) { return "语雀"; } else if ( type == "youdao" ) { return "有道云笔记"; + } else if ( type == "weizhi" ) { + return "为知笔记"; } return type; } @@ -1691,6 +1764,7 @@ const dropbox = new Dropbox(), notion = new Notion(), youdao = new Youdao(), webdav = new WebDAV(), + weizhi = new Wiz(), kindle = new Kindle(); export { @@ -1703,9 +1777,9 @@ export { md2HTML as MD2HTML, unlink as Unlink, name as Name, - dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive,yuque, jianguo, webdav, notion, youdao, + dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive,yuque, jianguo, webdav, notion, youdao, weizhi, kindle, mdWrapper as MDWrapper, serviceCallback as svcCbWrapper, verifyService as VerifySvcWrapper, -} \ No newline at end of file +} \ No newline at end of file From 5f4b69a97d907c9e8f57adce8ca254ab2acb87d2 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 21 Dec 2019 16:47:45 +0800 Subject: [PATCH 096/329] Add weizhi data structure. --- src/service/storage.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/service/storage.js b/src/service/storage.js index fe2f60c4..83dbc09c 100644 --- a/src/service/storage.js +++ b/src/service/storage.js @@ -163,6 +163,7 @@ const name = "simpread", "temp" : 0, "yuque" : 0, "jianguo" : 0, + "weizhi" : 0, } }, user = { @@ -208,7 +209,7 @@ let current = {}, }, plugins = {}, secret = { - version : "2019-09-16", + version : "2019-12-20", "dropbox" : { "access_token": "" }, @@ -254,6 +255,10 @@ let current = {}, password : "", access_token : "", }, + "weizhi" : { + username : "", + access_token : "", + }, "webdav" : [] }; //stcode = -1; From e1cfb1839b1a05da80bc7219bc646932dc8ac38c Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 21 Dec 2019 16:48:16 +0800 Subject: [PATCH 097/329] Add weizhi auth logic. --- src/module/authorize.jsx | 56 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index b30ad855..7c986905 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -27,6 +27,10 @@ export default class Auth extends React.Component { jianguo: { username: "", password: "", + }, + weizhi: { + username: "", + password: "", } } @@ -35,13 +39,14 @@ export default class Auth extends React.Component { linnk : undefined, instapaper : undefined, jianguo: undefined, + weizhi : undefined, notion : undefined, youdao : undefined, } onChange( state, value, flag ) { let notify; - const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion, youdao } = exp, + const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion, youdao, weizhi } = exp, clear = ( id, name ) => { Object.keys( storage.secret[id] ).forEach( item => storage.secret[id][item] = "" ); storage.Safe( ()=> { @@ -58,6 +63,7 @@ export default class Auth extends React.Component { id == "linnk" && this.setState({ secret: storage.secret, linnk: false }); id == "instapaper" && this.setState({ secret: storage.secret, instapaper: false }); id == "jianguo" && this.setState({ secret: storage.secret, jianguo: false }); + id == "weizhi" && this.setState({ secret: storage.secret, weizhi: false }); id == "notion" && this.setState({ secret: storage.secret, notion: notion.blocks }); id == "youdao" && this.setState({ secret: storage.secret, youdao: youdao.folders }); if ( location.hash.startsWith( "#labs?auth=" ) ) { @@ -92,6 +98,11 @@ export default class Auth extends React.Component { return; } + if ( state == "weizhi" && !flag && !storage.secret.weizhi.username ) { + this.setState({ weizhi: !this.state.weizhi }); + return; + } + if ( !value ) { state == "pocket" && $( this.refs.pocket_tags ).velocity( value ? "slideDown" : "slideUp" ); if ( state == "linnk" ) { @@ -106,6 +117,10 @@ export default class Auth extends React.Component { this.props.jianguo.username = ""; this.props.jianguo.password = ""; } + if ( state == "weizhi" ) { + this.props.weizhi.username = ""; + this.props.weizhi.access_token = ""; + } if ( state == "youdao" ) { permission.Remove( youdao.permissions, result => new Notify().Render( `已取消 cookies 权限。` )); } @@ -251,6 +266,13 @@ export default class Auth extends React.Component { } else success( "jianguo", "坚果云", { username: this.props.jianguo.username, password: this.props.jianguo.password } ); }); break; + case "weizhi": + weizhi.Auth( this.props.weizhi.username, this.props.weizhi.password, result => { + if ( result && result.status == 401 ) { + failed( "授权错误,请重新授权。", weizhi.id, weizhi.name ); + } else success( "weizhi", "为知笔记", { username: this.props.weizhi.username, access_token: weizhi.access_token } ); + }); + break; } } @@ -274,6 +296,10 @@ export default class Auth extends React.Component { this.props.jianguo[state] = value; } + weizhiOnChange( state, value ) { + this.props.weizhi[state] = value; + } + webdavOnChange() { this.state.secret.webdav = event.target.value.split("\n"); storage.Safe( () => this.setState({ secret: storage.secret }), storage.secret ); @@ -504,6 +530,34 @@ export default class Auth extends React.Component { onClick={ (s)=>this.youdaoChange() } /> }
} +
+ this.onChange( "weizhi", s ) } /> +
+ { this.state.weizhi && +
+
+ this.weizhiOnChange( "username", evt.target.value ) } + /> + this.weizhiOnChange( "password", evt.target.value ) } + /> +
+ +
} +
WebDAV
简悦支持任意 WebDAV 的服务,包括:Box · TeraCLOUD 等
From deaff63e17feac4e7b6ec5e5896033b83a8a2dcf Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 21 Dec 2019 16:48:35 +0800 Subject: [PATCH 098/329] Add export to weizhi logic. --- src/service/output.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/service/output.js b/src/service/output.js index 76cfd9f1..ef5729a9 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -188,8 +188,8 @@ function action( type, title, desc, content ) { } break; } - } else if ( [ "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao" ].includes( type ) ) { - const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion, youdao } = exp, + } else if ( [ "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao", "weizhi" ].includes( type ) ) { + const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion, youdao, weizhi } = exp, id = type == "yinxiang" ? "evernote" : type; storage.Statistics( "service", type ); const service = type => { @@ -298,6 +298,18 @@ function action( type, title, desc, content ) { }); }); break; + case "weizhi": + const theme = th.Get( storage.read.theme ), + global = th.Get( "global" ), + common = th.Get( "common" ), + css = ss.GetCustomCSS(), + html = offline.HTML( title, desc, content, { global, common, theme, css } ); + weizhi.username = storage.secret.weizhi.username; + weizhi.access_token = storage.secret.weizhi.access_token; + weizhi.Add( window.location.href, title, html, ( result, error ) => { + exp.svcCbWrapper( result, error, weizhi.name, type, new Notify() ) + }); + break; } }; From 643e1eb3b665cb82b222650bb34a5940fdbce3a5 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 21 Dec 2019 18:15:40 +0800 Subject: [PATCH 099/329] Optimize wiz icon size. --- src/assets/images/wiz_icon.png | Bin 1326 -> 528 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/assets/images/wiz_icon.png b/src/assets/images/wiz_icon.png index f12036f721c51339c2501172a9c6c068c59f9f27..667557ba0162a8e6d0faee948ba9a3792aa10f54 100644 GIT binary patch delta 513 zcmV+c0{;E33XlYl8Gi!+008r9oCyE`0H{z*R7FQ{Oo+PQGSyK@%YW)@pG-)&g1jw^7-KI__NdN_4)j_)9rb& z+voK8>Gb;P^7?(W-Rt!Fhk&9==7}2=znXd*>|tsqQ~XU;kJIb)`sMNYr_Ac>^!x7i{NwKU)aLa4{{F(-?sBc!lfdE*(HXe_001&{ zQchC<{zm)+9{mFW{SE#2@F`^dkQKK)`c_%|GK0;_;&0^EpZfKl+&=1$TgvATrc`j+8fF=gRVGpCrfoR(kFFmE&0czU{Ef;yP$)xVrP z${!NYB#+%$w(1>SRxY_X$Vd1Utd;~9Aze+|5C2f#e(n*JH`csv00000NkvXXu0mjf DKu9z3 delta 1318 zcmV+>1=;$L1g;8@8Gi-<006|aY&!q|00d`2O+f$vv5yP zfP?@5`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u00v@9M??Vs0RI60puMM)00007 zbV*G`2jdJC0xSs1UB1!)00c5gL_t(I%hi=jY*b|w$N%Si_kZ5G^XRnGLM!w^#VBDR zK}oDRqYqn~L>|7~(6B0LS*}y_n6aj?+ji#8 zeSF{fjtjJq=t6dSR%dg5`JXrNe=~Z}fTUN#d4&^2s}Tm`RoAl8hb&qN11$F#k8G|y z81%yRK2$TPW`9`Ca`KwP`4Y}sO3RXRS0ZyI03ZN>i;F3qn5aP&nCs*e2h4>NQ6hK` zgiIV7CRO!WpENB!GACikl~dWMx23 z0$u3XQ7gf|UT%Z;UK&SSt?J&%@ZmJ)7fMUxXK!RKG7_E$rmA)sNs9&E;ZV)jn|*yK?49S}jiUaT1GnQv#?>XEq`1zZaaBQRu@ z^l>8mqJIh=8;I{JCJ-0^0}Uo>5D_9nuN?U3=fSy^>`hU?5IG_|DMoj7dTw8m+FB>I zHtCm0`u4Y(@;{C`v{J}#=Mcr~qBpxcIHQ#cP*K3P~sVOgV! zZmd85<%IAkyh`pptjfn;^@mb?JkhG68Ao58`0@6-h@J)j!(2{}RLKcld#p8mZhd_d zoQ?eKlKVTjodfe7(e}E>R5M)s;&T2}lG^=4wcw5CcC6Ju?t-(9Z%^Vz)B%|Qfs1yuv4v~>R4xjXp!T9*z#zXP{AnJS|>(x^Ng z7);N%i_f+UMz@_;I{wWq{qW%S4OVbJcwr3~i50nJbzXF&&SuZlDD{epbc<4_#$s;9 zrdtd7mxsJQz5sDFQV=+Dljm>y<`D3VO6Sq&IaI)9@lgH@wMz|l`F zW{!+L=->Dc*&o9vS+*W8>P`Rv03~!qSaf7zbY(hYa%Ew3WdJfTF*z+UGA%MNR5CF- zG&4FiI4v+WIxsNoV>bE#001R)MObuXVRU6WZEs|0W_bWIFflnTF)}SOFdtMhF*-Ce cIyE>gFf}?bFr7Y*MgRZ+07*qoM6N<$f_5%a8UO$Q From 8c52d4d4b59cca4e345e29d24271bdf40f69ada0 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 13:41:49 +0800 Subject: [PATCH 100/329] Optimize weizhi data structure. --- src/module/authorize.jsx | 3 ++- src/service/storage.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 7c986905..310f6672 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -119,6 +119,7 @@ export default class Auth extends React.Component { } if ( state == "weizhi" ) { this.props.weizhi.username = ""; + this.props.weizhi.password = ""; this.props.weizhi.access_token = ""; } if ( state == "youdao" ) { @@ -270,7 +271,7 @@ export default class Auth extends React.Component { weizhi.Auth( this.props.weizhi.username, this.props.weizhi.password, result => { if ( result && result.status == 401 ) { failed( "授权错误,请重新授权。", weizhi.id, weizhi.name ); - } else success( "weizhi", "为知笔记", { username: this.props.weizhi.username, access_token: weizhi.access_token } ); + } else success( "weizhi", "为知笔记", { username: this.props.weizhi.username, password: this.props.weizhi.password, access_token: weizhi.access_token } ); }); break; } diff --git a/src/service/storage.js b/src/service/storage.js index 83dbc09c..f06a611e 100644 --- a/src/service/storage.js +++ b/src/service/storage.js @@ -257,6 +257,7 @@ let current = {}, }, "weizhi" : { username : "", + password : "", access_token : "", }, "webdav" : [] From 1bf61dcc424821daeb6517502dd0bc4052b951e2 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 13:47:04 +0800 Subject: [PATCH 101/329] Add weizhi to shortcuts. --- src/assets/css/simpread.css | 2 +- src/service/config.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 81cc59fe..04d4d98e 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -499,7 +499,7 @@ kbd-mapping { flex-flow: row; width: 500px; - height: 610px; + height: 625px; background-color: #fff; diff --git a/src/service/config.js b/src/service/config.js index 0f6f56c8..e459ba26 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -108,6 +108,11 @@ const keyboard = { "type" : "yuque", "desc" : "保存到 语雀", }, + wz: { + "kbd" : "wz", + "type" : "weizhi", + "desc" : "保存到 为知笔记", + }, kd: { "kbd" : "kd", "type" : "kindle", From 4b006785543f90bb72a97dd65bb7d03fb32de4f7 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 13:53:02 +0800 Subject: [PATCH 102/329] Optimize option auth workflow. --- src/module/authorize.jsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 310f6672..299c34bb 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -353,10 +353,12 @@ export default class Auth extends React.Component { } componentDidMount() { - storage.Safe( () => this.setState({ secret: storage.secret }) ); - if ( location.hash.startsWith( "#labs?auth=" ) ) { - this.onChange( location.hash.replace( "#labs?auth=", "" ), true ); - } + storage.Safe( () => { + this.setState({ secret: storage.secret }) + if ( location.hash.startsWith( "#labs?auth=" ) ) { + this.onChange( location.hash.replace( "#labs?auth=", "" ), true ); + } + }); } render() { From 6cc05b9298c815ec16e8ed97a1db9994fe0ea8fc Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 13:54:31 +0800 Subject: [PATCH 103/329] Format source. --- src/service/export.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/export.js b/src/service/export.js index 0927baac..3c218899 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -10,7 +10,7 @@ import Instapaper from 'instapaper'; import * as msg from 'message'; import {browser} from 'browser'; import * as puplugin from 'puplugin'; -import * as wiz from 'wiz'; +import * as wiz from 'wiz'; /** * Create PNG From 58613aaa8b1146bcfe3ecd9bc100a4d2e60fda0a Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 13:55:37 +0800 Subject: [PATCH 104/329] Format source. --- src/service/export.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/export.js b/src/service/export.js index 3c218899..fe75c71a 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -133,6 +133,7 @@ function unlink( id ) { "yuque" : "https://www.yuque.com/yuque/developer/delete-oauth-apps", "notion" : "http://ksria.com/simpread/docs/#/发送到-Notion", "youdao" : "http://ksria.com/simpread/docs/#/发送到有道云笔记", + "weizhi" : "http://ksria.com/simpread/docs/#/发送到为知笔记", "jianguo" : "http://help.jianguoyun.com/?p=2064", "linnk" : "https://linnk.net/", } From 8b53a858275f70d7e427da89720bfadc5440b277 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 14:02:25 +0800 Subject: [PATCH 105/329] Format source. --- src/service/export.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/service/export.js b/src/service/export.js index fe75c71a..594b6508 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -131,9 +131,9 @@ function unlink( id ) { "onenote" : "https://account.live.com/consent/Manage", "gdrive" : "https://drive.google.com/drive/my-drive", "yuque" : "https://www.yuque.com/yuque/developer/delete-oauth-apps", - "notion" : "http://ksria.com/simpread/docs/#/发送到-Notion", - "youdao" : "http://ksria.com/simpread/docs/#/发送到有道云笔记", - "weizhi" : "http://ksria.com/simpread/docs/#/发送到为知笔记", + "notion" : "http://ksria.com/simpread/docs/#/授权服务?id=取消授权", + "youdao" : "http://ksria.com/simpread/docs/#/授权服务?id=取消授权", + "weizhi" : "http://ksria.com/simpread/docs/#/授权服务?id=取消授权", "jianguo" : "http://help.jianguoyun.com/?p=2064", "linnk" : "https://linnk.net/", } From 86e4566b8a5aade2f4b91bbcb1b0ea99c0545639 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 14:36:17 +0800 Subject: [PATCH 106/329] Optimize bear & ulysses not usage by windows. --- src/read/controlbar.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/read/controlbar.jsx b/src/read/controlbar.jsx index bee97478..2e4335b7 100644 --- a/src/read/controlbar.jsx +++ b/src/read/controlbar.jsx @@ -159,6 +159,10 @@ export default class ReadCtlbar extends React.Component { if ( this.props.type.startsWith( "metaread::" ) || this.props.type.startsWith( "txtread::" ) ) { delete readItems.option; } + if ( !/macintosh|mac os x/i.test(navigator.userAgent) ) { + delete readItems.send.items.bear; + delete readItems.send.items.ulysses; + } storage.Safe( () => { storage.secret.webdav.forEach( item => { item = JSON.parse( item ); From 8a3747853673bcd21b891e2b7bdcbaa512227086 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 15:25:04 +0800 Subject: [PATCH 107/329] Optimize wiz auto re-auth logic. --- src/module/authorize.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index 299c34bb..c38f507b 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -268,6 +268,10 @@ export default class Auth extends React.Component { }); break; case "weizhi": + if ( location.hash.startsWith( "#labs?auth=" ) ) { + this.props.weizhi.username = storage.secret.weizhi.username; + this.props.weizhi.password = storage.secret.weizhi.password; + } weizhi.Auth( this.props.weizhi.username, this.props.weizhi.password, result => { if ( result && result.status == 401 ) { failed( "授权错误,请重新授权。", weizhi.id, weizhi.name ); From 20e6e57578c8a5e7b8b65a53ab3148de7f51e483 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 16:23:15 +0800 Subject: [PATCH 108/329] Add specialCSS(). --- src/service/stylesheet.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/service/stylesheet.js b/src/service/stylesheet.js index c91cd4fd..3b78851b 100644 --- a/src/service/stylesheet.js +++ b/src/service/stylesheet.js @@ -205,6 +205,21 @@ function getCustomCSS() { return styles; } +function specialCSS( mathjax ) { + let css = ""; + if ( mathjax ) { + $( "head" ).find( "style" ).map( (index, item) => { + const $target = $(item), + cls = $target.attr( "class" ), + html = $target.text(); + if ( cls == "simpread-offline-special" || html.search( ".MathJax" ) > -1 || html.search( ".mathjax" ) > -1 || html.search( ".MJX" ) > -1 ) { + css += html; + } + }); + } + return css; +} + export { iconPath as IconPath, getColor as GetColor, @@ -219,4 +234,5 @@ export { css as CSS, vfyCustom as VerifyCustom, getCustomCSS as GetCustomCSS, + specialCSS as SpecialCSS, } \ No newline at end of file From ad4c8e428affbecd3c8d8e89fd9a90423ff0e6d1 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 16:23:44 +0800 Subject: [PATCH 109/329] Add special css to offline. --- src/service/offline.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/offline.js b/src/service/offline.js index de59cacd..904e861d 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -42,6 +42,7 @@ function HTML( title, desc, content, styles ) { + ${hightlight()} 简悦 | ${title} From fec8b4eb00ed8ab75aaeee708b4fa87b9729bbb7 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sun, 22 Dec 2019 16:28:50 +0800 Subject: [PATCH 110/329] Format source. --- src/module/authorize.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/module/authorize.jsx b/src/module/authorize.jsx index c38f507b..1a9eec7f 100644 --- a/src/module/authorize.jsx +++ b/src/module/authorize.jsx @@ -516,7 +516,7 @@ export default class Auth extends React.Component {
{ this.state.notion ? this.save( "notion", v ) } /> :
"),/win|mac/i.test(navigator.platform)?a.one("load",function(){return u()}).one("error",function(){return d()}):a.on("load",function(){return u()}).on("error",function(){return d()})}),t.find("sr-blockquote").map(function(t,r){var a=$(r),n=a.parent();a.removeAttr("style").removeAttr("class"),"dgtle.com"==e&&n.removeClass("quote")}),t.find("iframe:not(.sr-rd-content-nobeautify), embed:not(.sr-rd-content-nobeautify)").map(function(e,t){$(t).wrap("
")}),t.find("hr").map(function(e,t){$(t).addClass("simpread-hidden")}),t.find("pre").map(function(e,t){$(t).find("code").removeAttr("class")}),t.find("pre").removeAttr("class"),t.find("a").removeAttr("style")},cleanHTML:function(e,t,r){t&&e.find("pre").each(function(e,t){var r="",a=!1,n=!1;$(t).find("li").each(function(e,t){$(t).find("code").length>0&&(a=!0),""!=t.outerText.trim()&&(r+=t.outerText.replace(/\n/gi,"").replace(//gi,">")+"\n")}),0==a&&$(t).find("code").each(function(e,t){n=!0,""!=t.outerText.trim()&&(r+=t.outerText.replace(//gi,">")+"\n")}),a||n||(r+=t.outerText.replace(//gi,">")+"\n"),$(t).removeAttr("style").removeAttr("class").removeAttr("id").html(r)});var a,n,i=e.html();"readability-page-1"==$(e.children()).attr("id")&&1==e.children().children().length?i=e.children().children().html():1==e.children().length&&(i=e.children().html()),i=i.replace(//gi,""),e.html((a=i,n="",$.parseHTML(a).forEach(function(e,a){var i=e.tagName,o=e.outerText,s=e.outerHTML;void 0==i?n+="

"+e.textContent.replace(//gi,">").replace(/^\n|\n$/gi,"").trim()+"

":"PRE"==i?n+=s:(""!=o||s.includes("0?t.join("").replace(/, $/,""):null}function oe(e,t){var r=Object.keys(t).map(function(e){return t[e]&&e.replace(/[A-Z]/,function(e){return"-"+e.toLowerCase()})+": "+t[e]+";"}).join("");switch(e){case"title":r="sr-rd-title {"+r+"}";break;case"desc":r="sr-rd-desc {"+r+"}";break;case"art":r="sr-rd-content *, sr-rd-content p, sr-rd-content div {"+r+"}";break;case"pre":r="sr-rd-content pre {"+r+"}";break;case"code":r="sr-rd-content pre code, sr-rd-content pre code * {"+r+"}"}var a=$("head").find("style#simpread-custom-"+e);0==a.length?$("head").append('"):a.html(r)}function se(e,t){var r=$("head").find("style#simpread-custom-"+e);0==r.length?$("head").append('"):r.html(t)}var le=Object.freeze({GetColor:ie,BgColor:function(e,t){var r="rgba("+ie(e)+", "+t/100+")";return $(ae).css(re,r),r},Opacity:function(e){var t=ie($(ae).css(re)),r="rgba("+t+", "+e/100+")";return t?($(ae).css(re,r),r):null},FontFamily:function(e){$("sr-read").css("font-family","default"==e?"":e)},FontSize:function(e){"-1"==ne&&void 0==(ne=$("html").attr("style"))&&(ne=""),e?$("html").attr("style","font-size: "+e+"!important;"+ne):$("html").attr("style",ne)},Layout:function(e){$("sr-read").css("margin",e?"20px "+e:"")},SiteCSS:function(e){e?$("head").append('"):$("#simpread-site-css").remove()},Preview:function(e){Object.keys(e).forEach(function(t){"css"!=t&&oe(t,e[t])}),se("css",e.css)},Custom:oe,CSS:se,VerifyCustom:function(e,t){switch(e){case"layout":case"margin":case"fontfamily":case"custom":return""!=t.css;case"fontsize":return""!=t.title.fontSize||""!=t.desc.fontSize||""!=t.art.fontSize||""!=t.css;case"theme":return-1!=t.css.search("simpread-theme-root")}}});function ce(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");var r;t=t||{},this._doc=e,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._wrap=null,this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug?(r=function(e){var t=e.nodeName+" ";if(e.nodeType==e.TEXT_NODE)return t+'("'+e.textContent+'")';var r=e.className&&"."+e.className.replace(/ /g,"."),a="";return e.id?a="(#"+e.id+r+")":r&&(a="("+r+")"),t+a},this.log=function(){if("undefined"!=typeof dump){var e=Array.prototype.map.call(arguments,function(e){return e&&e.nodeName?r(e):e}).join(" ");dump("Reader: (Readability) "+e+"\n")}else if("undefined"!=typeof console)["Reader: (Readability) "].concat(arguments)}):this.log=function(){}}ce.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,whitespace:/^\s*$/,hasContent:/\S$/},DIV_TO_P_ELEMS:["A","BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL","SELECT"],ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],_postProcessContent:function(e){this._fixRelativeUris(e),this._cleanClasses(e)},_removeNodes:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r],n=a.parentNode;n&&(t&&!t.call(this,a,r,e)||n.removeChild(a))}},_replaceNodeTags:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r];this._setNodeTag(a,t)}},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map(function(t){return e.call(t)});return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(t){var r=e.getElementsByTagName(t);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,r=(e.getAttribute("class")||"").split(/\s+/).filter(function(e){return-1!=t.indexOf(e)}).join(" ");for(r?e.setAttribute("class",r):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,r=this._doc.documentURI;function a(e){if(t==r&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var n=this._getAllNodesWithTag(e,["a"]);this._forEachNode(n,function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:")){var r=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",a(t))});var i=this._getAllNodesWithTag(e,["img"]);this._forEachNode(i,function(e){var t=e.getAttribute("src");t&&e.setAttribute("src",a(t))})},_getArticleTitle:function(){var e=this._doc,t="",r="";try{"string"!=typeof(t=r=e.title.trim())&&(t=r=this._getInnerText(e.getElementsByTagName("title")[0]))}catch(e){}var a=!1;function n(e){return e.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))a=/ [\\\/>»] /.test(t),n(t=r.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"))<3&&(t=r.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var i=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),o=t.trim();this._someNode(i,function(e){return e.textContent.trim()===o})||(n(t=r.substring(r.lastIndexOf(":")+1))<3?t=r.substring(r.indexOf(":")+1):n(r.substr(0,r.indexOf(":")))>5&&(t=r))}else if(t.length>150||t.length<15){var s=e.getElementsByTagName("h1");1===s.length&&(t=this._getInnerText(s[0]))}var l=n(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!a||l!=n(r.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=r),t},_prepDocument:function(){var e=this._doc;this._removeNodes(e.getElementsByTagName("style")),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(e.getElementsByTagName("font"),"SPAN")},_nextElement:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){for(var t=e.nextSibling,r=!1;(t=this._nextElement(t))&&"BR"==t.tagName;){r=!0;var a=t.nextSibling;t.parentNode.removeChild(t),t=a}if(r){var n=this._doc.createElement("p");for(e.parentNode.replaceChild(n,e),t=n.nextSibling;t;){if("BR"==t.tagName){var i=this._nextElement(t.nextSibling);if(i&&"BR"==i.tagName)break}if(!this._isPhrasingContent(t))break;var o=t.nextSibling;n.appendChild(t),t=o}for(;n.lastChild&&this._isWhitespace(n.lastChild);)n.removeChild(n.lastChild);"P"===n.parentNode.tagName&&this._setNodeTag(n.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),e.__JSDOMParser__)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var r=e.ownerDocument.createElement(t);e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e),e.readability&&(r.readability=e.readability);for(var a=0;a0?r[0].textContent.includes(this._articleTitle):this._articleTitle.includes(r[0].textContent))&&this._clean(e,"h2")}}this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._removeNodes(e.getElementsByTagName("p"),function(e){return 0===e.getElementsByTagName("img").length+e.getElementsByTagName("embed").length+e.getElementsByTagName("object").length+e.getElementsByTagName("iframe").length&&!this._getInnerText(e,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){var t=this._nextElement(e.nextSibling);t&&"P"==t.tagName&&e.parentNode.removeChild(e)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(e){var t=this._hasSingleTagInsideElement(e,"TBODY")?e.firstElementChild:e;if(this._hasSingleTagInsideElement(t,"TR")){var r=t.firstElementChild;if(this._hasSingleTagInsideElement(r,"TD")){var a=r.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),e.parentNode.replaceChild(a,e)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do{e=e.parentNode}while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var r=e.getAttribute("rel"),a=e.getAttribute("itemprop");return!(!("author"===r||a&&-1!==a.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var r=0,a=[];e.parentNode&&(a.push(e.parentNode),!t||++r!==t);)e=e.parentNode;return a},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,r=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var a=e.innerHTML;;){for(var n=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),i=[],o=this._doc.documentElement;o;){var s=o.className+" "+o.id;if(this._isProbablyVisible(o))if(this._checkByline(o,s))o=this._removeAndGetNext(o);else if(!n||!this.REGEXPS.unlikelyCandidates.test(s)||this.REGEXPS.okMaybeItsACandidate.test(s)||this._hasAncestorTag(o,"table")||"BODY"===o.tagName||"A"===o.tagName)if("DIV"!==o.tagName&&"SECTION"!==o.tagName&&"HEADER"!==o.tagName&&"H1"!==o.tagName&&"H2"!==o.tagName&&"H3"!==o.tagName&&"H4"!==o.tagName&&"H5"!==o.tagName&&"H6"!==o.tagName||!this._isElementWithoutContent(o)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(o.tagName)&&i.push(o),"DIV"===o.tagName){for(var l=null,c=o.firstChild;c;){var u=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),o.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=u}if(this._hasSingleTagInsideElement(o,"P")&&this._getLinkDensity(o)<.25){var d=o.children[0];o.parentNode.replaceChild(d,o),o=d,i.push(o)}else this._hasChildBlockElement(o)||(o=this._setNodeTag(o,"P"),i.push(o))}o=this._getNextNode(o)}else o=this._removeAndGetNext(o);else this.log("Removing unlikely candidate - "+s),o=this._removeAndGetNext(o);else this.log("Removing hidden node - "+s),o=this._removeAndGetNext(o)}var h=[];this._forEachNode(i,function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var r=this._getNodeAncestors(e,3);if(0!==r.length){var a=0;a+=1,a+=t.split(",").length,a+=Math.min(Math.floor(t.length/100),3),this._forEachNode(r,function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),h.push(e)),0===t)var r=1;else r=1===t?2:3*t;e.readability.contentScore+=a/r}})}}}});for(var f=[],p=0,g=h.length;pv.readability.contentScore){f.splice(b,0,m),f.length>this._nbTopCandidates&&f.pop();break}}}var w,y=f[0]||null,k=!1;if(null===y||"BODY"===y.tagName){y=t.createElement("DIV"),k=!0;for(var E=e.childNodes;E.length;)this.log("Moving child out:",E[0]),y.appendChild(E[0]);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],x=1;x=.75&&T.push(this._getNodeAncestors(f[x]));if(T.length>=3)for(w=y.parentNode;"BODY"!==w.tagName;){for(var N=0,A=0;A=3){y=w;break}w=w.parentNode}y.readability||this._initializeNode(y),w=y.parentNode;for(var S=y.readability.contentScore,C=S/3;"BODY"!==w.tagName;)if(w.readability){var P=w.readability.contentScore;if(PS){y=w;break}S=w.readability.contentScore,w=w.parentNode}else w=w.parentNode;for(w=y.parentNode;"BODY"!=w.tagName&&1==w.children.length;)w=(y=w).parentNode;y.readability||this._initializeNode(y)}var L=t.createElement("DIV");r&&(L.id="readability-content");for(var j=Math.max(10,.2*y.readability.contentScore),z=(w=y.parentNode).children,M=0,$=z.length;M<$;M++){var B=z[M],I=!1;if(this.log("Looking at sibling node:",B,B.readability?"with score "+B.readability.contentScore:""),this.log("Sibling has score",B.readability?B.readability.contentScore:"Unknown"),B===y)I=!0;else{var O=0;if(B.className===y.className&&""!==y.className&&(O+=.2*y.readability.contentScore),B.readability&&B.readability.contentScore+O>=j)I=!0;else if("P"===B.nodeName){var R=this._getLinkDensity(B),H=this._getInnerText(B),D=H.length;D>80&&R<.25?I=!0:D<80&&D>0&&0===R&&-1!==H.search(/\.( |$)/)&&(I=!0)}}I&&(this.log("Appending node:",B),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(B.nodeName)&&(this.log("Altering sibling:",B,"to div."),B=this._setNodeTag(B,"DIV")),L.appendChild(B),M-=1,$-=1)}if(this._debug&&this.log("Article content pre-prep: "+L.innerHTML),this._prepArticle(L),this._debug&&this.log("Article content post-prep: "+L.innerHTML),k)y.id="readability-page-1",y.className="page";else{var G=t.createElement("DIV");G.id="readability-page-1",G.className="page";var U=L.childNodes;for(this._wrap=L.childNodes[0].outerHTML.replace(L.childNodes[0].innerHTML,"");U.length;)G.appendChild(U[0]);L.appendChild(G)}this._debug&&this.log("Article content after paging: "+L.innerHTML);var q=!0,F=this._getInnerText(L,!0).length;if(F0&&e.length<100)},_getArticleMetadata:function(){var e={},t={},r=this._doc.getElementsByTagName("meta"),a=/\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi,n=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(e){var r=e.getAttribute("name"),i=e.getAttribute("property"),o=e.getAttribute("content");if(o){var s=null,l=null;if(i&&(s=i.match(a)))for(var c=s.length-1;c>=0;c--)l=s[c].toLowerCase().replace(/\s/g,""),t[l]=o.trim();!s&&r&&n.test(r)&&(l=r,o&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),t[l]=o.trim()))}}),e.title=t["dc:title"]||t["dcterm:title"]||t["og:title"]||t["weibo:article:title"]||t["weibo:webpage:title"]||t.title||t["twitter:title"],e.title||(e.title=this._getArticleTitle()),e.byline=t["dc:creator"]||t["dcterm:creator"]||t.author,e.excerpt=t["dc:description"]||t["dcterm:description"]||t["og:description"]||t["weibo:article:description"]||t["weibo:webpage:description"]||t.description||t["twitter:description"],e.siteName=t["og:site_name"],e},_removeScripts:function(e){this._removeNodes(e.getElementsByTagName("script"),function(e){return e.nodeValue="",e.removeAttribute("src"),!0}),this._removeNodes(e.getElementsByTagName("noscript"))},_hasSingleTagInsideElement:function(e,t){return 1==e.children.length&&e.children[0].tagName===t&&!this._someNode(e.childNodes,function(e){return e.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(e.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&0==e.textContent.trim().length&&(0==e.children.length||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(e){return-1!==this.DIV_TO_P_ELEMS.indexOf(e.tagName)||this._hasChildBlockElement(e)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||-1!==this.PHRASING_ELEMS.indexOf(e.tagName)||("A"===e.tagName||"DEL"===e.tagName||"INS"===e.tagName)&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&0===e.textContent.trim().length||e.nodeType===this.ELEMENT_NODE&&"BR"===e.tagName},_getInnerText:function(e,t){t=void 0===t||t;var r=e.textContent.trim();return t?r.replace(this.REGEXPS.normalize," "):r},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(e&&"svg"!==e.tagName.toLowerCase()){for(var t=0;t0&&n>r)return!1;if(e.parentNode.tagName===t&&(!a||a(e.parentNode)))return!0;e=e.parentNode,n++}return!1},_getRowAndColumnCount:function(e){for(var t=0,r=0,a=e.getElementsByTagName("tr"),n=0;n0)a._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some(function(e){return!!a.getElementsByTagName(e)[0]}))this.log("Data table because found data-y descendant"),a._readabilityDataTable=!0;else if(a.getElementsByTagName("table")[0])a._readabilityDataTable=!1;else{var i=this._getRowAndColumnCount(a);i.rows>=10||i.columns>4?a._readabilityDataTable=!0:a._readabilityDataTable=i.rows*i.columns>10}}}else a._readabilityDataTable=!1;else a._readabilityDataTable=!1}},_cleanConditionally:function(e,t){if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)){var r="ul"===t||"ol"===t;this._removeNodes(e.getElementsByTagName(t),function(e){var a=function(e){return e._readabilityDataTable};if("table"===t&&a(e))return!1;if(this._hasAncestorTag(e,"table",-1,a))return!1;var n=this._getClassWeight(e);if(this.log("Cleaning Conditionally",e),n+0<0)return!0;if(this._getCharCount(e,",")<10){for(var i=e.getElementsByTagName("p").length,o=e.getElementsByTagName("img").length,s=e.getElementsByTagName("li").length-100,l=e.getElementsByTagName("input").length,c=0,u=this._concatNodeLists(e.getElementsByTagName("object"),e.getElementsByTagName("embed"),e.getElementsByTagName("iframe")),d=0;d1&&i/o<.5&&!this._hasAncestorTag(e,"figure")||!r&&s>i||l>Math.floor(i/3)||!r&&p<25&&(0===o||o>2)&&!this._hasAncestorTag(e,"figure")||!r&&n<25&&f>.2||n>=25&&f>.5||1===c&&p<75||c>1}return!1})}},_cleanMatchedNodes:function(e,t){for(var r=this._getNextNode(e,!0),a=this._getNextNode(e);a&&a!=r;)a=t(a,a.className+" "+a.id)?this._removeAndGetNext(a):this._getNextNode(a)},_cleanHeaders:function(e){for(var t=1;t<3;t+=1)this._removeNodes(e.getElementsByTagName("h"+t),function(e){return this._getClassWeight(e)<0})},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return!(e.style&&"none"==e.style.display||e.hasAttribute("hidden"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._removeScripts(this._doc),this._prepDocument();var t=this._getArticleMetadata();this._articleTitle=t.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!t.excerpt){var a=r.getElementsByTagName("p");a.length>0&&(t.excerpt=a[0].textContent.trim())}var n=r.textContent;return{title:this._articleTitle,byline:t.byline||this._articleByline,dir:this._articleDir,content:r.innerHTML,wrap:this._wrap,textContent:n,length:n.length,excerpt:t.excerpt,siteName:t.siteName||this._articleSiteName}}};var ue=Object.freeze({Readability:ce}),de=r(function(e){(function(){function t(e){var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex:
foo
",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including ``, `` and `` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var a in t)t.hasOwnProperty(a)&&(r[a]=t[a].defaultValue);return r}function r(e,t){var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var o=0;o").replace(/&/g,"&")};var d=function(e,t,r,a){var n,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),h=new RegExp(t,c.replace(/g/g,"")),f=[];do{for(n=0;o=d.exec(e);)if(h.test(o[0]))n++||(s=(i=d.lastIndex)-o[0].length);else if(n&&!--n){l=o.index+o[0].length;var p={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(f.push(p),!u)return f}}while(n&&(d.lastIndex=i));return f};i.helper.matchRecursiveRegExp=function(e,t,r,a){for(var n=d(e,t,r,a),i=[],o=0;o0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var h=0;h=0?a+(r||0):a},i.helper.splitAtIndex=function(e,t){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},i.helper.padEnd=function(e,t,r){return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){alert(e)},log:function(e){alert(e)},error:function(e){throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:':octocat:',showdown:"S"},i.Converter=function(e){function t(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return void function(e,t){"function"==typeof e&&(e=e(new i.Converter)),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var n=0;n[ \t]+¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],a=0;a'}else r.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return r}(r)};!function e(t){for(var r=0;r? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(n||(n=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,i.helper.isUndefined(r.gUrls[n]))return e;o=r.gUrls[n],i.helper.isUndefined(r.gTitles[n])||(c=r.gTitles[n])}var u='"+a+""};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,a,n,o){if("\\"===a)return r+n;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'"+n+""})),r.converter._dispatch("anchors.after",e,t,r)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,p=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,g=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,m=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,_=function(e){return function(t,r,a,n,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",h=r||"",f=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),h+'"+c+""+u+f}},b=function(e,t){return function(r,a,n){var o="mailto:";return a=a||"",n=i.subParser("unescapeSpecialChars")(n,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+n),n=i.helper.encodeEmailAddress(n)):o+=n,a+''+n+""}};i.subParser("autoLinks",function(e,t,r){return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(p,_(t))).replace(m,b(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),i.subParser("simplifiedAutoLinks",function(e,t,r){return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,_(t)):e.replace(h,_(t))).replace(g,b(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),i.subParser("blockGamut",function(e,t,r){return e=r.converter._dispatch("blockGamut.before",e,t,r),e=i.subParser("blockQuotes")(e,t,r),e=i.subParser("headers")(e,t,r),e=i.subParser("horizontalRule")(e,t,r),e=i.subParser("lists")(e,t,r),e=i.subParser("codeBlocks")(e,t,r),e=i.subParser("tables")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),i.subParser("blockQuotes",function(e,t,r){e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=i.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*
[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^  /gm,"¨0")).replace(/¨0/g,"")}),i.subParser("hashBlock")("
\n"+e+"\n
",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),i.subParser("codeBlocks",function(e,t,r){return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,a,n){var o=a,s=n,l="\n";return o=i.subParser("outdent")(o,t,r),o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="
"+o+l+"
",i.subParser("hashBlock")(o,t,r)+s})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),i.subParser("codeSpans",function(e,t,r){return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,a,n,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+""+(s=i.subParser("encodeCode")(s,t,r))+"",i.subParser("hashHTMLSpans")(s,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),i.subParser("completeHTMLDocument",function(e,t,r){if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var a="html",n="\n",i="",o='\n',s="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(n="\n","html"!==(a=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i=""+r.metadata.parsed.title+"\n";break;case"charset":o="html"===a||"html5"===a?'\n':'\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=n+"\n\n"+i+o+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),i.subParser("detab",function(e,t,r){return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,a=4-r.length%4,n=0;n/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),i.subParser("encodeBackslashEscapes",function(e,t,r){return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),i.subParser("encodeCode",function(e,t,r){return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),i.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),i.subParser("githubCodeBlocks",function(e,t,r){return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,a,n,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),o="
"+o+s+"
",o=i.subParser("hashBlock")(o,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),i.subParser("hashBlock",function(e,t,r){return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),i.subParser("hashCodeTags",function(e,t,r){return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=i.helper.replaceRecursiveRegExp(e,function(e,a,n,o){var s=n+i.subParser("encodeCode")(a,t,r)+o;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"},"]*>","","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),i.subParser("hashElement",function(e,t,r){return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"}}),i.subParser("hashHTMLBlocks",function(e,t,r){e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],n=function(e,t,a,n){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+r.converter.makeHtml(t)+n),"\n\n¨K"+(r.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var o=0;o]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),h=i.helper.replaceRecursiveRegExp(d[1],n,c,u,"im");if(h===d[1])break;e=d[0].concat(h)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),e=(e=i.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),i.subParser("hashHTMLSpans",function(e,t,r){function a(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return a(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<[^>]+?>/gi,function(e){return a(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),i.subParser("unhashHTMLSpans",function(e,t,r){e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var a=0;a]*>\\s*]*>","^ {0,3}\\s*
","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),i.subParser("headers",function(e,t,r){function a(e){var a,n;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,n=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=n+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=n+a),r.hashLinkCounts[a]?a=a+"-"+r.hashLinkCounts[a]++:r.hashLinkCounts[a]=1,a}e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=""+s+"";return i.subParser("hashBlock")(c,t,r)})).replace(s,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=n+1,u=""+s+"";return i.subParser("hashBlock")(u,t,r)});var l=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return e=e.replace(l,function(e,o,s){var l=s;t.customizedHeaderId&&(l=s.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(l,t,r),u=t.noHeaderId?"":' id="'+a(s)+'"',d=n-1+o.length,h=""+c+"";return i.subParser("hashBlock")(h,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),i.subParser("horizontalRule",function(e,t,r){e=r.converter._dispatch("horizontalRule.before",e,t,r);var a=i.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),r.converter._dispatch("horizontalRule.after",e,t,r)}),i.subParser("images",function(e,t,r){function a(e,t,a,n,o,s,l,c){var u=r.gUrls,d=r.gTitles,h=r.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)n="";else if(""===n||null===n){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),n="#"+a,i.helper.isUndefined(u[a]))return e;n=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(h[a])||(o=h[a].width,s=h[a].height)}t=t.replace(/"/g,""").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var f=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,n,i,o,s,l){return a(e,t,r,n=n.replace(/\s/g,""),i,o,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),r.converter._dispatch("images.after",e,t,r)}),i.subParser("italicsAndBold",function(e,t,r){function a(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return a(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return a(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return a(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),i.subParser("lists",function(e,t,r){function a(e,a){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(n,function(e,a,n,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,r),h="";return c&&t.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,r),d=i.subParser("blockGamut")(d,t,r)):(d=(d=i.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,r):i.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function n(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function o(e,r,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),h=n(e,r);-1!==d?(c+="\n\n<"+r+h+">\n"+a(u.slice(0,d),!!i)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+r+h+">\n"+a(u,!!i)+"\n"}(e);else{var u=n(e,r);c="\n\n<"+r+u+">\n"+a(e,!!i)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return o(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,a){return o(r,a.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),i.subParser("metadata",function(e,t,r){function a(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,a){return r.metadata.parsed[t]=a,""})}return t.metadata?(e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return a(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,n){return t&&(r.metadata.format=t),a(n),"¨M"})).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)):e}),i.subParser("outdent",function(e,t,r){return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),i.subParser("paragraphs",function(e,t,r){for(var a=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),n=[],o=a.length,s=0;s=0?n.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",n.push(l))}for(o=n.length,s=0;s]*>\s*]*>/.test(u)&&(d=!0)}n[s]=u}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),i.subParser("runExtension",function(e,t,r,a){if(e.filter)t=e.filter(t,a.converter,r);else if(e.regex){var n=e.regex;n instanceof RegExp||(n=new RegExp(n,"g")),t=t.replace(n,e.replace)}return t}),i.subParser("spanGamut",function(e,t,r){return e=r.converter._dispatch("spanGamut.before",e,t,r),e=i.subParser("codeSpans")(e,t,r),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=i.subParser("encodeBackslashEscapes")(e,t,r),e=i.subParser("images")(e,t,r),e=i.subParser("anchors")(e,t,r),e=i.subParser("autoLinks")(e,t,r),e=i.subParser("simplifiedAutoLinks")(e,t,r),e=i.subParser("emoji")(e,t,r),e=i.subParser("underline")(e,t,r),e=i.subParser("italicsAndBold")(e,t,r),e=i.subParser("strikethrough")(e,t,r),e=i.subParser("ellipsis")(e,t,r),e=i.subParser("hashHTMLSpans")(e,t,r),e=i.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),i.subParser("strikethrough",function(e,t,r){return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(a)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),i.subParser("stripLinkDefinitions",function(e,t,r){var a=function(e,a,n,o,s,l,c){return a=a.toLowerCase(),n.match(/^data:.+?\/.+?;base64,/)?r.gUrls[a]=n.replace(/\s/g,""):r.gUrls[a]=i.subParser("encodeAmpsAndAngles")(n,t,r),l?l+c:(c&&(r.gTitles[a]=c.replace(/"|'/g,""")),t.parseImgDimensions&&o&&s&&(r.gDimensions[a]={width:o,height:s}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,a)).replace(/¨0/,"")}),i.subParser("tables",function(e,t,r){function a(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function n(e,a){var n="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(n=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),""+(e=i.subParser("spanGamut")(e,t,r))+"\n"}function o(e,a){return""+i.subParser("spanGamut")(e,t,r)+"\n"}function s(e){var s,l=e.split("\n");for(s=0;s\n\n\n",n=0;n\n";for(var i=0;i\n"}return r+"\n\n"}(h,p)}return t.tables?(e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,s),r.converter._dispatch("tables.after",e,t,r)):e}),i.subParser("underline",function(e,t,r){return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,i.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),i.subParser("unescapeSpecialChars",function(e,t,r){return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),i.subParser("makeMarkdown.blockquote",function(e,t){var r="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,o=0;o "+(r=r.trim()).split("\n").join("\n> ")}),i.subParser("makeMarkdown.codeBlock",function(e,t){var r=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[a]+"\n```"}),i.subParser("makeMarkdown.codeSpan",function(e){return"`"+e.innerHTML+"`"}),i.subParser("makeMarkdown.emphasis",function(e,t){var r="";if(e.hasChildNodes()){r+="*";for(var a=e.childNodes,n=a.length,o=0;o",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),i.subParser("makeMarkdown.links",function(e,t){var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,n=a.length;r="[";for(var o=0;o",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),i.subParser("makeMarkdown.list",function(e,t,r){var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,s=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),i.subParser("makeMarkdown.strikethrough",function(e,t){var r="";if(e.hasChildNodes()){r+="~~";for(var a=e.childNodes,n=a.length,o=0;otr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=g)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),e.exports?e.exports=i:this.showdown=i}).call(t)}),he={pangu:n,minimatch:H,beautify:te,style:le,rdability:ue,markdown:Object.freeze({default:de,__moduleExports:de})};e.Plugin=function(e){return void 0==e?he:he[e]},Object.defineProperty(e,"__esModule",{value:!0})}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.puplugin={})}(this,function(e){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(e,t){return e(t={exports:{}},t.exports),t.exports}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=r(function(e,t){e.exports=function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n=function(){function e(e,t){for(var r=0;r=0||t.isContentEditable||"true"===t.getAttribute("g_editable"))return!0;t=t.parentNode}return!1}},{key:"isFirstTextChild",value:function(e,t){for(var r=e.childNodes,a=0;a-1;a--){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"spacingNodeByXPath",value:function(e,t){for(var r=document.evaluate(e,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),a=void 0,n=void 0,i=r.snapshotLength-1;i>-1;--i)if(a=r.snapshotItem(i),this.canIgnoreNode(a))n=a;else{var o=this.spacing(a.data);if(a.data!==o&&(a.data=o),n){if(a.nextSibling&&a.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}var s=a.data.toString().substr(-1)+n.data.toString().substr(0,1),l=this.spacing(s);if(l!==s){for(var c=n;c.parentNode&&-1===c.nodeName.search(this.spaceSensitiveTags)&&this.isFirstTextChild(c.parentNode,c);)c=c.parentNode;for(var u=a;u.parentNode&&-1===u.nodeName.search(this.spaceSensitiveTags)&&this.isLastTextChild(u.parentNode,u);)u=u.parentNode;if(u.nextSibling&&u.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}if(-1===u.nodeName.search(this.blockTags))if(-1===c.nodeName.search(this.spaceSensitiveTags))-1===c.nodeName.search(this.ignoreTags)&&-1===c.nodeName.search(this.blockTags)&&(n.previousSibling?-1===n.previousSibling.nodeName.search(this.spaceLikeTags)&&(n.data=" "+n.data):this.canIgnoreNode(n)||(n.data=" "+n.data));else if(-1===u.nodeName.search(this.spaceSensitiveTags))a.data=a.data+" ";else{var d=document.createElement("pangu");d.innerHTML=" ",c.previousSibling?-1===c.previousSibling.nodeName.search(this.spaceLikeTags)&&c.parentNode.insertBefore(d,c):c.parentNode.insertBefore(d,c),d.previousElementSibling||d.parentNode&&d.parentNode.removeChild(d)}}}n=a}}},{key:"spacingNode",value:function(e){this.spacingNodeByXPath(".//*/text()[normalize-space(.)]",e)}},{key:"spacingElementById",value:function(e){var t='id("'+e+'")//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByClassName",value:function(e){var t='//*[contains(concat(" ", normalize-space(@class), " "), "'+e+'")]//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByTagName",value:function(e){var t="//"+e+"//text()";this.spacingNodeByXPath(t,document)}},{key:"spacingPageTitle",value:function(){this.spacingNodeByXPath("/html/head/title/text()",document)}},{key:"spacingPageBody",value:function(){for(var e="/html/body//*/text()[normalize-space(.)]",t=["script","style","textarea"],r=0;r])([A-Za-z0-9])/g,d=/([A-Za-z0-9])([\+\-\*\/=&\\|<>])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,h=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c]+(.*?)[\)\]\}>\u201d]+)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,f=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c>])/g,p=/([\)\]\}>\u201d<])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,g=/([\(\[\{<\u201c]+)(\s*)(.+?)(\s*)([\)\]\}>\u201d]+)/,m=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([~!;:,\.\?\u2026])([A-Za-z0-9])/g,_=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([A-Za-z0-9`\$%\^&\*\-=\+\\\|\/@\u00a1-\u00ff\u2022\u2027\u2150-\u218f])/g,b=/([A-Za-z0-9`~\$%\^&\*\-=\+\\\|\/!;:,\.\?\u00a1-\u00ff\u2022\u2026\u2027\u2150-\u218f])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,v=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return r(e,[{key:"spacing",value:function(e){var t=e,r=t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(a,"$1 $2")).replace(n,"$1 $2")).replace(i,"$1$3$5")).replace(o,"$1$3$4")).replace(s,"$1 $2$3$4 $5")).replace(l,"$1 $2")).replace(c,"$1 $3")).replace(u,"$1 $2 $3")).replace(d,"$1 $2 $3"),v=t.replace(h,"$1 $2 $4");return t=v,r===v&&(t=(t=t.replace(f,"$1 $2")).replace(p,"$1 $2")),t=(t=(t=(t=t.replace(g,"$1$3$5")).replace(m,"$1$2 $3")).replace(_,"$1 $2")).replace(b,"$1 $2")}},{key:"spacingText",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];try{var r=this.spacing(e);t(null,r)}catch(e){t(e)}}}]),e}(),w=new v;(e.exports=w).Pangu=v}])});n.pangu;function i(e,t){for(var r=0,a=e.length-1;a>=0;a--){var n=e[a];"."===n?e.splice(a,1):".."===n?(e.splice(a,1),r++):r&&(e.splice(a,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(e){return o.exec(e).slice(1)};function l(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,t="/"===a.charAt(0))}return e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"),(t?"/":"")+e||"."}function c(e){var t=u(e),r="/"===b(e,-1);return(e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e}function u(e){return"/"===e.charAt(0)}function d(){return c(_(Array.prototype.slice.call(arguments,0),function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function h(e,t){function r(e){for(var t=0;t=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=l(e).substr(1),t=l(t).substr(1);for(var a=r(e.split("/")),n=r(t.split("/")),i=Math.min(a.length,n.length),o=i,s=0;s=0&&c>0){for(a=[],i=r.length;u>=0&&!s;)u==l?(a.push(u),l=r.indexOf(e,u+1)):1==a.length?s=[a.pop(),c]:((n=a.pop())=0?l:c;a.length&&(s=[i,o])}return s}E.range=x;var N=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(t,r){var a=[];var n=k("{","}",t);if(!n||/\$$/.test(n.pre))return[t];var i=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(n.body);var o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(n.body);var s=i||o;var l=n.body.indexOf(",")>=0;if(!s&&!l)return n.post.match(/,.*\}/)?(t=n.pre+"{"+n.body+C+n.post,e(t)):[t];var c;if(s)c=n.body.split(/\.\./);else if(1===(c=function e(t){if(!t)return[""];var r=[];var a=k("{","}",t);if(!a)return t.split(",");var n=a.pre;var i=a.body;var o=a.post;var s=n.split(",");s[s.length-1]+="{"+i+"}";var l=e(o);o.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l));r.push.apply(r,s);return r}(n.body)).length&&1===(c=e(c[0],!1).map(M)).length){var u=n.post.length?e(n.post,!1):[""];return u.map(function(e){return n.pre+c[0]+e})}var d=n.pre;var u=n.post.length?e(n.post,!1):[""];var h;if(s){var f=j(c[0]),p=j(c[1]),g=Math.max(c[0].length,c[1].length),m=3==c.length?Math.abs(j(c[2])):1,_=I,b=p0){var x=new Array(T+1).join("0");E=y<0?"-"+x+E.slice(1):x+E}}h.push(E)}}else h=w(c,function(t){return e(t,!1)});for(var N=0;N=t}var R=v&&m||v,H=Y;Y.Minimatch=Q;var D={sep:"/"};try{D=R}catch(e){}var G=Y.GLOBSTAR=Q.GLOBSTAR={},U={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},q="[^/]",F=q+"*?",V="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",W="(?:(?!(?:\\/|^)\\.).)*?",X="().*{}+?[]^$\\!".split("").reduce(function(e,t){return e[t]=!0,e},{});var Z=/\/+/;function K(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function Y(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new Q(t,r).match(e))}function Q(e,t){if(!(this instanceof Q))return new Q(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==D.sep&&(e=e.split(D.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function J(e,t){if(t||(t=this instanceof Q?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:N(e)}Y.filter=function(e,t){return t=t||{},function(r,a,n){return Y(r,e,t)}},Y.defaults=function(e){if(!e||!Object.keys(e).length)return Y;var t=Y,r=function(r,a,n){return t.minimatch(r,a,K(e,n))};return r.Minimatch=function(r,a){return new t.Minimatch(r,K(e,a))},r},Q.defaults=function(e){return e&&Object.keys(e).length?Y.defaults(e).Minimatch:Q},Q.prototype.debug=function(){},Q.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(Z)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r},Q.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(this.options.nonegate)return;for(var a=0,n=e.length;a65536)throw new TypeError("pattern is too long");var r=this.options;if(!r.noglobstar&&"**"===e)return G;if(""===e)return"";var a,n="",i=!!r.nocase,o=!1,s=[],l=[],c=!1,u=-1,d=-1,h="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=this;function p(){if(a){switch(a){case"*":n+=F,i=!0;break;case"?":n+=q,i=!0;break;default:n+="\\"+a}f.debug("clearStateChar %j %j",a,n),a=!1}}for(var g,m=0,_=e.length;m<_&&(g=e.charAt(m));m++)if(this.debug("%s\t%s %s %j",e,m,n,g),o&&X[g])n+="\\"+g,o=!1;else switch(g){case"/":return!1;case"\\":p(),o=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,m,n,g),c){this.debug(" in class"),"!"===g&&m===d+1&&(g="^"),n+=g;continue}f.debug("call clearStateChar %j",a),p(),a=g,r.noext&&p();continue;case"(":if(c){n+="(";continue}if(!a){n+="\\(";continue}s.push({type:a,start:m-1,reStart:n.length,open:U[a].open,close:U[a].close}),n+="!"===a?"(?:(?!(?:":"(?:",this.debug("plType %j %j",a,n),a=!1;continue;case")":if(c||!s.length){n+="\\)";continue}p(),i=!0;var b=s.pop();n+=b.close,"!"===b.type&&l.push(b),b.reEnd=n.length;continue;case"|":if(c||!s.length||o){n+="\\|",o=!1;continue}p(),n+="|";continue;case"[":if(p(),c){n+="\\"+g;continue}c=!0,d=m,u=n.length,n+=g;continue;case"]":if(m===d+1||!c){n+="\\"+g,o=!1;continue}if(c)var v,w=e.substring(d+1,m);i=!0,c=!1,n+=g;continue;default:p(),o?o=!1:!X[g]||"^"===g&&c||(n+="\\"),n+=g}c&&(w=e.substr(d+1),v=this.parse(w,ee),n=n.substr(0,u)+"\\["+v[0],i=i||v[1]);for(b=s.pop();b;b=s.pop()){var y=n.slice(b.reStart+b.open.length);this.debug("setting tail",n,b),y=y.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,t,r){return r||(r="\\"),t+t+r+"|"}),this.debug("tail=%j\n %s",y,y,b,n);var k="*"===b.type?F:"?"===b.type?q:"\\"+b.type;i=!0,n=n.slice(0,b.reStart)+k+"\\("+y}p(),o&&(n+="\\\\");var E=!1;switch(n.charAt(0)){case".":case"[":case"(":E=!0}for(var T=l.length-1;T>-1;T--){var x=l[T],N=n.slice(0,x.reStart),A=n.slice(x.reStart,x.reEnd-8),S=n.slice(x.reEnd-8,x.reEnd),C=n.slice(x.reEnd);S+=C;var P=N.split("(").length-1,L=C;for(m=0;m=0&&!(a=e[n]);n--);for(n=0;n>> no match, partial?",e,d,t,h),d!==o))}if("string"==typeof c?(l=a.nocase?u.toLowerCase()===c.toLowerCase():u===c,this.debug("string match",c,u,l)):(l=u.match(c),this.debug("pattern match",c,u,l)),!l)return!1}if(n===o&&i===s)return!0;if(n===o)return r;if(i===s)return n===o-1&&""===e[n];throw new Error("wtf?")};var te=[];var re=Object.freeze({before:function(e,t){te=[],"zhuanlan.zhihu.com"==e&&t.find("a[data-draft-type]").map(function(e,t){var r=$(t.outerHTML);r.find(".LinkCard-meta svg").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")}),"sspai.com"==e&&t.find(".ssApp").map(function(e,t){var r=$($("body").find(".ss-app-card")[e].outerHTML);r.find(".code_box").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")})},specbeautify:function(e,t){switch(e){case"sspai.com":t.find(".relation-apps").remove(),t.find(".ss-app-card").remove();break;case"post.smzdm.com":t.find("img.face").addClass("sr-rd-content-nobeautify"),t.find(".insert-outer img").addClass("sr-rd-content-nobeautify");break;case"infoq.com":t.find("img").map(function(e,t){"left"==$(t).css("float")&&$(t).addClass("sr-rd-content-nobeautify")}),t.find("script").remove();break;case"appinn.com":case"hacpai.com":t.find(".emoji").addClass("sr-rd-content-nobeautify");break;case"douban.com":t.find(".review-content").children().unwrap(),t.find("table").addClass("sr-rd-content-center"),t.find("p").css({"white-space":"pre-wrap"}),t.find(".cc").removeClass();break;case"qdaily.com":t.find("img").map(function(e,t){var r=$(t);0==Number.parseInt(r.css("height"))&&r.remove()}),t.find(".com-insert-images").map(function(e,t){var r=$(t),a=r.find("img").map(function(e,t){return"
"+t.outerHTML+"
"}).get().join("");r.empty().removeAttr("class").append(a)}),t.find(".com-insert-embed").remove();break;case"news.mtime.com":t.find(".newspictool").map(function(e,t){var r=$(t),a=r.find("img"),n=r.find("p:last");r.removeAttr("class").addClass("sr-rd-content-center").empty().append(a).append(n)});break;case"blog.csdn.net":t.find(".save_code").remove(),t.find(".pre-numbering").remove(),t.find("pre").removeAttr("style").removeAttr("class"),t.find("code").removeAttr("style"),t.find(".dp-highlighter").map(function(e,t){$(t).find(".bar .tools").remove(),$(t).next().is("pre")&&$(t).next().remove()});break;case"news.sohu.com":t.find(".conserve-photo").remove(),t.find("table").addClass("sr-rd-content-center");break;case"qq.com":t.find(".rv-root-v2, #backqqcom").remove();break;case"azofreeware.com":t.find("iframe").remove();break;case"apprcn.com":t.find("img").map(function(e,t){var r=$(t),a=r.attr("src");a&&a.includes("Apprcn_Wechat_Small.jpeg")&&r.parent().remove()}),t.find("a").map(function(e,t){var r=$(t);"来自反斗软件"==r.text()&&r.parent().remove()});break;case"tieba.baidu.com":t.find(".BDE_Smiley").addClass("sr-rd-content-nobeautify"),t.find(".replace_div").removeAttr("class").removeAttr("style"),t.find(".replace_tip").remove(),t.find(".d_post_content, .j_d_post_content, .post_bubble_top, .post_bubble_middle, .post_bubble_bottom").map(function(e,t){$(t).removeAttr("class").removeAttr("style")}),$("body").find(".p_author_face").map(function(e,t){var r=$(t).find("img"),a=r.attr("data-tb-lazyload"),n=r.attr("username");a&&$("sr-rd-mult-avatar").find("span").map(function(e,t){var r=$(t);r.text()==n&&r.parent().find("img").attr("src",a)})});break;case"jingyan.baidu.com":t.find(".exp-image-wraper").removeAttr("class").removeAttr("href");break;case"question.zhihu.com":t.find(".zu-edit-button").remove(),t.find("a.external").map(function(e,t){$(t).removeAttr("class").attr("style","border: none;")}),t.find(".VagueImage").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('')});break;case"chiphell.com":t.find("img").map(function(e,t){var r=$(t),a=r.parent(),n=r.attr("src"),i=r.attr("smilieid");a.is("ignore_js_op")&&r.unwrap(),i&&n&&n.includes("static/image/smiley")&&r.addClass("sr-rd-content-nobeautify").attr("style","width: 50px;")}),t.find(".quote").remove();break;case"jiemian.com":t.find("script").remove();break;case"36kr.com":t.find(".load-html-img").removeAttr("class");break;case"cnblogs.com":t.find(".cnblogs_code").removeClass(),t.find(".cnblogs_code_hide").removeClass().removeAttr("style"),t.find(".cnblogs_code_toolbar").remove(),t.find(".code_img_opened").remove(),t.find(".code_img_closed").remove();break;case"news.cnblogs.com":t.find(".topic_img").remove();break;case"g-cores.com":t.find(".swiper-slide-active").find("img").map(function(e,t){var r=$(t);r.parent().parent().parent().parent().parent().parent().removeAttr("class").removeAttr("style").html(r)});break;case"feng.com":case"young.ifeng.com":t.find("span").removeAttr("style");break;case"ftchinese.com":t.find("script").remove();break;case"segmentfault.com":t.find(".widget-codetool").remove();break;case"mp.weixin.qq.com":t.find('section[powered-by="xiumi.us"]').find("img").map(function(e,t){var r=$(t),a=r.attr("data-src");r.addClass("sr-rd-content-nobeautify").attr("src",a)});break;case"ruby-china.org":t.find(".twemoji").remove();break;case"w3cplus.com":t.find("iframe").addClass("sr-rd-content-nobeautify");break;case"zuojj.com":t.find(".syntaxhighlighter .Brush").attr("style","font-size: .7em !important;");break;case"aotu.io":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre"),n=r.find("table");r.html(a[1]),n.unwrap()}),t.find("table").addClass("sr-rd-content-center");break;case"colobu.com":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre");r.html(a[1]),r.unwrap()});break;case"hao.caibaojian.com":t.find(".tlink").map(function(e,t){$(t).html("")});break;case"wkee.net":t.find("script").remove();break;case"linux.cn":t.find("pre").attr("style","background-color: #161b20; background-image: none;"),t.find("code").attr("style","background-color: transparent; background-image: none;");break;case"zhuanlan.zhihu.com":t.find("div[data-src]").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('
')}),$("body img").each(function(e,t){var r=$(t),a=r.parent();if("column-gif"==r.attr("class")&&"GifPlayer"==a.attr("class")){var n=a.parent().prev();if(n.is("noscript")){var i=n.html(),o=$(i),s=o.attr("src"),l=o.attr("data-thumbnail");$('sr-read img[src="'+l+'"]').attr("src",s)}}}),setTimeout(function(){t.find("img").each(function(e,t){$(t).attr("src").endsWith(".gif")&&$(t).parent().next().is("svg")&&$(t).parent().next().remove()})},500);break;case"jianshu.com":t.find(".image-package").map(function(e,t){var r=$(t),a=r.find("img");r.html(a)});break;case"medium.com":t.find("figure").map(function(e,t){var r=$(t),a=r.find("img");r.replaceWith('
')});break;case"worldcup.fifa.com":t.find("iframe").css({width:"790px",height:"450px"}),t.find("div").removeClass()}},removeSpareTag:function(e,t){var r=!1,a="";["lib.csdn.net","huxiu.com","my.oschina.net","caixin.com","163.com","steachs.com","hacpai.com","apprcn.com","mp.weixin.qq.com"].includes(e)?(r=!0,a="p"):["nationalgeographic.com.cn","dgtle.com","news.mtime.com"].includes(e)?(r=!0,a="div"):["chiphell.com"].includes(e)&&(r=!0,a="font"),r&&t.find(a).map(function(e,t){var r=$(t).text().toLowerCase().trim();0==$(t).find("img").length&&""==r&&$(t).remove()})},htmlbeautify:function(e){try{e.html(function(e,t){return t.trim().replace(/<\/?blockquote/g,function(e){return"/"==e[1]?"\n?
(\n?
)*/g,"
").replace(/\/(div|p)>\n*(
\n)+/g,function(e){return e.replace("
","")})})}catch(t){return e.html()}},commbeautify:function(e,t){t.find("img:not(.sr-rd-content-nobeautify)").map(function(e,t){var r=$(t),a=(r.parent(),$("")),n=r.attr("src"),i=r.attr("data-src"),o=r.attr("data-original"),s=r.attr("original"),l=r.attr("data-original-src"),c=r.attr("data-lazy-src"),u=r.attr("real_src"),d=function(){a.removeClass("sr-rd-content-img-load"),a[0].clientWidth<300&&a[0].clientHeight<300?a.parent().removeClass("sr-rd-content-center").addClass("sr-rd-content-center-small"):a[0].clientWidth>1e3?a.css("zoom","0.6"):a[0].clientHeight>620&&/win|mac/i.test(navigator.platform)&&(a.attr("height",620),a[0].clientWidth<$("sr-rd-content").width()&&a.css({width:"auto"})),a[0].clientWidth>$("sr-rd-content").width()&&a.addClass("sr-rd-content-img")},h=function(){a.addClass("simpread-hidden"),a.parent().hasClass("sr-rd-content-center")&&a.parent().removeAttr("class").addClass("simpread-hidden")},f=void 0;r.parent()[0].tagName.toLowerCase(),f=s||n,f=i||f,f=o||f,f=l||f,f=u||f,!(f=c||f)||f.startsWith("http")||f.startsWith("data")||(f=function e(t,r){if("string"!=typeof t||!t)return null;if(t.match(/^[a-z]+\:\/\//i))return t;if(t.match(/^\/\//))return"http:"+t;if(t.match(/^[a-z]+\:/i))return t;var a;if("string"!=typeof r)return(a=document.createElement("a")).href=t,a.pathname?"http://"+t:null;if(null===(r=e(r)))return null;(a=document.createElement("a")).href=r,"/"===t[0]?r=[]:(r=a.pathname.split("/")).pop(),t=t.split("/");for(var n=0;n
"),/win|mac/i.test(navigator.platform)?a.one("load",function(){return d()}).one("error",function(){return h()}):a.on("load",function(){return d()}).on("error",function(){return h()})}),t.find("sr-blockquote").map(function(t,r){var a=$(r),n=a.parent();a.removeAttr("style").removeAttr("class"),"dgtle.com"==e&&n.removeClass("quote")}),t.find("iframe:not(.sr-rd-content-nobeautify), embed:not(.sr-rd-content-nobeautify)").map(function(e,t){$(t).wrap("
")}),t.find("hr").map(function(e,t){$(t).addClass("simpread-hidden")}),t.find("pre").map(function(e,t){$(t).find("code").removeAttr("class")}),t.find("pre").removeAttr("class"),t.find("a").removeAttr("style"),t.find("sr-blocks").map(function(e,t){t.outerHTML=$(te[e]).addClass("simpread-blocks")[0].outerHTML})},cleanHTML:function(e,t,r){t&&e.find("pre").each(function(e,t){var r="",a=!1,n=!1;$(t).find("li").each(function(e,t){$(t).find("code").length>0&&(a=!0),""!=t.outerText.trim()&&(r+=t.outerText.replace(/\n/gi,"").replace(//gi,">")+"\n")}),0==a&&$(t).find("code").each(function(e,t){n=!0,""!=t.outerText.trim()&&(r+=t.outerText.replace(//gi,">")+"\n")}),a||n||(r+=t.outerText.replace(//gi,">")+"\n"),$(t).removeAttr("style").removeAttr("class").removeAttr("id").html(r)});var a,n,i=e.html();"readability-page-1"==$(e.children()).attr("id")&&1==e.children().children().length?i=e.children().children().html():1==e.children().length&&(i=e.children().html()),i=i.replace(//gi,""),e.html((a=i,n="",$.parseHTML(a).forEach(function(e,a){var i=e.tagName,o=e.outerText,s=e.outerHTML;void 0==i?n+="

"+e.textContent.replace(//gi,">").replace(/^\n|\n$/gi,"").trim()+"

":"PRE"==i?n+=s:"sr-blocks"==i.toLowerCase()?n+=s:(""!=o||s.includes("0?t.join("").replace(/, $/,""):null}function se(e,t){var r=Object.keys(t).map(function(e){return t[e]&&e.replace(/[A-Z]/,function(e){return"-"+e.toLowerCase()})+": "+t[e]+";"}).join("");switch(e){case"title":r="sr-rd-title {"+r+"}";break;case"desc":r="sr-rd-desc {"+r+"}";break;case"art":r="sr-rd-content *, sr-rd-content p, sr-rd-content div {"+r+"}";break;case"pre":r="sr-rd-content pre {"+r+"}";break;case"code":r="sr-rd-content pre code, sr-rd-content pre code * {"+r+"}"}var a=$("head").find("style#simpread-custom-"+e);0==a.length?$("head").append('"):a.html(r)}function le(e,t){var r=$("head").find("style#simpread-custom-"+e);0==r.length?$("head").append('"):r.html(t)}var ce=Object.freeze({GetColor:oe,BgColor:function(e,t){var r="rgba("+oe(e)+", "+t/100+")";return $(ne).css(ae,r),r},Opacity:function(e){var t=oe($(ne).css(ae)),r="rgba("+t+", "+e/100+")";return t?($(ne).css(ae,r),r):null},FontFamily:function(e){$("sr-read").css("font-family","default"==e?"":e)},FontSize:function(e){"-1"==ie&&void 0==(ie=$("html").attr("style"))&&(ie=""),e?$("html").attr("style","font-size: "+e+"!important;"+ie):$("html").attr("style",ie)},Layout:function(e){$("sr-read").css("margin",e?"20px "+e:"")},SiteCSS:function(e){e?$("head").append('"):$("#simpread-site-css").remove()},Preview:function(e){Object.keys(e).forEach(function(t){"css"!=t&&se(t,e[t])}),le("css",e.css)},Custom:se,CSS:le,VerifyCustom:function(e,t){switch(e){case"layout":case"margin":case"fontfamily":case"custom":return""!=t.css;case"fontsize":return""!=t.title.fontSize||""!=t.desc.fontSize||""!=t.art.fontSize||""!=t.css;case"theme":return-1!=t.css.search("simpread-theme-root")}}});function ue(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");var r;t=t||{},this._doc=e,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._wrap=null,this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug?(r=function(e){var t=e.nodeName+" ";if(e.nodeType==e.TEXT_NODE)return t+'("'+e.textContent+'")';var r=e.className&&"."+e.className.replace(/ /g,"."),a="";return e.id?a="(#"+e.id+r+")":r&&(a="("+r+")"),t+a},this.log=function(){if("undefined"!=typeof dump){var e=Array.prototype.map.call(arguments,function(e){return e&&e.nodeName?r(e):e}).join(" ");dump("Reader: (Readability) "+e+"\n")}else if("undefined"!=typeof console)["Reader: (Readability) "].concat(arguments)}):this.log=function(){}}ue.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,whitespace:/^\s*$/,hasContent:/\S$/},DIV_TO_P_ELEMS:["A","BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL","SELECT"],ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],_postProcessContent:function(e){this._fixRelativeUris(e),this._cleanClasses(e)},_removeNodes:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r],n=a.parentNode;n&&(t&&!t.call(this,a,r,e)||n.removeChild(a))}},_replaceNodeTags:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r];this._setNodeTag(a,t)}},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map(function(t){return e.call(t)});return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(t){var r=e.getElementsByTagName(t);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,r=(e.getAttribute("class")||"").split(/\s+/).filter(function(e){return-1!=t.indexOf(e)}).join(" ");for(r?e.setAttribute("class",r):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,r=this._doc.documentURI;function a(e){if(t==r&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var n=this._getAllNodesWithTag(e,["a"]);this._forEachNode(n,function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:")){var r=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",a(t))});var i=this._getAllNodesWithTag(e,["img"]);this._forEachNode(i,function(e){var t=e.getAttribute("src");t&&e.setAttribute("src",a(t))})},_getArticleTitle:function(){var e=this._doc,t="",r="";try{"string"!=typeof(t=r=e.title.trim())&&(t=r=this._getInnerText(e.getElementsByTagName("title")[0]))}catch(e){}var a=!1;function n(e){return e.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))a=/ [\\\/>»] /.test(t),n(t=r.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"))<3&&(t=r.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var i=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),o=t.trim();this._someNode(i,function(e){return e.textContent.trim()===o})||(n(t=r.substring(r.lastIndexOf(":")+1))<3?t=r.substring(r.indexOf(":")+1):n(r.substr(0,r.indexOf(":")))>5&&(t=r))}else if(t.length>150||t.length<15){var s=e.getElementsByTagName("h1");1===s.length&&(t=this._getInnerText(s[0]))}var l=n(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!a||l!=n(r.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=r),t},_prepDocument:function(){var e=this._doc;this._removeNodes(e.getElementsByTagName("style")),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(e.getElementsByTagName("font"),"SPAN")},_nextElement:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){for(var t=e.nextSibling,r=!1;(t=this._nextElement(t))&&"BR"==t.tagName;){r=!0;var a=t.nextSibling;t.parentNode.removeChild(t),t=a}if(r){var n=this._doc.createElement("p");for(e.parentNode.replaceChild(n,e),t=n.nextSibling;t;){if("BR"==t.tagName){var i=this._nextElement(t.nextSibling);if(i&&"BR"==i.tagName)break}if(!this._isPhrasingContent(t))break;var o=t.nextSibling;n.appendChild(t),t=o}for(;n.lastChild&&this._isWhitespace(n.lastChild);)n.removeChild(n.lastChild);"P"===n.parentNode.tagName&&this._setNodeTag(n.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),e.__JSDOMParser__)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var r=e.ownerDocument.createElement(t);e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e),e.readability&&(r.readability=e.readability);for(var a=0;a0?r[0].textContent.includes(this._articleTitle):this._articleTitle.includes(r[0].textContent))&&this._clean(e,"h2")}}this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._removeNodes(e.getElementsByTagName("p"),function(e){return 0===e.getElementsByTagName("img").length+e.getElementsByTagName("embed").length+e.getElementsByTagName("object").length+e.getElementsByTagName("iframe").length&&!this._getInnerText(e,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){var t=this._nextElement(e.nextSibling);t&&"P"==t.tagName&&e.parentNode.removeChild(e)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(e){var t=this._hasSingleTagInsideElement(e,"TBODY")?e.firstElementChild:e;if(this._hasSingleTagInsideElement(t,"TR")){var r=t.firstElementChild;if(this._hasSingleTagInsideElement(r,"TD")){var a=r.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),e.parentNode.replaceChild(a,e)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do{e=e.parentNode}while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var r=e.getAttribute("rel"),a=e.getAttribute("itemprop");return!(!("author"===r||a&&-1!==a.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var r=0,a=[];e.parentNode&&(a.push(e.parentNode),!t||++r!==t);)e=e.parentNode;return a},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,r=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var a=e.innerHTML;;){for(var n=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),i=[],o=this._doc.documentElement;o;){var s=o.className+" "+o.id;if(this._isProbablyVisible(o))if(this._checkByline(o,s))o=this._removeAndGetNext(o);else if(!n||!this.REGEXPS.unlikelyCandidates.test(s)||this.REGEXPS.okMaybeItsACandidate.test(s)||this._hasAncestorTag(o,"table")||"BODY"===o.tagName||"A"===o.tagName)if("DIV"!==o.tagName&&"SECTION"!==o.tagName&&"HEADER"!==o.tagName&&"H1"!==o.tagName&&"H2"!==o.tagName&&"H3"!==o.tagName&&"H4"!==o.tagName&&"H5"!==o.tagName&&"H6"!==o.tagName||!this._isElementWithoutContent(o)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(o.tagName)&&i.push(o),"DIV"===o.tagName){for(var l=null,c=o.firstChild;c;){var u=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),o.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=u}if(this._hasSingleTagInsideElement(o,"P")&&this._getLinkDensity(o)<.25){var d=o.children[0];o.parentNode.replaceChild(d,o),o=d,i.push(o)}else this._hasChildBlockElement(o)||(o=this._setNodeTag(o,"P"),i.push(o))}o=this._getNextNode(o)}else o=this._removeAndGetNext(o);else this.log("Removing unlikely candidate - "+s),o=this._removeAndGetNext(o);else this.log("Removing hidden node - "+s),o=this._removeAndGetNext(o)}var h=[];this._forEachNode(i,function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var r=this._getNodeAncestors(e,3);if(0!==r.length){var a=0;a+=1,a+=t.split(",").length,a+=Math.min(Math.floor(t.length/100),3),this._forEachNode(r,function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),h.push(e)),0===t)var r=1;else r=1===t?2:3*t;e.readability.contentScore+=a/r}})}}}});for(var f=[],p=0,g=h.length;pv.readability.contentScore){f.splice(b,0,m),f.length>this._nbTopCandidates&&f.pop();break}}}var w,y=f[0]||null,k=!1;if(null===y||"BODY"===y.tagName){y=t.createElement("DIV"),k=!0;for(var E=e.childNodes;E.length;)this.log("Moving child out:",E[0]),y.appendChild(E[0]);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],x=1;x=.75&&T.push(this._getNodeAncestors(f[x]));if(T.length>=3)for(w=y.parentNode;"BODY"!==w.tagName;){for(var N=0,A=0;A=3){y=w;break}w=w.parentNode}y.readability||this._initializeNode(y),w=y.parentNode;for(var S=y.readability.contentScore,C=S/3;"BODY"!==w.tagName;)if(w.readability){var P=w.readability.contentScore;if(PS){y=w;break}S=w.readability.contentScore,w=w.parentNode}else w=w.parentNode;for(w=y.parentNode;"BODY"!=w.tagName&&1==w.children.length;)w=(y=w).parentNode;y.readability||this._initializeNode(y)}var L=t.createElement("DIV");r&&(L.id="readability-content");for(var j=Math.max(10,.2*y.readability.contentScore),z=(w=y.parentNode).children,M=0,$=z.length;M<$;M++){var B=z[M],I=!1;if(this.log("Looking at sibling node:",B,B.readability?"with score "+B.readability.contentScore:""),this.log("Sibling has score",B.readability?B.readability.contentScore:"Unknown"),B===y)I=!0;else{var O=0;if(B.className===y.className&&""!==y.className&&(O+=.2*y.readability.contentScore),B.readability&&B.readability.contentScore+O>=j)I=!0;else if("P"===B.nodeName){var R=this._getLinkDensity(B),H=this._getInnerText(B),D=H.length;D>80&&R<.25?I=!0:D<80&&D>0&&0===R&&-1!==H.search(/\.( |$)/)&&(I=!0)}}I&&(this.log("Appending node:",B),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(B.nodeName)&&(this.log("Altering sibling:",B,"to div."),B=this._setNodeTag(B,"DIV")),L.appendChild(B),M-=1,$-=1)}if(this._debug&&this.log("Article content pre-prep: "+L.innerHTML),this._prepArticle(L),this._debug&&this.log("Article content post-prep: "+L.innerHTML),k)y.id="readability-page-1",y.className="page";else{var G=t.createElement("DIV");G.id="readability-page-1",G.className="page";var U=L.childNodes;for(this._wrap=L.childNodes[0].outerHTML.replace(L.childNodes[0].innerHTML,"");U.length;)G.appendChild(U[0]);L.appendChild(G)}this._debug&&this.log("Article content after paging: "+L.innerHTML);var q=!0,F=this._getInnerText(L,!0).length;if(F0&&e.length<100)},_getArticleMetadata:function(){var e={},t={},r=this._doc.getElementsByTagName("meta"),a=/\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi,n=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(e){var r=e.getAttribute("name"),i=e.getAttribute("property"),o=e.getAttribute("content");if(o){var s=null,l=null;if(i&&(s=i.match(a)))for(var c=s.length-1;c>=0;c--)l=s[c].toLowerCase().replace(/\s/g,""),t[l]=o.trim();!s&&r&&n.test(r)&&(l=r,o&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),t[l]=o.trim()))}}),e.title=t["dc:title"]||t["dcterm:title"]||t["og:title"]||t["weibo:article:title"]||t["weibo:webpage:title"]||t.title||t["twitter:title"],e.title||(e.title=this._getArticleTitle()),e.byline=t["dc:creator"]||t["dcterm:creator"]||t.author,e.excerpt=t["dc:description"]||t["dcterm:description"]||t["og:description"]||t["weibo:article:description"]||t["weibo:webpage:description"]||t.description||t["twitter:description"],e.siteName=t["og:site_name"],e},_removeScripts:function(e){this._removeNodes(e.getElementsByTagName("script"),function(e){return e.nodeValue="",e.removeAttribute("src"),!0}),this._removeNodes(e.getElementsByTagName("noscript"))},_hasSingleTagInsideElement:function(e,t){return 1==e.children.length&&e.children[0].tagName===t&&!this._someNode(e.childNodes,function(e){return e.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(e.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&0==e.textContent.trim().length&&(0==e.children.length||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(e){return-1!==this.DIV_TO_P_ELEMS.indexOf(e.tagName)||this._hasChildBlockElement(e)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||-1!==this.PHRASING_ELEMS.indexOf(e.tagName)||("A"===e.tagName||"DEL"===e.tagName||"INS"===e.tagName)&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&0===e.textContent.trim().length||e.nodeType===this.ELEMENT_NODE&&"BR"===e.tagName},_getInnerText:function(e,t){t=void 0===t||t;var r=e.textContent.trim();return t?r.replace(this.REGEXPS.normalize," "):r},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(e&&"svg"!==e.tagName.toLowerCase()){for(var t=0;t0&&n>r)return!1;if(e.parentNode.tagName===t&&(!a||a(e.parentNode)))return!0;e=e.parentNode,n++}return!1},_getRowAndColumnCount:function(e){for(var t=0,r=0,a=e.getElementsByTagName("tr"),n=0;n0)a._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some(function(e){return!!a.getElementsByTagName(e)[0]}))this.log("Data table because found data-y descendant"),a._readabilityDataTable=!0;else if(a.getElementsByTagName("table")[0])a._readabilityDataTable=!1;else{var i=this._getRowAndColumnCount(a);i.rows>=10||i.columns>4?a._readabilityDataTable=!0:a._readabilityDataTable=i.rows*i.columns>10}}}else a._readabilityDataTable=!1;else a._readabilityDataTable=!1}},_cleanConditionally:function(e,t){if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)){var r="ul"===t||"ol"===t;this._removeNodes(e.getElementsByTagName(t),function(e){var a=function(e){return e._readabilityDataTable};if("table"===t&&a(e))return!1;if(this._hasAncestorTag(e,"table",-1,a))return!1;var n=this._getClassWeight(e);if(this.log("Cleaning Conditionally",e),n+0<0)return!0;if(this._getCharCount(e,",")<10){for(var i=e.getElementsByTagName("p").length,o=e.getElementsByTagName("img").length,s=e.getElementsByTagName("li").length-100,l=e.getElementsByTagName("input").length,c=0,u=this._concatNodeLists(e.getElementsByTagName("object"),e.getElementsByTagName("embed"),e.getElementsByTagName("iframe")),d=0;d1&&i/o<.5&&!this._hasAncestorTag(e,"figure")||!r&&s>i||l>Math.floor(i/3)||!r&&p<25&&(0===o||o>2)&&!this._hasAncestorTag(e,"figure")||!r&&n<25&&f>.2||n>=25&&f>.5||1===c&&p<75||c>1}return!1})}},_cleanMatchedNodes:function(e,t){for(var r=this._getNextNode(e,!0),a=this._getNextNode(e);a&&a!=r;)a=t(a,a.className+" "+a.id)?this._removeAndGetNext(a):this._getNextNode(a)},_cleanHeaders:function(e){for(var t=1;t<3;t+=1)this._removeNodes(e.getElementsByTagName("h"+t),function(e){return this._getClassWeight(e)<0})},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return!(e.style&&"none"==e.style.display||e.hasAttribute("hidden"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._removeScripts(this._doc),this._prepDocument();var t=this._getArticleMetadata();this._articleTitle=t.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!t.excerpt){var a=r.getElementsByTagName("p");a.length>0&&(t.excerpt=a[0].textContent.trim())}var n=r.textContent;return{title:this._articleTitle,byline:t.byline||this._articleByline,dir:this._articleDir,content:r.innerHTML,wrap:this._wrap,textContent:n,length:n.length,excerpt:t.excerpt,siteName:t.siteName||this._articleSiteName}}};var de=Object.freeze({Readability:ue}),he=r(function(e){(function(){function t(e){var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex:
foo
",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including ``, `` and `` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var a in t)t.hasOwnProperty(a)&&(r[a]=t[a].defaultValue);return r}function r(e,t){var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var o=0;o").replace(/&/g,"&")};var d=function(e,t,r,a){var n,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),h=new RegExp(t,c.replace(/g/g,"")),f=[];do{for(n=0;o=d.exec(e);)if(h.test(o[0]))n++||(s=(i=d.lastIndex)-o[0].length);else if(n&&!--n){l=o.index+o[0].length;var p={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(f.push(p),!u)return f}}while(n&&(d.lastIndex=i));return f};i.helper.matchRecursiveRegExp=function(e,t,r,a){for(var n=d(e,t,r,a),i=[],o=0;o0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var h=0;h=0?a+(r||0):a},i.helper.splitAtIndex=function(e,t){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},i.helper.padEnd=function(e,t,r){return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){alert(e)},log:function(e){alert(e)},error:function(e){throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:':octocat:',showdown:"S"},i.Converter=function(e){function t(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return void function(e,t){"function"==typeof e&&(e=e(new i.Converter)),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var n=0;n[ \t]+¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],a=0;a'}else r.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return r}(r)};!function e(t){for(var r=0;r? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(n||(n=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,i.helper.isUndefined(r.gUrls[n]))return e;o=r.gUrls[n],i.helper.isUndefined(r.gTitles[n])||(c=r.gTitles[n])}var u='"+a+""};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,a,n,o){if("\\"===a)return r+n;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'"+n+""})),r.converter._dispatch("anchors.after",e,t,r)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,p=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,g=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,m=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,_=function(e){return function(t,r,a,n,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",h=r||"",f=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),h+'"+c+""+u+f}},b=function(e,t){return function(r,a,n){var o="mailto:";return a=a||"",n=i.subParser("unescapeSpecialChars")(n,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+n),n=i.helper.encodeEmailAddress(n)):o+=n,a+''+n+""}};i.subParser("autoLinks",function(e,t,r){return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(p,_(t))).replace(m,b(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),i.subParser("simplifiedAutoLinks",function(e,t,r){return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,_(t)):e.replace(h,_(t))).replace(g,b(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),i.subParser("blockGamut",function(e,t,r){return e=r.converter._dispatch("blockGamut.before",e,t,r),e=i.subParser("blockQuotes")(e,t,r),e=i.subParser("headers")(e,t,r),e=i.subParser("horizontalRule")(e,t,r),e=i.subParser("lists")(e,t,r),e=i.subParser("codeBlocks")(e,t,r),e=i.subParser("tables")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),i.subParser("blockQuotes",function(e,t,r){e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=i.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*
[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^  /gm,"¨0")).replace(/¨0/g,"")}),i.subParser("hashBlock")("
\n"+e+"\n
",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),i.subParser("codeBlocks",function(e,t,r){return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,a,n){var o=a,s=n,l="\n";return o=i.subParser("outdent")(o,t,r),o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="
"+o+l+"
",i.subParser("hashBlock")(o,t,r)+s})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),i.subParser("codeSpans",function(e,t,r){return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,a,n,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+""+(s=i.subParser("encodeCode")(s,t,r))+"",i.subParser("hashHTMLSpans")(s,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),i.subParser("completeHTMLDocument",function(e,t,r){if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var a="html",n="\n",i="",o='\n',s="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(n="\n","html"!==(a=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i=""+r.metadata.parsed.title+"\n";break;case"charset":o="html"===a||"html5"===a?'\n':'\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=n+"\n\n"+i+o+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),i.subParser("detab",function(e,t,r){return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,a=4-r.length%4,n=0;n/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),i.subParser("encodeBackslashEscapes",function(e,t,r){return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),i.subParser("encodeCode",function(e,t,r){return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),i.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),i.subParser("githubCodeBlocks",function(e,t,r){return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,a,n,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),o="
"+o+s+"
",o=i.subParser("hashBlock")(o,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),i.subParser("hashBlock",function(e,t,r){return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),i.subParser("hashCodeTags",function(e,t,r){return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=i.helper.replaceRecursiveRegExp(e,function(e,a,n,o){var s=n+i.subParser("encodeCode")(a,t,r)+o;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"},"]*>","","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),i.subParser("hashElement",function(e,t,r){return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"}}),i.subParser("hashHTMLBlocks",function(e,t,r){e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],n=function(e,t,a,n){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+r.converter.makeHtml(t)+n),"\n\n¨K"+(r.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var o=0;o]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),h=i.helper.replaceRecursiveRegExp(d[1],n,c,u,"im");if(h===d[1])break;e=d[0].concat(h)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),e=(e=i.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),i.subParser("hashHTMLSpans",function(e,t,r){function a(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return a(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<[^>]+?>/gi,function(e){return a(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),i.subParser("unhashHTMLSpans",function(e,t,r){e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var a=0;a]*>\\s*]*>","^ {0,3}\\s*
","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),i.subParser("headers",function(e,t,r){function a(e){var a,n;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,n=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=n+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=n+a),r.hashLinkCounts[a]?a=a+"-"+r.hashLinkCounts[a]++:r.hashLinkCounts[a]=1,a}e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=""+s+"";return i.subParser("hashBlock")(c,t,r)})).replace(s,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=n+1,u=""+s+"";return i.subParser("hashBlock")(u,t,r)});var l=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return e=e.replace(l,function(e,o,s){var l=s;t.customizedHeaderId&&(l=s.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(l,t,r),u=t.noHeaderId?"":' id="'+a(s)+'"',d=n-1+o.length,h=""+c+"";return i.subParser("hashBlock")(h,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),i.subParser("horizontalRule",function(e,t,r){e=r.converter._dispatch("horizontalRule.before",e,t,r);var a=i.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),r.converter._dispatch("horizontalRule.after",e,t,r)}),i.subParser("images",function(e,t,r){function a(e,t,a,n,o,s,l,c){var u=r.gUrls,d=r.gTitles,h=r.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)n="";else if(""===n||null===n){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),n="#"+a,i.helper.isUndefined(u[a]))return e;n=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(h[a])||(o=h[a].width,s=h[a].height)}t=t.replace(/"/g,""").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var f=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,n,i,o,s,l){return a(e,t,r,n=n.replace(/\s/g,""),i,o,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),r.converter._dispatch("images.after",e,t,r)}),i.subParser("italicsAndBold",function(e,t,r){function a(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return a(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return a(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return a(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),i.subParser("lists",function(e,t,r){function a(e,a){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(n,function(e,a,n,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,r),h="";return c&&t.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,r),d=i.subParser("blockGamut")(d,t,r)):(d=(d=i.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,r):i.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function n(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function o(e,r,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),h=n(e,r);-1!==d?(c+="\n\n<"+r+h+">\n"+a(u.slice(0,d),!!i)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+r+h+">\n"+a(u,!!i)+"\n"}(e);else{var u=n(e,r);c="\n\n<"+r+u+">\n"+a(e,!!i)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return o(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,a){return o(r,a.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),i.subParser("metadata",function(e,t,r){function a(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,a){return r.metadata.parsed[t]=a,""})}return t.metadata?(e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return a(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,n){return t&&(r.metadata.format=t),a(n),"¨M"})).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)):e}),i.subParser("outdent",function(e,t,r){return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),i.subParser("paragraphs",function(e,t,r){for(var a=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),n=[],o=a.length,s=0;s=0?n.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",n.push(l))}for(o=n.length,s=0;s]*>\s*]*>/.test(u)&&(d=!0)}n[s]=u}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),i.subParser("runExtension",function(e,t,r,a){if(e.filter)t=e.filter(t,a.converter,r);else if(e.regex){var n=e.regex;n instanceof RegExp||(n=new RegExp(n,"g")),t=t.replace(n,e.replace)}return t}),i.subParser("spanGamut",function(e,t,r){return e=r.converter._dispatch("spanGamut.before",e,t,r),e=i.subParser("codeSpans")(e,t,r),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=i.subParser("encodeBackslashEscapes")(e,t,r),e=i.subParser("images")(e,t,r),e=i.subParser("anchors")(e,t,r),e=i.subParser("autoLinks")(e,t,r),e=i.subParser("simplifiedAutoLinks")(e,t,r),e=i.subParser("emoji")(e,t,r),e=i.subParser("underline")(e,t,r),e=i.subParser("italicsAndBold")(e,t,r),e=i.subParser("strikethrough")(e,t,r),e=i.subParser("ellipsis")(e,t,r),e=i.subParser("hashHTMLSpans")(e,t,r),e=i.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),i.subParser("strikethrough",function(e,t,r){return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(a)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),i.subParser("stripLinkDefinitions",function(e,t,r){var a=function(e,a,n,o,s,l,c){return a=a.toLowerCase(),n.match(/^data:.+?\/.+?;base64,/)?r.gUrls[a]=n.replace(/\s/g,""):r.gUrls[a]=i.subParser("encodeAmpsAndAngles")(n,t,r),l?l+c:(c&&(r.gTitles[a]=c.replace(/"|'/g,""")),t.parseImgDimensions&&o&&s&&(r.gDimensions[a]={width:o,height:s}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,a)).replace(/¨0/,"")}),i.subParser("tables",function(e,t,r){function a(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function n(e,a){var n="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(n=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),""+(e=i.subParser("spanGamut")(e,t,r))+"\n"}function o(e,a){return""+i.subParser("spanGamut")(e,t,r)+"\n"}function s(e){var s,l=e.split("\n");for(s=0;s\n\n\n",n=0;n\n";for(var i=0;i\n"}return r+"\n\n"}(h,p)}return t.tables?(e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,s),r.converter._dispatch("tables.after",e,t,r)):e}),i.subParser("underline",function(e,t,r){return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,i.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),i.subParser("unescapeSpecialChars",function(e,t,r){return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),i.subParser("makeMarkdown.blockquote",function(e,t){var r="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,o=0;o "+(r=r.trim()).split("\n").join("\n> ")}),i.subParser("makeMarkdown.codeBlock",function(e,t){var r=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[a]+"\n```"}),i.subParser("makeMarkdown.codeSpan",function(e){return"`"+e.innerHTML+"`"}),i.subParser("makeMarkdown.emphasis",function(e,t){var r="";if(e.hasChildNodes()){r+="*";for(var a=e.childNodes,n=a.length,o=0;o",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),i.subParser("makeMarkdown.links",function(e,t){var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,n=a.length;r="[";for(var o=0;o",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),i.subParser("makeMarkdown.list",function(e,t,r){var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,s=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),i.subParser("makeMarkdown.strikethrough",function(e,t){var r="";if(e.hasChildNodes()){r+="~~";for(var a=e.childNodes,n=a.length,o=0;otr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=g)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),e.exports?e.exports=i:this.showdown=i}).call(t)}),fe={pangu:n,minimatch:H,beautify:re,style:ce,rdability:de,markdown:Object.freeze({default:he,__moduleExports:he})};e.Plugin=function(e){return void 0==e?fe:fe[e]},Object.defineProperty(e,"__esModule",{value:!0})}); diff --git a/src/vender/puread/puread.min.js b/src/vender/puread/puread.min.js index 910e1359..6447282c 100644 --- a/src/vender/puread/puread.min.js +++ b/src/vender/puread/puread.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.PureRead=e()}(this,function(){"use strict";var t=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e=function(){function t(t,e){for(var r=0;r?$|<[^/][-_a-zA-Z0-9]+>?$/gi);return e&&e.length>0?[1,e]:[-1,void 0]}function c(t){var e=s(t),r=i(e,2),n=r[0],a=r[1];if(2==n)return t;if(1==n){var o=a[0].trim().replace(/['"<>]/g,"").replace(/ /gi,"=").split("="),l=i(o,3),u=l[0],c=l[1],h=l[2];return c?"class"===c.toLowerCase()?c=u+"."+h:"id"===c.toLowerCase()&&(c=u+"#"+h):c=u,c}return null}function h(t){return/^(\[\[)[\[{`'/]{1}[ \S]+[}`'/\]]\]\]{1}($)/g.test(t)}function d(t){var e=[t.replace(/(^)\[\[|\]\]$/g,"")],r=e[0],n=e[1];switch(r[0]){case"{":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)(),n=0;break;case"'":t=(t=r.replace(/^'|'$/g,"")).match(/^<[a-zA-Z0-9_-]+>/g).join("").replace(/<|>/g,"")+":contains("+t.replace(/<[/a-zA-Z0-9_-]+>/g,"")+")",n=1;break;case"/":t=r.replace(/^\/|\/$/g,"").replace(/\\{2}/g,"\\").replace(/'/g,'"'),n=2;break;case"[":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)()[0],n=3;break;case"`":r=p(r=r.replace(/^`|`$/g,"")),t=$(r),n=4;break;default:n=-1}return[t,n]}function f(t){try{if(""!=t.id)return void 0==t.id?"":"//*[@id='"+t.id+"']";if(t===document.body)return"/html[1]/"+t.tagName.toLowerCase();for(var e=0,r=t.parentNode.childNodes,n=0;n0&&void 0!==arguments[0]?arguments[0]:{global:[],custom:[],local:[]};t(this,n),this.url=(r=(e="/"!=(e=window.location.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,""),window.location.protocol+"//"+window.location.hostname+r+"/"),this.sites=a,this.current={},this.state="none",this.origins=[],this.mathjax=void 0,b=location.href}return e(n,[{key:"SetURL",value:function(t){var e,r=u(t),n=(e="/"!=(e=r.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,"");this.url=r.protocol+"//"+r.hostname+n+"/",b=t}},{key:"SetMinimatch",value:function(t){v=t}},{key:"SetRdability",value:function(t){g=t}},{key:"SetMarkdown",value:function(t){y=t}},{key:"isMathJax",value:function(){var t=this;return void 0==this.mathjax&&(this.mathjax=!1,$("body").find("script").each(function(e,r){r.type.startsWith("math")&&(t.mathjax=!0)})),this.mathjax}},{key:"MathJaxMode",value:function(){var t=x();if(-1!=t)return this.Newsite("read",t[0].outerHTML),this.dom=t[0],this.state="temp",t;var e=k();if(e&&""!=e.content){var r=j(e.content),n=r.id,a=r.cls,i=r.tag;return""!=n?"<"+i+' id="'+n+'">':""!=a?"<"+i+' class="'+a+'">':void 0}}},{key:"Readability",value:function(){try{var t=k();if(!t||""==t.content)throw"Readability error";this.Newsite("read",t.content,t.excerpt);var e=j(t.wrap),r=e.id,n=e.cls,a=e.tag;this.dom=""!=r?$("body").find("#"+r)[0]:""!=n?$("body").find("."+n.replace(/ /gi,"."))[0]:$("body").find(""+a)[0],this.state="temp"}catch(t){var i=x();-1!=i?(this.Newsite("read",i[0].outerHTML),this.dom=i[0],this.state="temp"):this.current.site=l(m)}}},{key:"Getsite",value:function(t,e){return this.sites[t].find(function(t){return t[0]==e})}},{key:"Getsites",value:function(){var t=this,e=[],n=function(){if(v(location.href,"file://**/*.txt")||v(location.href,"http*://**/*.txt"))return function(){var t=location.pathname.split("/").pop(),e="file:"==location.protocol?"local":"remote",r={name:"txtread::"+e,title:"",desc:"",include:"<pre>",auto:!1,exclude:[]};"remote"==e&&(r.include="",r.html=$("body pre").html().replace(/\n/gi,"<br>"));return!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".txt",""))+""),r}();if($($("body").children()[0]).is("pre")&&(v(location.href,"file://**/*.md")||v(location.href,"http*://**/*.md")))return function(){var t=location.pathname.split("/").pop(),e={name:"txtread::"+("file:"==location.protocol?"local":"remote"),title:"",desc:"",include:"",auto:!1,exclude:[]},r=(new y.default.Converter).makeHtml($("body pre").text());return e.html=r,!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".md",""))+""),e}();var t=/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi,e={name:$("meta[name='simpread:name']").attr("content"),url:$("meta[name='simpread:url']").attr("content"),title:$("meta[name='simpread:title']").attr("content"),desc:$("meta[name='simpread:desc']").attr("content"),include:$("meta[name='simpread:include']").attr("content"),exp:$("meta[name='simpread:exclude']").attr("content"),auto:$("meta[name='simpread:auto']").attr("content"),exclude:[]};if(e.name&&e.include){if(e.url&&!v(location.href,e.url))return;!e.title&&(e.title=""),!e.desc&&(e.desc=""),!e.exp&&(e.exp=""),e.name="metaread::"+e.name,e.auto="true"==e.auto;var r=["title","desc","include","exp"].findIndex(function(r){return""!=e[r]&&!e[r].match(t)});return e.exclude.push(e.exp),delete e.exp,-1==r?e:void 0}return}();if(this.current.url=this.url,n)this.current.auto=n.auto,this.current.url=n.url,delete n.auto,delete n.url,this.current.site=r({},n),this.current.site.name.startsWith("metaread::")&&(this.state="meta"),this.current.site.name.startsWith("txtread::")&&(this.state="txt");else if(_("local",new Map(this.sites.local),this.url,e),_("global",new Map(this.sites.global),this.url,e),_("person",new Map(this.sites.person),this.url,e),_("custom",new Map(this.sites.custom),this.url,e),e.length>0){var a=void 0;if(e.forEach(function(e){e[1].active&&(a=e,t.current.url=a[0],t.current.site=t.Safesite(r({},a[1]),a[2],a[0]),t.state="adapter")}),!a){var i=e[0];i[1].active=!0,this.current.url=i[0],this.current.site=this.Safesite(r({},i[1]),i[2],i[0]),this.state="adapter"}}else{var o=function(){if(location.pathname.includes("thread")||location.pathname.includes("forum.php")){if($(".t_f").length>0&&$(".favatar").find(".authi").length>0&&$(".avatar").find("img").length>0)return{avatar:[{name:"[[{$('.favatar').find('.authi')}]]"},{url:"[[{$('.avatar').find('img')}]]"}],include:"[[{$('.t_f')}]]"}}else if(/\/t\/[\w-]+\/\d+/.test(location.pathname)&&$("meta[name=generator]").attr("content").includes("discourse"))return{avatar:[{name:"[[{$('.topic-avatar').find('.a[data-user-card]')}]]"},{url:"[[{$('.topic-avatar').find('img')}]]"}],include:"[[{$('.cooked')}]]"};return-1}();-1!=o?(this.Newmultisite("read",o),this.state="temp"):this.Readability()}this.current.site.matching=e}},{key:"Addsites",value:function(t){var e=0;if(0==this.sites.global.length)this.sites.global=this.Formatsites(t),e=this.sites.global.length;else{var r=function(t,e){var r=new Map(e),n=[].concat(o(r.keys())),a=0;return t.map(function(t){n.includes(t[0])?n.includes(t[0]):a++}),{count:a,newsites:t}}(this.Formatsites(t),this.sites.global);e=r.count,this.sites.global=r.newsites}return e}},{key:"Addlocalsites",value:function(t){return this.sites.local=[].concat(o(t)),this.sites.local}},{key:"Addallsites",value:function(t){return this.sites={global:[].concat(o(t.global)),person:[].concat(o(t.person)),custom:[].concat(o(t.custom)),local:[].concat(o(t.local))},this.sites}},{key:"Newsite",value:function(t,e,n){var a={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]",include:"",exclude:[]}};e&&(a.site.html=e),this.current.mode=a.mode,this.current.url=a.url,this.current.site=this.Safesite(r({},a.site),"local",a.url),n&&(this.current.site.excerpt=n)}},{key:"Newmultisite",value:function(t,e){var n={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"",include:e.include,exclude:[],avatar:e.avatar}};this.current.mode=n.mode,this.current.url=n.url,this.current.site=this.Safesite(r({},n.site),"local",n.url)}},{key:"Updatesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1==n&&(n=this.sites[t].length),this.sites[t].splice(n,1,r)}},{key:"Deletesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1!=n&&this.sites[t].splice(n,1),r(n)}},{key:"Safesite",value:function(t,e,r){return t.url=r,t.target=e,""==t.name&&(t.name="tempread::"),(!t.avatar||0==t.avatar.length)&&(t.avatar=[{name:""},{url:""}]),(!t.paging||0==t.paging.length)&&(t.paging=[{prev:""},{next:""}]),t}},{key:"Cleansite",value:function(t){return delete t.url,delete t.html,delete t.target,delete t.matching,t.avatar&&t.avatar.length>0&&""==t.avatar[0].name&&delete t.avatar,t.paging&&t.paging.length>0&&""==t.paging[0].prev&&delete t.paging,t}},{key:"Formatsites",value:function(t){var e=new Map,r=!0,n=!1,a=void 0;try{for(var i,l=t.sites[Symbol.iterator]();!(r=(i=l.next()).done);r=!0){var u=i.value;if(0==O(u)){var s=u.url;delete u.url,e.set(s,u)}}}catch(t){n=!0,a=t}finally{try{!r&&l.return&&l.return()}finally{if(n)throw a}}return[].concat(o(e))}},{key:"Clearsites",value:function(t){t?this.sites[t]=[]:this.sites={global:[],custom:[],local:[]}}},{key:"Origins",value:function(t){var e=t.origins.map(function(t){return t.url});return(e=new Set(this.origins.concat(e))).forEach(function(t){""!=t.trim()&&t.trim().startsWith("http")&&t.trim().endsWith(".json")||e.delete(t)}),this.origins=[].concat(o(e)),this.origins}},{key:"Addorigins",value:function(t){return this.sites.custom=[].concat(o(t)),this.sites.custom}},{key:"Clearorigins",value:function(){var t=this.sites.custom.length;return this.sites.custom=[],t}}]),n}();function x(){var t=$("body"),e=!0,r=!1,n=void 0;try{for(var a,i=["[itemprop='articleBody']","article",".post-content",".entry-content",".post-article",".content-post",".article-entry",".article-content",".article-body",".markdown-body",".post",".content"][Symbol.iterator]();!(e=(a=i.next()).done);e=!0){var o=a.value,l=t.find(o);if(l.length>0)return l}}catch(t){r=!0,n=t}finally{try{!e&&i.return&&i.return()}finally{if(r)throw n}}return-1}function k(){var t=document.location,e=(t.href,t.host,t.protocol,t.host,t.protocol.substr(0,t.protocol.indexOf(":")),t.protocol,t.host,t.pathname.substr(0,t.pathname.lastIndexOf("/")+1),new g.Readability(document.cloneNode(!0)).parse());return e}function _(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=function(t){var e=t.replace("www.","").match(/\.\S+\.\S+/g);return e?e[0].substr(1):t.replace("www.","")},i=u(b),s=[].concat(o(e.keys())),c=r.match(/[.a-zA-z0-9-_]+/g)[1].replace("www.",""),h=a(i.hostname),d=function(){return"/"==i.pathname||/\/(default|index|portal).[0-9a-zA-Z]+$/.test(i.pathname)},f=!0,p=!1,m=void 0;try{for(var g,y=s[Symbol.iterator]();!(f=(g=y.next()).done);f=!0){var w=g.value,x=e.get(w).name,$=a(x);d()||w.endsWith("*")||w.replace(/^http[s]?:/,"")!=r.replace(/^http[s]?:/,"")?w.match(/\*/g)&&1==w.match(/\*/g).length&&!d()&&w.endsWith("*")&&c.includes($)&&h==$&&r.includes(x)?n.push([w,l(e.get(w)),t]):v(i.origin+i.pathname,w)&&n.push([w,l(e.get(w)),t]):n.push([w,l(e.get(w)),t])}}catch(t){p=!0,m=t}finally{try{!f&&y.return&&y.return()}finally{if(p)throw m}}}function O(t){if(!t.name||!t.url||!t.include)return-1;if(-1==s(t.title)[0]||-1==s(t.include)[0]||-1==s(t.desc)[0])return-2;if(t.paging){if(2!=t.paging.length)return-3;if(!t.paging[0].prev)return-4;if(!t.paging[1].next)return-5;if(-1==s(t.paging[0].prev)[0]||-1==s(t.paging[1].next)[0])return-6}if(t.avatar){if(2!=t.avatar.length)return-7;if(!t.avatar[0].name)return-8;if(!t.avatar[1].url)return-9;if(-1==s(t.avatar[0].name)[0]||-1==s(t.avatar[1].url)[0])return-10}return 0}function j(t){var e=t.replace('<div id="readability-page-1" class="page">',""),r=$(e)[0],n=r.outerHTML.replace(r.innerHTML,""),a=$(n)[0],i=a.tagName.toLowerCase(),o=a.className;return{id:a.id,cls:o,tag:i}}function S(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text",r=$("html");if(h(t)){var n=d(t),a=i(n,2),o=a[0],l=a[1];0==l?t=o:3==l?t=M(r.find(o)):4==l&&(t=o.html())}else"html"==e?t=M(r.find(t)):"multi"==e||(t=r.find(t).text().trim());return t}function M(t){var e="";switch(t.length){case 0:e="<sr-rd-content-error></sr-rd-content-error>";break;case 1:e=t.html().trim();break;default:e=t.map(function(t,e){return $(e).html()}).get().join("<br>")}return e}return function(r){function o(e){t(this,o);var r=a(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.version="0.0.4 build 0616",r.org_url=location.href,r.html={},r.plugin={},r.pure=!1,r.cleanup=!1,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,w),e(o,[{key:"Exist",value:function(){return this.org_url==location.href}},{key:"AddPlugin",value:function(t){this.plugin={minimatch:t.minimatch,pangu:t.pangu,beautify:t.beautify,stylesheet:t.style,rdability:t.rdability,markdown:t.markdown},n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMinimatch",this).call(this,this.plugin.minimatch),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetRdability",this).call(this,this.plugin.rdability),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMarkdown",this).call(this,this.plugin.markdown)}},{key:"ReadMode",value:function(){var t,e,r,n,a;this.html=(t=this.current.site,e=l(t),r=c(""==t.title?"<title>":t.title),n=c(t.desc),a=c(t.include),e.title=""==t.title||"<title>"==t.title?$("head title").text():S(r),e.desc=function(t){if(void 0==t)return t;var e=t.length,r=t.indexOf("。")+1;return e>100&&(t=r>0?t.substr(0,r):t.substr(0,101)+"......"),t}(t.excerpt?t.excerpt:S(n)),e.include=""==t.include&&""!=t.html?t.html:S(a,"html"),e.avatar&&e.avatar.length>0&&""==e.avatar[0].name&&delete e.avatar,e.paging&&e.paging.length>0&&""==e.paging[0].prev&&delete e.paging,e.avatar&&e.avatar.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r),"html")}),e.paging&&e.paging.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r))}),e)}},{key:"TempMode",value:function(t,e){this.state="temp",this.dom=e,this.Newsite(t,e.outerHTML)}},{key:"GetDom",value:function(t,e){return S(c(t),e)}},{key:"Include",value:function(){var t=this.current.site.include,e=[],r=c(t);try{if(h(r)){var n=d(t),a=i(n,2),o=a[0],l=a[1];0==l?(t=t.replace(/\[\[{\$\(|}\]\]|\).html\(\)/g,""),e=$(d("[[["+t+"]]]")[0])):3==l&&(e=o)}else r&&(e=$("body").find(r))}catch(t){}return e}},{key:"Exclude",value:function(t){return function(t,e){var r=[],n="",a=!0,o=!1,l=void 0;try{for(var u,s=e[Symbol.iterator]();!(a=(u=s.next()).done);a=!0){var f=u.value;if(h(f)){var p=d(f),m=i(p,2),v=m[0],g=m[1];if(1==g)n=v;else if(2==g){var y=t.html().match(new RegExp(v,"g"));if(y&&y.length>0){var b=y.join("");n="*["+b+"]"}else n=void 0}else 3==g?v.remove():4==g&&v.remove()}else n=c(f);n&&r.push(n)}}catch(t){o=!0,l=t}finally{try{!a&&s.return&&s.return()}finally{if(o)throw l}}return r.join(",")}(t,this.current.site.exclude)}},{key:"Beautify",value:function(t){0!=t.children().length&&this.plugin.beautify&&(this.cleanup&&this.plugin.beautify.cleanHTML(t,this.pure,this.isMathJax()),this.plugin.beautify.specbeautify(this.current.site.name,t),this.plugin.beautify.removeSpareTag(this.current.site.name,t),this.plugin.beautify.htmlbeautify(t),this.plugin.beautify.commbeautify(this.current.site.name,t))}},{key:"Format",value:function(t){this.plugin.pangu&&this.plugin.pangu.spacingElementByClassName(t)}},{key:"Utils",value:function(){return{dom2Xpath:f,xPath2Dom:p}}}]),o}()}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.PureRead=e()}(this,function(){"use strict";var t=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},n=function t(e,r,n){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,r);if(void 0===i){var a=Object.getPrototypeOf(e);return null===a?void 0:t(a,r,n)}if("value"in i)return i.value;var o=i.get;return void 0!==o?o.call(n):void 0},i=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},a=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,l=t[Symbol.iterator]();!(n=(o=l.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{!n&&l.return&&l.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)};function l(t){return $.extend(!0,{},t)}function u(t){if(document){var e=document.createElement("a");return e.href=t,e}var r=t.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);return r&&{href:t,protocol:r[1],host:r[2],hostname:r[3],port:r[4],pathname:r[5],search:r[6],hash:r[7]}}function s(t){if(""==t)return[0,t];if(h(t))return[2,t];var e=t.match(/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi);return e&&e.length>0?[1,e]:[-1,void 0]}function c(t){var e=s(t),r=a(e,2),n=r[0],i=r[1];if(2==n)return t;if(1==n){var o=i[0].trim().replace(/['"<>]/g,"").replace(/ /gi,"=").split("="),l=a(o,3),u=l[0],c=l[1],h=l[2];return c?"class"===c.toLowerCase()?c=u+"."+h:"id"===c.toLowerCase()&&(c=u+"#"+h):c=u,c}return null}function h(t){return/^(\[\[)[\[{`'/]{1}[ \S]+[}`'/\]]\]\]{1}($)/g.test(t)}function d(t){var e=[t.replace(/(^)\[\[|\]\]$/g,"")],r=e[0],n=e[1];switch(r[0]){case"{":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)(),n=0;break;case"'":t=(t=r.replace(/^'|'$/g,"")).match(/^<[a-zA-Z0-9_-]+>/g).join("").replace(/<|>/g,"")+":contains("+t.replace(/<[/a-zA-Z0-9_-]+>/g,"")+")",n=1;break;case"/":t=r.replace(/^\/|\/$/g,"").replace(/\\{2}/g,"\\").replace(/'/g,'"'),n=2;break;case"[":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)()[0],n=3;break;case"`":r=p(r=r.replace(/^`|`$/g,"")),t=$(r),n=4;break;default:n=-1}return[t,n]}function f(t){try{if(""!=t.id)return void 0==t.id?"":"//*[@id='"+t.id+"']";if(t===document.body)return"/html[1]/"+t.tagName.toLowerCase();for(var e=0,r=t.parentNode.childNodes,n=0;n<r.length;n++){var i=r[n];if(i===t)return f(t.parentNode)+"/"+t.tagName.toLowerCase()+"["+(e+1)+"]";1===i.nodeType&&i.tagName===t.tagName&&e++}}catch(t){return""}}function p(t){return document.evaluate(t,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}var m={url:"",target:"",matching:[],name:"",title:"",desc:"",exclude:[],include:"",avatar:[],paging:[]},v=void 0,g=void 0,y=void 0,b=void 0,w=function(){function n(){var e,r,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{global:[],custom:[],local:[]};t(this,n),this.url=(r=(e="/"!=(e=window.location.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,""),window.location.protocol+"//"+window.location.hostname+r+"/"),this.sites=i,this.current={},this.state="none",this.origins=[],this.mathjax=void 0,b=location.href}return e(n,[{key:"SetURL",value:function(t){var e,r=u(t),n=(e="/"!=(e=r.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,"");this.url=r.protocol+"//"+r.hostname+n+"/",b=t}},{key:"SetMinimatch",value:function(t){v=t}},{key:"SetRdability",value:function(t){g=t}},{key:"SetMarkdown",value:function(t){y=t}},{key:"isMathJax",value:function(){var t=this;return void 0==this.mathjax&&(this.mathjax=!1,$("body").find("script").each(function(e,r){r.type.startsWith("math")&&(t.mathjax=!0)})),this.mathjax}},{key:"MathJaxMode",value:function(){var t=x();if(-1!=t)return this.Newsite("read",t[0].outerHTML),this.dom=t[0],this.state="temp",t;var e=k();if(e&&""!=e.content){var r=j(e.content),n=r.id,i=r.cls,a=r.tag;return""!=n?"<"+a+' id="'+n+'">':""!=i?"<"+a+' class="'+i+'">':void 0}}},{key:"Readability",value:function(){try{var t=k();if(!t||""==t.content)throw"Readability error";this.Newsite("read",t.content,t.excerpt);var e=j(t.wrap),r=e.id,n=e.cls,i=e.tag;this.dom=""!=r?$("body").find("#"+r)[0]:""!=n?$("body").find("."+n.replace(/ /gi,"."))[0]:$("body").find(""+i)[0],this.state="temp"}catch(t){var a=x();-1!=a?(this.Newsite("read",a[0].outerHTML),this.dom=a[0],this.state="temp"):this.current.site=l(m)}}},{key:"Getsite",value:function(t,e){return this.sites[t].find(function(t){return t[0]==e})}},{key:"Getsites",value:function(){var t=this,e=[],n=function(){if(v(location.href,"file://**/*.txt")||v(location.href,"http*://**/*.txt"))return function(){var t=location.pathname.split("/").pop(),e="file:"==location.protocol?"local":"remote",r={name:"txtread::"+e,title:"<title>",desc:"",include:"<pre>",auto:!1,exclude:[]};"remote"==e&&(r.include="",r.html=$("body pre").html().replace(/\n/gi,"<br>"));return!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".txt",""))+""),r}();if($($("body").children()[0]).is("pre")&&(v(location.href,"file://**/*.md")||v(location.href,"http*://**/*.md")))return function(){var t=location.pathname.split("/").pop(),e={name:"txtread::"+("file:"==location.protocol?"local":"remote"),title:"",desc:"",include:"",auto:!1,exclude:[]},r=(new y.default.Converter).makeHtml($("body pre").text());return e.html=r,!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".md",""))+""),e}();var t=/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi,e={name:$("meta[name='simpread:name']").attr("content"),url:$("meta[name='simpread:url']").attr("content"),title:$("meta[name='simpread:title']").attr("content"),desc:$("meta[name='simpread:desc']").attr("content"),include:$("meta[name='simpread:include']").attr("content"),exp:$("meta[name='simpread:exclude']").attr("content"),auto:$("meta[name='simpread:auto']").attr("content"),exclude:[]};if(e.name&&e.include){if(e.url&&!v(location.href,e.url))return;!e.title&&(e.title=""),!e.desc&&(e.desc=""),!e.exp&&(e.exp=""),e.name="metaread::"+e.name,e.auto="true"==e.auto;var r=["title","desc","include","exp"].findIndex(function(r){return""!=e[r]&&!e[r].match(t)});return e.exclude.push(e.exp),delete e.exp,-1==r?e:void 0}return}();if(this.current.url=this.url,n)this.current.auto=n.auto,this.current.url=n.url,delete n.auto,delete n.url,this.current.site=r({},n),this.current.site.name.startsWith("metaread::")&&(this.state="meta"),this.current.site.name.startsWith("txtread::")&&(this.state="txt");else if(_("local",new Map(this.sites.local),this.url,e),_("global",new Map(this.sites.global),this.url,e),_("person",new Map(this.sites.person),this.url,e),_("custom",new Map(this.sites.custom),this.url,e),e.length>0){var i=void 0;if(e.forEach(function(e){e[1].active&&(i=e,t.current.url=i[0],t.current.site=t.Safesite(r({},i[1]),i[2],i[0]),t.state="adapter")}),!i){var a=e[0];a[1].active=!0,this.current.url=a[0],this.current.site=this.Safesite(r({},a[1]),a[2],a[0]),this.state="adapter"}}else{var o=function(){if(location.pathname.includes("thread")||location.pathname.includes("forum.php")){if($(".t_f").length>0&&$(".favatar").find(".authi").length>0&&$(".avatar").find("img").length>0)return{avatar:[{name:"[[{$('.favatar').find('.authi')}]]"},{url:"[[{$('.avatar').find('img')}]]"}],include:"[[{$('.t_f')}]]"}}else if(/\/t\/[\w-]+\/\d+/.test(location.pathname)&&$("meta[name=generator]").attr("content").includes("discourse"))return{avatar:[{name:"[[{$('.topic-avatar').find('.a[data-user-card]')}]]"},{url:"[[{$('.topic-avatar').find('img')}]]"}],include:"[[{$('.cooked')}]]"};return-1}();-1!=o?(this.Newmultisite("read",o),this.state="temp"):this.Readability()}this.current.site.matching=e}},{key:"Addsites",value:function(t){var e=0;if(0==this.sites.global.length)this.sites.global=this.Formatsites(t),e=this.sites.global.length;else{var r=function(t,e){var r=new Map(e),n=[].concat(o(r.keys())),i=0;return t.map(function(t){n.includes(t[0])?n.includes(t[0]):i++}),{count:i,newsites:t}}(this.Formatsites(t),this.sites.global);e=r.count,this.sites.global=r.newsites}return e}},{key:"Addlocalsites",value:function(t){return this.sites.local=[].concat(o(t)),this.sites.local}},{key:"Addallsites",value:function(t){return this.sites={global:[].concat(o(t.global)),person:[].concat(o(t.person)),custom:[].concat(o(t.custom)),local:[].concat(o(t.local))},this.sites}},{key:"Newsite",value:function(t,e,n){var i={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]",include:"",exclude:[]}};e&&(i.site.html=e),this.current.mode=i.mode,this.current.url=i.url,this.current.site=this.Safesite(r({},i.site),"local",i.url),n&&(this.current.site.excerpt=n)}},{key:"Newmultisite",value:function(t,e){var n={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"",include:e.include,exclude:[],avatar:e.avatar}};this.current.mode=n.mode,this.current.url=n.url,this.current.site=this.Safesite(r({},n.site),"local",n.url)}},{key:"Updatesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1==n&&(n=this.sites[t].length),this.sites[t].splice(n,1,r)}},{key:"Deletesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1!=n&&this.sites[t].splice(n,1),r(n)}},{key:"Safesite",value:function(t,e,r){return t.url=r,t.target=e,""==t.name&&(t.name="tempread::"),(!t.avatar||0==t.avatar.length)&&(t.avatar=[{name:""},{url:""}]),(!t.paging||0==t.paging.length)&&(t.paging=[{prev:""},{next:""}]),t}},{key:"Cleansite",value:function(t){return delete t.url,delete t.html,delete t.target,delete t.matching,t.avatar&&t.avatar.length>0&&""==t.avatar[0].name&&delete t.avatar,t.paging&&t.paging.length>0&&""==t.paging[0].prev&&delete t.paging,t}},{key:"Formatsites",value:function(t){var e=new Map,r=!0,n=!1,i=void 0;try{for(var a,l=t.sites[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var u=a.value;if(0==O(u)){var s=u.url;delete u.url,e.set(s,u)}}}catch(t){n=!0,i=t}finally{try{!r&&l.return&&l.return()}finally{if(n)throw i}}return[].concat(o(e))}},{key:"Clearsites",value:function(t){t?this.sites[t]=[]:this.sites={global:[],custom:[],local:[]}}},{key:"Origins",value:function(t){var e=t.origins.map(function(t){return t.url});return(e=new Set(this.origins.concat(e))).forEach(function(t){""!=t.trim()&&t.trim().startsWith("http")&&t.trim().endsWith(".json")||e.delete(t)}),this.origins=[].concat(o(e)),this.origins}},{key:"Addorigins",value:function(t){return this.sites.custom=[].concat(o(t)),this.sites.custom}},{key:"Clearorigins",value:function(){var t=this.sites.custom.length;return this.sites.custom=[],t}}]),n}();function x(){var t=$("body"),e=!0,r=!1,n=void 0;try{for(var i,a=["[itemprop='articleBody']","article",".post-content",".entry-content",".post-article",".content-post",".article-entry",".article-content",".article-body",".markdown-body",".post",".content"][Symbol.iterator]();!(e=(i=a.next()).done);e=!0){var o=i.value,l=t.find(o);if(l.length>0)return l}}catch(t){r=!0,n=t}finally{try{!e&&a.return&&a.return()}finally{if(r)throw n}}return-1}function k(){var t=document.location,e=(t.href,t.host,t.protocol,t.host,t.protocol.substr(0,t.protocol.indexOf(":")),t.protocol,t.host,t.pathname.substr(0,t.pathname.lastIndexOf("/")+1),new g.Readability(document.cloneNode(!0)).parse());return e}function _(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=function(t){var e=t.replace("www.","").match(/\.\S+\.\S+/g);return e?e[0].substr(1):t.replace("www.","")},a=u(b),s=[].concat(o(e.keys())),c=r.match(/[.a-zA-z0-9-_]+/g)[1].replace("www.",""),h=i(a.hostname),d=function(){return"/"==a.pathname||/\/(default|index|portal).[0-9a-zA-Z]+$/.test(a.pathname)},f=!0,p=!1,m=void 0;try{for(var g,y=s[Symbol.iterator]();!(f=(g=y.next()).done);f=!0){var w=g.value,x=e.get(w).name,$=i(x);d()||w.endsWith("*")||w.replace(/^http[s]?:/,"")!=r.replace(/^http[s]?:/,"")?w.match(/\*/g)&&1==w.match(/\*/g).length&&!d()&&w.endsWith("*")&&c.includes($)&&h==$&&r.includes(x)?n.push([w,l(e.get(w)),t]):v(a.origin+a.pathname,w)&&n.push([w,l(e.get(w)),t]):n.push([w,l(e.get(w)),t])}}catch(t){p=!0,m=t}finally{try{!f&&y.return&&y.return()}finally{if(p)throw m}}}function O(t){if(!t.name||!t.url||!t.include)return-1;if(-1==s(t.title)[0]||-1==s(t.include)[0]||-1==s(t.desc)[0])return-2;if(t.paging){if(2!=t.paging.length)return-3;if(!t.paging[0].prev)return-4;if(!t.paging[1].next)return-5;if(-1==s(t.paging[0].prev)[0]||-1==s(t.paging[1].next)[0])return-6}if(t.avatar){if(2!=t.avatar.length)return-7;if(!t.avatar[0].name)return-8;if(!t.avatar[1].url)return-9;if(-1==s(t.avatar[0].name)[0]||-1==s(t.avatar[1].url)[0])return-10}return 0}function j(t){var e=t.replace('<div id="readability-page-1" class="page">',""),r=$(e)[0],n=r.outerHTML.replace(r.innerHTML,""),i=$(n)[0],a=i.tagName.toLowerCase(),o=i.className;return{id:i.id,cls:o,tag:a}}function S(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text",r=$("html");if(h(t)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?t=o:3==l?t=M(r.find(o)):4==l&&(t=o.html())}else"html"==e?t=M(r.find(t)):"multi"==e||(t=r.find(t).text().trim());return t}function M(t){var e="";switch(t.length){case 0:e="<sr-rd-content-error></sr-rd-content-error>";break;case 1:e=t.html().trim();break;default:e=t.map(function(t,e){return $(e).html()}).get().join("<br>")}return e}return function(r){function o(e){t(this,o);var r=i(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.version="0.0.4 build 1226",r.org_url=location.href,r.html={},r.plugin={},r.pure=!1,r.cleanup=!1,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,w),e(o,[{key:"Exist",value:function(){return this.org_url==location.href}},{key:"AddPlugin",value:function(t){this.plugin={minimatch:t.minimatch,pangu:t.pangu,beautify:t.beautify,stylesheet:t.style,rdability:t.rdability,markdown:t.markdown},n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMinimatch",this).call(this,this.plugin.minimatch),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetRdability",this).call(this,this.plugin.rdability),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMarkdown",this).call(this,this.plugin.markdown)}},{key:"ReadMode",value:function(){var t,e,r,n,i;this.html=(t=this.current.site,e=l(t),r=c(""==t.title?"<title>":t.title),n=c(t.desc),i=c(t.include),e.title=""==t.title||"<title>"==t.title?$("head title").text():S(r),e.desc=function(t){if(void 0==t)return t;var e=t.length,r=t.indexOf("。")+1;return e>100&&(t=r>0?t.substr(0,r):t.substr(0,101)+"......"),t}(t.excerpt?t.excerpt:S(n)),e.include=""==t.include&&""!=t.html?t.html:S(i,"html"),e.avatar&&e.avatar.length>0&&""==e.avatar[0].name&&delete e.avatar,e.paging&&e.paging.length>0&&""==e.paging[0].prev&&delete e.paging,e.avatar&&e.avatar.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r),"html")}),e.paging&&e.paging.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r))}),e)}},{key:"TempMode",value:function(t,e){this.state="temp",this.dom=e,this.Newsite(t,e.outerHTML)}},{key:"GetDom",value:function(t,e){return S(c(t),e)}},{key:"Include",value:function(){var t=this.current.site.include,e=[],r=c(t);try{if(h(r)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?(t=t.replace(/\[\[{\$\(|}\]\]|\).html\(\)/g,""),e=$(d("[[["+t+"]]]")[0])):3==l&&(e=o)}else r&&(e=$("body").find(r))}catch(t){}return e}},{key:"Exclude",value:function(t){return function(t,e){var r=[],n="",i=!0,o=!1,l=void 0;try{for(var u,s=e[Symbol.iterator]();!(i=(u=s.next()).done);i=!0){var f=u.value;if(h(f)){var p=d(f),m=a(p,2),v=m[0],g=m[1];if(1==g)n=v;else if(2==g){var y=t.html().match(new RegExp(v,"g"));if(y&&y.length>0){var b=y.join("");n="*["+b+"]"}else n=void 0}else 3==g?v.remove():4==g&&v.remove()}else n=c(f);n&&r.push(n)}}catch(t){o=!0,l=t}finally{try{!i&&s.return&&s.return()}finally{if(o)throw l}}return r.join(",")}(t,this.current.site.exclude)}},{key:"Beautify",value:function(t){0!=t.children().length&&this.plugin.beautify&&(this.plugin.beautify.before(this.current.site.name,t),this.cleanup&&this.plugin.beautify.cleanHTML(t,this.pure,this.isMathJax()),this.plugin.beautify.specbeautify(this.current.site.name,t),this.plugin.beautify.removeSpareTag(this.current.site.name,t),this.plugin.beautify.htmlbeautify(t),this.plugin.beautify.commbeautify(this.current.site.name,t))}},{key:"Format",value:function(t){this.plugin.pangu&&this.plugin.pangu.spacingElementByClassName(t)}},{key:"Utils",value:function(){return{dom2Xpath:f,xPath2Dom:p}}}]),o}()}); From 1314c58916b2895b4419d047d9561903edd58b63 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 26 Dec 2019 16:33:39 +0800 Subject: [PATCH 130/329] Update some websites. --- src/website_list.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/website_list.json b/src/website_list.json index ec76a87c..78a23357 100644 --- a/src/website_list.json +++ b/src/website_list.json @@ -203,7 +203,7 @@ "url" : "https://sspai.com/post/", "title" : "<h1 class='title'>", "desc" : "[[{$('meta[name=description]').attr('content')}]]", - "include" : "[[[$('.content')]]]", + "include" : "[[[$('.articleWidth-content').find('.content')]]]", "exclude" : [ "<img id='s1' >", "<hr>", From e1b3157cc3ee15cc1847b2dab089cb5a160c547c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 26 Dec 2019 16:37:43 +0800 Subject: [PATCH 131/329] Optimize common style. --- src/assets/css/theme_common.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/assets/css/theme_common.css b/src/assets/css/theme_common.css index 0d8601f4..5d6d6297 100644 --- a/src/assets/css/theme_common.css +++ b/src/assets/css/theme_common.css @@ -82,6 +82,11 @@ sr-rd-content img { box-shadow: 1px 1px 3px #d4d4d4; } +sr-rd-content figcaption { + text-align: center; + font-size: 14px; +} + sr-rd-content sr-blockquote { display: block; position: relative; From 477b0ad1cbd3662bdf20113863d6a92f2c5e6820 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 26 Dec 2019 16:39:50 +0800 Subject: [PATCH 132/329] Optimize common style. --- src/assets/css/theme_common.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/css/theme_common.css b/src/assets/css/theme_common.css index 5d6d6297..87a926cc 100644 --- a/src/assets/css/theme_common.css +++ b/src/assets/css/theme_common.css @@ -28,7 +28,7 @@ sr-rd-content { } sr-rd-desc { - text-align: left; + text-align: justify; line-height: 2.4; margin: 0 0 1.2em 0; } From 5452d8ec7ae7f8f6f886d09da613ff8a379ba329 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 26 Dec 2019 18:10:11 +0800 Subject: [PATCH 133/329] Optimize all textarea & input 'font-family'. --- src/assets/css/options_page.css | 4 ++++ src/assets/css/setting.css | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/assets/css/options_page.css b/src/assets/css/options_page.css index fc6e6819..190b47d3 100644 --- a/src/assets/css/options_page.css +++ b/src/assets/css/options_page.css @@ -37,6 +37,10 @@ a { text-decoration: none; } +input, textarea { + font-family: Raleway, Menlo, "Dank Mono", Inconsolata, "Operator Mono", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace!important; +} + .header { display: flex; align-items: center; diff --git a/src/assets/css/setting.css b/src/assets/css/setting.css index 56f28c61..b6c163b7 100644 --- a/src/assets/css/setting.css +++ b/src/assets/css/setting.css @@ -24,6 +24,10 @@ sr-opt-gp { font-size: 15px; } +sr-opt-gp textarea, sr-opt-gp input { + font-family: Inconsolata, "Operator Mono", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace!important; +} + sr-opt-gp sr-opt-label { display: block; position: absolute; From 68bbc2e2da4585006c85abaad47eaf4f3c4b15ea Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 26 Dec 2019 18:23:12 +0800 Subject: [PATCH 134/329] Format source. --- src/assets/css/simpread.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index cacc9e05..6ab1f21a 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -216,6 +216,9 @@ sr-rd-footer a:active { border-bottom: 1px dotted!important; } +/** + * Special blocks + */ .simpread-blocks { text-decoration: none!important; } From 400fb2636eb9542f6073afcd3161f25720d4f5eb Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 27 Dec 2019 13:50:01 +0800 Subject: [PATCH 135/329] Update puread file. --- src/vender/puread/puread.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/puread/puread.min.js b/src/vender/puread/puread.min.js index 6447282c..71e3315c 100644 --- a/src/vender/puread/puread.min.js +++ b/src/vender/puread/puread.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.PureRead=e()}(this,function(){"use strict";var t=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},n=function t(e,r,n){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,r);if(void 0===i){var a=Object.getPrototypeOf(e);return null===a?void 0:t(a,r,n)}if("value"in i)return i.value;var o=i.get;return void 0!==o?o.call(n):void 0},i=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},a=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,l=t[Symbol.iterator]();!(n=(o=l.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{!n&&l.return&&l.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)};function l(t){return $.extend(!0,{},t)}function u(t){if(document){var e=document.createElement("a");return e.href=t,e}var r=t.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);return r&&{href:t,protocol:r[1],host:r[2],hostname:r[3],port:r[4],pathname:r[5],search:r[6],hash:r[7]}}function s(t){if(""==t)return[0,t];if(h(t))return[2,t];var e=t.match(/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi);return e&&e.length>0?[1,e]:[-1,void 0]}function c(t){var e=s(t),r=a(e,2),n=r[0],i=r[1];if(2==n)return t;if(1==n){var o=i[0].trim().replace(/['"<>]/g,"").replace(/ /gi,"=").split("="),l=a(o,3),u=l[0],c=l[1],h=l[2];return c?"class"===c.toLowerCase()?c=u+"."+h:"id"===c.toLowerCase()&&(c=u+"#"+h):c=u,c}return null}function h(t){return/^(\[\[)[\[{`'/]{1}[ \S]+[}`'/\]]\]\]{1}($)/g.test(t)}function d(t){var e=[t.replace(/(^)\[\[|\]\]$/g,"")],r=e[0],n=e[1];switch(r[0]){case"{":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)(),n=0;break;case"'":t=(t=r.replace(/^'|'$/g,"")).match(/^<[a-zA-Z0-9_-]+>/g).join("").replace(/<|>/g,"")+":contains("+t.replace(/<[/a-zA-Z0-9_-]+>/g,"")+")",n=1;break;case"/":t=r.replace(/^\/|\/$/g,"").replace(/\\{2}/g,"\\").replace(/'/g,'"'),n=2;break;case"[":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)()[0],n=3;break;case"`":r=p(r=r.replace(/^`|`$/g,"")),t=$(r),n=4;break;default:n=-1}return[t,n]}function f(t){try{if(""!=t.id)return void 0==t.id?"":"//*[@id='"+t.id+"']";if(t===document.body)return"/html[1]/"+t.tagName.toLowerCase();for(var e=0,r=t.parentNode.childNodes,n=0;n<r.length;n++){var i=r[n];if(i===t)return f(t.parentNode)+"/"+t.tagName.toLowerCase()+"["+(e+1)+"]";1===i.nodeType&&i.tagName===t.tagName&&e++}}catch(t){return""}}function p(t){return document.evaluate(t,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}var m={url:"",target:"",matching:[],name:"",title:"",desc:"",exclude:[],include:"",avatar:[],paging:[]},v=void 0,g=void 0,y=void 0,b=void 0,w=function(){function n(){var e,r,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{global:[],custom:[],local:[]};t(this,n),this.url=(r=(e="/"!=(e=window.location.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,""),window.location.protocol+"//"+window.location.hostname+r+"/"),this.sites=i,this.current={},this.state="none",this.origins=[],this.mathjax=void 0,b=location.href}return e(n,[{key:"SetURL",value:function(t){var e,r=u(t),n=(e="/"!=(e=r.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,"");this.url=r.protocol+"//"+r.hostname+n+"/",b=t}},{key:"SetMinimatch",value:function(t){v=t}},{key:"SetRdability",value:function(t){g=t}},{key:"SetMarkdown",value:function(t){y=t}},{key:"isMathJax",value:function(){var t=this;return void 0==this.mathjax&&(this.mathjax=!1,$("body").find("script").each(function(e,r){r.type.startsWith("math")&&(t.mathjax=!0)})),this.mathjax}},{key:"MathJaxMode",value:function(){var t=x();if(-1!=t)return this.Newsite("read",t[0].outerHTML),this.dom=t[0],this.state="temp",t;var e=k();if(e&&""!=e.content){var r=j(e.content),n=r.id,i=r.cls,a=r.tag;return""!=n?"<"+a+' id="'+n+'">':""!=i?"<"+a+' class="'+i+'">':void 0}}},{key:"Readability",value:function(){try{var t=k();if(!t||""==t.content)throw"Readability error";this.Newsite("read",t.content,t.excerpt);var e=j(t.wrap),r=e.id,n=e.cls,i=e.tag;this.dom=""!=r?$("body").find("#"+r)[0]:""!=n?$("body").find("."+n.replace(/ /gi,"."))[0]:$("body").find(""+i)[0],this.state="temp"}catch(t){var a=x();-1!=a?(this.Newsite("read",a[0].outerHTML),this.dom=a[0],this.state="temp"):this.current.site=l(m)}}},{key:"Getsite",value:function(t,e){return this.sites[t].find(function(t){return t[0]==e})}},{key:"Getsites",value:function(){var t=this,e=[],n=function(){if(v(location.href,"file://**/*.txt")||v(location.href,"http*://**/*.txt"))return function(){var t=location.pathname.split("/").pop(),e="file:"==location.protocol?"local":"remote",r={name:"txtread::"+e,title:"<title>",desc:"",include:"<pre>",auto:!1,exclude:[]};"remote"==e&&(r.include="",r.html=$("body pre").html().replace(/\n/gi,"<br>"));return!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".txt",""))+""),r}();if($($("body").children()[0]).is("pre")&&(v(location.href,"file://**/*.md")||v(location.href,"http*://**/*.md")))return function(){var t=location.pathname.split("/").pop(),e={name:"txtread::"+("file:"==location.protocol?"local":"remote"),title:"",desc:"",include:"",auto:!1,exclude:[]},r=(new y.default.Converter).makeHtml($("body pre").text());return e.html=r,!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".md",""))+""),e}();var t=/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi,e={name:$("meta[name='simpread:name']").attr("content"),url:$("meta[name='simpread:url']").attr("content"),title:$("meta[name='simpread:title']").attr("content"),desc:$("meta[name='simpread:desc']").attr("content"),include:$("meta[name='simpread:include']").attr("content"),exp:$("meta[name='simpread:exclude']").attr("content"),auto:$("meta[name='simpread:auto']").attr("content"),exclude:[]};if(e.name&&e.include){if(e.url&&!v(location.href,e.url))return;!e.title&&(e.title=""),!e.desc&&(e.desc=""),!e.exp&&(e.exp=""),e.name="metaread::"+e.name,e.auto="true"==e.auto;var r=["title","desc","include","exp"].findIndex(function(r){return""!=e[r]&&!e[r].match(t)});return e.exclude.push(e.exp),delete e.exp,-1==r?e:void 0}return}();if(this.current.url=this.url,n)this.current.auto=n.auto,this.current.url=n.url,delete n.auto,delete n.url,this.current.site=r({},n),this.current.site.name.startsWith("metaread::")&&(this.state="meta"),this.current.site.name.startsWith("txtread::")&&(this.state="txt");else if(_("local",new Map(this.sites.local),this.url,e),_("global",new Map(this.sites.global),this.url,e),_("person",new Map(this.sites.person),this.url,e),_("custom",new Map(this.sites.custom),this.url,e),e.length>0){var i=void 0;if(e.forEach(function(e){e[1].active&&(i=e,t.current.url=i[0],t.current.site=t.Safesite(r({},i[1]),i[2],i[0]),t.state="adapter")}),!i){var a=e[0];a[1].active=!0,this.current.url=a[0],this.current.site=this.Safesite(r({},a[1]),a[2],a[0]),this.state="adapter"}}else{var o=function(){if(location.pathname.includes("thread")||location.pathname.includes("forum.php")){if($(".t_f").length>0&&$(".favatar").find(".authi").length>0&&$(".avatar").find("img").length>0)return{avatar:[{name:"[[{$('.favatar').find('.authi')}]]"},{url:"[[{$('.avatar').find('img')}]]"}],include:"[[{$('.t_f')}]]"}}else if(/\/t\/[\w-]+\/\d+/.test(location.pathname)&&$("meta[name=generator]").attr("content").includes("discourse"))return{avatar:[{name:"[[{$('.topic-avatar').find('.a[data-user-card]')}]]"},{url:"[[{$('.topic-avatar').find('img')}]]"}],include:"[[{$('.cooked')}]]"};return-1}();-1!=o?(this.Newmultisite("read",o),this.state="temp"):this.Readability()}this.current.site.matching=e}},{key:"Addsites",value:function(t){var e=0;if(0==this.sites.global.length)this.sites.global=this.Formatsites(t),e=this.sites.global.length;else{var r=function(t,e){var r=new Map(e),n=[].concat(o(r.keys())),i=0;return t.map(function(t){n.includes(t[0])?n.includes(t[0]):i++}),{count:i,newsites:t}}(this.Formatsites(t),this.sites.global);e=r.count,this.sites.global=r.newsites}return e}},{key:"Addlocalsites",value:function(t){return this.sites.local=[].concat(o(t)),this.sites.local}},{key:"Addallsites",value:function(t){return this.sites={global:[].concat(o(t.global)),person:[].concat(o(t.person)),custom:[].concat(o(t.custom)),local:[].concat(o(t.local))},this.sites}},{key:"Newsite",value:function(t,e,n){var i={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]",include:"",exclude:[]}};e&&(i.site.html=e),this.current.mode=i.mode,this.current.url=i.url,this.current.site=this.Safesite(r({},i.site),"local",i.url),n&&(this.current.site.excerpt=n)}},{key:"Newmultisite",value:function(t,e){var n={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"",include:e.include,exclude:[],avatar:e.avatar}};this.current.mode=n.mode,this.current.url=n.url,this.current.site=this.Safesite(r({},n.site),"local",n.url)}},{key:"Updatesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1==n&&(n=this.sites[t].length),this.sites[t].splice(n,1,r)}},{key:"Deletesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1!=n&&this.sites[t].splice(n,1),r(n)}},{key:"Safesite",value:function(t,e,r){return t.url=r,t.target=e,""==t.name&&(t.name="tempread::"),(!t.avatar||0==t.avatar.length)&&(t.avatar=[{name:""},{url:""}]),(!t.paging||0==t.paging.length)&&(t.paging=[{prev:""},{next:""}]),t}},{key:"Cleansite",value:function(t){return delete t.url,delete t.html,delete t.target,delete t.matching,t.avatar&&t.avatar.length>0&&""==t.avatar[0].name&&delete t.avatar,t.paging&&t.paging.length>0&&""==t.paging[0].prev&&delete t.paging,t}},{key:"Formatsites",value:function(t){var e=new Map,r=!0,n=!1,i=void 0;try{for(var a,l=t.sites[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var u=a.value;if(0==O(u)){var s=u.url;delete u.url,e.set(s,u)}}}catch(t){n=!0,i=t}finally{try{!r&&l.return&&l.return()}finally{if(n)throw i}}return[].concat(o(e))}},{key:"Clearsites",value:function(t){t?this.sites[t]=[]:this.sites={global:[],custom:[],local:[]}}},{key:"Origins",value:function(t){var e=t.origins.map(function(t){return t.url});return(e=new Set(this.origins.concat(e))).forEach(function(t){""!=t.trim()&&t.trim().startsWith("http")&&t.trim().endsWith(".json")||e.delete(t)}),this.origins=[].concat(o(e)),this.origins}},{key:"Addorigins",value:function(t){return this.sites.custom=[].concat(o(t)),this.sites.custom}},{key:"Clearorigins",value:function(){var t=this.sites.custom.length;return this.sites.custom=[],t}}]),n}();function x(){var t=$("body"),e=!0,r=!1,n=void 0;try{for(var i,a=["[itemprop='articleBody']","article",".post-content",".entry-content",".post-article",".content-post",".article-entry",".article-content",".article-body",".markdown-body",".post",".content"][Symbol.iterator]();!(e=(i=a.next()).done);e=!0){var o=i.value,l=t.find(o);if(l.length>0)return l}}catch(t){r=!0,n=t}finally{try{!e&&a.return&&a.return()}finally{if(r)throw n}}return-1}function k(){var t=document.location,e=(t.href,t.host,t.protocol,t.host,t.protocol.substr(0,t.protocol.indexOf(":")),t.protocol,t.host,t.pathname.substr(0,t.pathname.lastIndexOf("/")+1),new g.Readability(document.cloneNode(!0)).parse());return e}function _(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=function(t){var e=t.replace("www.","").match(/\.\S+\.\S+/g);return e?e[0].substr(1):t.replace("www.","")},a=u(b),s=[].concat(o(e.keys())),c=r.match(/[.a-zA-z0-9-_]+/g)[1].replace("www.",""),h=i(a.hostname),d=function(){return"/"==a.pathname||/\/(default|index|portal).[0-9a-zA-Z]+$/.test(a.pathname)},f=!0,p=!1,m=void 0;try{for(var g,y=s[Symbol.iterator]();!(f=(g=y.next()).done);f=!0){var w=g.value,x=e.get(w).name,$=i(x);d()||w.endsWith("*")||w.replace(/^http[s]?:/,"")!=r.replace(/^http[s]?:/,"")?w.match(/\*/g)&&1==w.match(/\*/g).length&&!d()&&w.endsWith("*")&&c.includes($)&&h==$&&r.includes(x)?n.push([w,l(e.get(w)),t]):v(a.origin+a.pathname,w)&&n.push([w,l(e.get(w)),t]):n.push([w,l(e.get(w)),t])}}catch(t){p=!0,m=t}finally{try{!f&&y.return&&y.return()}finally{if(p)throw m}}}function O(t){if(!t.name||!t.url||!t.include)return-1;if(-1==s(t.title)[0]||-1==s(t.include)[0]||-1==s(t.desc)[0])return-2;if(t.paging){if(2!=t.paging.length)return-3;if(!t.paging[0].prev)return-4;if(!t.paging[1].next)return-5;if(-1==s(t.paging[0].prev)[0]||-1==s(t.paging[1].next)[0])return-6}if(t.avatar){if(2!=t.avatar.length)return-7;if(!t.avatar[0].name)return-8;if(!t.avatar[1].url)return-9;if(-1==s(t.avatar[0].name)[0]||-1==s(t.avatar[1].url)[0])return-10}return 0}function j(t){var e=t.replace('<div id="readability-page-1" class="page">',""),r=$(e)[0],n=r.outerHTML.replace(r.innerHTML,""),i=$(n)[0],a=i.tagName.toLowerCase(),o=i.className;return{id:i.id,cls:o,tag:a}}function S(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text",r=$("html");if(h(t)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?t=o:3==l?t=M(r.find(o)):4==l&&(t=o.html())}else"html"==e?t=M(r.find(t)):"multi"==e||(t=r.find(t).text().trim());return t}function M(t){var e="";switch(t.length){case 0:e="<sr-rd-content-error></sr-rd-content-error>";break;case 1:e=t.html().trim();break;default:e=t.map(function(t,e){return $(e).html()}).get().join("<br>")}return e}return function(r){function o(e){t(this,o);var r=i(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.version="0.0.4 build 1226",r.org_url=location.href,r.html={},r.plugin={},r.pure=!1,r.cleanup=!1,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,w),e(o,[{key:"Exist",value:function(){return this.org_url==location.href}},{key:"AddPlugin",value:function(t){this.plugin={minimatch:t.minimatch,pangu:t.pangu,beautify:t.beautify,stylesheet:t.style,rdability:t.rdability,markdown:t.markdown},n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMinimatch",this).call(this,this.plugin.minimatch),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetRdability",this).call(this,this.plugin.rdability),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMarkdown",this).call(this,this.plugin.markdown)}},{key:"ReadMode",value:function(){var t,e,r,n,i;this.html=(t=this.current.site,e=l(t),r=c(""==t.title?"<title>":t.title),n=c(t.desc),i=c(t.include),e.title=""==t.title||"<title>"==t.title?$("head title").text():S(r),e.desc=function(t){if(void 0==t)return t;var e=t.length,r=t.indexOf("。")+1;return e>100&&(t=r>0?t.substr(0,r):t.substr(0,101)+"......"),t}(t.excerpt?t.excerpt:S(n)),e.include=""==t.include&&""!=t.html?t.html:S(i,"html"),e.avatar&&e.avatar.length>0&&""==e.avatar[0].name&&delete e.avatar,e.paging&&e.paging.length>0&&""==e.paging[0].prev&&delete e.paging,e.avatar&&e.avatar.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r),"html")}),e.paging&&e.paging.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r))}),e)}},{key:"TempMode",value:function(t,e){this.state="temp",this.dom=e,this.Newsite(t,e.outerHTML)}},{key:"GetDom",value:function(t,e){return S(c(t),e)}},{key:"Include",value:function(){var t=this.current.site.include,e=[],r=c(t);try{if(h(r)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?(t=t.replace(/\[\[{\$\(|}\]\]|\).html\(\)/g,""),e=$(d("[[["+t+"]]]")[0])):3==l&&(e=o)}else r&&(e=$("body").find(r))}catch(t){}return e}},{key:"Exclude",value:function(t){return function(t,e){var r=[],n="",i=!0,o=!1,l=void 0;try{for(var u,s=e[Symbol.iterator]();!(i=(u=s.next()).done);i=!0){var f=u.value;if(h(f)){var p=d(f),m=a(p,2),v=m[0],g=m[1];if(1==g)n=v;else if(2==g){var y=t.html().match(new RegExp(v,"g"));if(y&&y.length>0){var b=y.join("");n="*["+b+"]"}else n=void 0}else 3==g?v.remove():4==g&&v.remove()}else n=c(f);n&&r.push(n)}}catch(t){o=!0,l=t}finally{try{!i&&s.return&&s.return()}finally{if(o)throw l}}return r.join(",")}(t,this.current.site.exclude)}},{key:"Beautify",value:function(t){0!=t.children().length&&this.plugin.beautify&&(this.plugin.beautify.before(this.current.site.name,t),this.cleanup&&this.plugin.beautify.cleanHTML(t,this.pure,this.isMathJax()),this.plugin.beautify.specbeautify(this.current.site.name,t),this.plugin.beautify.removeSpareTag(this.current.site.name,t),this.plugin.beautify.htmlbeautify(t),this.plugin.beautify.commbeautify(this.current.site.name,t))}},{key:"Format",value:function(t){this.plugin.pangu&&this.plugin.pangu.spacingElementByClassName(t)}},{key:"Utils",value:function(){return{dom2Xpath:f,xPath2Dom:p}}}]),o}()}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.PureRead=e()}(this,function(){"use strict";var t=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},n=function t(e,r,n){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,r);if(void 0===i){var a=Object.getPrototypeOf(e);return null===a?void 0:t(a,r,n)}if("value"in i)return i.value;var o=i.get;return void 0!==o?o.call(n):void 0},i=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},a=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,l=t[Symbol.iterator]();!(n=(o=l.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{!n&&l.return&&l.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)};function l(t){return $.extend(!0,{},t)}function u(t){if(document){var e=document.createElement("a");return e.href=t,e}var r=t.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);return r&&{href:t,protocol:r[1],host:r[2],hostname:r[3],port:r[4],pathname:r[5],search:r[6],hash:r[7]}}function s(t){if(""==t)return[0,t];if(h(t))return[2,t];var e=t.match(/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi);return e&&e.length>0?[1,e]:[-1,void 0]}function c(t){var e=s(t),r=a(e,2),n=r[0],i=r[1];if(2==n)return t;if(1==n){var o=i[0].trim().replace(/['"<>]/g,"").replace(/ /gi,"=").split("="),l=a(o,3),u=l[0],c=l[1],h=l[2];return c?"class"===c.toLowerCase()?c=u+"."+h:"id"===c.toLowerCase()&&(c=u+"#"+h):c=u,c}return null}function h(t){return/^(\[\[)[\[{`'/]{1}[ \S]+[}`'/\]]\]\]{1}($)/g.test(t)}function d(t){var e=[t.replace(/(^)\[\[|\]\]$/g,"")],r=e[0],n=e[1];switch(r[0]){case"{":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)(),n=0;break;case"'":t=(t=r.replace(/^'|'$/g,"")).match(/^<[a-zA-Z0-9_-]+>/g).join("").replace(/<|>/g,"")+":contains("+t.replace(/<[/a-zA-Z0-9_-]+>/g,"")+")",n=1;break;case"/":t=r.replace(/^\/|\/$/g,"").replace(/\\{2}/g,"\\").replace(/'/g,'"'),n=2;break;case"[":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)()[0],n=3;break;case"`":r=p(r=r.replace(/^`|`$/g,"")),t=$(r),n=4;break;default:n=-1}return[t,n]}function f(t){try{if(""!=t.id)return void 0==t.id?"":"//*[@id='"+t.id+"']";if(t===document.body)return"/html[1]/"+t.tagName.toLowerCase();for(var e=0,r=t.parentNode.childNodes,n=0;n<r.length;n++){var i=r[n];if(i===t)return f(t.parentNode)+"/"+t.tagName.toLowerCase()+"["+(e+1)+"]";1===i.nodeType&&i.tagName===t.tagName&&e++}}catch(t){return""}}function p(t){return document.evaluate(t,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}var m={url:"",target:"",matching:[],name:"",title:"",desc:"",exclude:[],include:"",avatar:[],paging:[]},v=void 0,g=void 0,y=void 0,b=void 0,w=function(){function n(){var e,r,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{global:[],custom:[],local:[]};t(this,n),this.url=(r=(e="/"!=(e=window.location.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,""),window.location.protocol+"//"+window.location.hostname+r+"/"),this.sites=i,this.current={},this.state="none",this.origins=[],this.mathjax=void 0,b=location.href}return e(n,[{key:"SetURL",value:function(t){var e,r=u(t),n=(e="/"!=(e=r.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,"");this.url=r.protocol+"//"+r.hostname+n+"/",b=t}},{key:"SetMinimatch",value:function(t){v=t}},{key:"SetRdability",value:function(t){g=t}},{key:"SetMarkdown",value:function(t){y=t}},{key:"isMathJax",value:function(){var t=this;return void 0==this.mathjax&&(this.mathjax=!1,$("body").find("script").each(function(e,r){r.type.startsWith("math")&&(t.mathjax=!0)})),this.mathjax}},{key:"MathJaxMode",value:function(){var t=x();if(-1!=t)return this.Newsite("read",t[0].outerHTML),this.dom=t[0],this.state="temp",t;var e=k();if(e&&""!=e.content){var r=j(e.content),n=r.id,i=r.cls,a=r.tag;return""!=n?"<"+a+' id="'+n+'">':""!=i?"<"+a+' class="'+i+'">':void 0}}},{key:"Readability",value:function(){try{var t=k();if(!t||""==t.content)throw"Readability error";this.Newsite("read",t.content,t.excerpt);var e=j(t.wrap),r=e.id,n=e.cls,i=e.tag;this.dom=""!=r?$("body").find("#"+r)[0]:""!=n?$("body").find("."+n.replace(/ /gi,"."))[0]:$("body").find(""+i)[0],this.state="temp"}catch(t){var a=x();-1!=a?(this.Newsite("read",a[0].outerHTML),this.dom=a[0],this.state="temp"):this.current.site=l(m)}}},{key:"Getsite",value:function(t,e){return this.sites[t].find(function(t){return t[0]==e})}},{key:"Getsites",value:function(){var t=this,e=[],n=function(){if(v(location.href,"file://**/*.txt")||v(location.href,"http*://**/*.txt"))return function(){var t=location.pathname.split("/").pop(),e="file:"==location.protocol?"local":"remote",r={name:"txtread::"+e,title:"<title>",desc:"",include:"<pre>",auto:!1,exclude:[]};"remote"==e&&(r.include="",r.html=$("body pre").html().replace(/\n/gi,"<br>"));return!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".txt",""))+""),r}();if($($("body").children()[0]).is("pre")&&(v(location.href,"file://**/*.md")||v(location.href,"http*://**/*.md")))return function(){var t=location.pathname.split("/").pop(),e={name:"txtread::"+("file:"==location.protocol?"local":"remote"),title:"",desc:"",include:"",auto:!1,exclude:[]},r=(new y.default.Converter).makeHtml($("body pre").text());return e.html=r,!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".md",""))+""),e}();var t=/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi,e={name:$("meta[name='simpread:name']").attr("content"),url:$("meta[name='simpread:url']").attr("content"),title:$("meta[name='simpread:title']").attr("content"),desc:$("meta[name='simpread:desc']").attr("content"),include:$("meta[name='simpread:include']").attr("content"),exp:$("meta[name='simpread:exclude']").attr("content"),auto:$("meta[name='simpread:auto']").attr("content"),exclude:[]};if(e.name&&e.include){if(e.url&&!v(location.href,e.url))return;!e.title&&(e.title=""),!e.desc&&(e.desc=""),!e.exp&&(e.exp=""),e.name="metaread::"+e.name,e.auto="true"==e.auto;var r=["title","desc","include","exp"].findIndex(function(r){return""!=e[r]&&!e[r].match(t)});return e.exclude.push(e.exp),delete e.exp,-1==r?e:void 0}return}();if(this.current.url=this.url,n)this.current.auto=n.auto,this.current.url=n.url,delete n.auto,delete n.url,this.current.site=r({},n),this.current.site.name.startsWith("metaread::")&&(this.state="meta"),this.current.site.name.startsWith("txtread::")&&(this.state="txt");else if(_("local",new Map(this.sites.local),this.url,e),_("global",new Map(this.sites.global),this.url,e),_("person",new Map(this.sites.person),this.url,e),_("custom",new Map(this.sites.custom),this.url,e),e.length>0){var i=void 0;if(e.forEach(function(e){e[1].active&&(i=e,t.current.url=i[0],t.current.site=t.Safesite(r({},i[1]),i[2],i[0]),t.state="adapter")}),!i){var a=e[0];a[1].active=!0,this.current.url=a[0],this.current.site=this.Safesite(r({},a[1]),a[2],a[0]),this.state="adapter"}}else{var o=function(){if(location.pathname.includes("thread")||location.pathname.includes("forum.php")){if($(".t_f").length>0&&$(".favatar").find(".authi").length>0&&$(".avatar").find("img").length>0)return{avatar:[{name:"[[{$('.favatar').find('.authi')}]]"},{url:"[[{$('.avatar').find('img')}]]"}],include:"[[{$('.t_f')}]]"}}else if(/\/t\/[\w-]+\/\d+/.test(location.pathname)&&$("meta[name=generator]").attr("content").includes("discourse"))return{avatar:[{name:"[[{$('.topic-avatar').find('.a[data-user-card]')}]]"},{url:"[[{$('.topic-avatar').find('img')}]]"}],include:"[[{$('.cooked')}]]"};return-1}();-1!=o?(this.Newmultisite("read",o),this.state="temp"):this.Readability()}this.current.site.matching=e}},{key:"Addsites",value:function(t){var e=0;if(0==this.sites.global.length)this.sites.global=this.Formatsites(t),e=this.sites.global.length;else{var r=function(t,e){var r=new Map(e),n=[].concat(o(r.keys())),i=0;return t.map(function(t){n.includes(t[0])?n.includes(t[0]):i++}),{count:i,newsites:t}}(this.Formatsites(t),this.sites.global);e=r.count,this.sites.global=r.newsites}return e}},{key:"Addlocalsites",value:function(t){return this.sites.local=[].concat(o(t)),this.sites.local}},{key:"Addallsites",value:function(t){return this.sites={global:[].concat(o(t.global)),person:[].concat(o(t.person)),custom:[].concat(o(t.custom)),local:[].concat(o(t.local))},this.sites}},{key:"Newsite",value:function(t,e,n){var i={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]",include:"",exclude:[]}};e&&(i.site.html=e),this.current.mode=i.mode,this.current.url=i.url,this.current.site=this.Safesite(r({},i.site),"local",i.url),n&&(this.current.site.excerpt=n)}},{key:"Newmultisite",value:function(t,e){var n={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"",include:e.include,exclude:[],avatar:e.avatar}};this.current.mode=n.mode,this.current.url=n.url,this.current.site=this.Safesite(r({},n.site),"local",n.url)}},{key:"Updatesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1==n&&(n=this.sites[t].length),this.sites[t].splice(n,1,r)}},{key:"Deletesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1!=n&&this.sites[t].splice(n,1),r(n)}},{key:"Safesite",value:function(t,e,r){return t.url=r,t.target=e,""==t.name&&(t.name="tempread::"),(!t.avatar||0==t.avatar.length)&&(t.avatar=[{name:""},{url:""}]),(!t.paging||0==t.paging.length)&&(t.paging=[{prev:""},{next:""}]),t}},{key:"Cleansite",value:function(t){return delete t.url,delete t.html,delete t.target,delete t.matching,t.avatar&&t.avatar.length>0&&""==t.avatar[0].name&&delete t.avatar,t.paging&&t.paging.length>0&&""==t.paging[0].prev&&delete t.paging,t}},{key:"Formatsites",value:function(t){var e=new Map,r=!0,n=!1,i=void 0;try{for(var a,l=t.sites[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var u=a.value;if(0==O(u)){var s=u.url;delete u.url,e.set(s,u)}}}catch(t){n=!0,i=t}finally{try{!r&&l.return&&l.return()}finally{if(n)throw i}}return[].concat(o(e))}},{key:"Clearsites",value:function(t){t?this.sites[t]=[]:this.sites={global:[],custom:[],local:[]}}},{key:"Origins",value:function(t){var e=t.origins.map(function(t){return t.url});return(e=new Set(this.origins.concat(e))).forEach(function(t){""!=t.trim()&&t.trim().startsWith("http")&&t.trim().endsWith(".json")||e.delete(t)}),this.origins=[].concat(o(e)),this.origins}},{key:"Addorigins",value:function(t){return this.sites.custom=[].concat(o(t)),this.sites.custom}},{key:"Clearorigins",value:function(){var t=this.sites.custom.length;return this.sites.custom=[],t}}]),n}();function x(){var t=$("body"),e=!0,r=!1,n=void 0;try{for(var i,a=["[itemprop='articleBody']","article",".post-content",".entry-content",".post-article",".content-post",".article-entry",".article-content",".article-body",".markdown-body",".post",".content"][Symbol.iterator]();!(e=(i=a.next()).done);e=!0){var o=i.value,l=t.find(o);if(l.length>0)return l}}catch(t){r=!0,n=t}finally{try{!e&&a.return&&a.return()}finally{if(r)throw n}}return-1}function k(){var t=document.location,e=(t.href,t.host,t.protocol,t.host,t.protocol.substr(0,t.protocol.indexOf(":")),t.protocol,t.host,t.pathname.substr(0,t.pathname.lastIndexOf("/")+1),new g.Readability(document.cloneNode(!0)).parse());return e}function _(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=function(t){var e=t.replace("www.","").match(/\.\S+\.\S+/g);return e?e[0].substr(1):t.replace("www.","")},a=u(b),s=[].concat(o(e.keys())),c=r.match(/[.a-zA-z0-9-_]+/g)[1].replace("www.",""),h=i(a.hostname),d=function(){return"/"==a.pathname||/\/(default|index|portal).[0-9a-zA-Z]+$/.test(a.pathname)},f=!0,p=!1,m=void 0;try{for(var g,y=s[Symbol.iterator]();!(f=(g=y.next()).done);f=!0){var w=g.value,x=e.get(w).name,$=i(x);w.startsWith("[[/")&&w.endsWith("/]]")&&new RegExp(w.replace(/^\[\[\/|\/\]\]/g,"")).test(location.href)?n.push([w,l(e.get(w)),t]):d()||w.endsWith("*")||w.replace(/^http[s]?:/,"")!=r.replace(/^http[s]?:/,"")?w.match(/\*/g)&&1==w.match(/\*/g).length&&!d()&&w.endsWith("*")&&c.includes($)&&h==$&&r.includes(x)?n.push([w,l(e.get(w)),t]):v(a.origin+a.pathname,w)&&n.push([w,l(e.get(w)),t]):n.push([w,l(e.get(w)),t])}}catch(t){p=!0,m=t}finally{try{!f&&y.return&&y.return()}finally{if(p)throw m}}}function O(t){if(!t.name||!t.url||!t.include)return-1;if(-1==s(t.title)[0]||-1==s(t.include)[0]||-1==s(t.desc)[0])return-2;if(t.paging){if(2!=t.paging.length)return-3;if(!t.paging[0].prev)return-4;if(!t.paging[1].next)return-5;if(-1==s(t.paging[0].prev)[0]||-1==s(t.paging[1].next)[0])return-6}if(t.avatar){if(2!=t.avatar.length)return-7;if(!t.avatar[0].name)return-8;if(!t.avatar[1].url)return-9;if(-1==s(t.avatar[0].name)[0]||-1==s(t.avatar[1].url)[0])return-10}return 0}function j(t){var e=t.replace('<div id="readability-page-1" class="page">',""),r=$(e)[0],n=r.outerHTML.replace(r.innerHTML,""),i=$(n)[0],a=i.tagName.toLowerCase(),o=i.className;return{id:i.id,cls:o,tag:a}}function S(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text",r=$("html");if(h(t)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?t=o:3==l?t=M(r.find(o)):4==l&&(t=o.html())}else"html"==e?t=M(r.find(t)):"multi"==e||(t=r.find(t).text().trim());return t}function M(t){var e="";switch(t.length){case 0:e="<sr-rd-content-error></sr-rd-content-error>";break;case 1:e=t.html().trim();break;default:e=t.map(function(t,e){return $(e).html()}).get().join("<br>")}return e}return function(r){function o(e){t(this,o);var r=i(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.version="0.0.4 build 1226",r.org_url=location.href,r.html={},r.plugin={},r.pure=!1,r.cleanup=!1,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,w),e(o,[{key:"Exist",value:function(){return this.org_url==location.href}},{key:"AddPlugin",value:function(t){this.plugin={minimatch:t.minimatch,pangu:t.pangu,beautify:t.beautify,stylesheet:t.style,rdability:t.rdability,markdown:t.markdown},n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMinimatch",this).call(this,this.plugin.minimatch),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetRdability",this).call(this,this.plugin.rdability),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMarkdown",this).call(this,this.plugin.markdown)}},{key:"ReadMode",value:function(){var t,e,r,n,i;this.html=(t=this.current.site,e=l(t),r=c(""==t.title?"<title>":t.title),n=c(t.desc),i=c(t.include),e.title=""==t.title||"<title>"==t.title?$("head title").text():S(r),e.desc=function(t){if(void 0==t)return t;var e=t.length,r=t.indexOf("。")+1;return e>100&&(t=r>0?t.substr(0,r):t.substr(0,101)+"......"),t}(t.excerpt?t.excerpt:S(n)),e.include=""==t.include&&""!=t.html?t.html:S(i,"html"),e.avatar&&e.avatar.length>0&&""==e.avatar[0].name&&delete e.avatar,e.paging&&e.paging.length>0&&""==e.paging[0].prev&&delete e.paging,e.avatar&&e.avatar.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r),"html")}),e.paging&&e.paging.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r))}),e)}},{key:"TempMode",value:function(t,e){this.state="temp",this.dom=e,this.Newsite(t,e.outerHTML)}},{key:"GetDom",value:function(t,e){return S(c(t),e)}},{key:"Include",value:function(){var t=this.current.site.include,e=[],r=c(t);try{if(h(r)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?(t=t.replace(/\[\[{\$\(|}\]\]|\).html\(\)/g,""),e=$(d("[[["+t+"]]]")[0])):3==l&&(e=o)}else r&&(e=$("body").find(r))}catch(t){}return e}},{key:"Exclude",value:function(t){return function(t,e){var r=[],n="",i=!0,o=!1,l=void 0;try{for(var u,s=e[Symbol.iterator]();!(i=(u=s.next()).done);i=!0){var f=u.value;if(h(f)){var p=d(f),m=a(p,2),v=m[0],g=m[1];if(1==g)n=v;else if(2==g){var y=t.html().match(new RegExp(v,"g"));if(y&&y.length>0){var b=y.join("");n="*["+b+"]"}else n=void 0}else 3==g?v.remove():4==g&&v.remove()}else n=c(f);n&&r.push(n)}}catch(t){o=!0,l=t}finally{try{!i&&s.return&&s.return()}finally{if(o)throw l}}return r.join(",")}(t,this.current.site.exclude)}},{key:"Beautify",value:function(t){0!=t.children().length&&this.plugin.beautify&&(this.plugin.beautify.before(this.current.site.name,t),this.cleanup&&this.plugin.beautify.cleanHTML(t,this.pure,this.isMathJax()),this.plugin.beautify.specbeautify(this.current.site.name,t),this.plugin.beautify.removeSpareTag(this.current.site.name,t),this.plugin.beautify.htmlbeautify(t),this.plugin.beautify.commbeautify(this.current.site.name,t))}},{key:"Format",value:function(t){this.plugin.pangu&&this.plugin.pangu.spacingElementByClassName(t)}},{key:"Utils",value:function(){return{dom2Xpath:f,xPath2Dom:p}}}]),o}()}); From e8c44c5675ab97500eaf5de4f401b0cf79b8ba63 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 27 Dec 2019 13:50:49 +0800 Subject: [PATCH 136/329] Add 'url' suport regext workflow. --- src/module/common/url.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/module/common/url.jsx b/src/module/common/url.jsx index eef5b3a5..b5a8416e 100644 --- a/src/module/common/url.jsx +++ b/src/module/common/url.jsx @@ -26,10 +26,12 @@ export default class URL extends React.Component { if ( url == "" ) { code = -2; this.setState({ error : "当前输入不能为空。" }); - } else if ( !/^http[s|*]?:\/\//.test( url ) ) { + } else if ( url.startsWith( "[[/" ) && url.endsWith( "/]]" ) && !new RegExp( url.replace( /^\[\[\/|\/\]\]/g, "" ) ).test( location.href )) { + location.protocol != "chrome-extension:" && this.setState({ error : "请输入与当前网址匹配的域名,正则表达式出现错误。" }); + } else if ( !url.startsWith( "[[/" ) && !/^http[s|*]?:\/\//.test( url ) ) { code = -1; this.setState({ error : "请输入有效的 url " }); - } else if ( location.protocol.startsWith( "http" ) && !minimatch( window.location.href, url ) && url != this.props.url ) { + } else if ( !url.startsWith( "[[/" ) && location.protocol.startsWith( "http" ) && !minimatch( window.location.href, url ) && url != this.props.url ) { code = -1; this.setState({ error : "请输入与当前网址匹配的域名,支持 minimatch " }); } else { From fd08d8adf7d8c69741a186e90f058afd3c6e6959 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 28 Dec 2019 08:58:36 +0800 Subject: [PATCH 137/329] Format source. --- src/assets/css/simpread.css | 78 ++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 6ab1f21a..ebd45727 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -1,5 +1,5 @@ /** - * SimpRead + * SimpRead: Read mode */ .simpread-font { @@ -16,47 +16,10 @@ display: none; } -/** - * Focus: Background( root ) style - */ -.simpread-focus-root { - display: block; - position: fixed; - - top: 0; - left: 0; - right: 0; - bottom: 0; - - background-color: rgba( 235, 235, 235, 0.9 ); - z-index: 2147483645; - - opacity: 0; - transition : opacity 1s cubic-bezier(0.23, 1, 0.32, 1) 0ms; -} - -.simpread-focus-highlight { - position: relative; - - box-shadow: 0 0 0 20px #fff; - background-color: #fff; - - overflow: visible; - z-index: 2147483646; -} - -.sr-controlbar-bg sr-rd-crlbar { - z-index: 2147483647; -} - -.sr-controlbar-bg sr-rd-crlbar fab { - z-index: 2147483647; -} - /** * Read: background( root ) style */ -.simpread-read-root { + .simpread-read-root { display: -webkit-flex; justify-content:center; align-items:center; @@ -240,6 +203,43 @@ sr-rd-footer a:active { box-shadow: none; } +/** + * Focus: Background( root ) style + */ +.simpread-focus-root { + display: block; + position: fixed; + + top: 0; + left: 0; + right: 0; + bottom: 0; + + background-color: rgba( 235, 235, 235, 0.9 ); + z-index: 2147483645; + + opacity: 0; + transition : opacity 1s cubic-bezier(0.23, 1, 0.32, 1) 0ms; +} + +.simpread-focus-highlight { + position: relative; + + box-shadow: 0 0 0 20px #fff; + background-color: #fff; + + overflow: visible; + z-index: 2147483646; +} + +.sr-controlbar-bg sr-rd-crlbar { + z-index: 2147483647; +} + +.sr-controlbar-bg sr-rd-crlbar fab { + z-index: 2147483647; +} + /** * Controlbar: focus mode and read mode */ From fdb14034008d5e8dca25dd4db71ce3108b6c9bed Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 28 Dec 2019 12:02:13 +0800 Subject: [PATCH 138/329] Add theme mobile css. --- src/assets/css/theme_mobile.css | 181 ++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 src/assets/css/theme_mobile.css diff --git a/src/assets/css/theme_mobile.css b/src/assets/css/theme_mobile.css new file mode 100644 index 00000000..881870e0 --- /dev/null +++ b/src/assets/css/theme_mobile.css @@ -0,0 +1,181 @@ +/** + * Mobile media + */ +@media (pointer: coarse) { + sr-read { + margin: 20px 5%!important; + min-width: initial!important; + max-width: 90%!important; + } + + sr-rd-title { + margin-top: 0; + font-size: 2.7rem; + } + + sr-rd-desc, + sr-rd-content sr-blockquote { + margin: 10 0!important; + padding: 0 0 0 10px !important; + width: 90%; + + font-size: 1.8rem; + font-style: normal; + line-height: 1.7; + text-align: justify; + } + + sr-rd-content { + font-size: 1.75rem; + font-weight: 300; + } + + sr-rd-content figure { + margin: 0; + padding: 0; + text-align: center; + } + + sr-rd-content a, sr-rd-content a:link { + font-size: inherit; + } + + sr-rd-content li code, sr-rd-content p code { + font-size: inherit; + } + + sr-rd-footer { + margin-top: 20px; + } + + sr-blockquote, sr-blockquote * { + margin: 5px !important; + padding: 5px !important; + } + + sr-rd-title, sr-rd-content h1, sr-rd-content h2, sr-rd-content h3, sr-rd-content h4, sr-rd-content h5, sr-rd-content h6 { + font-family: PingFang SC, Verdana, Helvetica Neue, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans-serif; + color: #000; + font-weight: 100; + line-height: 1.35; + } + + sr-rd-content h1, sr-rd-content h2, sr-rd-content h3, sr-rd-content h4, sr-rd-content h5, sr-rd-content h6, + sr-rd-content-h1, sr-rd-content-h2, sr-rd-content-h3, sr-rd-content-h4, sr-rd-content-h5, sr-rd-content-h6 { + margin-top: 1.2em; + margin-bottom: 0.6em; + line-height: 1.35; + } + + sr-rd-content h1, sr-rd-content-h1 { + font-size: 1.8em; + } + + sr-rd-content h2, sr-rd-content-h2 { + font-size: 1.6em; + } + + sr-rd-content h3, sr-rd-content-h3 { + font-size: 1.4em; + } + + sr-rd-content h4, sr-rd-content-h4 { + font-size: 1.2em; + } + + sr-rd-content h5, sr-rd-content h6, sr-rd-content-h5, sr-rd-content-h6 { + font-size: 1.2em; + } + + sr-rd-content ul, sr-rd-content-ul { + margin-left: 1.3em!important; + list-style: disc; + } + + sr-rd-content ol, sr-rd-content-ol { + list-style: decimal; + margin-left: 1.9em!important; + } + + sr-rd-content li ul, sr-rd-content li ol, sr-rd-content-ul ul, sr-rd-content-ul ol, sr-rd-content-ol ul, sr-rd-content-ol ol { + margin-bottom: 0.8em; + margin-left: 2em!important;; + } + + sr-rd-content img { + margin: 0; + padding: 0; + border: 0; + max-width: 100%!important; + height: auto; + box-shadow: 0 20px 20px -10px rgba(0,0,0,0.1); + } + + sr-rd-mult { + min-width: initial; + background-color: #fff; + box-shadow: 0 1px 6px rgba(32, 33, 36, 0.28); + border-radius: 8px; + } + + sr-rd-mult sr-rd-mult-avatar div { + margin: 0; + } + + sr-rd-mult sr-rd-mult-avatar .sr-rd-content-center-small { + margin: 7px 0!important; + } + + sr-rd-mult sr-rd-mult-avatar span { + display: block; + } + + sr-rd-mult sr-rd-mult-content { + padding-left: 0; + } + + /** + * iPad pro 12 and below + */ + @media only screen and (max-device-width: 1024px) { + html, .simpread-theme-root { + font-size: 80%!important; + } + + sr-rd-mult sr-rd-mult-avatar img { + width: 50px; + height: 50px; + min-width: 50px; + min-height: 50px; + } + } + + /** + * iPhone XS Max and below + */ + @media only screen and (max-device-width: 414px) { + html, .simpread-theme-root { + font-size: 70%!important; + } + + sr-rd-mult sr-rd-mult-avatar img { + width: 30px; + height: 30px; + min-width: 30px; + min-height: 30px; + } + } + + /** + * iPhone SE and below + */ + @media only screen and (max-device-width: 320px) { + html, .simpread-theme-root { + font-size: 90%!important; + } + + sr-rd-content p { + margin-bottom: .5em; + } + } +} From 41dd8958c4f453b64df24b5e8db3dc014f19727e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 28 Dec 2019 12:02:40 +0800 Subject: [PATCH 139/329] Add 'mobile' workflow. --- src/service/theme.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/service/theme.js b/src/service/theme.js index 7db82e37..a2ede087 100644 --- a/src/service/theme.js +++ b/src/service/theme.js @@ -73,6 +73,7 @@ class Theme { constructor() { require( `../assets/css/theme_common.css` ); names.forEach( name => require( `../assets/css/theme_${name}.css` ) ); + require( `../assets/css/theme_mobile.css` ); findThemeStyle( ( name, content ) => themes[name] = content ); } } @@ -92,8 +93,10 @@ function findThemeStyle( callback ) { callback( name, css, $target ); } else if ( css.search( ".simpread-font" ) > -1 ) { themes["global"] = css; - } else if ( css.search( ".simpread-theme-root" ) > -1 ) { + } else if ( css.search( "(pointer: coarse)" ) == -1 && css.search( ".simpread-theme-root" ) > -1 ) { themes["common"] = css; + } else if ( css.search( "(pointer: coarse)" ) > -1 && css.search( "sr-read" ) > -1 ) { + themes["mobile"] = css; } }); } From c2c5fae38ac0f5bc56cbad410e8f91ebb26b288d Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 28 Dec 2019 12:03:24 +0800 Subject: [PATCH 140/329] Add offline support mobile browser. --- src/service/offline.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/service/offline.js b/src/service/offline.js index 2d3d0e7c..88e04307 100644 --- a/src/service/offline.js +++ b/src/service/offline.js @@ -25,6 +25,9 @@ function HTML( title, desc, content, styles ) { <html lang="en" class="simpread-font simpread-theme-root" style='${ $( "html" ).attr( "style" ) }'> <head> <meta charset="utf-8"> + <meta http-equiv="content-type" content="text/html; charset=UTF-8;charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=Edge"> + <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=1"> <meta name="author" content="Kenshin"/> <meta name="description" content="简悦 SimpRead - 如杂志般沉浸式阅读体验的扩展" /> <meta name="keywords" content="Chrome extension, Chrome 扩展, 阅读模式, 沉浸式阅读, 简悦, 简阅, read mode, reading mode, reader view, firefox, firefox addon, userscript, safari, opera, tampermonkey"/> @@ -42,6 +45,7 @@ function HTML( title, desc, content, styles ) { <style type="text/css">${ styles.common }</style> <style type="text/css">${ styles.theme }</style> <style type="text/css">${ styles.global }</style> + <style type="text/css">${ styles.mobile }</style> <style type="text/css">${ styles.css }</style> <style type="text/css">${ styles.special}</style> ${hightlight()} From 4d4d2b28aae898c09b68e1c3dfa9c9b0e6901294 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 28 Dec 2019 12:03:43 +0800 Subject: [PATCH 141/329] Format source. --- src/service/output.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/service/output.js b/src/service/output.js index ad8c3794..13df2222 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -33,8 +33,9 @@ function action( type, title, desc, content ) { const theme = th.Get( storage.read.theme ), global = th.Get( "global" ), common = th.Get( "common" ), + mobile = th.Get( "mobile" ), css = ss.GetCustomCSS(); - callback({ theme, global, common, css, special }); + callback({ theme, global, common, css, mobile, special }); }); }, toMarkdown = callback => { From 49cecbef60fa36f1651adb0c62ae14494e264e1e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 28 Dec 2019 12:10:57 +0800 Subject: [PATCH 142/329] Update some website. --- src/website_list.json | 68 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 7 deletions(-) diff --git a/src/website_list.json b/src/website_list.json index 78a23357..3cbae87c 100644 --- a/src/website_list.json +++ b/src/website_list.json @@ -32,6 +32,24 @@ "<div class='author-share'>", "<div class='embed-control'>" ] + },{ + "name" : "topic.readhub.cn", + "url" : "https://readhub.cn/topic/*", + "title" : "<h2 class='topicTitle___3DA7c'>", + "desc" : "", + "include" : "[[{$('.content___2CL42').find('.summary___3oqrM').parent().html()}]]", + "exclude" : [ + "" + ] + },{ + "name" : "newsflashes.36kr.com", + "url" : "https://36kr.com/newsflashes/*", + "title" : "<a class='item-title'>", + "desc" : "", + "include" : "<pre class='pre-item-des'>", + "exclude" : [ + "" + ] },{ "name" : "36kr.com", "url" : "http://36kr.com/p/", @@ -46,20 +64,29 @@ "<div class='share-nav'>" ] },{ - "name" : "pingwest.com", - "url" : "http*://www.pingwest.com/a/*", + "name" : "s.pingwest.com", + "url" : "http*://www.pingwest.com/s/*", "title" : "<title>", "desc" : "", - "include" : "<article class=\"article-style\">", + "include" : "[[{$($('section.content')[1]).html()}]]", + "exclude" : [ + "" + ] + },{ + "name" : "wire.pingwest.com", + "url" : "http*://www.pingwest.com/wire/", + "title" : "<h1 class='title'>", + "desc" : "", + "include" : "<div id='sc-container'>", "exclude" : [ "<p class='post-footer-wx'>" ] },{ "name" : "pingwest.com", - "url" : "http://www.pingwest.com/wire/", - "title" : "<h1 class='title'>", + "url" : "http*://www.pingwest.com/a/*", + "title" : "<title>", "desc" : "", - "include" : "<div id='sc-container'>", + "include" : "<article class=\"article-style\">", "exclude" : [ "<p class='post-footer-wx'>" ] @@ -201,7 +228,7 @@ },{ "name" : "sspai.com", "url" : "https://sspai.com/post/", - "title" : "<h1 class='title'>", + "title" : "[[{$('title').text().replace( ' - 少数派', '' )}]]", "desc" : "[[{$('meta[name=description]').attr('content')}]]", "include" : "[[[$('.articleWidth-content').find('.content')]]]", "exclude" : [ @@ -367,6 +394,15 @@ "exclude" : [ "" ] + },{ + "name" : "creatorsdaily.com", + "url" : "[[/https://creatorsdaily.com/posts/\\w+/]]", + "title" : "<span class='sub-title'>", + "desc" : "[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]", + "include" : "[[`//*[@id='__next']/section[1]/main[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]`]]", + "exclude" : [ + "[[`/html[1]/div[1]/sr-read[1]/sr-rd-content[1]/div[1]`]]" + ] },{ "name" : "huxiu.com", "url" : "https://www.huxiu.com/article/", @@ -386,6 +422,24 @@ "exclude" : [ "" ] + },{ + "name" : "movie.douban.com", + "url" : "[[/https:\\/\\/movie.douban.com\\/subject\\/\\d+\\/?/]]", + "title" : "<title>", + "desc" : "", + "include" : "<div id='link-report'>", + "exclude" : [ + "" + ] + },{ + "name" : "note.douban.com", + "url" : "[[/https?:\\/\\/www.douban.com\\/note\\/\\d+\\/?/]]", + "title" : "<title>", + "desc" : "", + "include" : "<div id='link-report'>", + "exclude" : [ + "" + ] },{ "name" : "m.douban.com", "url" : "https://m.douban.com/*", From ebc0183251e9b44f79cd291d0b5852a49ca2e37b Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 28 Dec 2019 15:46:25 +0800 Subject: [PATCH 143/329] Add some website. --- src/website_list.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/website_list.json b/src/website_list.json index 3cbae87c..2a6e70ff 100644 --- a/src/website_list.json +++ b/src/website_list.json @@ -1213,6 +1213,16 @@ "exclude" : [ "[['<p>(完)</p>']]" ] + },{ + "name" : "ruanyf.yuque.com", + "url" : "[[/https://www.yuque.com/ruanyf/weekly/issue-\\d+/]]", + "title" : "<h1 id='page-title'>", + "desc" : "[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]", + "include" : "[[`//*[@id='content']/div[2]/div[1]/div[1]`]]", + "exclude" : [ + "" + ], + "css": "span svg { display: none; }" },{ "name" : "v2ex.com", "url" : "https://www.v2ex.com/t/", From e9c79fa5e266647cf77520a4e49594fa7fd4a0fb Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 28 Dec 2019 16:27:38 +0800 Subject: [PATCH 144/329] Optimize theme common css. --- src/assets/css/theme_common.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/assets/css/theme_common.css b/src/assets/css/theme_common.css index 87a926cc..02121e4b 100644 --- a/src/assets/css/theme_common.css +++ b/src/assets/css/theme_common.css @@ -77,6 +77,9 @@ sr-rd-content a:hover { sr-rd-content img { margin: 10px; padding: 5px; + + max-width: 100%; + background: #fff; border: 1px solid #bbb; box-shadow: 1px 1px 3px #d4d4d4; From 5cf5c14392b698c25ac2b41ebe6097007011d5ae Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 09:07:50 +0800 Subject: [PATCH 145/329] Update 'font awesome' version. --- src/module/plugins.jsx | 5 +++-- src/read/read.jsx | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/module/plugins.jsx b/src/module/plugins.jsx index 60c0ef46..910f8fa7 100644 --- a/src/module/plugins.jsx +++ b/src/module/plugins.jsx @@ -242,8 +242,9 @@ export default class PluginsOpt extends React.Component { } componentWillMount() { - $( "head" ).append( '<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/solid.css" integrity="sha384-TbilV5Lbhlwdyc4RuIV/JhD8NR+BfMrvz4BL5QFa2we1hQu6wvREr3v6XSRfCTRp" crossorigin="anonymous">' ); - $( "head" ).append( '<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/fontawesome.css" integrity="sha384-ozJwkrqb90Oa3ZNb+yKFW2lToAWYdTiF1vt8JiH5ptTGHTGcN7qdoR1F95e0kYyG" crossorigin="anonymous">' ); + $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/solid.min.css" />' ); + $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/brands.min.css" />' ); + $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/fontawesome.min.css" />' ); storage.Plugins( () => { decodeURIComponent( location.href ).includes( "#plugins?install=" ) && this.install(); this.setState({ plugins: Object.values( storage.plugins ) }); diff --git a/src/read/read.jsx b/src/read/read.jsx index 92c991aa..781a890c 100644 --- a/src/read/read.jsx +++ b/src/read/read.jsx @@ -104,9 +104,9 @@ class Read extends React.Component { $( "body" ).addClass( "simpread-hidden" ); th.Change( this.props.read.theme ); if ( storage.current.fap ) { - $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.1/css/solid.min.css" />' ); - $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.1/css/brands.min.css" />' ); - $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.1/css/fontawesome.min.css" />' ); + $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/solid.min.css" />' ); + $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/brands.min.css" />' ); + $( "head" ).append( '<link rel="stylesheet" class="simpread-fs-style" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/fontawesome.min.css" />' ); } } From cde6c9904ae8380381d7673f7dcc3dab0dcc93c0 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 15:42:57 +0800 Subject: [PATCH 146/329] Add new props: fontIcon large. --- src/vender/mduikit/sidebar.jsx | 61 +++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index cee70340..e59ff7d3 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -69,10 +69,6 @@ const cssinjs = () => { display: 'block', position: 'relative', - marginTop: '8px', - paddingRight: paddingLeft, - paddingLeft, - width: '100%', height: '100%', @@ -84,8 +80,6 @@ const cssinjs = () => { alignItems: 'center', marginTop: '8px', - paddingLeft, - paddingRight: paddingLeft, width: '100%', height, @@ -148,12 +142,18 @@ const cssinjs = () => { alignItems: 'center', margin: 0, - padding: 0, + padding: '12px 48px 12px 24px', width: '100%', minHeight: itemHeight, color, + fontSize: '1.4rem', + }, + + large_link: { + paddingLeft: 0, + fontSize: '2.2rem', }, icon: { @@ -191,6 +191,26 @@ const cssinjs = () => { zIndex: 2000, }, + font_icon: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + + marginRight: '12px', + + fontSize: '18px', + color: '#9E9E9E', + + order: -1, + display: 'block', + + width: '24px', + height: '24px', + + fontSize: '14px', + border: 'none', + }, + }; return styles; @@ -200,29 +220,39 @@ const cssinjs = () => { * React stateless component * * @param {object} react props, include: + * - large : [PropTypes.boolean] * - name : [PropTypes.string] <a> text * - value : [PropTypes.string] <a> value * - route : [PropTypes.string] <a> href * - icon : [PropTypes.string] icon + * - fontIcon : [PropTypes.string] icon * - style : [PropTypes.object] include: icon link text * - tooltip : [PropTypes.string] tooltip * - waves : [PropTypes.string] waves * - onClick : [PropTypes.func] event handler */ const Item = ( props ) => { - if ( props.icon ) { - props.style.icon.display = "block"; - props.style.icon.backgroundImage = `url(${props.icon })`; + let icon_style = {}, link_style = { ...props.style.link }; + if ( props.fontIcon ) { + icon_style = { ...props.style.font_icon }; + icon_style.display = "flex"; + } else if ( props.icon ) { + icon_style = { ...props.style.icon }; + icon_style.display = "block"; + icon_style.backgroundImage = `url(${props.icon })`; } else { - props.style.icon.display = "none"; + icon_style.display = "none"; + } + if ( props.large ) { + link_style = { ...props.style.link, ...props.style.large_link }; } const tooltip = props.tooltip; return ( - <a style={ props.style.link } className={ props.route && props.waves } + <a style={ link_style } className={ props.route && props.waves } href={ props.route } value={ props.value } data-tooltip={ tooltip.text ? tooltip.text : props[ tooltip.target ] } data-tooltip-position={ tooltip.position } data-tooltip-delay={ tooltip.delay } onClick={ props.route && props.onClick && ( evt=>props.onClick(evt)) } > - <icon style={ props.style.icon }></icon> + <icon style={ icon_style } dangerouslySetInnerHTML={{__html: props.fontIcon || "" }} ></icon> <text style={ props.style.text }>{ props.name }</text> </a> ); @@ -358,7 +388,8 @@ class Sidebar extends React.Component { <li style={ style.li } onClick={ item.items && ( evt=>this.liOnClick(evt) ) } > <Item style={ style } waves={ this.props.waves } tooltip={ this.props.tooltip } - icon={ item.icon } name={ item.name } value={ item.value } route={ item.route } + icon={ item.icon } fontIcon={ item.fontIcon || "" } + name={ item.name } value={ item.value } route={ item.route } onClick={ !item.items && ( evt=>this.onClick(evt) ) } /> { item.items && item.items.length > 0 && <sub-menu style={ style.sub_menu }> @@ -377,7 +408,7 @@ class Sidebar extends React.Component { <side style={ style.root }> { header && <header style={ style.header }> - <Item style={ style } icon={ icon } name={ header } + <Item style={ style } icon={ icon } name={ header } large={ true } waves={ this.props.waves } tooltip={ this.props.tooltip } onClick={ evt=>this.onClick(evt) }/> </header> From 4afaa7c6732f1907dd68b2a16673dbcf4dcd09dc Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 15:47:15 +0800 Subject: [PATCH 147/329] Optimiz sidebar icons. --- src/assets/images/about_icon.png | Bin 478 -> 0 bytes src/assets/images/common_icon.png | Bin 603 -> 0 bytes src/assets/images/focus_mode_icon.png | Bin 398 -> 0 bytes src/assets/images/help_icon.png | Bin 574 -> 0 bytes src/assets/images/labs_icon.png | Bin 698 -> 0 bytes src/assets/images/plugins_icon.png | Bin 333 -> 0 bytes src/assets/images/read_later_icon.png | Bin 388 -> 0 bytes src/assets/images/read_mode_icon.png | Bin 312 -> 0 bytes src/service/config.js | 16 ++++++++-------- 9 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 src/assets/images/about_icon.png delete mode 100644 src/assets/images/common_icon.png delete mode 100644 src/assets/images/focus_mode_icon.png delete mode 100644 src/assets/images/help_icon.png delete mode 100644 src/assets/images/labs_icon.png delete mode 100644 src/assets/images/plugins_icon.png delete mode 100644 src/assets/images/read_later_icon.png delete mode 100644 src/assets/images/read_mode_icon.png diff --git a/src/assets/images/about_icon.png b/src/assets/images/about_icon.png deleted file mode 100644 index 02c2f08ce4a44222463969e99f5980f49082431e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmV<40U`d0P)<h;3K|Lk000e1NJLTq0015U000#T1^@s6QTJY90004{Nkl<ZNK3_) z!EJ*;5JhKv0$)s|6yOqEf;$Mgv3nv?3UCYQzy(B#Pcz&?2~G#3g7}bok_*1=MB{*D zV*@tXC@UdAu>1DU&iq06r-5DEBuVCoC`0$g%r9+oTfx@aTtqgA_&EeDA`v1^i6}lb zzZGnZSu^vz4I0OB6a+z(W!a|fpRP471}iWO!zTc^s(`92C8DCa0k2?V%nA|LM6^<n zwRR>VD`uYkHMnR(s?98$s(mXyI(uWxQbh7B%hvm<y@L^PQLEE4ACJdHS(dXr&kriV z8`xT#sv;3tAmVfNe5-eTC!z=Mij6U`W^Y-RJ9rp|YA%s;ZmlJy;YP#>5#7~rFN%#Z z#df=$H^bRfC?aWH+up#ZN~QrmNHSmGB><?CeYE;7;@7@KYWSIX;ngyS`1k&tvn;c6 zr^%%-{E5JkmF}wG9D}#kJ_5k|C1B@VFdB`niRgZCsQWtAsfDZZDr!$}{?pZuwO(Tp zdDBkB%&CSP0B-t}i-;!SYg=M<hPv)N&N=P5I}c8hWC{R!^^HwepY8?st^S+u-^g$y UB?VZTvj6}907*qoM6N<$g15`pkN^Mx diff --git a/src/assets/images/common_icon.png b/src/assets/images/common_icon.png deleted file mode 100644 index bb87ff72783bd95f6f0b3c0c77072f140966800f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K(kP)<h;3K|Lk000e1NJLTq000#L000#T1^@s6sTZY|0006aNkl<ZI8U{d zv6b5}42D5=Qsqn#kDyEt-vm)9vhr=<Oc37$aVCf>Ql&OHWrEWP9>JC5ipcvFLXXzj za++h~=O^If4}d=ueZWz|G{zj2Qmu3D_~@RpELT~U{ZLA6h-l5sty1d6IoBa~gaQ~r zg;MJ92yBe$lv0gzZf~tEh^Qf=GK6rh>-sc8t+iWb-Z68D;3Y6(p$@>Rs@7WTHzImM zJ`sKP-ak#{3s@<Ipij=Z@>Uy+F)cIi>$+}}D!&rZA0jHe_r(Mi#V7+G@hd$_;nvzF zgm4h3<e_C~%R8tfr+rGn7*L+)ugv`7y+<FXgB)f)c<(n?O6Nf`0DuKZM8BX4{k&W* z=cZ}SvCn&{?k+TzHBL5!u+>`s6rfbX%qJpR5m6WWjQ{_h)Y7S{YNNG&C8B32yw{qP zu?U@){6D}&rFVc({9Vj}81!^r>6KDr3?A^e7_^SoOH0Nu#(~6`rtkY=4o<y4S`UNi z`~H;YIb74tOHTfaz<2LiY>L|n)=Nu?HiUDg#PkwTJ2#3fly(?~66&BbEyr4Wa?Y*g zGPq_OMqE6%hBra+&a~D?W<C$Yuo1AemYs7~y^pI8>u%g=bFe@UM6|_zgw^6+#TLRF z-Q8L)b8s3vLgVwnvc>etd%ulA*t0hmi{xcl2F1Ulv%WyUR93thDzVLRx)8z+OLxg} pF%JV?4a2ZQ+aB8Vk&SPC{|k^TXeA*0tVaL<002ovPDHLkV1icu93cPz diff --git a/src/assets/images/focus_mode_icon.png b/src/assets/images/focus_mode_icon.png deleted file mode 100644 index 500aa9d21b52fbd64ff64f4fd7b55b75b273c6cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmV;90df9`P)<h;3K|Lk000e1NJLTq000#L000#T1^@s6sTZY|00041Nkl<ZI8W7- z&2fV;5QVim0hdrhItV4W1ad<<IUS?~m*8~ZT(sOm2XQ*U6(l8agA*^a8Oy_u#}H=7 zOmt$z>f5K)z9qH7q7|5G1WnU44#V(aZZc;67{>OXS(e>vt&ac-BC4jq0Ai(7QrC4_ z6vZXJ2Q|j*iKukW9j1W(zcJ=nzL|ON_l8hWxy$qXI2W2_*+y%<an9{#L9Mj~fV(RR zDrSC^{Uy+(ZCj~ZZ)vS7=Ull6I;RA`R=Nt*7*i6_sAmD3m^t}h*B7<o!duPX>r;6I zB7z*O>-y9^=<6-OAPC|-&%fsO>7}9DwmozYdWBIGy(^_&x-MMoC{ZXt0Iyw(O0pi* zTKl7{Yq@S)$-p5ZaapRhemi%;_U4p2XD<PK4g&!^$@Q(ZTL3aV3T7SwM@l_N9%u+{ snx^y*WvxxTO|Kc`Zzlg7Yfi;{17D~A7OStsYXATM07*qoM6N<$f@E^7uK)l5 diff --git a/src/assets/images/help_icon.png b/src/assets/images/help_icon.png deleted file mode 100644 index 7ba7f62edd89834d6912b6b261b7a97ff9db3482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{0wkH`a%F)OOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a><Y92N-!mPySp$jtm;)Z0`k~P zJbhi+AF^<BTkGAg@e5#JV080zaSYKozje|^FXli2*ZzwkO=6yJ?(lPPH0mBbb*Ukb ztDBP}lT|y|W5eWxiEdw*!&-b4Cq=YO`RAxG^_#X?XRBVs(vGA1V!yMB2LISKv-)0Y zoAn3z{DXR_z09koG$`igm3-0FIvo?pyo-lHod1L6rGCkfYn%-J?}O*tS~V;_uNe|n z@qFr{zH~ON4<7SEc@>kZ#045RX)OPwCY<RdR^oGUg`gInsn)TNlZ>NGG75MXBx_wc z(i!``ao$J!B@2CX3wvhx=_@I1@d{UWyRnd+Df;6ctA*a8(-<@gr*qUYoV%H9eKW7& z`_^fDzq6^odDVQk_k!ZOt9My`t-O^gvHMD@*3J2wrmyi?D!2O{)6*$GlrD=z_jT|z zu>B}mGNB{4DI`v|hWDS)8(~ZB2;RaI#zN<rY~7v|m~7F@?o&4Tp}*Yr_-~fi>e-*Z z?f4Z43}n?3*NBpo#FA92<f2p{#b9J$Xs&BuqHAavVrXb(YH4L+rfpzhWnf_NdDd$b d4Y~O#nQ4`{H8`$Q3I}Rn@O1TaS?83{1OOO8%-{e3 diff --git a/src/assets/images/labs_icon.png b/src/assets/images/labs_icon.png deleted file mode 100644 index 23f9d21faa92ebfb7c3b36fe940610aed88dc235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^qChOd!2%>tIPKd3q*&4&eH|GXHuiJ>Nn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9fnimzvJsHS zUgGKN%Knf|kW-aqT3W{%1_s7Mo-U3d8s}>-MrZI9$Q=84KAXKg_KeBd#O`NJm!eO# z2AqD`Cq3~~esJ_gnRJsQPH&Su4@q2((RsPQWr}K&ms`=(N3PyxSz&zL+U*(7()PU9 znRomC_T~3K+i=!vKG~fXX%ZEA_`u93Z?E_ts$dV%@LD$M>PgF$>N8(RaIDS=W7B$j zIO->#mHf1Rhr^F9tYn^kIOmI&%O#%57d*}jP2c{y$Yc|^z<Nz_@a7y*s}0O1f8B&z zV&<pbel)qP;3%i)D#yT@`GVS}Gv0hY8Z3BOl#44QYvb*|H|G2^l}?(yEr3aErO}F0 zq1k7QwT;7+7GF%NwODmdnfvYrtA7%qVh{aR^yiB#_M5&mYE6mllb#~p&3lgA`C;R8 zxxeV5W^`$k<o@&>Z8P;6(-+?34=xPc`F7Tt0_`Wu)Nj0;`m--O-=q2a$F-U}5}Kus z>z1nb{C)fDfbEs6=@&AXKF(Egz7=xw=?tUt!#lpLUs_dQVD=|7c~hOGnbrFaTe)bV z{k@GhR*R)y&V0;%x#nut<h@e57etSx^WXP7-OW7n>XF8PM_Y?Gy)j>L?{Le14WCQN zi*jelmc7`ovG4$QYt|eY!#DO1I(LaK{370v(^|GN&gLmFf>ldgBT7;dOH!?pi&B9U zgOP!uxvqhkuAzB|fu)tPxs`#5wt<C}fq`kU(lHbbx%nxXX_dG&xaiHQ0%~CJboFyt I=akR{0KtnMGXMYp diff --git a/src/assets/images/plugins_icon.png b/src/assets/images/plugins_icon.png deleted file mode 100644 index e4204fe69a1591830960bd2d6240708564894ce3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmV-T0kZyyP)<h;3K|Lk000e1NJLTq000#L000#T1^@s6sTZY|0003LNkl<ZIE~em zQE|gC42BEA5DFm-Y6#ztU}3N@NEoaPHU<lWmO;&+WzaC#9wzs^#_1eC^lrM-i!Fba zE&bYTG6p!{4LAc=-~jksY_UlSk^(>GfkDz&H5lk5T>y8#4qR)YAHY7d?kwAFDX5XO zle7a)kD!uXV(cT}-hxvf7cTx4XN7b#sBKd8r1{wZbW2cQ2|WVC^PmPk0k3PJ$@$M) zX8?^gcq?hjRes45ad=6isc(B9)Yz@fnv9do$6V*cincXS%Y3dnlc=wRwvs|_amqII z-#~X$qYa84csF3N5bU|V`PshC#g+=dP&_Qmtfeki`7Yh~KZ=@wK8~|BZd0nAL1V=; f<FCYzxlZ{8xc2f`tAowx00000NkvXXu0mjfn);CX diff --git a/src/assets/images/read_later_icon.png b/src/assets/images/read_later_icon.png deleted file mode 100644 index 06e067e3aea126341cdf50359ff2a5f89037d13e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek+5P)<h;3K|Lk000e1NJLTq000#L000#T1^@s6sTZY|0003?Nkl<ZI8U|I z!BN975CzcvNBd+dAgKVT0NjDOSw2Ap3>82LbP%|#e2eKIbPzg72f#(XS<Ggv8Aq`r zg&{dQ<EP!fD}zq(!wF2<LCdn70XX*$(prBUbNCKgRn;>QJ^6sOb_3v+nb$G+C~B>J z1F#XmTAKlQ5LjzH|1;WkU0&Dq$^lBL7lHlfQwNMz>c8w_`8QN4RRCBJQD%%eYntXe z6hYLWdgPv&Uqhh$KQ*XNBHC62;F^funYoAoC(&Vcv3XWibtj;76C6}g6j_?4vY%hf zd^J{W4=${=KW*F2f~X+wB_i6(bqE5ukqZ)q3ape`0k|;6%-sfzfqR+ytx4-ik}Lr{ z`d4%c45IyxF8fW$9efB3qF$b|VmT3A647=jE<?Y=sPE}uPy%O%z^F=H6`_`g)kan7 i!Ryd>^(Zv<n*IXOJoOd=ZKWpw0000<MNUMnLSTY=(xVIj diff --git a/src/assets/images/read_mode_icon.png b/src/assets/images/read_mode_icon.png deleted file mode 100644 index b0988984e64d81e5dc3f5f3a77c4ca40799ca2dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmV-80muG{P)<h;3K|Lk000e1NJLTq000#L000#T1^@s6sTZY|00030Nkl<ZI8VKl zv2DXJ5Jms76cE65nz%|WAPXoHM6IrJ<=zt{Yotq>BU?{kWdn_n4dMyz3>py-I3{gK zVOWz-|36YkD6psi6Xl@HT$|Z5fW?gDdo$aF5I&DdyRPers8`i~D%3gG0H{TzJwln; zL}ZqVwrv+xReeRypFw|y`vqm@S2Mdm)j&k=BJ!5gGd4a4T?4p1Jsf?95VFpb(5V-7 zss0MUT?($MAF0H-`VqR!K$9B&z5au$-dy9>Iky*)VceUmfA&cwJ~DXkHy5GTBuwoo z@AP}1?96QPKp~>W%pSe>&G<*v0A2t*&8WYPjCgUgCQ~Xv5$FNCWw#bSa9g<m0000< KMNUMnLSTZLgM}af diff --git a/src/service/config.js b/src/service/config.js index f83a1ac6..98863a6e 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -723,28 +723,28 @@ const tabsItem = [{ switch ( idx ) { case 0: delete menu.active; - menu.icon = ss.IconPath( "common_icon" ); + menu.fontIcon = '<i class="fas fa-sync-alt"></i>'; break; case 1: - menu.icon = ss.IconPath( "focus_mode_icon" ); + menu.fontIcon = '<i class="fas fa-wrench"></i>'; break; case 2: - menu.icon = ss.IconPath( "read_mode_icon" ); + menu.fontIcon = '<i class="fas fa-tools"></i>'; break; case 3: - menu.icon = ss.IconPath( "labs_icon" ); + menu.fontIcon = '<i class="fas fa-sitemap"></i>'; break; case 4: - menu.icon = ss.IconPath( "plugins_icon" ); + menu.fontIcon = '<i class="fas fa-plug"></i>'; break; case 5: - menu.icon = ss.IconPath( "read_later_icon" ); + menu.fontIcon = '<i class="fas fa-inbox"></i>'; break; case 6: - menu.icon = ss.IconPath( "about_icon" ); + menu.fontIcon = '<i class="fas fa-user"></i>'; break; case 7: - menu.icon = ss.IconPath( "help_icon" ); + menu.fontIcon = '<i class="fas fa-info-circle"></i>'; break; } return menu; From c003f248dc1945c2e11f10ed847d2622be3b15db Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 15:59:04 +0800 Subject: [PATCH 148/329] Add topnav workflow. --- src/assets/css/options_page.css | 7 +++++++ src/options/options.html | 1 + src/options/options.js | 1 + 3 files changed, 9 insertions(+) diff --git a/src/assets/css/options_page.css b/src/assets/css/options_page.css index 190b47d3..8256b367 100644 --- a/src/assets/css/options_page.css +++ b/src/assets/css/options_page.css @@ -41,6 +41,13 @@ input, textarea { font-family: Raleway, Menlo, "Dank Mono", Inconsolata, "Operator Mono", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace!important; } +.topnav { + position: fixed; + z-index: 200; + left: 12px; + top: 12px; +} + .header { display: flex; align-items: center; diff --git a/src/options/options.html b/src/options/options.html index 20a8e74e..ef08b8bd 100644 --- a/src/options/options.html +++ b/src/options/options.html @@ -7,6 +7,7 @@ </head> <body> <div class="sidebar"></div> + <div class="topnav nav"></div> <div class="header"><div class="nav"></div><div class="title"></div></div> <div class="top"></div> <div class="main"> diff --git a/src/options/options.js b/src/options/options.js index 2f4ecf41..335dd393 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -314,6 +314,7 @@ function navRender() { }; const button = <Button waves="md-waves-effect md-waves-circle" hoverColor="transparent" icon={ ss.IconPath( "sidebar_icon" ) } onClick={ ()=>navClick() } />; ReactDOM.render( button, $( ".header .nav" )[0] ); + ReactDOM.render( button, $( ".topnav" )[0] ); } /** From b41acd01c50bb9c18d8a874607d23f335f538124 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 16:07:56 +0800 Subject: [PATCH 149/329] Add mduikit global css. --- src/vender/mduikit/mduikit.css | 22 ++++++++++++++++++++++ webpack.config.js | 1 + 2 files changed, 23 insertions(+) create mode 100644 src/vender/mduikit/mduikit.css diff --git a/src/vender/mduikit/mduikit.css b/src/vender/mduikit/mduikit.css new file mode 100644 index 00000000..c94a8bf8 --- /dev/null +++ b/src/vender/mduikit/mduikit.css @@ -0,0 +1,22 @@ +/*! + * React Material Design Style + * + * @version : 0.0.1 + * @update : 2019/12/29 + * @homepage: https://github.com/kenshin/mduikit + * @author : Kenshin Wang <kenshin@ksria.com> + * + * @copyright 2019 + */ + +/** + * Sidebar + */ + +sidebar side content a { + transition: all 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms; +} + +sidebar side content a:hover { + background-color: #D6D6D6; +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 59ba733e..f27da506 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -306,6 +306,7 @@ const webpack = require( 'webpack' ), wavess : __dirname + '/src/vender/waves/waves.js', notify : __dirname + '/src/vender/notify/notify.js', + mduikit_css: __dirname + '/src/vender/mduikit/mduikit.css', textfield : __dirname + '/src/vender/mduikit/textfield.jsx', fab : __dirname + '/src/vender/mduikit/fab.jsx', fap : __dirname + '/src/vender/mduikit/fap.jsx', From f323368f936fc1a4c2a62db1ee8e77d00784427e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 16:08:11 +0800 Subject: [PATCH 150/329] Format source. --- src/options/options.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/options/options.js b/src/options/options.js index 335dd393..dc72ed3d 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -2,6 +2,7 @@ console.log( "==== simpread options page load ====" ) import '../assets/css/options_page.css'; import '../assets/css/setting.css'; +import 'mduikit_css'; import 'notify_css'; import 'intro_css'; From a18bfed907d4069653abcbea0cda820785ecedaa Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 16:11:37 +0800 Subject: [PATCH 151/329] Add new props: autoClose. --- src/vender/mduikit/sidebar.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index e59ff7d3..d5039cc2 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -283,6 +283,7 @@ class Sidebar extends React.Component { footerStyle: undefined, maskStyle : undefined, waves : "", + autoClose : true, tooltip : {}, }; @@ -299,6 +300,7 @@ class Sidebar extends React.Component { contentStyle: React.PropTypes.object, footerStyle: React.PropTypes.object, maskStyle : React.PropTypes.object, + autoClose : React.PropTypes.bool, waves : React.PropTypes.string, tooltip : React.PropTypes.object, onClick : React.PropTypes.func, @@ -312,7 +314,8 @@ class Sidebar extends React.Component { while ( !$target.is( "a" ) ) { $target = $target.parent(); } const [ name, value, href ] = [ $target.text(), $target.attr( "value" ), $target.attr( "href" ) ]; this.props.onClick && this.props.onClick( $target, { name, value, href } ); - this.maskOnClick(); + console.log( "asdaadf" ) + this.props.autoClose && this.maskOnClick(); } liOnClick( event ) { From bc84c5ac0cc5869946e3c04a02b4b9ce4b6a157b Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 16:23:57 +0800 Subject: [PATCH 152/329] Format source. --- src/options/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index dc72ed3d..b9cdfab3 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -327,7 +327,7 @@ function sidebarRender() { tabChange( idx ); }; const sidebar = <side.Sidebar items={ conf.menuItem } - waves="md-waves-effect" + waves="md-waves-effect" autoClose={false} header="设定" footer=" 简悦 © 2017" onClick={ ($t,o)=>sidebarClick($t,o) } />; ReactDOM.render( sidebar, $( ".sidebar" )[0] ); } From 0df6e40f796314bd24387e5e9a8594e897fbbb47 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 17:49:17 +0800 Subject: [PATCH 153/329] Add new props: showClose. --- src/vender/mduikit/sidebar.jsx | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index d5039cc2..67b794af 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -211,6 +211,26 @@ const cssinjs = () => { border: 'none', }, + close_icon: { + position: 'absolute', + top: '0', + left: '-256px', + + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + + width: '48px', + height: '48px', + + color: '#9E9E9E', + backgroundColor: '#fff', + + fontSize: '2rem', + border: 'none', + cursor: 'pointer', + }, + }; return styles; @@ -284,6 +304,7 @@ class Sidebar extends React.Component { maskStyle : undefined, waves : "", autoClose : true, + showClose : false, tooltip : {}, }; @@ -301,6 +322,7 @@ class Sidebar extends React.Component { footerStyle: React.PropTypes.object, maskStyle : React.PropTypes.object, autoClose : React.PropTypes.bool, + showClose : React.PropTypes.bool, waves : React.PropTypes.string, tooltip : React.PropTypes.object, onClick : React.PropTypes.func, @@ -314,7 +336,6 @@ class Sidebar extends React.Component { while ( !$target.is( "a" ) ) { $target = $target.parent(); } const [ name, value, href ] = [ $target.text(), $target.attr( "value" ), $target.attr( "href" ) ]; this.props.onClick && this.props.onClick( $target, { name, value, href } ); - console.log( "asdaadf" ) this.props.autoClose && this.maskOnClick(); } @@ -360,6 +381,7 @@ class Sidebar extends React.Component { complete: () => { $( "sidebar" ).css( "left", 0 - Number.parseInt( $( "side" ).width() )); $( "mask" ).css( "display", "none" ); + $( "side close" ).velocity({ left: 0 - Number.parseInt( $( "side" ).width() ) }); this.props.onExit && this.props.onExit(); } }); @@ -369,7 +391,7 @@ class Sidebar extends React.Component { let menu = []; const style = { ...this.style }, { items, width, - header, icon, footer, + header, icon, footer, showClose, color, bgColor, headerStyle, contentStyle, footerStyle, maskStyle } = this.props; @@ -424,7 +446,9 @@ class Sidebar extends React.Component { <Item style={ style } name={ footer } waves={ this.props.waves } tooltip={ this.props.tooltip } onClick={ evt=>this.onClick(evt) }/> - </footer> + </footer> } + { + showClose && <close style={ style.close_icon } onClick={ ()=>this.maskOnClick() }>✕</close> } </side> <mask style={ style.mask } onClick={ evt=>this.maskOnClick(evt) }></mask> @@ -444,6 +468,7 @@ function Open() { $( "mask" ).css( "opacity", complete ).css( "display", "block" ); } }); + $( "side close" ).velocity( { left: 256 }); } export { From cb5a632514ffb5e73694a9afac6b3db02f1d1a1f Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 17:49:20 +0800 Subject: [PATCH 154/329] Format source. --- src/options/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index b9cdfab3..00a03dba 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -327,7 +327,7 @@ function sidebarRender() { tabChange( idx ); }; const sidebar = <side.Sidebar items={ conf.menuItem } - waves="md-waves-effect" autoClose={false} + waves="md-waves-effect" autoClose={false} showClose={ false } header="设定" footer=" 简悦 © 2017" onClick={ ($t,o)=>sidebarClick($t,o) } />; ReactDOM.render( sidebar, $( ".sidebar" )[0] ); } From 7ba6ff46a2677c5a98ca6bc0e7be829167216f41 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 17:50:43 +0800 Subject: [PATCH 155/329] Format source. --- src/options/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index 00a03dba..d54b3437 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -327,7 +327,7 @@ function sidebarRender() { tabChange( idx ); }; const sidebar = <side.Sidebar items={ conf.menuItem } - waves="md-waves-effect" autoClose={false} showClose={ false } + waves="md-waves-effect" autoClose={false} showClose={ true } header="设定" footer=" 简悦 © 2017" onClick={ ($t,o)=>sidebarClick($t,o) } />; ReactDOM.render( sidebar, $( ".sidebar" )[0] ); } From 19e88b215a91ba864ba2e57ec36003da04a89c62 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 29 Dec 2019 17:57:26 +0800 Subject: [PATCH 156/329] Format source. --- src/vender/mduikit/sidebar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index 67b794af..0d073cf2 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -448,7 +448,7 @@ class Sidebar extends React.Component { onClick={ evt=>this.onClick(evt) }/> </footer> } { - showClose && <close style={ style.close_icon } onClick={ ()=>this.maskOnClick() }>✕</close> + showClose && <close className={ this.props.waves } style={ style.close_icon } onClick={ ()=>this.maskOnClick() }>✕</close> } </side> <mask style={ style.mask } onClick={ evt=>this.maskOnClick(evt) }></mask> From 28eaf45aa512b9c5472f09440f8f1a701ec8465e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 30 Dec 2019 11:18:16 +0800 Subject: [PATCH 157/329] Optimize sidebar close design. --- src/vender/mduikit/mduikit.css | 70 ++++++++++++++++++++++++++++++++++ src/vender/mduikit/sidebar.jsx | 9 ++++- 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/src/vender/mduikit/mduikit.css b/src/vender/mduikit/mduikit.css index c94a8bf8..9810caf0 100644 --- a/src/vender/mduikit/mduikit.css +++ b/src/vender/mduikit/mduikit.css @@ -19,4 +19,74 @@ sidebar side content a { sidebar side content a:hover { background-color: #D6D6D6; +} + +/** + * Source from https://jonsuh.com/hamburgers/ + */ +.hamburger { + font: inherit; + display: inline-block; + overflow: visible; + margin: 0; + padding: 15px; + cursor: pointer; + transition-timing-function: linear; + transition-duration: .15s; + transition-property: opacity,filter; + text-transform: none; + color: inherit; + border: 0; + background-color: transparent; + transform: scale(.5); +} + +.hamburger-box { + position: relative; + display: inline-block; + width: 40px; + height: 24px; +} + +.hamburger-inner { + top: 50%; + display: block; + margin-top: -2px; +} + +.hamburger-inner, .hamburger-inner:after, .hamburger-inner:before { + position: absolute; + width: 40px; + height: 4px; + transition-timing-function: ease; + transition-duration: .15s; + transition-property: transform; + border-radius: 4px; + background-color: #9E9E9E; +} + +.hamburger-inner:after, .hamburger-inner:before { + content: ""; + display: block; +} + +.hamburger-inner:before { + top: -10px; +} + +.hamburger-inner:after { + bottom: -10px; +} + +.hamburger:hover .hamburger-inner, .hamburger:hover .hamburger-inner:after, .hamburger:hover .hamburger-inner:before { + background-color: #9E9E9E; + transform: scale(.7); +} + +.hamburger--arrow:hover .hamburger-inner:before { + transform: translate3d(-8px,0,0) rotate(-45deg) scaleX(.7); +} + +.hamburger--arrow:hover .hamburger-inner:after { + transform: translate3d(-8px,0,0) rotate(45deg) scaleX(.7); } \ No newline at end of file diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index 0d073cf2..77929305 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -448,7 +448,14 @@ class Sidebar extends React.Component { onClick={ evt=>this.onClick(evt) }/> </footer> } { - showClose && <close className={ this.props.waves } style={ style.close_icon } onClick={ ()=>this.maskOnClick() }>✕</close> + showClose && + <close className={ this.props.waves } style={ style.close_icon } onClick={ ()=>this.maskOnClick() }> + <div className="hamburger hamburger--arrow js-hamburger is-active"> + <div className="hamburger-box"> + <div className="hamburger-inner"></div> + </div> + </div> + </close> } </side> <mask style={ style.mask } onClick={ evt=>this.maskOnClick(evt) }></mask> From b2bdbb328465632b45b1cdfd131c000dfc879b7d Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 30 Dec 2019 18:10:26 +0800 Subject: [PATCH 158/329] Add sidebar toc logic. --- src/vender/mduikit/mduikit.css | 61 +++++++++++++++++++++++++++++++++- src/vender/mduikit/sidebar.jsx | 58 ++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/src/vender/mduikit/mduikit.css b/src/vender/mduikit/mduikit.css index 9810caf0..7af9d613 100644 --- a/src/vender/mduikit/mduikit.css +++ b/src/vender/mduikit/mduikit.css @@ -18,7 +18,66 @@ sidebar side content a { } sidebar side content a:hover { - background-color: #D6D6D6; + background-color: rgba(0,0,0,.04); +} + +sidebar side content li.active { + font-weight: bold; +} + +toc { + position: relative; + width: 100%; +} + +toc i { + position: absolute; + left: 35px; + top: 0; + bottom: 0; + + display: block; + + width: 2px; + background: rgba(189,189,189,.4); +} + +toc outline { + position: relative; + display: -webkit-box!important; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + + padding: 12px 0 12px 60px; + min-height: 21px; + + line-height: 21px; + text-align: left; + + cursor: pointer; +} + +toc outline:hover { + background-color: rgba(0,0,0,.04)!important; +} + +.toc-level-h1 { + padding-left: 60px; +} +.toc-level-h2 { + padding-left: 70px; +} +.toc-level-h3 { + padding-left: 75px; +} +.toc-level-h4 { + padding-left: 80px; +} + +.toc-outline-active { + border-left: 2px solid rgb(244, 67, 54); } /** diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index 77929305..a96421fd 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -73,6 +73,7 @@ const cssinjs = () => { height: '100%', fontSize: '1.3rem', + overflowY: 'auto', }, footer: { @@ -476,6 +477,63 @@ function Open() { } }); $( "side close" ).velocity( { left: 256 }); + tocRender(); + activeRender(); +} + +/** + * TocRender + */ +function tocRender() { + if ( $( "sidebar content toc" ).length > 0 ) return; + const ids = [], tocs = new Map(); + $( "tabs" ).find( "tab-label a" ).map( ( idx, item ) => ids.push( $(item).attr("value") )); + ids.forEach( ( id, idx ) => { + const levels = []; + $($( "tabs tab-group" )[idx]).find( "[data-head-level]" ).map( ( idx, item ) => { + const $item = $( item ), + id = "sr-toc-" + idx, + level = $item.attr( "data-head-level" ), + text = $item.attr( "data-head-title" ) || $item.text(); + levels.push({ id, level, text }); + $item.attr( "id", id ); + }); + tocs.set( id, levels ); + }); + $( "sidebar content" ).find( "a" ).map( ( idx, item ) => { + let html = ""; + const $item = $( item ), + id = $item.attr( "value" ), + levels = tocs.get( id ); + levels.forEach( value => { + html += `<outline class="md-waves-effect" data-trigger="${ids[idx]}" data-id="${value.id}" class="toc-level-${ value.level }">${value.text}</outline>`; + }); + html.length > 0 && $item.after( `<toc><i></i>${html}</to>` ); + }); + $( "sidebar content toc outline" ).on( "click", event => { + const id = $( event.currentTarget ).attr( "data-id" ), + trigger = $( event.currentTarget ).attr( "data-trigger" ); + if ( !location.hash.endsWith( trigger ) ) { + $( "tabs" ).find( `tab-label a[value=${trigger}]` )[0].click(); + } + // hack code + $( "tabs" ).find( "tab-group[active=true]" ).find( "#" + id )[0].scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'start' }); + }); +} + +/** + * Active Render + */ +function activeRender() { + $( "sidebar content" ).find( "a" ).map( ( idx, item ) => { + const $item = $( item ), + id = $item.attr( "value" ); + if ( location.hash.endsWith( id ) ) { + $item.parent().addClass( "active" ); + } else { + $item.parent().removeClass( "active" ); + } + }); } export { From 9b07f0bfed364c98e37d5675a74b3bfe68e8854c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 30 Dec 2019 18:11:23 +0800 Subject: [PATCH 159/329] Add 'data-head-level' attr. --- src/module/about.jsx | 8 ++++---- src/module/labs.jsx | 16 ++++++++-------- src/module/sites.jsx | 8 ++++---- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/module/about.jsx b/src/module/about.jsx index 6007968f..6b4089f1 100644 --- a/src/module/about.jsx +++ b/src/module/about.jsx @@ -89,7 +89,7 @@ export default class About extends React.Component { </div> </div> - <div className="label">帮助</div> + <div className="label" data-head-level="h1">帮助</div> <div style={{ 'padding-top': '10px', 'position': 'relative' }} className="lab"> <div className="more"> <div><a style={style.href} target="_blank" href="http://sr.ksria.cn/zhifu_m2.png">如果简悦可以解决你在阅读上痛点,可以请我喝杯咖啡</a></div> @@ -122,7 +122,7 @@ export default class About extends React.Component { </div> </div> - <div className="label">其它平台的简悦</div> + <div className="label" data-head-level="h1">其它平台的简悦</div> <div style={{ 'padding-top': '10px', 'position': 'relative' }} className="lab"> <div className="more"> <div><a style={style.href} target="_blank" href="http://ksria.com/simpread/#downloads">简悦已经上线了 Firefox 版,UserScript 版,JSBox 版,总有一款适合你</a></div> @@ -131,7 +131,7 @@ export default class About extends React.Component { </div> </div> - <div className="label">反馈</div> + <div className="label" data-head-level="h1">反馈</div> <div style={{ 'padding-top': '10px', 'position': 'relative' }} className="lab"> <div className="more"> <a style={style.href} target="_blank" href="https://github.com/kenshin/simpread/issues">如果有任何问题请提交 issues</a> @@ -151,7 +151,7 @@ export default class About extends React.Component { </div> </div> - <div className="label">其它作品</div> + <div className="label" data-head-level="h1">其它作品</div> <div style={{ 'margin-top': '10px', 'position': 'relative' }} className="lab"> <div className="more"> <a style={style.href} target="_blank" href="http://ksria.com/gnvm">GNVM - 使用 Go 语言编写的 Node.js 多版本管理器</a> diff --git a/src/module/labs.jsx b/src/module/labs.jsx index b42ac60d..ab5c2570 100644 --- a/src/module/labs.jsx +++ b/src/module/labs.jsx @@ -91,7 +91,7 @@ export default class LabsOpt extends React.Component { render() { return ( <div id="labs" style={{ width: '100%' }}> - <div className="label">全局</div> + <div className="label" data-head-level="h1">全局</div> <div className="lab"> <div className="version-tips" data-hits="esc"> <Switch width="100%" checked={ this.props.option.esc } @@ -141,7 +141,7 @@ export default class LabsOpt extends React.Component { </div> <div className="version-tips" data-hits="menu"> - <div className="label">右键菜单</div> + <div className="label" data-head-level="h1">右键菜单</div> <div style={{ 'padding-top': '10px' }} className="lab"> <Switch width="100%" checked={ this.props.option.menu.focus } thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" @@ -179,7 +179,7 @@ export default class LabsOpt extends React.Component { </div> <div className="version-tips" data-hits="focusconfig"> - <div className="label">聚焦模式</div> + <div className="label" data-head-level="h1">聚焦模式</div> <div style={{ 'padding-top': '10px' }} className="lab"> <Switch width="100%" checked={ this.props.focus.mask } thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" @@ -199,7 +199,7 @@ export default class LabsOpt extends React.Component { </div> <div className="version-tips" data-hits="readconfig"> - <div className="label">阅读模式</div> + <div className="label" data-head-level="h1">阅读模式</div> <div style={{ 'padding-top': '10px' }} className="lab"> <div className="version-tips" data-hits="progress"> <Switch width="100%" checked={ this.props.read.progress } @@ -277,7 +277,7 @@ export default class LabsOpt extends React.Component { </div> <div className="version-tips" data-hits="pured"> - <div className="label">词法分析引擎 <a target="_blank" href="http://ksria.com/simpread/docs/#/词法分析引擎" style={{ color:' #FF5252', borderBottom: '2px dotted', fontSize: '10px', fontWeight: 'bold', cursor: 'pointer' }}>测试版</a></div> + <div className="label" data-head-level="h1" data-head-title="词法分析引擎">词法分析引擎 <a target="_blank" href="http://ksria.com/simpread/docs/#/词法分析引擎" style={{ color:' #FF5252', borderBottom: '2px dotted', fontSize: '10px', fontWeight: 'bold', cursor: 'pointer' }}>测试版</a></div> <div style={{ 'padding-top': '10px', 'position': 'relative' }} className="lab"> <Switch width="100%" checked={ this.props.read.cleanup == undefined ? true : this.props.read.cleanup } thumbedColor="#3F51B5" trackedColor="#7986CB" @@ -320,14 +320,14 @@ export default class LabsOpt extends React.Component { </div> <div className="version-tips" data-hits="auth"> - <div className="label">授权管理</div> + <div className="label" data-head-level="h1">授权管理</div> <div style={{ 'padding-top': '10px' }} className="lab"> <Auth/> </div> </div> <div className="version-tips" data-hits="custom"> - <div className="label">自定义样式</div> + <div className="label" data-head-level="h1">自定义样式</div> <div style={{ 'padding-top': '10px', 'position': 'relative' }} className="lab" onClick={ ()=>this.onClick('custom') }> <div className="more" style={{ 'cursor': 'pointer' }}> <div>增强「中文阅读体验」设置</div> @@ -338,7 +338,7 @@ export default class LabsOpt extends React.Component { </div> <div className="version-tips" data-version="1.1.3" data-hits="notice"> - <div className="label">消息中心</div> + <div className="label" data-head-level="h1">消息中心</div> <div style={{ 'padding-top': '10px', 'position': 'relative' }} className="lab"> <Switch width="100%" checked={ this.props.option.notice } thumbedColor="#3F51B5" trackedColor="#7986CB" diff --git a/src/module/sites.jsx b/src/module/sites.jsx index bea1fd7d..fc750cf3 100644 --- a/src/module/sites.jsx +++ b/src/module/sites.jsx @@ -326,7 +326,7 @@ export default class SitesOpts extends React.Component { return ( <div id="labs" style={{ width: '100%' }}> <div className="version-tips" data-hits="newsites"> - <div className="label">官方主适配源 <a target="_blank" href="https://simpread.ksria.cn/sites/" style={{ color:' #FF5252', borderBottom: '2px dotted', fontSize: '10px', fontWeight: 'bold', cursor: 'pointer' }}>共计 { storage.simpread.sites.length } 类</a></div> + <div className="label" data-head-level="h1" data-head-title="官方主适配源">官方主适配源 <a target="_blank" href="https://simpread.ksria.cn/sites/" style={{ color:' #FF5252', borderBottom: '2px dotted', fontSize: '10px', fontWeight: 'bold', cursor: 'pointer' }}>共计 { storage.simpread.sites.length } 类</a></div> <div className="lab"> <Button type="raised" text="手动同步适配列表" width="100%" icon={ ss.IconPath( "update_icon" ) } @@ -336,7 +336,7 @@ export default class SitesOpts extends React.Component { </div> </div> - <div className="label">第三方适配源</div> + <div className="label" data-head-level="h1">第三方适配源</div> <div ref="origins" style={{ 'padding-top': '10px', 'margin-bottom': '8px;' }} className="lab"> <div className="version-tips" data-hits="customsites"> <TextField @@ -366,7 +366,7 @@ export default class SitesOpts extends React.Component { </div> <div className="version-tips" data-hits="personsites"> - <div className="label">站点集市 <a target="_blank" href="https://simpread.ksria.cn/sites/" style={{ color:' #FF5252', borderBottom: '2px dotted', fontSize: '10px', fontWeight: 'bold', cursor: 'pointer' }}>共计 { storage.pr.sites.person.length } 类</a></div> + <div className="label" data-head-level="h1" data-head-title="站点集市">站点集市 <a target="_blank" href="https://simpread.ksria.cn/sites/" style={{ color:' #FF5252', borderBottom: '2px dotted', fontSize: '10px', fontWeight: 'bold', cursor: 'pointer' }}>共计 { storage.pr.sites.person.length } 类</a></div> <div className="lab"> <div style={{ display: 'inline-flex', width: '100%' }}> <Button type="raised" text="打开「站点集市」" width="100%" @@ -388,7 +388,7 @@ export default class SitesOpts extends React.Component { </div> <div className="version-tips" data-hits="sitemgr"> - <div className="label">站点管理器</div> + <div className="label" data-head-level="h1">站点管理器</div> <div style={{ 'padding-top': '10px', 'position': 'relative' }} className="lab" onClick={ ()=>this.onClick('sitemgr') }> <div className="more" style={{ 'cursor': 'pointer' }}> <div>可以管理全部的适配站点</div> From 4e5549d1c7b59fbcc7640bab978cf1fc237ab046 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 30 Dec 2019 18:12:32 +0800 Subject: [PATCH 160/329] Format source. --- src/vender/mduikit/mduikit.css | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/vender/mduikit/mduikit.css b/src/vender/mduikit/mduikit.css index 7af9d613..ee7f6855 100644 --- a/src/vender/mduikit/mduikit.css +++ b/src/vender/mduikit/mduikit.css @@ -25,12 +25,12 @@ sidebar side content li.active { font-weight: bold; } -toc { +sidebar side toc { position: relative; width: 100%; } -toc i { +sidebar side toc i { position: absolute; left: 35px; top: 0; @@ -42,7 +42,7 @@ toc i { background: rgba(189,189,189,.4); } -toc outline { +sidebar side toc outline { position: relative; display: -webkit-box!important; -webkit-line-clamp: 1; @@ -59,27 +59,23 @@ toc outline { cursor: pointer; } -toc outline:hover { +sidebar side toc outline:hover { background-color: rgba(0,0,0,.04)!important; } -.toc-level-h1 { +sidebar side .toc-level-h1 { padding-left: 60px; } -.toc-level-h2 { +sidebar side .toc-level-h2 { padding-left: 70px; } -.toc-level-h3 { +sidebar side .toc-level-h3 { padding-left: 75px; } -.toc-level-h4 { +sidebar side .toc-level-h4 { padding-left: 80px; } -.toc-outline-active { - border-left: 2px solid rgb(244, 67, 54); -} - /** * Source from https://jonsuh.com/hamburgers/ */ From 3bc9cfd23987164c146b0566279b51ec3e2b0fd0 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 30 Dec 2019 18:15:42 +0800 Subject: [PATCH 161/329] Update sidebar to 0.0.4. --- src/vender/mduikit/sidebar.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index a96421fd..529ff84c 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -1,8 +1,8 @@ /*! * React Material Design: Sidebar * - * @version : 0.0.3 - * @update : 2018/04/26 + * @version : 0.0.4 + * @update : 2019/12/30 * @homepage: https://github.com/kenshin/mduikit * @license : MIT https://github.com/kenshin/mduikit/blob/master/LICENSE * @author : Kenshin Wang <kenshin@ksria.com> From 3391da720a150a54e65640dd8bb12cd097998f27 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 10:52:19 +0800 Subject: [PATCH 162/329] Fix theme common css bug. --- src/assets/css/theme_common.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/css/theme_common.css b/src/assets/css/theme_common.css index 02121e4b..caf4e6ce 100644 --- a/src/assets/css/theme_common.css +++ b/src/assets/css/theme_common.css @@ -65,7 +65,7 @@ sr-rd-content a { sr-rd-content a, sr-rd-content a:link { color: inherit; - font-size: initial; + font-size: inherit; font-weight: inherit; border:none; } From be277c276cca0f7490bf266eecdb8b4d40f19424 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:08:52 +0800 Subject: [PATCH 163/329] Fix fap css bug. --- src/vender/mduikit/fap.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vender/mduikit/fap.jsx b/src/vender/mduikit/fap.jsx index 6e24b9ee..2a9e55b7 100644 --- a/src/vender/mduikit/fap.jsx +++ b/src/vender/mduikit/fap.jsx @@ -1,7 +1,7 @@ /*! * React Material Design: FAP( Floating Action Panel ) * - * @version : 0.0.1 + * @version : 0.0.1.1231 * @update : 2018/04/19 * @homepage: https://github.com/kenshin/mduikit * @license : MIT https://github.com/kenshin/mduikit/blob/master/LICENSE @@ -193,6 +193,7 @@ const cssinjs_panel = () => { groups: { display: 'block', width: '100%', + overflowX: 'hidden', overflowY: 'auto', }, From 4c32b5a581130a353b1da899c43036e9e7a64a76 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:12:33 +0800 Subject: [PATCH 164/329] Fix button mask some bug. --- src/vender/mduikit/button.jsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/vender/mduikit/button.jsx b/src/vender/mduikit/button.jsx index 5d356823..fbb331ab 100644 --- a/src/vender/mduikit/button.jsx +++ b/src/vender/mduikit/button.jsx @@ -218,6 +218,7 @@ export default class Button extends React.Component { onMouseOut() { const [ style, $mask ] = [ { ...this.style }, $( this.refs.mask ) ]; + this.props.shape == "circle" && ( style.mask.borderRadius = "50%" ); $mask.css({ ...style.mask }); } @@ -278,13 +279,15 @@ export default class Button extends React.Component { }, tooltip = this.props.tooltip; + this.props.shape == "circle" && ( style.mask.borderRadius = "50%" ); + return ( - <a style={ style.root } className={ this.props.waves } + <a style={ style.root } href={ this.props.href } target={ this.props.target } - type={ this.props.type } mode={ this.props.mode } + type={ this.props.type } mode={ this.props.mode } data-tooltip={ tooltip.text ? tooltip.text : this.props[ tooltip.target ] } data-tooltip-position={ tooltip.position } data-tooltip-delay={ tooltip.delay } { ...events }> - <button-mask ref="mask" style={ style.mask }> + <button-mask ref="mask" style={ style.mask } class={ this.props.waves }> <button-span style={ style.span }> <button-icon style={ style.icon } dangerouslySetInnerHTML={{__html: this.props.fontIcon }} ></button-icon> <button-text style={ style.text }>{ this.props.text }</button-text> From a3062ddac65c6d5c52a8cb5c67ed7711e09e9d20 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:13:19 +0800 Subject: [PATCH 165/329] Update version to 0.0.4.1231. --- src/vender/mduikit/button.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vender/mduikit/button.jsx b/src/vender/mduikit/button.jsx index fbb331ab..30517efe 100644 --- a/src/vender/mduikit/button.jsx +++ b/src/vender/mduikit/button.jsx @@ -1,8 +1,8 @@ /*! * React Material Design: Button * - * @version : 0.0.4 - * @update : 2018/06/21 + * @version : 0.0.4.1231 + * @update : 2019/12/31 * @homepage: https://github.com/kenshin/mduikit-ui * @license : MIT https://github.com/kenshin/mduikit/blob/master/LICENSE * @author : Kenshin Wang <kenshin@ksria.com> From 48dd331598a120e8d8fd34525fc74fd7b5e4dfcf Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:17:40 +0800 Subject: [PATCH 166/329] Update mintooltip to balloon library. --- src/vender/mduikit/mintooltip.css | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/vender/mduikit/mintooltip.css b/src/vender/mduikit/mintooltip.css index f72b5d45..91d9761c 100644 --- a/src/vender/mduikit/mintooltip.css +++ b/src/vender/mduikit/mintooltip.css @@ -1,4 +1,14 @@ /** - * From https://codepen.io/joshuaward/pen/NprxPE + * From https://kazzkiq.github.io/balloon.css/ */ -a[data-sr-mini-tooltip].sr-top:before,a[data-sr-mini-tooltip].sr-top:after{transform:translateY(10px)}a[data-sr-mini-tooltip].sr-top:hover:after,a[data-sr-mini-tooltip].sr-top:hover:before{transform:translateY(0px)}a[data-sr-mini-tooltip].right:before,a[data-sr-mini-tooltip].right:after{transform:translateX(0px)}a[data-sr-mini-tooltip].right:hover:after,a[data-sr-mini-tooltip].right:hover:before{transform:translateX(10px)}a[data-sr-mini-tooltip].bottom:before,a[data-sr-mini-tooltip].bottom:after{transform:translateY(-10px)}a[data-sr-mini-tooltip].bottom:hover:after,a[data-sr-mini-tooltip].bottom:hover:before{transform:translateY(0px)}a[data-sr-mini-tooltip].left:before,a[data-sr-mini-tooltip].left:after{transform:translateX(0px)}a[data-sr-mini-tooltip].left:hover:after,a[data-sr-mini-tooltip].left:hover:before{transform:translateX(-10px)}a[data-sr-mini-tooltip]{position:relative}a[data-sr-mini-tooltip]:after,a[data-sr-mini-tooltip]:before{position:absolute;bottom:40px;visibility:hidden;opacity:0;transition:transform 200ms ease,opacity 200ms;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:99}a[data-sr-mini-tooltip]:before{content:attr(data-sr-mini-tooltip);background:#000;color:#fff;font-size:10px;font-weight:bold;padding:10px 15px;border-radius:5px;white-space:nowrap;text-decoration:none;text-transform:uppercase;letter-spacing:1px}a[data-sr-mini-tooltip]:after{width:0;height:0;border:6px solid transparent;content:''}a[data-sr-mini-tooltip]:hover:after,a[data-sr-mini-tooltip]:hover:before{visibility:visible;opacity:.85;transform:translateY(0px)}a[data-sr-mini-tooltip][data-position="top"]:before{bottom:100%;left:-130%;margin-bottom:10px}a[data-sr-mini-tooltip][data-position="top"]:after{border-top-color:#000;border-bottom:0;bottom:101%;left:calc(50% - 6px);margin-bottom:4px}a[data-sr-mini-tooltip][data-position="left"]:before{top:-12%;right:100%;margin-right:10px}a[data-sr-mini-tooltip][data-position="left"]:after{border-left-color:#000;border-right:0;top:calc(50% - 3px);right:100%;margin-top:-6px;margin-right:4px}a[data-sr-mini-tooltip][data-position="right"]:before{top:-5%;left:100%;margin-left:10px}a[data-sr-mini-tooltip][data-position="right"]:after{border-right-color:#000;border-left:none;top:calc(50% - 6px);left:calc(100%+4px)}a[data-sr-mini-tooltip][data-position="bottom"]:before{top:100%;left:-130%;margin-top:10px}a[data-sr-mini-tooltip][data-position="bottom"]:after{border-bottom-color:#000;border-top:0;top:100%;left:5px;margin-top:4px} \ No newline at end of file +:root{--balloon-color: rgba(16,16,16,0.95);--balloon-font-size: 12px;--balloon-move: 4px}button[aria-label][data-balloon-pos]{overflow:visible}[aria-label][data-balloon-pos]{position:relative;cursor:pointer}[aria-label][data-balloon-pos]:after{opacity:0;pointer-events:none;transition:all .18s ease-out .18s;text-indent:0;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;font-weight:normal;font-style:normal;text-shadow:none;font-size:var(--balloon-font-size);background:var(--balloon-color);border-radius:2px;color:#fff;content:attr(aria-label);padding:.5em 1em;position:absolute;white-space:nowrap;z-index:10}[aria-label][data-balloon-pos]:before{width:0;height:0;border:5px solid transparent;border-top-color:var(--balloon-color);opacity:0;pointer-events:none;transition:all .18s ease-out .18s;content:"";position:absolute;z-index:10}[aria-label][data-balloon-pos]:hover:before,[aria-label][data-balloon-pos]:hover:after,[aria-label][data-balloon-pos][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-visible]:after,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after{opacity:1;pointer-events:none}[aria-label][data-balloon-pos].font-awesome:after{font-family:FontAwesome, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif}[aria-label][data-balloon-pos][data-balloon-break]:after{white-space:pre}[aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after{white-space:pre-line;word-break:break-word}[aria-label][data-balloon-pos][data-balloon-blunt]:before,[aria-label][data-balloon-pos][data-balloon-blunt]:after{transition:none}[aria-label][data-balloon-pos][data-balloon-pos="up"]:after{bottom:100%;left:50%;margin-bottom:10px;transform:translate(-50%, var(--balloon-move));transform-origin:top}[aria-label][data-balloon-pos][data-balloon-pos="up"]:before{bottom:100%;left:50%;transform:translate(-50%, var(--balloon-move));transform-origin:top}[aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:after{transform:translate(-50%, 0)}[aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:before{transform:translate(-50%, 0)}[aria-label][data-balloon-pos][data-balloon-pos="up-left"]:after{bottom:100%;left:0;margin-bottom:10px;transform:translate(0, var(--balloon-move));transform-origin:top}[aria-label][data-balloon-pos][data-balloon-pos="up-left"]:before{bottom:100%;left:5px;transform:translate(0, var(--balloon-move));transform-origin:top}[aria-label][data-balloon-pos][data-balloon-pos="up-left"]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos="up-left"][data-balloon-visible]:after{transform:translate(0, 0)}[aria-label][data-balloon-pos][data-balloon-pos="up-left"]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos="up-left"][data-balloon-visible]:before{transform:translate(0, 0)}[aria-label][data-balloon-pos][data-balloon-pos="up-right"]:after{bottom:100%;right:0;margin-bottom:10px;transform:translate(0, var(--balloon-move));transform-origin:top}[aria-label][data-balloon-pos][data-balloon-pos="up-right"]:before{bottom:100%;right:5px;transform:translate(0, var(--balloon-move));transform-origin:top}[aria-label][data-balloon-pos][data-balloon-pos="up-right"]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos="up-right"][data-balloon-visible]:after{transform:translate(0, 0)}[aria-label][data-balloon-pos][data-balloon-pos="up-right"]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos="up-right"][data-balloon-visible]:before{transform:translate(0, 0)}[aria-label][data-balloon-pos][data-balloon-pos="down"]:after{left:50%;margin-top:10px;top:100%;transform:translate(-50%, calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos="down"]:before{width:0;height:0;border:5px solid transparent;border-bottom-color:var(--balloon-color);left:50%;top:100%;transform:translate(-50%, calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:after{transform:translate(-50%, 0)}[aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:before{transform:translate(-50%, 0)}[aria-label][data-balloon-pos][data-balloon-pos="down-left"]:after{left:0;margin-top:10px;top:100%;transform:translate(0, calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos="down-left"]:before{width:0;height:0;border:5px solid transparent;border-bottom-color:var(--balloon-color);left:5px;top:100%;transform:translate(0, calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos="down-left"]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos="down-left"][data-balloon-visible]:after{transform:translate(0, 0)}[aria-label][data-balloon-pos][data-balloon-pos="down-left"]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos="down-left"][data-balloon-visible]:before{transform:translate(0, 0)}[aria-label][data-balloon-pos][data-balloon-pos="down-right"]:after{right:0;margin-top:10px;top:100%;transform:translate(0, calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos="down-right"]:before{width:0;height:0;border:5px solid transparent;border-bottom-color:var(--balloon-color);right:5px;top:100%;transform:translate(0, calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos="down-right"]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos="down-right"][data-balloon-visible]:after{transform:translate(0, 0)}[aria-label][data-balloon-pos][data-balloon-pos="down-right"]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos="down-right"][data-balloon-visible]:before{transform:translate(0, 0)}[aria-label][data-balloon-pos][data-balloon-pos="left"]:after{margin-right:10px;right:100%;top:50%;transform:translate(var(--balloon-move), -50%)}[aria-label][data-balloon-pos][data-balloon-pos="left"]:before{width:0;height:0;border:5px solid transparent;border-left-color:var(--balloon-color);right:100%;top:50%;transform:translate(var(--balloon-move), -50%)}[aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:after{transform:translate(0, -50%)}[aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:before{transform:translate(0, -50%)}[aria-label][data-balloon-pos][data-balloon-pos="right"]:after{left:100%;margin-left:10px;top:50%;transform:translate(calc(var(--balloon-move) * -1), -50%)}[aria-label][data-balloon-pos][data-balloon-pos="right"]:before{width:0;height:0;border:5px solid transparent;border-right-color:var(--balloon-color);left:100%;top:50%;transform:translate(calc(var(--balloon-move) * -1), -50%)}[aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:after{transform:translate(0, -50%)}[aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:before{transform:translate(0, -50%)}[aria-label][data-balloon-pos][data-balloon-length="small"]:after{white-space:normal;width:80px}[aria-label][data-balloon-pos][data-balloon-length="medium"]:after{white-space:normal;width:150px}[aria-label][data-balloon-pos][data-balloon-length="large"]:after{white-space:normal;width:260px}[aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after{white-space:normal;width:380px}@media screen and (max-width: 768px){[aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after{white-space:normal;width:90vw}} +[aria-label][data-balloon-pos]:before { + display: none; +} + +[aria-label][data-balloon-pos]:after { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + border-radius: 5px; + font-weight: bold; + font-size: 10px; +} \ No newline at end of file From 9cbc1d8749ba74da791d998d274ca81a3ec2a3d8 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:18:02 +0800 Subject: [PATCH 167/329] Format source. --- src/read/read.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/read/read.jsx b/src/read/read.jsx index 781a890c..e4dc0012 100644 --- a/src/read/read.jsx +++ b/src/read/read.jsx @@ -48,8 +48,8 @@ const Footer = () => { <div>本文由 <a href="http://ksria.com/simpread" target="_blank">简悦 SimpRead</a> 优化,用以提升阅读体验</div> <div className="second">使用了 <abbr>全新的简悦词法分析引擎<sup>beta</sup></abbr>,<a target="_blank" href="http://ksria.com/simpread/docs/#/词法分析引擎">点击查看</a>详细说明</div> <div className="third"> - <a className="sr-icon good sr-top" data-sr-mini-tooltip="觉得不错?请帮忙投票 😄" data-position="up" target="_blank" href="https://chrome.google.com/webstore/detail/%E7%AE%80%E6%82%A6-simpread/ijllcpnolfcooahcekpamkbidhejabll/reviews" dangerouslySetInnerHTML={{__html: good_icon }} ></a> - <a className="sr-icon bad sr-top" data-sr-mini-tooltip="有待改进,请帮忙吐槽 😄" data-position="up" target="_blank" onClick={ ()=>onClick() } dangerouslySetInnerHTML={{__html: bad_icon }} ></a> + <a className="sr-icon good sr-top" aria-label="觉得不错?请帮忙投票 😄" data-balloon-pos="up" target="_blank" href="https://chrome.google.com/webstore/detail/%E7%AE%80%E6%82%A6-simpread/ijllcpnolfcooahcekpamkbidhejabll/reviews" dangerouslySetInnerHTML={{__html: good_icon }} ></a> + <a className="sr-icon bad sr-top" aria-label="有待改进,请帮忙吐槽 😄" data-balloon-pos="up" target="_blank" onClick={ ()=>onClick() } dangerouslySetInnerHTML={{__html: bad_icon }} ></a> </div> </sr-rd-footer-copywrite> </sr-rd-footer> From 8b238f2e85daaea98a1712bf6a0272196de91909 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:27:43 +0800 Subject: [PATCH 168/329] Add minitooltip to ToolTip workflow. --- src/vender/mduikit/tooltip.jsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/vender/mduikit/tooltip.jsx b/src/vender/mduikit/tooltip.jsx index 9152548f..1fc897ce 100644 --- a/src/vender/mduikit/tooltip.jsx +++ b/src/vender/mduikit/tooltip.jsx @@ -245,17 +245,27 @@ class ToolTip extends React.Component { * * @param {string} element, e.g. class: .xxx; id: #xxxx; tag: xxx * @param {string} id + * @param {boolean} usage mintooltip default */ -function Render( root, id ) { +function Render( root, id, is_mini = true ) { setTimeout( () => { const $root = !id ? $(root) : $(id); - $root.find( "[data-tooltip]" ).map( ( idx, item )=>{ + $root.find( "[data-tooltip]" ).map( ( idx, item ) => { const $item = $(item), position = $item.attr( "data-tooltip-position" ), delay = $item.attr( "data-tooltip-delay" ), text = $item.attr( "data-tooltip" ); - text && text != "" && + if ( is_mini ) { + $item + .removeAttr( "data-tooltip-position" ) + .removeAttr( "data-tooltip-delay" ) + .removeAttr( "data-tooltip" ) + .attr( "aria-label", text ) + .attr( "data-balloon-pos", position || "up" ); + } else { + text && text != "" && ReactDOM.render( <ToolTip root={ root } text={ text } position={ position } delay={ delay } $item={ $item } />, getTooltipRoot( $(root), id ) ); + } }); }, 500 ); } From 6b9d240731f6c77bf87095e755cf5617c693f44c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:28:43 +0800 Subject: [PATCH 169/329] Update tooltip version to 0.0.3. --- src/vender/mduikit/tooltip.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vender/mduikit/tooltip.jsx b/src/vender/mduikit/tooltip.jsx index 1fc897ce..4479821b 100644 --- a/src/vender/mduikit/tooltip.jsx +++ b/src/vender/mduikit/tooltip.jsx @@ -1,8 +1,8 @@ /*! * React Material Design: Tooltip * - * @version : 0.0.2 - * @update : 2018/05/01 + * @version : 0.0.3 + * @update : 2019/12/31 * @homepage: https://github.com/kenshin/mduikit * @license : MIT https://github.com/kenshin/mduikit/blob/master/LICENSE * @author : Kenshin Wang <kenshin@ksria.com> From 58ad1e6169186be94cc94b95dc85da44297a154c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:29:25 +0800 Subject: [PATCH 170/329] Format source. --- src/vender/mduikit/tooltip.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vender/mduikit/tooltip.jsx b/src/vender/mduikit/tooltip.jsx index 4479821b..195f2b51 100644 --- a/src/vender/mduikit/tooltip.jsx +++ b/src/vender/mduikit/tooltip.jsx @@ -10,6 +10,7 @@ * @reference: * - https://material.io/guidelines/components/tooltips.html * - http://materializecss.com/dialogs.html + * - https://kazzkiq.github.io/balloon.css/ * * @copyright 2017 */ From 48b9cbab4ce21334c245a6d05ee8dad6a9a30da2 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:46:15 +0800 Subject: [PATCH 171/329] Optimize theme options design. --- src/assets/css/setting.css | 9 +++++---- src/module/common/theme.jsx | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/assets/css/setting.css b/src/assets/css/setting.css index b6c163b7..067d8536 100644 --- a/src/assets/css/setting.css +++ b/src/assets/css/setting.css @@ -70,12 +70,12 @@ sr-opt-theme { box-sizing: border-box; opacity: 1; - transition: all 500ms opacity 1s cubic-bezier(0.23, 1, 0.32, 1) 0ms; + transition: all 500ms cubic-bezier(0.23, 1, 0.32, 1) 0ms; } sr-opt-theme:hover { - opacity: .2; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14),0 1px 5px 0 rgba(0,0,0,0.12),0 3px 1px -2px rgba(0,0,0,0.2); + transform: translateY(-1px); + box-shadow: 0 5px 10px rgba(0,0,0,.2); } sr-opt-theme:not(:first-child) { @@ -83,5 +83,6 @@ sr-opt-theme:not(:first-child) { } sr-opt-theme[sr-type="active"] { - box-shadow: 0 3px 3px 0 rgba(0,0,0,0.14),0 2px 20px 0 rgba(0,0,0,0.12),0 3px 1px -2px rgba(0,0,0,0.7); + box-shadow: 0 5px 10px rgba(0,0,0,.2); + border: none; } diff --git a/src/module/common/theme.jsx b/src/module/common/theme.jsx index 5bbc6ca1..391bb4a5 100644 --- a/src/module/common/theme.jsx +++ b/src/module/common/theme.jsx @@ -25,7 +25,7 @@ export default class ThemeSel extends React.Component { render() { return ( <sr-opt-themes onClick={ evt=> this.changeBgColor(evt) }> - { this.props.themes.map( (theme,idx) => <sr-opt-theme style={{backgroundColor: `rgba( ${theme} )`}} name={ this.props.names[idx] } data-tooltip={ this.props.labels[idx] } data-tooltip-position="bottom" data-tooltip-delay="50"></sr-opt-theme> )} + { this.props.themes.map( (theme,idx) => <sr-opt-theme style={{backgroundColor: `rgba( ${theme} )`}} name={ this.props.names[idx] } data-tooltip={ this.props.labels[idx] } data-tooltip-position="up" data-tooltip-delay="50"></sr-opt-theme> )} </sr-opt-themes> ) } From 8cbc594a20bbac2795dc447fd4474e989d5dfd9f Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:51:45 +0800 Subject: [PATCH 172/329] Remove 'mintooltip'. --- src/contentscripts.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/contentscripts.js b/src/contentscripts.js index 278cc742..24ca70c9 100644 --- a/src/contentscripts.js +++ b/src/contentscripts.js @@ -3,7 +3,6 @@ console.log( "=== simpread contentscripts load ===" ) import './assets/css/simpread.css'; import './assets/css/setting.css'; import 'notify_css'; -import 'mintooltip'; import Velocity from 'velocity'; import Notify from 'notify'; From c73cabdc45bc85e4cb711bd095d18515941690f2 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 31 Dec 2019 12:52:06 +0800 Subject: [PATCH 173/329] Add 'mintooltip' to tooltip. --- src/vender/mduikit/tooltip.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vender/mduikit/tooltip.jsx b/src/vender/mduikit/tooltip.jsx index 195f2b51..596769a9 100644 --- a/src/vender/mduikit/tooltip.jsx +++ b/src/vender/mduikit/tooltip.jsx @@ -17,6 +17,8 @@ console.log( "==== simpread component: ToolTip ====" ) +import 'mintooltip'; + let started = false, timeout, $target, $back, style, styles = new Map(); const cssinjs = () => { const styles = { From f74452cb71cc50a93c90edf3d1f216599edb0744 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 11:43:45 +0800 Subject: [PATCH 174/329] Update some website. --- src/website_list.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/website_list.json b/src/website_list.json index 2a6e70ff..c3fc27df 100644 --- a/src/website_list.json +++ b/src/website_list.json @@ -1174,7 +1174,9 @@ "desc" : "", "include" : "<div class='article_content'>", "exclude" : [ - "<div class='meau-gotop-box'>" + "<div class='meau-gotop-box'>", + "<div class='more-toolbox'>", + "<div class='person-messagebox'>" ], "css" : ".markdown_views pre code{background-color:transparent!important;}" },{ From acd271608ae7228dfefb1eaa6be9553560fec960 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 12:26:05 +0800 Subject: [PATCH 175/329] Optimize notify design. --- src/vender/notify/notify.css | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index 449bb4a6..d4f757b7 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -39,8 +39,8 @@ notify-gp notify { height: 48px; max-height: 48px; - color: rgba(255, 255, 255, .7); - background-color: rgba(50, 50, 50, 1); + color: rgba(255, 255, 255, 0.9); + background-color: #000; box-sizing: border-box; border-radius: 4px; @@ -52,7 +52,7 @@ notify-gp notify { transform-origin: left top 0px; transition: transform 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms, opacity 1s cubic-bezier(0.23, 1, 0.32, 1) 0ms; - box-shadow: 0 1px 3px 0 rgba(60,64,67,0.302), 0 4px 8px 3px rgba(60,64,67,0.149); + box-shadow: 0 3px 5px -1px rgba(0,0,0,.2), 0 6px 10px 0 rgba(0,0,0,.14), 0 1px 18px 0 rgba(0,0,0,.12); } notify-gp notify-title { @@ -117,7 +117,7 @@ notify-gp notify-cancel { max-width: 80px; min-width: 56px; - color: #8ab4f8; + color: #bb86fc; font-weight: 500; font-size: inherit; @@ -149,7 +149,8 @@ notify-gp notify-a notify-span { display: block; width: 16px; height: 16px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABpFBMVEUAAADl5eXj4+NSVFRTVVVaXFxLTU1hY2NdX18pLCwhJCSdnp5sbm6HiYmjpKSDhYX///+rrKytrq6XmJgzNTUoKyt3eXlydHRlZ2dbXV1ucHB4enrv7++KjIyIiort7e1oamosLy8aHR0VGBgUFxcbHh4rLi5oamprbGwgIyMKDQ0KDQ0iJSVjZWWfoaEkJiYICwsLDg4KDQ0MDw8iJSWMjo41ODgMDw8JDAw2OTkvMTELDg4LDg4xMzM1NzcJDAwLDg40NjYeISEHCgoeISFkZmYtLy8yNDRvcXEWGRkHCgoaHR3///8RFBQHCgohJCShoqLIyMgaHR0HCgoZGxv4+PgRFBQLDg4xMzOWl5eam5ssLi4bHh7///8fIiIJDAwwMzNzdHQXGhoeISFlZmYsLi4KDQ0gIiI6PDwOEREuMDAXGhoHCgodHx8pLCwNEBA1ODj///8nKSkICwsICwsJDAwnKSnZ2dl9fn4pKysNDw8OEREpLCxyc3ORkpIzNTUjJSUVGBgUFxcgIyM5PDyanJwEBwcDBwcDBgYFCAgGCQn///+5RDDmAAAAhnRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFAQU+i7S0jkAGEYrw8Y8SBIn++Pr3jQQ67fx8dvX6iWr27z+B/YsOcoMPdPiEAaL7iAgEcfWsA6D7iAkGcawDef2LDnOFD3T4gTLnfHb6iWrqNQJ4+ff7fQILd+ToewsCLHWZmXUwAyFsKwcAAAABYktHRBCVsg0sAAAAzElEQVQY02NgwAoYZWTl5JngXGYFRSVlFVU1dRYIn1VDU6sNCLR1dNlAfHY9fQNDw/YOI2MDE1MOoACnmbmFpZW1ja2dvYMjFwMDN4NTp7OLq5u7h6dXpzcDDwOvj29bm59/QGBQcFtbSCgfA79AWFtHeERkVLR1W1tMrCCDEENcZ3xCYlJySmpaZzqDMAODSEamRVZ2cE5unn1+gSjQFrHCIqNir7a2nJLSsnJxkEMkKiqrutrauqpraiUhTpWqq29obGpuaZVmIAYAAO06McffKEk8AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEzLTA0LTAzVDE3OjE4OjAzKzA4OjAwRdgB9wAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMS0wNS0xOFQyMDowMTowMCswODowMB0r3XkAAABNdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC44LTcgUTE2IHg4Nl82NCAyMDE0LTAyLTI4IGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnWaRffwAAABh0RVh0VGh1bWI6OkRvY3VtZW50OjpQYWdlcwAxp/+7LwAAABh0RVh0VGh1bWI6OkltYWdlOjpIZWlnaHQAMTI4Q3xBgAAAABd0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAxMjjQjRHdAAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADEzMDU3MjAwNjArP9HVAAAAE3RFWHRUaHVtYjo6U2l6ZQAxLjAzS0JCZtQvXwAAAFx0RVh0VGh1bWI6OlVSSQBmaWxlOi8vL2hvbWUvZnRwLzE1MjAvZWFzeWljb24uY24vZWFzeWljb24uY24vY2RuLWltZy5lYXN5aWNvbi5jbi9wbmcvMTcvMTc4Ni5wbmcRsze7AAAAAElFTkSuQmCC); + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABDklEQVQ4T6VT0VFCQQzcrQA7ECoRK1AqEDugA6ECsQPsADvgVSAlaAlWEGdvkjchczI45Osud9nc7m2IEmY2BfAEYA5A6xsARwAHAB8ktR6DeWNmKwAvXlSxY78i+RabEcDM9gAe/qoq+T3JhXINwDu/Xlgc1zYk13TOn+XZA4C7AvgN4LbkZgJYO+84O5C8N7Odi6n8O8llh+ZGAD3uO5LPDgIvzoDRbBDAV+dputBAXKNecQM5B9CefQlAj0JwVmdLdGSwHI1CFXEgOS8ihia1WRNRdpU9JwlatpWVc0gr3c0xu95IAfdPK2uoHkcrJxANkzTJdPKTf3ROchvJk2n0LxNPfV9vnDVEJ+P8C6jMhLeGEqMKAAAAAElFTkSuQmCC); + opacity: .9; } notify-gp notify-i.holdon { From c09bbf815276b56db4b6b58f47ff764e790d7a1c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 13:49:00 +0800 Subject: [PATCH 176/329] Add 'snackbar' with close logic.' --- src/vender/notify/notify.css | 40 ++++++++++++++++++++++++++++++++++-- src/vender/notify/notify.js | 12 ++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index d4f757b7..2da9d8eb 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -112,25 +112,34 @@ notify-gp notify-action, notify-gp notify-cancel { display: none; - margin: 0 0 0 24px; + margin: 0 8px; max-width: 80px; min-width: 56px; + height: 36px; + line-height: 34px; color: #bb86fc; font-weight: 500; font-size: inherit; text-transform: uppercase; - text-align: right; + text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + transition: all 500ms cubic-bezier(0.23, 1, 0.32, 1) 0ms; cursor: pointer; } +notify-gp notify-action:active, +notify-gp notify-cancel:active { + border-radius: 4px; + background-color: rgba(98, 0, 238, .3); +} + notify-gp notify-cancel { margin: 0; } @@ -145,6 +154,33 @@ notify-gp notify-a { cursor: pointer; } +notify-gp notify-exit { + display: none; + justify-content: center; + align-items: center; + + margin-left: 5px; + + width: 36px; + height: 36px; + min-width: 36px; + min-height: 36px; + + background-color: transparent; + + border-radius: 50%; + transition: all 500ms cubic-bezier(0.23, 1, 0.32, 1) 0ms; + cursor: pointer; +} + +notify-gp notify-exit:hover { + background-color: rgba(255, 255, 255, 0.4); +} + +notify-gp notify-exit:active { + background-color: rgba(255, 255, 255, 0.2); +} + notify-gp notify-a notify-span { display: block; width: 16px; diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 2a9d0910..1c4eb9e4 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -106,7 +106,9 @@ var Notify = ( function () { <notify-content></notify-content>\ <notify-action></notify-action>\ <notify-cancel></notify-cancel>\ + <notify-exit></notify-exit>\ </notify>', + exit = '<svg t="1577940123220" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1411" width="24" height="24"><path d="M512 421.490332 331.092592 240.582924C306.351217 215.841549 265.464551 215.477441 240.470996 240.470996 215.303191 265.638801 215.527553 306.037221 240.582924 331.092592L421.490332 512 240.582925 692.907407C215.84155 717.648782 215.477441 758.535449 240.470996 783.529004 265.638801 808.696809 306.037222 808.472446 331.092593 783.417075L512 602.509668 692.907407 783.417075C717.648782 808.15845 758.535449 808.522559 783.529004 783.529004 808.696809 758.361199 808.472446 717.962778 783.417075 692.907407L602.509668 512 783.417076 331.092592C808.158451 306.351217 808.522559 265.464551 783.529004 240.470996 758.361199 215.303191 717.962779 215.527553 692.907408 240.582924L512 421.490332Z" p-id="1412" fill="#ffffff"></path></svg>', loading = '\ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="lds-rolling">\ <circle stroke="#fff" stroke-width="10" cx="50" cy="50" fill="none" ng-attr-stroke="{{config.color}}" ng-attr-stroke-width="{{config.width}}" ng-attr-r="{{config.radius}}" ng-attr-stroke-dasharray="{{config.dasharray}}" r="30" stroke-dasharray="141.37166941154067 49.12388980384689" transform="rotate(102 50 50)">\ @@ -152,6 +154,7 @@ var Notify = ( function () { $icon = $target.find(prefix( "i" )), $action = $target.find(prefix( "action" )), $cancel = $target.find(prefix( "cancel" )), + $exit = $target.find(prefix( "exit" )), item = "notify-item-" + num++, position = this.constructor.Position; @@ -224,7 +227,14 @@ var Notify = ( function () { $target.addClass( item ); $root.append( $target ).css( "z-index", 2147483647 ); - this.mode == MODE.snackbar && $target.css( "margin-left", "-" + $target.width()/2 + "px" ); + + if ( this.mode == MODE.snackbar ) { + $target.css( "margin-left", "-" + $target.width()/2 + "px" ); + if ( this.cancel == "" ) { + $exit.html( exit ).css( "display", "flex" ); + $root.on( "click", "." + item + " notify-exit", closeHandle ); + } + } setTimeout( function() { $target.addClass( "notify-show" ); }, 200 ); }; From 79f3d687a7787e2d803f8a4fdadd214e964cee82 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 14:20:41 +0800 Subject: [PATCH 177/329] Restore mulit line content design. --- src/vender/notify/notify.css | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index 2da9d8eb..c2ab7826 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -36,8 +36,9 @@ notify-gp notify { min-width: 288px; max-width: 568px; - height: 48px; - max-height: 48px; + /*height: 48px; + max-height: 48px;*/ + min-height: 48px; color: rgba(255, 255, 255, 0.9); background-color: #000; @@ -67,8 +68,8 @@ notify-gp notify-content { text-align: left; overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + /*text-overflow: ellipsis; + white-space: nowrap;*/ } notify-gp notify-content a, From 92f1a9567454fd54fc44706d91e6c9b4e2d02794 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 14:34:05 +0800 Subject: [PATCH 178/329] Optimize success warning error design. --- src/vender/notify/notify.css | 6 +++--- src/vender/notify/notify.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index c2ab7826..c9483d09 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -212,15 +212,15 @@ notify-gp .notify-hide { } notify-gp .notify-success { - color: rgba(118, 255, 3, .8); + background-color: rgb(76, 175, 80); } notify-gp .notify-warning { - color: rgba(255, 238, 88, 1); + background-color: rgb(255, 160, 0); } notify-gp .notify-error { - color: rgba(239, 83, 80, 1); + background-color: rgba(239, 83, 80, 1); } notify-gp .notify-modal { diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 1c4eb9e4..41ad8489 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -175,13 +175,13 @@ var Notify = ( function () { switch( this.type ) { case 1: - $content.addClass( "notify-success" ); + $target.addClass( "notify-success" ); break; case 2: - $content.addClass( "notify-warning" ); + $target.addClass( "notify-warning" ); break; case 3: - $content.addClass( "notify-error" ); + $target.addClass( "notify-error" ); break; } From d64590bf7ab2bb633320f132b49989aa6c7b5247 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 14:37:31 +0800 Subject: [PATCH 179/329] Add info message. --- src/vender/notify/notify.css | 4 ++++ src/vender/notify/notify.js | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index c9483d09..4b57fc7d 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -223,6 +223,10 @@ notify-gp .notify-error { background-color: rgba(239, 83, 80, 1); } +notify-gp .notify-info { + background-color: rgb(25, 118, 210); +} + notify-gp .notify-modal { flex-flow: column nowrap; align-items: flex-start; diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 41ad8489..12c7809e 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -6,7 +6,7 @@ * * - content ( string, required) * -* - type ( int, NORMAL/SUCCESS/WARING/ERROR) +* - type ( int, NORMAL/SUCCESS/WARING/ERROR/INFO) * ( optional, default is NORMAL ) * * - mode ( string, toast/modal/snackbar) @@ -67,6 +67,7 @@ var Notify = ( function () { SUCCESS = 1, WARNING = 2, ERROR = 3, + INFO = 4, MODE = { toast : "toast", modal : "modal", @@ -183,6 +184,9 @@ var Notify = ( function () { case 3: $target.addClass( "notify-error" ); break; + case 4: + $target.addClass( "notify-info" ); + break; } if ( this.action !== "" && this.callback && typeof this.callback == "function" ) { From 794d019fe0b434d48e86e10049e5768ffcc97a36 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 14:54:21 +0800 Subject: [PATCH 180/329] Add 'font awesome' with success warning error info message. --- src/vender/notify/notify.css | 2 ++ src/vender/notify/notify.js | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index 4b57fc7d..8469b303 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -99,6 +99,8 @@ notify-gp notify-content a:hover { notify-gp notify-i { display: none; + justify-content: center; + align-items: center; margin: 0 10px 0 0; diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 12c7809e..62fc7310 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -176,15 +176,19 @@ var Notify = ( function () { switch( this.type ) { case 1: + $icon.html( '<i class="fas fa-check"></i>' ).css({ display: 'flex' }); $target.addClass( "notify-success" ); break; case 2: + $icon.html( '<i class="fas fa-exclamation"></i>' ).css({ display: 'flex' }); $target.addClass( "notify-warning" ); break; case 3: + $icon.html( '<i class="fas fa-bug"></i>' ).css({ display: 'flex' }); $target.addClass( "notify-error" ); break; case 4: + $icon.html( '<i class="fas fa-info"></i>' ).css({ display: 'flex' }); $target.addClass( "notify-info" ); break; } From 212b82a25518535dcd89b3ad1cd7efd73167784d Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 15:24:51 +0800 Subject: [PATCH 181/329] Add verify 'font awesome' exist workflow. --- src/vender/notify/notify.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 62fc7310..38ac8974 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -142,6 +142,7 @@ var Notify = ( function () { hidden( this ); }, hidden = function( target ) { + return; target.addClass( "notify-hide" ).slideUp( 500, function() { target.remove(); if ($root.children().length === 0 ) $root.css( "z-index", 0 ); @@ -205,6 +206,15 @@ var Notify = ( function () { $root.on( "click", "." + item + " notify-cancel", [ item, this.callback, "cancel" ], callbackHander ); } + if ( this.type != 0 ) { + var css = function( element, property ) { + return window.getComputedStyle( element, null ).getPropertyValue( property ).toLowerCase().replace( / /g, "" ); + }, $span = $( '<span style="display:none;" class="verify-fas fas"></span>' ) + $( 'body' ).append( $span ); + !/fontawesome/.test( css( $span[0], 'font-family' ) ) && $icon.remove(); + $span.remove(); + } + this.mode !== MODE.modal && this.state !== STATE.loading && this.state !== STATE.holdon && ( this.action == "" || !this.callback || typeof this.callback != "function" ) && ( timer[item] = setTimeout( delayHandler.bind( $target, item ), this.delay ) ); From de0e41abdd58282cbe94534becd60b62fe4bc832 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 15:26:44 +0800 Subject: [PATCH 182/329] Format source. --- src/vender/notify/notify.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 38ac8974..4e9e91c1 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -142,7 +142,6 @@ var Notify = ( function () { hidden( this ); }, hidden = function( target ) { - return; target.addClass( "notify-hide" ).slideUp( 500, function() { target.remove(); if ($root.children().length === 0 ) $root.css( "z-index", 0 ); From 9c70bbcf72c706abc12463fbffc76ebe9cc94b25 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 15:37:34 +0800 Subject: [PATCH 183/329] Add icon support 'font awesome'. --- src/vender/notify/notify.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 4e9e91c1..6117248d 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -171,8 +171,11 @@ var Notify = ( function () { this.mode == MODE.snackbar && $target.addClass( "notify-snackbar" ); } - this.mode !== MODE.modal && this.icon !== "" && - $icon.css({ "background-image": "url(" + this.icon + ")", "display": "block" }); + if ( this.mode !== MODE.modal && this.icon !== "" ) { + if ( this.icon.indexOf( '<i' ) > -1 ) { + $icon.html( this.icon ).css({ display: 'flex' }); + } else $icon.css({ "background-image": "url(" + this.icon + ")", "display": "block" }); + } switch( this.type ) { case 1: From 668c1b69ed7b6674a8be9300403f03bc27ccc66f Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 15:45:45 +0800 Subject: [PATCH 184/329] Optimize default icon logic. --- src/vender/notify/notify.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 6117248d..3e50bf31 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -179,19 +179,19 @@ var Notify = ( function () { switch( this.type ) { case 1: - $icon.html( '<i class="fas fa-check"></i>' ).css({ display: 'flex' }); + this.state != STATE.holdon && this.icon == "" && $icon.html( '<i class="fas fa-check"></i>' ).css({ display: 'flex' }); $target.addClass( "notify-success" ); break; case 2: - $icon.html( '<i class="fas fa-exclamation"></i>' ).css({ display: 'flex' }); + this.state != STATE.holdon && this.icon == "" && $icon.html( '<i class="fas fa-exclamation"></i>' ).css({ display: 'flex' }); $target.addClass( "notify-warning" ); break; case 3: - $icon.html( '<i class="fas fa-bug"></i>' ).css({ display: 'flex' }); + this.state != STATE.holdon && this.icon == "" && $icon.html( '<i class="fas fa-bug"></i>' ).css({ display: 'flex' }); $target.addClass( "notify-error" ); break; case 4: - $icon.html( '<i class="fas fa-info"></i>' ).css({ display: 'flex' }); + this.state != STATE.holdon && this.icon == "" && $icon.html( '<i class="fas fa-info"></i>' ).css({ display: 'flex' }); $target.addClass( "notify-info" ); break; } From 07c05e6a970dff06dd17b11a8569a3fa3815b989 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 16:00:59 +0800 Subject: [PATCH 185/329] Format source. --- src/module/plugins.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/module/plugins.jsx b/src/module/plugins.jsx index 910f8fa7..e77770f4 100644 --- a/src/module/plugins.jsx +++ b/src/module/plugins.jsx @@ -253,7 +253,7 @@ export default class PluginsOpt extends React.Component { render() { return ( - <div id="labs" style={{ width: '100%' }}> + <div id="labs" style={{ width: '100%', overflow: 'hidden' }}> <div className="label">管理</div> <div className="lab"> <div style={{ display: 'inline-flex', width: '100%' }}> From 23822ddd917aaacc55715cad061b5e27691ad9a9 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 16:28:53 +0800 Subject: [PATCH 186/329] Format source. --- src/vender/notify/notify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 3e50bf31..f0a14d7e 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -208,7 +208,7 @@ var Notify = ( function () { $root.on( "click", "." + item + " notify-cancel", [ item, this.callback, "cancel" ], callbackHander ); } - if ( this.type != 0 ) { + if ( this.type != 0 && this.icon.indexOf( '<i' ) > -1 ) { var css = function( element, property ) { return window.getComputedStyle( element, null ).getPropertyValue( property ).toLowerCase().replace( / /g, "" ); }, $span = $( '<span style="display:none;" class="verify-fas fas"></span>' ) From 8d9c923ba0267d8e5221ebc2560d1d0a1306e2cc Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 16:33:57 +0800 Subject: [PATCH 187/329] Add mobile design. --- src/vender/notify/notify.css | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index 8469b303..385faab6 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -305,3 +305,26 @@ notify-gp .notify-snackbar { bottom: 0; right: 0; } + +@media (pointer: coarse) { + notify-gp { + top: initial; + bottom: 0; + left: 0; + + margin: 0 10px 10px 10px; + } + + notify-gp notify { + width: 100%; + max-width: inherit; + } + + notify-gp .notify-show { + transform-origin: bottom; + } + + notify-gp .notify-snackbar { + position: initial; + } +} \ No newline at end of file From 2a660a05791263dfcf33794114a71e80c885b969 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 16:38:04 +0800 Subject: [PATCH 188/329] Format source. --- src/vender/notify/notify.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index 385faab6..7bd18e94 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -317,7 +317,7 @@ notify-gp .notify-snackbar { notify-gp notify { width: 100%; - max-width: inherit; + max-width: 600px; } notify-gp .notify-show { From 2d724247311416b5d7a5d8b080696d57ea35cd4a Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 2 Jan 2020 16:38:51 +0800 Subject: [PATCH 189/329] Update notify version to 2.0.2. --- src/vender/notify/notify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index f0a14d7e..9ba5aa65 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -58,7 +58,7 @@ * */ var Notify = ( function () { - var VERSION = "2.0.1", + var VERSION = "2.0.2", name = "notify", root = "notify-gp", roottmpl= "<" + root + ">", From ce00c449d8485814c1cfd85e6ae2643c0d2e1726 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 3 Jan 2020 12:52:00 +0800 Subject: [PATCH 190/329] Format source. --- src/vender/notify/notify.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 9ba5aa65..745d2665 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -94,6 +94,7 @@ var Notify = ( function () { icon : "", action : "", cancel : "", + exit : undefined, callback: undefined, complete: undefined, }, @@ -248,7 +249,7 @@ var Notify = ( function () { $target.addClass( item ); $root.append( $target ).css( "z-index", 2147483647 ); - if ( this.mode == MODE.snackbar ) { + if ( this.mode == MODE.snackbar || this.exit ) { $target.css( "margin-left", "-" + $target.width()/2 + "px" ); if ( this.cancel == "" ) { $exit.html( exit ).css( "display", "flex" ); @@ -314,6 +315,7 @@ var Notify = ( function () { this.content = arguments[0]; this.action = arguments[1]; this.callback = arguments[2]; + this.exit = true; break; case 4: if ( arguments[0] == MODE.snackbar ) { From ee26bb97378858e98b90e1403b304557b1d1ed87 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 3 Jan 2020 13:11:02 +0800 Subject: [PATCH 191/329] Optimize notify hidden performance. --- src/vender/notify/notify.css | 16 ++++++++++++++-- src/vender/notify/notify.js | 5 +++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index 7bd18e94..acfa8014 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -209,8 +209,9 @@ notify-gp .notify-show { } notify-gp .notify-hide { - opacity: 0; - transform: scaleY(0); + animation-name: fadeOutUp; + animation-duration: 1s; + animation-fill-mode: both; } notify-gp .notify-success { @@ -306,6 +307,17 @@ notify-gp .notify-snackbar { right: 0; } +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, -100%, 0); + } +} + @media (pointer: coarse) { notify-gp { top: initial; diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 745d2665..67d1d74e 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -143,10 +143,11 @@ var Notify = ( function () { hidden( this ); }, hidden = function( target ) { - target.addClass( "notify-hide" ).slideUp( 500, function() { + target[0].addEventListener( 'animationend', function(e) { target.remove(); if ($root.children().length === 0 ) $root.css( "z-index", 0 ); - }); + }, false ); + target.addClass( 'notify-hide' ); }, render = function() { var $target = $( TMPL ), From 03064b18f736dce265693481aab6d72ec2fc338c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 3 Jan 2020 13:21:41 +0800 Subject: [PATCH 192/329] Optimize notify hidden performance. --- src/vender/notify/notify.css | 2 +- src/vender/notify/notify.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index acfa8014..e1b127da 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -314,7 +314,7 @@ notify-gp .notify-snackbar { to { opacity: 0; - transform: translate3d(0, -100%, 0); + transform: scaleY(0); } } diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 67d1d74e..78480957 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -144,8 +144,10 @@ var Notify = ( function () { }, hidden = function( target ) { target[0].addEventListener( 'animationend', function(e) { - target.remove(); - if ($root.children().length === 0 ) $root.css( "z-index", 0 ); + target.slideUp( 10, function() { + target.remove(); + if ($root.children().length === 0 ) $root.css( "z-index", 0 ); + }); }, false ); target.addClass( 'notify-hide' ); }, From 5b8582c29eeeffb69f7c445a1e891cd3449c9e4c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 3 Jan 2020 14:30:34 +0800 Subject: [PATCH 193/329] Add init loading workflow. --- src/assets/css/options_page.css | 54 +++++++++++++++++++++++++++++++++ src/options/options.html | 6 +++- src/options/options.js | 15 +++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/src/assets/css/options_page.css b/src/assets/css/options_page.css index 8256b367..0ded3792 100644 --- a/src/assets/css/options_page.css +++ b/src/assets/css/options_page.css @@ -41,6 +41,57 @@ input, textarea { font-family: Raleway, Menlo, "Dank Mono", Inconsolata, "Operator Mono", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace!important; } +.loading { + position: fixed; + top: 0; + left: 0; + + display: flex; + justify-content: center; + align-items: center; + + height: 100%; + width: 100%; + + background-color: #fafafa; + + z-index: 200; +} + +.animated { + animation-duration: 1s; + animation-fill-mode: both; + animation-iteration-count: infinite; +} + +.heartBeat { + animation-name: heartBeat; + animation-duration: 1.3s; + animation-timing-function: ease-in-out; +} + +@keyframes heartBeat { + 0% { + transform: scale(1); + } + + 14% { + transform: scale(1.3); + } + + 28% { + transform: scale(1); + } + + 42% { + transform: scale(1.3); + } + + 70% { + transform: scale(1); + } +} + .topnav { position: fixed; z-index: 200; @@ -151,6 +202,9 @@ input, textarea { color: var(--secondary-color); font-size: 1.3rem; + + opacity: 1; + transition: all .25s ease-out; } .welcome { diff --git a/src/options/options.html b/src/options/options.html index ef08b8bd..a9967220 100644 --- a/src/options/options.html +++ b/src/options/options.html @@ -4,8 +4,12 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>选项页 - 简悦 SimpRead + +
@@ -13,7 +17,7 @@
-
+
简悦 SimpRead - 为你提供「如杂志般沉浸式阅读体验」的扩展  © 2017 - 2019 ksria.com by Kenshin Wang
diff --git a/src/options/options.js b/src/options/options.js index d54b3437..4a3b2e5a 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -109,6 +109,7 @@ function tabChange( idx ) { */ storage.Read( first => { console.log( "simpread storage get success!", storage.focus, storage.read, first ); + loadingRender(); pRead(); hashnotify(); firstLoad( first ); @@ -122,6 +123,20 @@ storage.Read( first => { waves.Render({ root: "body" }); }); +/** + * Loading Render + */ +function loadingRender() { + setTimeout( () => { + $( '.loading' ).animate({ + opacity: 0, + }, () => { + $( '.loading' ).remove(); + $( ".bottom" ).removeAttr( "style" ); + }); + }, 1000 ); +} + /** * Pure Read */ From a443694cc5840a1e27c6fef4b44a9b9a88312d74 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 3 Jan 2020 14:34:58 +0800 Subject: [PATCH 194/329] Format source. --- src/options/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index 4a3b2e5a..9d76affa 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -293,7 +293,7 @@ function tabsRender( color ) {
save(s) } />
-
+
save(s) } />
From adaa9bb5332f6704e494e0d47d86e434a2ffa852 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 3 Jan 2020 14:43:45 +0800 Subject: [PATCH 195/329] Format source. --- src/assets/css/options_page.css | 2 +- src/options/options.html | 4 ++-- src/options/options.js | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/assets/css/options_page.css b/src/assets/css/options_page.css index 0ded3792..2e5d7f25 100644 --- a/src/assets/css/options_page.css +++ b/src/assets/css/options_page.css @@ -41,7 +41,7 @@ input, textarea { font-family: Raleway, Menlo, "Dank Mono", Inconsolata, "Operator Mono", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace!important; } -.loading { +.loadingbar { position: fixed; top: 0; left: 0; diff --git a/src/options/options.html b/src/options/options.html index a9967220..c740b07f 100644 --- a/src/options/options.html +++ b/src/options/options.html @@ -5,11 +5,11 @@ 选项页 - 简悦 SimpRead -
+
diff --git a/src/options/options.js b/src/options/options.js index 9d76affa..e13c7666 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -128,10 +128,10 @@ storage.Read( first => { */ function loadingRender() { setTimeout( () => { - $( '.loading' ).animate({ + $( '.loadingbar' ).animate({ opacity: 0, }, () => { - $( '.loading' ).remove(); + $( '.loadingbar' ).remove(); $( ".bottom" ).removeAttr( "style" ); }); }, 1000 ); From 3471b0266cb65076432adb36e8cf32cc11e867b1 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 3 Jan 2020 15:27:26 +0800 Subject: [PATCH 196/329] Format source. --- src/vender/notify/notify.css | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index e1b127da..6b16b72e 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -205,7 +205,7 @@ notify-gp notify-i.holdon { notify-gp .notify-show { opacity: 1; - transform: scaleY(1); + transform: scaleY(1)!important; } notify-gp .notify-hide { @@ -332,8 +332,9 @@ notify-gp .notify-snackbar { max-width: 600px; } - notify-gp .notify-show { - transform-origin: bottom; + notify-gp .notify-show, + notify-gp .notify-hide { + transform-origin: bottom!important; } notify-gp .notify-snackbar { From 3d54f325e0e9112ebd91970b13edca779ff1a26a Mon Sep 17 00:00:00 2001 From: Kenshin Date: Fri, 3 Jan 2020 15:37:02 +0800 Subject: [PATCH 197/329] Optimize mobile append order. --- src/vender/notify/notify.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 78480957..696eb306 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -161,7 +161,27 @@ var Notify = ( function () { $cancel = $target.find(prefix( "cancel" )), $exit = $target.find(prefix( "exit" )), item = "notify-item-" + num++, - position = this.constructor.Position; + position = this.constructor.Position, + isMobile = { + Android: function() { + return navigator.userAgent.match(/Android/i); + }, + BlackBerry: function() { + return navigator.userAgent.match(/BlackBerry/i); + }, + iOS: function() { + return navigator.userAgent.match(/iPhone|iPad|iPod/i); + }, + Opera: function() { + return navigator.userAgent.match(/Opera Mini/i); + }, + Windows: function() { + return navigator.userAgent.match(/IEMobile/i); + }, + verify: function() { + return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()) == null ? false : true; + } + }; this.title ? $title.text( this.title ) : $title.hide(); this.content ? $content.html( this.content ) : $content.hide(); @@ -250,7 +270,8 @@ var Notify = ( function () { } $target.addClass( item ); - $root.append( $target ).css( "z-index", 2147483647 ); + $root.css( "z-index", 2147483647 ); + isMobile.verify() ? $root.prepend( $target ) : $root.append( $target ); if ( this.mode == MODE.snackbar || this.exit ) { $target.css( "margin-left", "-" + $target.width()/2 + "px" ); From a41437d71527bcf9460da473e79a0c7e56e7e35e Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 4 Jan 2020 16:16:27 +0800 Subject: [PATCH 198/329] Update puread file. --- src/vender/puread/puplugin.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/puread/puplugin.min.js b/src/vender/puread/puplugin.min.js index ef2117b4..250a3e74 100644 --- a/src/vender/puread/puplugin.min.js +++ b/src/vender/puread/puplugin.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.puplugin={})}(this,function(e){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(e,t){return e(t={exports:{}},t.exports),t.exports}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=r(function(e,t){e.exports=function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n=function(){function e(e,t){for(var r=0;r=0||t.isContentEditable||"true"===t.getAttribute("g_editable"))return!0;t=t.parentNode}return!1}},{key:"isFirstTextChild",value:function(e,t){for(var r=e.childNodes,a=0;a-1;a--){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"spacingNodeByXPath",value:function(e,t){for(var r=document.evaluate(e,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),a=void 0,n=void 0,i=r.snapshotLength-1;i>-1;--i)if(a=r.snapshotItem(i),this.canIgnoreNode(a))n=a;else{var o=this.spacing(a.data);if(a.data!==o&&(a.data=o),n){if(a.nextSibling&&a.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}var s=a.data.toString().substr(-1)+n.data.toString().substr(0,1),l=this.spacing(s);if(l!==s){for(var c=n;c.parentNode&&-1===c.nodeName.search(this.spaceSensitiveTags)&&this.isFirstTextChild(c.parentNode,c);)c=c.parentNode;for(var u=a;u.parentNode&&-1===u.nodeName.search(this.spaceSensitiveTags)&&this.isLastTextChild(u.parentNode,u);)u=u.parentNode;if(u.nextSibling&&u.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}if(-1===u.nodeName.search(this.blockTags))if(-1===c.nodeName.search(this.spaceSensitiveTags))-1===c.nodeName.search(this.ignoreTags)&&-1===c.nodeName.search(this.blockTags)&&(n.previousSibling?-1===n.previousSibling.nodeName.search(this.spaceLikeTags)&&(n.data=" "+n.data):this.canIgnoreNode(n)||(n.data=" "+n.data));else if(-1===u.nodeName.search(this.spaceSensitiveTags))a.data=a.data+" ";else{var d=document.createElement("pangu");d.innerHTML=" ",c.previousSibling?-1===c.previousSibling.nodeName.search(this.spaceLikeTags)&&c.parentNode.insertBefore(d,c):c.parentNode.insertBefore(d,c),d.previousElementSibling||d.parentNode&&d.parentNode.removeChild(d)}}}n=a}}},{key:"spacingNode",value:function(e){this.spacingNodeByXPath(".//*/text()[normalize-space(.)]",e)}},{key:"spacingElementById",value:function(e){var t='id("'+e+'")//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByClassName",value:function(e){var t='//*[contains(concat(" ", normalize-space(@class), " "), "'+e+'")]//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByTagName",value:function(e){var t="//"+e+"//text()";this.spacingNodeByXPath(t,document)}},{key:"spacingPageTitle",value:function(){this.spacingNodeByXPath("/html/head/title/text()",document)}},{key:"spacingPageBody",value:function(){for(var e="/html/body//*/text()[normalize-space(.)]",t=["script","style","textarea"],r=0;r])([A-Za-z0-9])/g,d=/([A-Za-z0-9])([\+\-\*\/=&\\|<>])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,h=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c]+(.*?)[\)\]\}>\u201d]+)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,f=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c>])/g,p=/([\)\]\}>\u201d<])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,g=/([\(\[\{<\u201c]+)(\s*)(.+?)(\s*)([\)\]\}>\u201d]+)/,m=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([~!;:,\.\?\u2026])([A-Za-z0-9])/g,_=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([A-Za-z0-9`\$%\^&\*\-=\+\\\|\/@\u00a1-\u00ff\u2022\u2027\u2150-\u218f])/g,b=/([A-Za-z0-9`~\$%\^&\*\-=\+\\\|\/!;:,\.\?\u00a1-\u00ff\u2022\u2026\u2027\u2150-\u218f])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,v=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return r(e,[{key:"spacing",value:function(e){var t=e,r=t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(a,"$1 $2")).replace(n,"$1 $2")).replace(i,"$1$3$5")).replace(o,"$1$3$4")).replace(s,"$1 $2$3$4 $5")).replace(l,"$1 $2")).replace(c,"$1 $3")).replace(u,"$1 $2 $3")).replace(d,"$1 $2 $3"),v=t.replace(h,"$1 $2 $4");return t=v,r===v&&(t=(t=t.replace(f,"$1 $2")).replace(p,"$1 $2")),t=(t=(t=(t=t.replace(g,"$1$3$5")).replace(m,"$1$2 $3")).replace(_,"$1 $2")).replace(b,"$1 $2")}},{key:"spacingText",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];try{var r=this.spacing(e);t(null,r)}catch(e){t(e)}}}]),e}(),w=new v;(e.exports=w).Pangu=v}])});n.pangu;function i(e,t){for(var r=0,a=e.length-1;a>=0;a--){var n=e[a];"."===n?e.splice(a,1):".."===n?(e.splice(a,1),r++):r&&(e.splice(a,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(e){return o.exec(e).slice(1)};function l(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,t="/"===a.charAt(0))}return e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"),(t?"/":"")+e||"."}function c(e){var t=u(e),r="/"===b(e,-1);return(e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e}function u(e){return"/"===e.charAt(0)}function d(){return c(_(Array.prototype.slice.call(arguments,0),function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function h(e,t){function r(e){for(var t=0;t=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=l(e).substr(1),t=l(t).substr(1);for(var a=r(e.split("/")),n=r(t.split("/")),i=Math.min(a.length,n.length),o=i,s=0;s=0&&c>0){for(a=[],i=r.length;u>=0&&!s;)u==l?(a.push(u),l=r.indexOf(e,u+1)):1==a.length?s=[a.pop(),c]:((n=a.pop())=0?l:c;a.length&&(s=[i,o])}return s}E.range=x;var N=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(t,r){var a=[];var n=k("{","}",t);if(!n||/\$$/.test(n.pre))return[t];var i=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(n.body);var o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(n.body);var s=i||o;var l=n.body.indexOf(",")>=0;if(!s&&!l)return n.post.match(/,.*\}/)?(t=n.pre+"{"+n.body+C+n.post,e(t)):[t];var c;if(s)c=n.body.split(/\.\./);else if(1===(c=function e(t){if(!t)return[""];var r=[];var a=k("{","}",t);if(!a)return t.split(",");var n=a.pre;var i=a.body;var o=a.post;var s=n.split(",");s[s.length-1]+="{"+i+"}";var l=e(o);o.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l));r.push.apply(r,s);return r}(n.body)).length&&1===(c=e(c[0],!1).map(M)).length){var u=n.post.length?e(n.post,!1):[""];return u.map(function(e){return n.pre+c[0]+e})}var d=n.pre;var u=n.post.length?e(n.post,!1):[""];var h;if(s){var f=j(c[0]),p=j(c[1]),g=Math.max(c[0].length,c[1].length),m=3==c.length?Math.abs(j(c[2])):1,_=I,b=p0){var x=new Array(T+1).join("0");E=y<0?"-"+x+E.slice(1):x+E}}h.push(E)}}else h=w(c,function(t){return e(t,!1)});for(var N=0;N=t}var R=v&&m||v,H=Y;Y.Minimatch=Q;var D={sep:"/"};try{D=R}catch(e){}var G=Y.GLOBSTAR=Q.GLOBSTAR={},U={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},q="[^/]",F=q+"*?",V="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",W="(?:(?!(?:\\/|^)\\.).)*?",X="().*{}+?[]^$\\!".split("").reduce(function(e,t){return e[t]=!0,e},{});var Z=/\/+/;function K(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function Y(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new Q(t,r).match(e))}function Q(e,t){if(!(this instanceof Q))return new Q(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==D.sep&&(e=e.split(D.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function J(e,t){if(t||(t=this instanceof Q?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:N(e)}Y.filter=function(e,t){return t=t||{},function(r,a,n){return Y(r,e,t)}},Y.defaults=function(e){if(!e||!Object.keys(e).length)return Y;var t=Y,r=function(r,a,n){return t.minimatch(r,a,K(e,n))};return r.Minimatch=function(r,a){return new t.Minimatch(r,K(e,a))},r},Q.defaults=function(e){return e&&Object.keys(e).length?Y.defaults(e).Minimatch:Q},Q.prototype.debug=function(){},Q.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(Z)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r},Q.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(this.options.nonegate)return;for(var a=0,n=e.length;a65536)throw new TypeError("pattern is too long");var r=this.options;if(!r.noglobstar&&"**"===e)return G;if(""===e)return"";var a,n="",i=!!r.nocase,o=!1,s=[],l=[],c=!1,u=-1,d=-1,h="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=this;function p(){if(a){switch(a){case"*":n+=F,i=!0;break;case"?":n+=q,i=!0;break;default:n+="\\"+a}f.debug("clearStateChar %j %j",a,n),a=!1}}for(var g,m=0,_=e.length;m<_&&(g=e.charAt(m));m++)if(this.debug("%s\t%s %s %j",e,m,n,g),o&&X[g])n+="\\"+g,o=!1;else switch(g){case"/":return!1;case"\\":p(),o=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,m,n,g),c){this.debug(" in class"),"!"===g&&m===d+1&&(g="^"),n+=g;continue}f.debug("call clearStateChar %j",a),p(),a=g,r.noext&&p();continue;case"(":if(c){n+="(";continue}if(!a){n+="\\(";continue}s.push({type:a,start:m-1,reStart:n.length,open:U[a].open,close:U[a].close}),n+="!"===a?"(?:(?!(?:":"(?:",this.debug("plType %j %j",a,n),a=!1;continue;case")":if(c||!s.length){n+="\\)";continue}p(),i=!0;var b=s.pop();n+=b.close,"!"===b.type&&l.push(b),b.reEnd=n.length;continue;case"|":if(c||!s.length||o){n+="\\|",o=!1;continue}p(),n+="|";continue;case"[":if(p(),c){n+="\\"+g;continue}c=!0,d=m,u=n.length,n+=g;continue;case"]":if(m===d+1||!c){n+="\\"+g,o=!1;continue}if(c)var v,w=e.substring(d+1,m);i=!0,c=!1,n+=g;continue;default:p(),o?o=!1:!X[g]||"^"===g&&c||(n+="\\"),n+=g}c&&(w=e.substr(d+1),v=this.parse(w,ee),n=n.substr(0,u)+"\\["+v[0],i=i||v[1]);for(b=s.pop();b;b=s.pop()){var y=n.slice(b.reStart+b.open.length);this.debug("setting tail",n,b),y=y.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,t,r){return r||(r="\\"),t+t+r+"|"}),this.debug("tail=%j\n %s",y,y,b,n);var k="*"===b.type?F:"?"===b.type?q:"\\"+b.type;i=!0,n=n.slice(0,b.reStart)+k+"\\("+y}p(),o&&(n+="\\\\");var E=!1;switch(n.charAt(0)){case".":case"[":case"(":E=!0}for(var T=l.length-1;T>-1;T--){var x=l[T],N=n.slice(0,x.reStart),A=n.slice(x.reStart,x.reEnd-8),S=n.slice(x.reEnd-8,x.reEnd),C=n.slice(x.reEnd);S+=C;var P=N.split("(").length-1,L=C;for(m=0;m=0&&!(a=e[n]);n--);for(n=0;n>> no match, partial?",e,d,t,h),d!==o))}if("string"==typeof c?(l=a.nocase?u.toLowerCase()===c.toLowerCase():u===c,this.debug("string match",c,u,l)):(l=u.match(c),this.debug("pattern match",c,u,l)),!l)return!1}if(n===o&&i===s)return!0;if(n===o)return r;if(i===s)return n===o-1&&""===e[n];throw new Error("wtf?")};var te=[];var re=Object.freeze({before:function(e,t){te=[],"zhuanlan.zhihu.com"==e&&t.find("a[data-draft-type]").map(function(e,t){var r=$(t.outerHTML);r.find(".LinkCard-meta svg").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")}),"sspai.com"==e&&t.find(".ssApp").map(function(e,t){var r=$($("body").find(".ss-app-card")[e].outerHTML);r.find(".code_box").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")})},specbeautify:function(e,t){switch(e){case"sspai.com":t.find(".relation-apps").remove(),t.find(".ss-app-card").remove();break;case"post.smzdm.com":t.find("img.face").addClass("sr-rd-content-nobeautify"),t.find(".insert-outer img").addClass("sr-rd-content-nobeautify");break;case"infoq.com":t.find("img").map(function(e,t){"left"==$(t).css("float")&&$(t).addClass("sr-rd-content-nobeautify")}),t.find("script").remove();break;case"appinn.com":case"hacpai.com":t.find(".emoji").addClass("sr-rd-content-nobeautify");break;case"douban.com":t.find(".review-content").children().unwrap(),t.find("table").addClass("sr-rd-content-center"),t.find("p").css({"white-space":"pre-wrap"}),t.find(".cc").removeClass();break;case"qdaily.com":t.find("img").map(function(e,t){var r=$(t);0==Number.parseInt(r.css("height"))&&r.remove()}),t.find(".com-insert-images").map(function(e,t){var r=$(t),a=r.find("img").map(function(e,t){return"
"+t.outerHTML+"
"}).get().join("");r.empty().removeAttr("class").append(a)}),t.find(".com-insert-embed").remove();break;case"news.mtime.com":t.find(".newspictool").map(function(e,t){var r=$(t),a=r.find("img"),n=r.find("p:last");r.removeAttr("class").addClass("sr-rd-content-center").empty().append(a).append(n)});break;case"blog.csdn.net":t.find(".save_code").remove(),t.find(".pre-numbering").remove(),t.find("pre").removeAttr("style").removeAttr("class"),t.find("code").removeAttr("style"),t.find(".dp-highlighter").map(function(e,t){$(t).find(".bar .tools").remove(),$(t).next().is("pre")&&$(t).next().remove()});break;case"news.sohu.com":t.find(".conserve-photo").remove(),t.find("table").addClass("sr-rd-content-center");break;case"qq.com":t.find(".rv-root-v2, #backqqcom").remove();break;case"azofreeware.com":t.find("iframe").remove();break;case"apprcn.com":t.find("img").map(function(e,t){var r=$(t),a=r.attr("src");a&&a.includes("Apprcn_Wechat_Small.jpeg")&&r.parent().remove()}),t.find("a").map(function(e,t){var r=$(t);"来自反斗软件"==r.text()&&r.parent().remove()});break;case"tieba.baidu.com":t.find(".BDE_Smiley").addClass("sr-rd-content-nobeautify"),t.find(".replace_div").removeAttr("class").removeAttr("style"),t.find(".replace_tip").remove(),t.find(".d_post_content, .j_d_post_content, .post_bubble_top, .post_bubble_middle, .post_bubble_bottom").map(function(e,t){$(t).removeAttr("class").removeAttr("style")}),$("body").find(".p_author_face").map(function(e,t){var r=$(t).find("img"),a=r.attr("data-tb-lazyload"),n=r.attr("username");a&&$("sr-rd-mult-avatar").find("span").map(function(e,t){var r=$(t);r.text()==n&&r.parent().find("img").attr("src",a)})});break;case"jingyan.baidu.com":t.find(".exp-image-wraper").removeAttr("class").removeAttr("href");break;case"question.zhihu.com":t.find(".zu-edit-button").remove(),t.find("a.external").map(function(e,t){$(t).removeAttr("class").attr("style","border: none;")}),t.find(".VagueImage").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('')});break;case"chiphell.com":t.find("img").map(function(e,t){var r=$(t),a=r.parent(),n=r.attr("src"),i=r.attr("smilieid");a.is("ignore_js_op")&&r.unwrap(),i&&n&&n.includes("static/image/smiley")&&r.addClass("sr-rd-content-nobeautify").attr("style","width: 50px;")}),t.find(".quote").remove();break;case"jiemian.com":t.find("script").remove();break;case"36kr.com":t.find(".load-html-img").removeAttr("class");break;case"cnblogs.com":t.find(".cnblogs_code").removeClass(),t.find(".cnblogs_code_hide").removeClass().removeAttr("style"),t.find(".cnblogs_code_toolbar").remove(),t.find(".code_img_opened").remove(),t.find(".code_img_closed").remove();break;case"news.cnblogs.com":t.find(".topic_img").remove();break;case"g-cores.com":t.find(".swiper-slide-active").find("img").map(function(e,t){var r=$(t);r.parent().parent().parent().parent().parent().parent().removeAttr("class").removeAttr("style").html(r)});break;case"feng.com":case"young.ifeng.com":t.find("span").removeAttr("style");break;case"ftchinese.com":t.find("script").remove();break;case"segmentfault.com":t.find(".widget-codetool").remove();break;case"mp.weixin.qq.com":t.find('section[powered-by="xiumi.us"]').find("img").map(function(e,t){var r=$(t),a=r.attr("data-src");r.addClass("sr-rd-content-nobeautify").attr("src",a)});break;case"ruby-china.org":t.find(".twemoji").remove();break;case"w3cplus.com":t.find("iframe").addClass("sr-rd-content-nobeautify");break;case"zuojj.com":t.find(".syntaxhighlighter .Brush").attr("style","font-size: .7em !important;");break;case"aotu.io":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre"),n=r.find("table");r.html(a[1]),n.unwrap()}),t.find("table").addClass("sr-rd-content-center");break;case"colobu.com":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre");r.html(a[1]),r.unwrap()});break;case"hao.caibaojian.com":t.find(".tlink").map(function(e,t){$(t).html("")});break;case"wkee.net":t.find("script").remove();break;case"linux.cn":t.find("pre").attr("style","background-color: #161b20; background-image: none;"),t.find("code").attr("style","background-color: transparent; background-image: none;");break;case"zhuanlan.zhihu.com":t.find("div[data-src]").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('
')}),$("body img").each(function(e,t){var r=$(t),a=r.parent();if("column-gif"==r.attr("class")&&"GifPlayer"==a.attr("class")){var n=a.parent().prev();if(n.is("noscript")){var i=n.html(),o=$(i),s=o.attr("src"),l=o.attr("data-thumbnail");$('sr-read img[src="'+l+'"]').attr("src",s)}}}),setTimeout(function(){t.find("img").each(function(e,t){$(t).attr("src").endsWith(".gif")&&$(t).parent().next().is("svg")&&$(t).parent().next().remove()})},500);break;case"jianshu.com":t.find(".image-package").map(function(e,t){var r=$(t),a=r.find("img");r.html(a)});break;case"medium.com":t.find("figure").map(function(e,t){var r=$(t),a=r.find("img");r.replaceWith('
')});break;case"worldcup.fifa.com":t.find("iframe").css({width:"790px",height:"450px"}),t.find("div").removeClass()}},removeSpareTag:function(e,t){var r=!1,a="";["lib.csdn.net","huxiu.com","my.oschina.net","caixin.com","163.com","steachs.com","hacpai.com","apprcn.com","mp.weixin.qq.com"].includes(e)?(r=!0,a="p"):["nationalgeographic.com.cn","dgtle.com","news.mtime.com"].includes(e)?(r=!0,a="div"):["chiphell.com"].includes(e)&&(r=!0,a="font"),r&&t.find(a).map(function(e,t){var r=$(t).text().toLowerCase().trim();0==$(t).find("img").length&&""==r&&$(t).remove()})},htmlbeautify:function(e){try{e.html(function(e,t){return t.trim().replace(/<\/?blockquote/g,function(e){return"/"==e[1]?"\n?
(\n?
)*/g,"
").replace(/\/(div|p)>\n*(
\n)+/g,function(e){return e.replace("
","")})})}catch(t){return e.html()}},commbeautify:function(e,t){t.find("img:not(.sr-rd-content-nobeautify)").map(function(e,t){var r=$(t),a=(r.parent(),$("")),n=r.attr("src"),i=r.attr("data-src"),o=r.attr("data-original"),s=r.attr("original"),l=r.attr("data-original-src"),c=r.attr("data-lazy-src"),u=r.attr("real_src"),d=function(){a.removeClass("sr-rd-content-img-load"),a[0].clientWidth<300&&a[0].clientHeight<300?a.parent().removeClass("sr-rd-content-center").addClass("sr-rd-content-center-small"):a[0].clientWidth>1e3?a.css("zoom","0.6"):a[0].clientHeight>620&&/win|mac/i.test(navigator.platform)&&(a.attr("height",620),a[0].clientWidth<$("sr-rd-content").width()&&a.css({width:"auto"})),a[0].clientWidth>$("sr-rd-content").width()&&a.addClass("sr-rd-content-img")},h=function(){a.addClass("simpread-hidden"),a.parent().hasClass("sr-rd-content-center")&&a.parent().removeAttr("class").addClass("simpread-hidden")},f=void 0;r.parent()[0].tagName.toLowerCase(),f=s||n,f=i||f,f=o||f,f=l||f,f=u||f,!(f=c||f)||f.startsWith("http")||f.startsWith("data")||(f=function e(t,r){if("string"!=typeof t||!t)return null;if(t.match(/^[a-z]+\:\/\//i))return t;if(t.match(/^\/\//))return"http:"+t;if(t.match(/^[a-z]+\:/i))return t;var a;if("string"!=typeof r)return(a=document.createElement("a")).href=t,a.pathname?"http://"+t:null;if(null===(r=e(r)))return null;(a=document.createElement("a")).href=r,"/"===t[0]?r=[]:(r=a.pathname.split("/")).pop(),t=t.split("/");for(var n=0;n
"),/win|mac/i.test(navigator.platform)?a.one("load",function(){return d()}).one("error",function(){return h()}):a.on("load",function(){return d()}).on("error",function(){return h()})}),t.find("sr-blockquote").map(function(t,r){var a=$(r),n=a.parent();a.removeAttr("style").removeAttr("class"),"dgtle.com"==e&&n.removeClass("quote")}),t.find("iframe:not(.sr-rd-content-nobeautify), embed:not(.sr-rd-content-nobeautify)").map(function(e,t){$(t).wrap("
")}),t.find("hr").map(function(e,t){$(t).addClass("simpread-hidden")}),t.find("pre").map(function(e,t){$(t).find("code").removeAttr("class")}),t.find("pre").removeAttr("class"),t.find("a").removeAttr("style"),t.find("sr-blocks").map(function(e,t){t.outerHTML=$(te[e]).addClass("simpread-blocks")[0].outerHTML})},cleanHTML:function(e,t,r){t&&e.find("pre").each(function(e,t){var r="",a=!1,n=!1;$(t).find("li").each(function(e,t){$(t).find("code").length>0&&(a=!0),""!=t.outerText.trim()&&(r+=t.outerText.replace(/\n/gi,"").replace(//gi,">")+"\n")}),0==a&&$(t).find("code").each(function(e,t){n=!0,""!=t.outerText.trim()&&(r+=t.outerText.replace(//gi,">")+"\n")}),a||n||(r+=t.outerText.replace(//gi,">")+"\n"),$(t).removeAttr("style").removeAttr("class").removeAttr("id").html(r)});var a,n,i=e.html();"readability-page-1"==$(e.children()).attr("id")&&1==e.children().children().length?i=e.children().children().html():1==e.children().length&&(i=e.children().html()),i=i.replace(//gi,""),e.html((a=i,n="",$.parseHTML(a).forEach(function(e,a){var i=e.tagName,o=e.outerText,s=e.outerHTML;void 0==i?n+="

"+e.textContent.replace(//gi,">").replace(/^\n|\n$/gi,"").trim()+"

":"PRE"==i?n+=s:"sr-blocks"==i.toLowerCase()?n+=s:(""!=o||s.includes("0?t.join("").replace(/, $/,""):null}function se(e,t){var r=Object.keys(t).map(function(e){return t[e]&&e.replace(/[A-Z]/,function(e){return"-"+e.toLowerCase()})+": "+t[e]+";"}).join("");switch(e){case"title":r="sr-rd-title {"+r+"}";break;case"desc":r="sr-rd-desc {"+r+"}";break;case"art":r="sr-rd-content *, sr-rd-content p, sr-rd-content div {"+r+"}";break;case"pre":r="sr-rd-content pre {"+r+"}";break;case"code":r="sr-rd-content pre code, sr-rd-content pre code * {"+r+"}"}var a=$("head").find("style#simpread-custom-"+e);0==a.length?$("head").append('"):a.html(r)}function le(e,t){var r=$("head").find("style#simpread-custom-"+e);0==r.length?$("head").append('"):r.html(t)}var ce=Object.freeze({GetColor:oe,BgColor:function(e,t){var r="rgba("+oe(e)+", "+t/100+")";return $(ne).css(ae,r),r},Opacity:function(e){var t=oe($(ne).css(ae)),r="rgba("+t+", "+e/100+")";return t?($(ne).css(ae,r),r):null},FontFamily:function(e){$("sr-read").css("font-family","default"==e?"":e)},FontSize:function(e){"-1"==ie&&void 0==(ie=$("html").attr("style"))&&(ie=""),e?$("html").attr("style","font-size: "+e+"!important;"+ie):$("html").attr("style",ie)},Layout:function(e){$("sr-read").css("margin",e?"20px "+e:"")},SiteCSS:function(e){e?$("head").append('"):$("#simpread-site-css").remove()},Preview:function(e){Object.keys(e).forEach(function(t){"css"!=t&&se(t,e[t])}),le("css",e.css)},Custom:se,CSS:le,VerifyCustom:function(e,t){switch(e){case"layout":case"margin":case"fontfamily":case"custom":return""!=t.css;case"fontsize":return""!=t.title.fontSize||""!=t.desc.fontSize||""!=t.art.fontSize||""!=t.css;case"theme":return-1!=t.css.search("simpread-theme-root")}}});function ue(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");var r;t=t||{},this._doc=e,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._wrap=null,this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug?(r=function(e){var t=e.nodeName+" ";if(e.nodeType==e.TEXT_NODE)return t+'("'+e.textContent+'")';var r=e.className&&"."+e.className.replace(/ /g,"."),a="";return e.id?a="(#"+e.id+r+")":r&&(a="("+r+")"),t+a},this.log=function(){if("undefined"!=typeof dump){var e=Array.prototype.map.call(arguments,function(e){return e&&e.nodeName?r(e):e}).join(" ");dump("Reader: (Readability) "+e+"\n")}else if("undefined"!=typeof console)["Reader: (Readability) "].concat(arguments)}):this.log=function(){}}ue.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,whitespace:/^\s*$/,hasContent:/\S$/},DIV_TO_P_ELEMS:["A","BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL","SELECT"],ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],_postProcessContent:function(e){this._fixRelativeUris(e),this._cleanClasses(e)},_removeNodes:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r],n=a.parentNode;n&&(t&&!t.call(this,a,r,e)||n.removeChild(a))}},_replaceNodeTags:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r];this._setNodeTag(a,t)}},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map(function(t){return e.call(t)});return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(t){var r=e.getElementsByTagName(t);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,r=(e.getAttribute("class")||"").split(/\s+/).filter(function(e){return-1!=t.indexOf(e)}).join(" ");for(r?e.setAttribute("class",r):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,r=this._doc.documentURI;function a(e){if(t==r&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var n=this._getAllNodesWithTag(e,["a"]);this._forEachNode(n,function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:")){var r=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",a(t))});var i=this._getAllNodesWithTag(e,["img"]);this._forEachNode(i,function(e){var t=e.getAttribute("src");t&&e.setAttribute("src",a(t))})},_getArticleTitle:function(){var e=this._doc,t="",r="";try{"string"!=typeof(t=r=e.title.trim())&&(t=r=this._getInnerText(e.getElementsByTagName("title")[0]))}catch(e){}var a=!1;function n(e){return e.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))a=/ [\\\/>»] /.test(t),n(t=r.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"))<3&&(t=r.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var i=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),o=t.trim();this._someNode(i,function(e){return e.textContent.trim()===o})||(n(t=r.substring(r.lastIndexOf(":")+1))<3?t=r.substring(r.indexOf(":")+1):n(r.substr(0,r.indexOf(":")))>5&&(t=r))}else if(t.length>150||t.length<15){var s=e.getElementsByTagName("h1");1===s.length&&(t=this._getInnerText(s[0]))}var l=n(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!a||l!=n(r.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=r),t},_prepDocument:function(){var e=this._doc;this._removeNodes(e.getElementsByTagName("style")),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(e.getElementsByTagName("font"),"SPAN")},_nextElement:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){for(var t=e.nextSibling,r=!1;(t=this._nextElement(t))&&"BR"==t.tagName;){r=!0;var a=t.nextSibling;t.parentNode.removeChild(t),t=a}if(r){var n=this._doc.createElement("p");for(e.parentNode.replaceChild(n,e),t=n.nextSibling;t;){if("BR"==t.tagName){var i=this._nextElement(t.nextSibling);if(i&&"BR"==i.tagName)break}if(!this._isPhrasingContent(t))break;var o=t.nextSibling;n.appendChild(t),t=o}for(;n.lastChild&&this._isWhitespace(n.lastChild);)n.removeChild(n.lastChild);"P"===n.parentNode.tagName&&this._setNodeTag(n.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),e.__JSDOMParser__)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var r=e.ownerDocument.createElement(t);e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e),e.readability&&(r.readability=e.readability);for(var a=0;a0?r[0].textContent.includes(this._articleTitle):this._articleTitle.includes(r[0].textContent))&&this._clean(e,"h2")}}this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._removeNodes(e.getElementsByTagName("p"),function(e){return 0===e.getElementsByTagName("img").length+e.getElementsByTagName("embed").length+e.getElementsByTagName("object").length+e.getElementsByTagName("iframe").length&&!this._getInnerText(e,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){var t=this._nextElement(e.nextSibling);t&&"P"==t.tagName&&e.parentNode.removeChild(e)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(e){var t=this._hasSingleTagInsideElement(e,"TBODY")?e.firstElementChild:e;if(this._hasSingleTagInsideElement(t,"TR")){var r=t.firstElementChild;if(this._hasSingleTagInsideElement(r,"TD")){var a=r.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),e.parentNode.replaceChild(a,e)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do{e=e.parentNode}while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var r=e.getAttribute("rel"),a=e.getAttribute("itemprop");return!(!("author"===r||a&&-1!==a.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var r=0,a=[];e.parentNode&&(a.push(e.parentNode),!t||++r!==t);)e=e.parentNode;return a},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,r=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var a=e.innerHTML;;){for(var n=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),i=[],o=this._doc.documentElement;o;){var s=o.className+" "+o.id;if(this._isProbablyVisible(o))if(this._checkByline(o,s))o=this._removeAndGetNext(o);else if(!n||!this.REGEXPS.unlikelyCandidates.test(s)||this.REGEXPS.okMaybeItsACandidate.test(s)||this._hasAncestorTag(o,"table")||"BODY"===o.tagName||"A"===o.tagName)if("DIV"!==o.tagName&&"SECTION"!==o.tagName&&"HEADER"!==o.tagName&&"H1"!==o.tagName&&"H2"!==o.tagName&&"H3"!==o.tagName&&"H4"!==o.tagName&&"H5"!==o.tagName&&"H6"!==o.tagName||!this._isElementWithoutContent(o)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(o.tagName)&&i.push(o),"DIV"===o.tagName){for(var l=null,c=o.firstChild;c;){var u=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),o.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=u}if(this._hasSingleTagInsideElement(o,"P")&&this._getLinkDensity(o)<.25){var d=o.children[0];o.parentNode.replaceChild(d,o),o=d,i.push(o)}else this._hasChildBlockElement(o)||(o=this._setNodeTag(o,"P"),i.push(o))}o=this._getNextNode(o)}else o=this._removeAndGetNext(o);else this.log("Removing unlikely candidate - "+s),o=this._removeAndGetNext(o);else this.log("Removing hidden node - "+s),o=this._removeAndGetNext(o)}var h=[];this._forEachNode(i,function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var r=this._getNodeAncestors(e,3);if(0!==r.length){var a=0;a+=1,a+=t.split(",").length,a+=Math.min(Math.floor(t.length/100),3),this._forEachNode(r,function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),h.push(e)),0===t)var r=1;else r=1===t?2:3*t;e.readability.contentScore+=a/r}})}}}});for(var f=[],p=0,g=h.length;pv.readability.contentScore){f.splice(b,0,m),f.length>this._nbTopCandidates&&f.pop();break}}}var w,y=f[0]||null,k=!1;if(null===y||"BODY"===y.tagName){y=t.createElement("DIV"),k=!0;for(var E=e.childNodes;E.length;)this.log("Moving child out:",E[0]),y.appendChild(E[0]);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],x=1;x=.75&&T.push(this._getNodeAncestors(f[x]));if(T.length>=3)for(w=y.parentNode;"BODY"!==w.tagName;){for(var N=0,A=0;A=3){y=w;break}w=w.parentNode}y.readability||this._initializeNode(y),w=y.parentNode;for(var S=y.readability.contentScore,C=S/3;"BODY"!==w.tagName;)if(w.readability){var P=w.readability.contentScore;if(PS){y=w;break}S=w.readability.contentScore,w=w.parentNode}else w=w.parentNode;for(w=y.parentNode;"BODY"!=w.tagName&&1==w.children.length;)w=(y=w).parentNode;y.readability||this._initializeNode(y)}var L=t.createElement("DIV");r&&(L.id="readability-content");for(var j=Math.max(10,.2*y.readability.contentScore),z=(w=y.parentNode).children,M=0,$=z.length;M<$;M++){var B=z[M],I=!1;if(this.log("Looking at sibling node:",B,B.readability?"with score "+B.readability.contentScore:""),this.log("Sibling has score",B.readability?B.readability.contentScore:"Unknown"),B===y)I=!0;else{var O=0;if(B.className===y.className&&""!==y.className&&(O+=.2*y.readability.contentScore),B.readability&&B.readability.contentScore+O>=j)I=!0;else if("P"===B.nodeName){var R=this._getLinkDensity(B),H=this._getInnerText(B),D=H.length;D>80&&R<.25?I=!0:D<80&&D>0&&0===R&&-1!==H.search(/\.( |$)/)&&(I=!0)}}I&&(this.log("Appending node:",B),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(B.nodeName)&&(this.log("Altering sibling:",B,"to div."),B=this._setNodeTag(B,"DIV")),L.appendChild(B),M-=1,$-=1)}if(this._debug&&this.log("Article content pre-prep: "+L.innerHTML),this._prepArticle(L),this._debug&&this.log("Article content post-prep: "+L.innerHTML),k)y.id="readability-page-1",y.className="page";else{var G=t.createElement("DIV");G.id="readability-page-1",G.className="page";var U=L.childNodes;for(this._wrap=L.childNodes[0].outerHTML.replace(L.childNodes[0].innerHTML,"");U.length;)G.appendChild(U[0]);L.appendChild(G)}this._debug&&this.log("Article content after paging: "+L.innerHTML);var q=!0,F=this._getInnerText(L,!0).length;if(F0&&e.length<100)},_getArticleMetadata:function(){var e={},t={},r=this._doc.getElementsByTagName("meta"),a=/\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi,n=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(e){var r=e.getAttribute("name"),i=e.getAttribute("property"),o=e.getAttribute("content");if(o){var s=null,l=null;if(i&&(s=i.match(a)))for(var c=s.length-1;c>=0;c--)l=s[c].toLowerCase().replace(/\s/g,""),t[l]=o.trim();!s&&r&&n.test(r)&&(l=r,o&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),t[l]=o.trim()))}}),e.title=t["dc:title"]||t["dcterm:title"]||t["og:title"]||t["weibo:article:title"]||t["weibo:webpage:title"]||t.title||t["twitter:title"],e.title||(e.title=this._getArticleTitle()),e.byline=t["dc:creator"]||t["dcterm:creator"]||t.author,e.excerpt=t["dc:description"]||t["dcterm:description"]||t["og:description"]||t["weibo:article:description"]||t["weibo:webpage:description"]||t.description||t["twitter:description"],e.siteName=t["og:site_name"],e},_removeScripts:function(e){this._removeNodes(e.getElementsByTagName("script"),function(e){return e.nodeValue="",e.removeAttribute("src"),!0}),this._removeNodes(e.getElementsByTagName("noscript"))},_hasSingleTagInsideElement:function(e,t){return 1==e.children.length&&e.children[0].tagName===t&&!this._someNode(e.childNodes,function(e){return e.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(e.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&0==e.textContent.trim().length&&(0==e.children.length||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(e){return-1!==this.DIV_TO_P_ELEMS.indexOf(e.tagName)||this._hasChildBlockElement(e)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||-1!==this.PHRASING_ELEMS.indexOf(e.tagName)||("A"===e.tagName||"DEL"===e.tagName||"INS"===e.tagName)&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&0===e.textContent.trim().length||e.nodeType===this.ELEMENT_NODE&&"BR"===e.tagName},_getInnerText:function(e,t){t=void 0===t||t;var r=e.textContent.trim();return t?r.replace(this.REGEXPS.normalize," "):r},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(e&&"svg"!==e.tagName.toLowerCase()){for(var t=0;t0&&n>r)return!1;if(e.parentNode.tagName===t&&(!a||a(e.parentNode)))return!0;e=e.parentNode,n++}return!1},_getRowAndColumnCount:function(e){for(var t=0,r=0,a=e.getElementsByTagName("tr"),n=0;n0)a._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some(function(e){return!!a.getElementsByTagName(e)[0]}))this.log("Data table because found data-y descendant"),a._readabilityDataTable=!0;else if(a.getElementsByTagName("table")[0])a._readabilityDataTable=!1;else{var i=this._getRowAndColumnCount(a);i.rows>=10||i.columns>4?a._readabilityDataTable=!0:a._readabilityDataTable=i.rows*i.columns>10}}}else a._readabilityDataTable=!1;else a._readabilityDataTable=!1}},_cleanConditionally:function(e,t){if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)){var r="ul"===t||"ol"===t;this._removeNodes(e.getElementsByTagName(t),function(e){var a=function(e){return e._readabilityDataTable};if("table"===t&&a(e))return!1;if(this._hasAncestorTag(e,"table",-1,a))return!1;var n=this._getClassWeight(e);if(this.log("Cleaning Conditionally",e),n+0<0)return!0;if(this._getCharCount(e,",")<10){for(var i=e.getElementsByTagName("p").length,o=e.getElementsByTagName("img").length,s=e.getElementsByTagName("li").length-100,l=e.getElementsByTagName("input").length,c=0,u=this._concatNodeLists(e.getElementsByTagName("object"),e.getElementsByTagName("embed"),e.getElementsByTagName("iframe")),d=0;d1&&i/o<.5&&!this._hasAncestorTag(e,"figure")||!r&&s>i||l>Math.floor(i/3)||!r&&p<25&&(0===o||o>2)&&!this._hasAncestorTag(e,"figure")||!r&&n<25&&f>.2||n>=25&&f>.5||1===c&&p<75||c>1}return!1})}},_cleanMatchedNodes:function(e,t){for(var r=this._getNextNode(e,!0),a=this._getNextNode(e);a&&a!=r;)a=t(a,a.className+" "+a.id)?this._removeAndGetNext(a):this._getNextNode(a)},_cleanHeaders:function(e){for(var t=1;t<3;t+=1)this._removeNodes(e.getElementsByTagName("h"+t),function(e){return this._getClassWeight(e)<0})},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return!(e.style&&"none"==e.style.display||e.hasAttribute("hidden"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._removeScripts(this._doc),this._prepDocument();var t=this._getArticleMetadata();this._articleTitle=t.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!t.excerpt){var a=r.getElementsByTagName("p");a.length>0&&(t.excerpt=a[0].textContent.trim())}var n=r.textContent;return{title:this._articleTitle,byline:t.byline||this._articleByline,dir:this._articleDir,content:r.innerHTML,wrap:this._wrap,textContent:n,length:n.length,excerpt:t.excerpt,siteName:t.siteName||this._articleSiteName}}};var de=Object.freeze({Readability:ue}),he=r(function(e){(function(){function t(e){var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex:
foo
",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including ``, `` and `` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var a in t)t.hasOwnProperty(a)&&(r[a]=t[a].defaultValue);return r}function r(e,t){var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var o=0;o").replace(/&/g,"&")};var d=function(e,t,r,a){var n,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),h=new RegExp(t,c.replace(/g/g,"")),f=[];do{for(n=0;o=d.exec(e);)if(h.test(o[0]))n++||(s=(i=d.lastIndex)-o[0].length);else if(n&&!--n){l=o.index+o[0].length;var p={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(f.push(p),!u)return f}}while(n&&(d.lastIndex=i));return f};i.helper.matchRecursiveRegExp=function(e,t,r,a){for(var n=d(e,t,r,a),i=[],o=0;o0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var h=0;h=0?a+(r||0):a},i.helper.splitAtIndex=function(e,t){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},i.helper.padEnd=function(e,t,r){return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){alert(e)},log:function(e){alert(e)},error:function(e){throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:':octocat:',showdown:"S"},i.Converter=function(e){function t(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return void function(e,t){"function"==typeof e&&(e=e(new i.Converter)),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var n=0;n[ \t]+¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],a=0;a'}else r.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return r}(r)};!function e(t){for(var r=0;r? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(n||(n=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,i.helper.isUndefined(r.gUrls[n]))return e;o=r.gUrls[n],i.helper.isUndefined(r.gTitles[n])||(c=r.gTitles[n])}var u='"+a+""};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,a,n,o){if("\\"===a)return r+n;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'"+n+""})),r.converter._dispatch("anchors.after",e,t,r)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,p=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,g=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,m=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,_=function(e){return function(t,r,a,n,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",h=r||"",f=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),h+'"+c+""+u+f}},b=function(e,t){return function(r,a,n){var o="mailto:";return a=a||"",n=i.subParser("unescapeSpecialChars")(n,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+n),n=i.helper.encodeEmailAddress(n)):o+=n,a+''+n+""}};i.subParser("autoLinks",function(e,t,r){return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(p,_(t))).replace(m,b(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),i.subParser("simplifiedAutoLinks",function(e,t,r){return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,_(t)):e.replace(h,_(t))).replace(g,b(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),i.subParser("blockGamut",function(e,t,r){return e=r.converter._dispatch("blockGamut.before",e,t,r),e=i.subParser("blockQuotes")(e,t,r),e=i.subParser("headers")(e,t,r),e=i.subParser("horizontalRule")(e,t,r),e=i.subParser("lists")(e,t,r),e=i.subParser("codeBlocks")(e,t,r),e=i.subParser("tables")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),i.subParser("blockQuotes",function(e,t,r){e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=i.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*
[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^  /gm,"¨0")).replace(/¨0/g,"")}),i.subParser("hashBlock")("
\n"+e+"\n
",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),i.subParser("codeBlocks",function(e,t,r){return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,a,n){var o=a,s=n,l="\n";return o=i.subParser("outdent")(o,t,r),o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="
"+o+l+"
",i.subParser("hashBlock")(o,t,r)+s})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),i.subParser("codeSpans",function(e,t,r){return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,a,n,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+""+(s=i.subParser("encodeCode")(s,t,r))+"",i.subParser("hashHTMLSpans")(s,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),i.subParser("completeHTMLDocument",function(e,t,r){if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var a="html",n="\n",i="",o='\n',s="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(n="\n","html"!==(a=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i=""+r.metadata.parsed.title+"\n";break;case"charset":o="html"===a||"html5"===a?'\n':'\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=n+"\n\n"+i+o+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),i.subParser("detab",function(e,t,r){return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,a=4-r.length%4,n=0;n/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),i.subParser("encodeBackslashEscapes",function(e,t,r){return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),i.subParser("encodeCode",function(e,t,r){return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),i.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),i.subParser("githubCodeBlocks",function(e,t,r){return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,a,n,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),o="
"+o+s+"
",o=i.subParser("hashBlock")(o,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),i.subParser("hashBlock",function(e,t,r){return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),i.subParser("hashCodeTags",function(e,t,r){return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=i.helper.replaceRecursiveRegExp(e,function(e,a,n,o){var s=n+i.subParser("encodeCode")(a,t,r)+o;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"},"]*>","","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),i.subParser("hashElement",function(e,t,r){return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"}}),i.subParser("hashHTMLBlocks",function(e,t,r){e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],n=function(e,t,a,n){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+r.converter.makeHtml(t)+n),"\n\n¨K"+(r.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var o=0;o]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),h=i.helper.replaceRecursiveRegExp(d[1],n,c,u,"im");if(h===d[1])break;e=d[0].concat(h)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),e=(e=i.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),i.subParser("hashHTMLSpans",function(e,t,r){function a(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return a(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<[^>]+?>/gi,function(e){return a(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),i.subParser("unhashHTMLSpans",function(e,t,r){e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var a=0;a]*>\\s*]*>","^ {0,3}\\s*
","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),i.subParser("headers",function(e,t,r){function a(e){var a,n;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,n=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=n+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=n+a),r.hashLinkCounts[a]?a=a+"-"+r.hashLinkCounts[a]++:r.hashLinkCounts[a]=1,a}e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=""+s+"";return i.subParser("hashBlock")(c,t,r)})).replace(s,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=n+1,u=""+s+"";return i.subParser("hashBlock")(u,t,r)});var l=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return e=e.replace(l,function(e,o,s){var l=s;t.customizedHeaderId&&(l=s.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(l,t,r),u=t.noHeaderId?"":' id="'+a(s)+'"',d=n-1+o.length,h=""+c+"";return i.subParser("hashBlock")(h,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),i.subParser("horizontalRule",function(e,t,r){e=r.converter._dispatch("horizontalRule.before",e,t,r);var a=i.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),r.converter._dispatch("horizontalRule.after",e,t,r)}),i.subParser("images",function(e,t,r){function a(e,t,a,n,o,s,l,c){var u=r.gUrls,d=r.gTitles,h=r.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)n="";else if(""===n||null===n){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),n="#"+a,i.helper.isUndefined(u[a]))return e;n=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(h[a])||(o=h[a].width,s=h[a].height)}t=t.replace(/"/g,""").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var f=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,n,i,o,s,l){return a(e,t,r,n=n.replace(/\s/g,""),i,o,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),r.converter._dispatch("images.after",e,t,r)}),i.subParser("italicsAndBold",function(e,t,r){function a(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return a(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return a(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return a(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),i.subParser("lists",function(e,t,r){function a(e,a){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(n,function(e,a,n,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,r),h="";return c&&t.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,r),d=i.subParser("blockGamut")(d,t,r)):(d=(d=i.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,r):i.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function n(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function o(e,r,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),h=n(e,r);-1!==d?(c+="\n\n<"+r+h+">\n"+a(u.slice(0,d),!!i)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+r+h+">\n"+a(u,!!i)+"\n"}(e);else{var u=n(e,r);c="\n\n<"+r+u+">\n"+a(e,!!i)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return o(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,a){return o(r,a.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),i.subParser("metadata",function(e,t,r){function a(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,a){return r.metadata.parsed[t]=a,""})}return t.metadata?(e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return a(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,n){return t&&(r.metadata.format=t),a(n),"¨M"})).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)):e}),i.subParser("outdent",function(e,t,r){return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),i.subParser("paragraphs",function(e,t,r){for(var a=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),n=[],o=a.length,s=0;s=0?n.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",n.push(l))}for(o=n.length,s=0;s]*>\s*]*>/.test(u)&&(d=!0)}n[s]=u}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),i.subParser("runExtension",function(e,t,r,a){if(e.filter)t=e.filter(t,a.converter,r);else if(e.regex){var n=e.regex;n instanceof RegExp||(n=new RegExp(n,"g")),t=t.replace(n,e.replace)}return t}),i.subParser("spanGamut",function(e,t,r){return e=r.converter._dispatch("spanGamut.before",e,t,r),e=i.subParser("codeSpans")(e,t,r),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=i.subParser("encodeBackslashEscapes")(e,t,r),e=i.subParser("images")(e,t,r),e=i.subParser("anchors")(e,t,r),e=i.subParser("autoLinks")(e,t,r),e=i.subParser("simplifiedAutoLinks")(e,t,r),e=i.subParser("emoji")(e,t,r),e=i.subParser("underline")(e,t,r),e=i.subParser("italicsAndBold")(e,t,r),e=i.subParser("strikethrough")(e,t,r),e=i.subParser("ellipsis")(e,t,r),e=i.subParser("hashHTMLSpans")(e,t,r),e=i.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),i.subParser("strikethrough",function(e,t,r){return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(a)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),i.subParser("stripLinkDefinitions",function(e,t,r){var a=function(e,a,n,o,s,l,c){return a=a.toLowerCase(),n.match(/^data:.+?\/.+?;base64,/)?r.gUrls[a]=n.replace(/\s/g,""):r.gUrls[a]=i.subParser("encodeAmpsAndAngles")(n,t,r),l?l+c:(c&&(r.gTitles[a]=c.replace(/"|'/g,""")),t.parseImgDimensions&&o&&s&&(r.gDimensions[a]={width:o,height:s}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,a)).replace(/¨0/,"")}),i.subParser("tables",function(e,t,r){function a(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function n(e,a){var n="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(n=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),""+(e=i.subParser("spanGamut")(e,t,r))+"\n"}function o(e,a){return""+i.subParser("spanGamut")(e,t,r)+"\n"}function s(e){var s,l=e.split("\n");for(s=0;s\n\n\n",n=0;n\n";for(var i=0;i\n"}return r+"\n\n"}(h,p)}return t.tables?(e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,s),r.converter._dispatch("tables.after",e,t,r)):e}),i.subParser("underline",function(e,t,r){return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,i.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),i.subParser("unescapeSpecialChars",function(e,t,r){return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),i.subParser("makeMarkdown.blockquote",function(e,t){var r="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,o=0;o "+(r=r.trim()).split("\n").join("\n> ")}),i.subParser("makeMarkdown.codeBlock",function(e,t){var r=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[a]+"\n```"}),i.subParser("makeMarkdown.codeSpan",function(e){return"`"+e.innerHTML+"`"}),i.subParser("makeMarkdown.emphasis",function(e,t){var r="";if(e.hasChildNodes()){r+="*";for(var a=e.childNodes,n=a.length,o=0;o",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),i.subParser("makeMarkdown.links",function(e,t){var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,n=a.length;r="[";for(var o=0;o",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),i.subParser("makeMarkdown.list",function(e,t,r){var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,s=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),i.subParser("makeMarkdown.strikethrough",function(e,t){var r="";if(e.hasChildNodes()){r+="~~";for(var a=e.childNodes,n=a.length,o=0;otr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=g)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),e.exports?e.exports=i:this.showdown=i}).call(t)}),fe={pangu:n,minimatch:H,beautify:re,style:ce,rdability:de,markdown:Object.freeze({default:he,__moduleExports:he})};e.Plugin=function(e){return void 0==e?fe:fe[e]},Object.defineProperty(e,"__esModule",{value:!0})}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.puplugin={})}(this,function(e){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(e,t){return e(t={exports:{}},t.exports),t.exports}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=r(function(e,t){e.exports=function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n=function(){function e(e,t){for(var r=0;r=0||t.isContentEditable||"true"===t.getAttribute("g_editable"))return!0;t=t.parentNode}return!1}},{key:"isFirstTextChild",value:function(e,t){for(var r=e.childNodes,a=0;a-1;a--){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"spacingNodeByXPath",value:function(e,t){for(var r=document.evaluate(e,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),a=void 0,n=void 0,i=r.snapshotLength-1;i>-1;--i)if(a=r.snapshotItem(i),this.canIgnoreNode(a))n=a;else{var o=this.spacing(a.data);if(a.data!==o&&(a.data=o),n){if(a.nextSibling&&a.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}var s=a.data.toString().substr(-1)+n.data.toString().substr(0,1),l=this.spacing(s);if(l!==s){for(var c=n;c.parentNode&&-1===c.nodeName.search(this.spaceSensitiveTags)&&this.isFirstTextChild(c.parentNode,c);)c=c.parentNode;for(var u=a;u.parentNode&&-1===u.nodeName.search(this.spaceSensitiveTags)&&this.isLastTextChild(u.parentNode,u);)u=u.parentNode;if(u.nextSibling&&u.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}if(-1===u.nodeName.search(this.blockTags))if(-1===c.nodeName.search(this.spaceSensitiveTags))-1===c.nodeName.search(this.ignoreTags)&&-1===c.nodeName.search(this.blockTags)&&(n.previousSibling?-1===n.previousSibling.nodeName.search(this.spaceLikeTags)&&(n.data=" "+n.data):this.canIgnoreNode(n)||(n.data=" "+n.data));else if(-1===u.nodeName.search(this.spaceSensitiveTags))a.data=a.data+" ";else{var d=document.createElement("pangu");d.innerHTML=" ",c.previousSibling?-1===c.previousSibling.nodeName.search(this.spaceLikeTags)&&c.parentNode.insertBefore(d,c):c.parentNode.insertBefore(d,c),d.previousElementSibling||d.parentNode&&d.parentNode.removeChild(d)}}}n=a}}},{key:"spacingNode",value:function(e){this.spacingNodeByXPath(".//*/text()[normalize-space(.)]",e)}},{key:"spacingElementById",value:function(e){var t='id("'+e+'")//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByClassName",value:function(e){var t='//*[contains(concat(" ", normalize-space(@class), " "), "'+e+'")]//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByTagName",value:function(e){var t="//"+e+"//text()";this.spacingNodeByXPath(t,document)}},{key:"spacingPageTitle",value:function(){this.spacingNodeByXPath("/html/head/title/text()",document)}},{key:"spacingPageBody",value:function(){for(var e="/html/body//*/text()[normalize-space(.)]",t=["script","style","textarea"],r=0;r])([A-Za-z0-9])/g,d=/([A-Za-z0-9])([\+\-\*\/=&\\|<>])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,h=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c]+(.*?)[\)\]\}>\u201d]+)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,f=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c>])/g,p=/([\)\]\}>\u201d<])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,g=/([\(\[\{<\u201c]+)(\s*)(.+?)(\s*)([\)\]\}>\u201d]+)/,m=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([~!;:,\.\?\u2026])([A-Za-z0-9])/g,_=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([A-Za-z0-9`\$%\^&\*\-=\+\\\|\/@\u00a1-\u00ff\u2022\u2027\u2150-\u218f])/g,b=/([A-Za-z0-9`~\$%\^&\*\-=\+\\\|\/!;:,\.\?\u00a1-\u00ff\u2022\u2026\u2027\u2150-\u218f])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,v=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return r(e,[{key:"spacing",value:function(e){var t=e,r=t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(a,"$1 $2")).replace(n,"$1 $2")).replace(i,"$1$3$5")).replace(o,"$1$3$4")).replace(s,"$1 $2$3$4 $5")).replace(l,"$1 $2")).replace(c,"$1 $3")).replace(u,"$1 $2 $3")).replace(d,"$1 $2 $3"),v=t.replace(h,"$1 $2 $4");return t=v,r===v&&(t=(t=t.replace(f,"$1 $2")).replace(p,"$1 $2")),t=(t=(t=(t=t.replace(g,"$1$3$5")).replace(m,"$1$2 $3")).replace(_,"$1 $2")).replace(b,"$1 $2")}},{key:"spacingText",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];try{var r=this.spacing(e);t(null,r)}catch(e){t(e)}}}]),e}(),w=new v;(e.exports=w).Pangu=v}])});n.pangu;function i(e,t){for(var r=0,a=e.length-1;a>=0;a--){var n=e[a];"."===n?e.splice(a,1):".."===n?(e.splice(a,1),r++):r&&(e.splice(a,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(e){return o.exec(e).slice(1)};function l(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,t="/"===a.charAt(0))}return e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"),(t?"/":"")+e||"."}function c(e){var t=u(e),r="/"===b(e,-1);return(e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e}function u(e){return"/"===e.charAt(0)}function d(){return c(_(Array.prototype.slice.call(arguments,0),function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function h(e,t){function r(e){for(var t=0;t=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=l(e).substr(1),t=l(t).substr(1);for(var a=r(e.split("/")),n=r(t.split("/")),i=Math.min(a.length,n.length),o=i,s=0;s=0&&c>0){for(a=[],i=r.length;u>=0&&!s;)u==l?(a.push(u),l=r.indexOf(e,u+1)):1==a.length?s=[a.pop(),c]:((n=a.pop())=0?l:c;a.length&&(s=[i,o])}return s}E.range=x;var N=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(t,r){var a=[];var n=k("{","}",t);if(!n||/\$$/.test(n.pre))return[t];var i=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(n.body);var o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(n.body);var s=i||o;var l=n.body.indexOf(",")>=0;if(!s&&!l)return n.post.match(/,.*\}/)?(t=n.pre+"{"+n.body+S+n.post,e(t)):[t];var c;if(s)c=n.body.split(/\.\./);else if(1===(c=function e(t){if(!t)return[""];var r=[];var a=k("{","}",t);if(!a)return t.split(",");var n=a.pre;var i=a.body;var o=a.post;var s=n.split(",");s[s.length-1]+="{"+i+"}";var l=e(o);o.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l));r.push.apply(r,s);return r}(n.body)).length&&1===(c=e(c[0],!1).map(M)).length){var u=n.post.length?e(n.post,!1):[""];return u.map(function(e){return n.pre+c[0]+e})}var d=n.pre;var u=n.post.length?e(n.post,!1):[""];var h;if(s){var f=j(c[0]),p=j(c[1]),g=Math.max(c[0].length,c[1].length),m=3==c.length?Math.abs(j(c[2])):1,_=I,b=p0){var x=new Array(T+1).join("0");E=y<0?"-"+x+E.slice(1):x+E}}h.push(E)}}else h=w(c,function(t){return e(t,!1)});for(var N=0;N=t}var H=v&&m||v,R=Y;Y.Minimatch=Q;var D={sep:"/"};try{D=H}catch(e){}var G=Y.GLOBSTAR=Q.GLOBSTAR={},q={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},U="[^/]",F=U+"*?",V="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",W="(?:(?!(?:\\/|^)\\.).)*?",X="().*{}+?[]^$\\!".split("").reduce(function(e,t){return e[t]=!0,e},{});var Z=/\/+/;function K(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function Y(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new Q(t,r).match(e))}function Q(e,t){if(!(this instanceof Q))return new Q(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==D.sep&&(e=e.split(D.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function J(e,t){if(t||(t=this instanceof Q?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:N(e)}Y.filter=function(e,t){return t=t||{},function(r,a,n){return Y(r,e,t)}},Y.defaults=function(e){if(!e||!Object.keys(e).length)return Y;var t=Y,r=function(r,a,n){return t.minimatch(r,a,K(e,n))};return r.Minimatch=function(r,a){return new t.Minimatch(r,K(e,a))},r},Q.defaults=function(e){return e&&Object.keys(e).length?Y.defaults(e).Minimatch:Q},Q.prototype.debug=function(){},Q.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(Z)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r},Q.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(this.options.nonegate)return;for(var a=0,n=e.length;a65536)throw new TypeError("pattern is too long");var r=this.options;if(!r.noglobstar&&"**"===e)return G;if(""===e)return"";var a,n="",i=!!r.nocase,o=!1,s=[],l=[],c=!1,u=-1,d=-1,h="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=this;function p(){if(a){switch(a){case"*":n+=F,i=!0;break;case"?":n+=U,i=!0;break;default:n+="\\"+a}f.debug("clearStateChar %j %j",a,n),a=!1}}for(var g,m=0,_=e.length;m<_&&(g=e.charAt(m));m++)if(this.debug("%s\t%s %s %j",e,m,n,g),o&&X[g])n+="\\"+g,o=!1;else switch(g){case"/":return!1;case"\\":p(),o=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,m,n,g),c){this.debug(" in class"),"!"===g&&m===d+1&&(g="^"),n+=g;continue}f.debug("call clearStateChar %j",a),p(),a=g,r.noext&&p();continue;case"(":if(c){n+="(";continue}if(!a){n+="\\(";continue}s.push({type:a,start:m-1,reStart:n.length,open:q[a].open,close:q[a].close}),n+="!"===a?"(?:(?!(?:":"(?:",this.debug("plType %j %j",a,n),a=!1;continue;case")":if(c||!s.length){n+="\\)";continue}p(),i=!0;var b=s.pop();n+=b.close,"!"===b.type&&l.push(b),b.reEnd=n.length;continue;case"|":if(c||!s.length||o){n+="\\|",o=!1;continue}p(),n+="|";continue;case"[":if(p(),c){n+="\\"+g;continue}c=!0,d=m,u=n.length,n+=g;continue;case"]":if(m===d+1||!c){n+="\\"+g,o=!1;continue}if(c)var v,w=e.substring(d+1,m);i=!0,c=!1,n+=g;continue;default:p(),o?o=!1:!X[g]||"^"===g&&c||(n+="\\"),n+=g}c&&(w=e.substr(d+1),v=this.parse(w,ee),n=n.substr(0,u)+"\\["+v[0],i=i||v[1]);for(b=s.pop();b;b=s.pop()){var y=n.slice(b.reStart+b.open.length);this.debug("setting tail",n,b),y=y.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,t,r){return r||(r="\\"),t+t+r+"|"}),this.debug("tail=%j\n %s",y,y,b,n);var k="*"===b.type?F:"?"===b.type?U:"\\"+b.type;i=!0,n=n.slice(0,b.reStart)+k+"\\("+y}p(),o&&(n+="\\\\");var E=!1;switch(n.charAt(0)){case".":case"[":case"(":E=!0}for(var T=l.length-1;T>-1;T--){var x=l[T],N=n.slice(0,x.reStart),C=n.slice(x.reStart,x.reEnd-8),A=n.slice(x.reEnd-8,x.reEnd),S=n.slice(x.reEnd);A+=S;var P=N.split("(").length-1,L=S;for(m=0;m=0&&!(a=e[n]);n--);for(n=0;n>> no match, partial?",e,d,t,h),d!==o))}if("string"==typeof c?(l=a.nocase?u.toLowerCase()===c.toLowerCase():u===c,this.debug("string match",c,u,l)):(l=u.match(c),this.debug("pattern match",c,u,l)),!l)return!1}if(n===o&&i===s)return!0;if(n===o)return r;if(i===s)return n===o-1&&""===e[n];throw new Error("wtf?")};var te=[];var re=Object.freeze({before:function(e,t){te=[],"zhuanlan.zhihu.com"==e&&t.find("a[data-draft-type]").map(function(e,t){var r=$(t.outerHTML);r.find(".LinkCard-meta svg").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")}),"sspai.com"==e&&t.find(".ssApp").map(function(e,t){var r=$($("body").find(".ss-app-card")[e].outerHTML);r.find(".code_box").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")}),"question.zhihu.com"==e&&t.find(".RichText-MCNLinkCardContainer").map(function(e,t){var r=$($("body").find(".RichText-MCNLinkCardContainer")[e].outerHTML);te[e]=r[0].outerHTML,$(t).replaceWith("")}),"post.smzdm.com"==e&&t.find(".embed-card").map(function(e,t){var r=$($("body").find(".embed-card")[e].outerHTML);te[e]=r[0].outerHTML,$(t).parent().replaceWith("")})},specbeautify:function(e,t){switch(e){case"sspai.com":t.find(".relation-apps").remove(),t.find(".ss-app-card").remove();break;case"post.smzdm.com":t.find("img.face").addClass("sr-rd-content-nobeautify"),t.find(".insert-outer img").addClass("sr-rd-content-nobeautify");break;case"infoq.com":t.find("img").map(function(e,t){"left"==$(t).css("float")&&$(t).addClass("sr-rd-content-nobeautify")}),t.find("script").remove();break;case"appinn.com":case"hacpai.com":t.find(".emoji").addClass("sr-rd-content-nobeautify");break;case"douban.com":t.find(".review-content").children().unwrap(),t.find("table").addClass("sr-rd-content-center"),t.find("p").css({"white-space":"pre-wrap"}),t.find(".cc").removeClass();break;case"qdaily.com":t.find("img").map(function(e,t){var r=$(t);0==Number.parseInt(r.css("height"))&&r.remove()}),t.find(".com-insert-images").map(function(e,t){var r=$(t),a=r.find("img").map(function(e,t){return"
"+t.outerHTML+"
"}).get().join("");r.empty().removeAttr("class").append(a)}),t.find(".com-insert-embed").remove();break;case"news.mtime.com":t.find(".newspictool").map(function(e,t){var r=$(t),a=r.find("img"),n=r.find("p:last");r.removeAttr("class").addClass("sr-rd-content-center").empty().append(a).append(n)});break;case"blog.csdn.net":t.find(".save_code").remove(),t.find(".pre-numbering").remove(),t.find("pre").removeAttr("style").removeAttr("class"),t.find("code").removeAttr("style"),t.find(".dp-highlighter").map(function(e,t){$(t).find(".bar .tools").remove(),$(t).next().is("pre")&&$(t).next().remove()});break;case"news.sohu.com":t.find(".conserve-photo").remove(),t.find("table").addClass("sr-rd-content-center");break;case"qq.com":t.find(".rv-root-v2, #backqqcom").remove();break;case"azofreeware.com":t.find("iframe").remove();break;case"apprcn.com":t.find("img").map(function(e,t){var r=$(t),a=r.attr("src");a&&a.includes("Apprcn_Wechat_Small.jpeg")&&r.parent().remove()}),t.find("a").map(function(e,t){var r=$(t);"来自反斗软件"==r.text()&&r.parent().remove()});break;case"tieba.baidu.com":t.find(".BDE_Smiley").addClass("sr-rd-content-nobeautify"),t.find(".replace_div").removeAttr("class").removeAttr("style"),t.find(".replace_tip").remove(),t.find(".d_post_content, .j_d_post_content, .post_bubble_top, .post_bubble_middle, .post_bubble_bottom").map(function(e,t){$(t).removeAttr("class").removeAttr("style")}),$("body").find(".p_author_face").map(function(e,t){var r=$(t).find("img"),a=r.attr("data-tb-lazyload"),n=r.attr("username");a&&$("sr-rd-mult-avatar").find("span").map(function(e,t){var r=$(t);r.text()==n&&r.parent().find("img").attr("src",a)})});break;case"jingyan.baidu.com":t.find(".exp-image-wraper").removeAttr("class").removeAttr("href");break;case"question.zhihu.com":t.find(".zu-edit-button").remove(),t.find("a.external").map(function(e,t){$(t).removeAttr("class").attr("style","border: none;")}),t.find(".VagueImage").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('')});break;case"chiphell.com":t.find("img").map(function(e,t){var r=$(t),a=r.parent(),n=r.attr("src"),i=r.attr("smilieid");a.is("ignore_js_op")&&r.unwrap(),i&&n&&n.includes("static/image/smiley")&&r.addClass("sr-rd-content-nobeautify").attr("style","width: 50px;")}),t.find(".quote").remove();break;case"jiemian.com":t.find("script").remove();break;case"36kr.com":t.find(".load-html-img").removeAttr("class");break;case"cnblogs.com":t.find(".cnblogs_code").removeClass(),t.find(".cnblogs_code_hide").removeClass().removeAttr("style"),t.find(".cnblogs_code_toolbar").remove(),t.find(".code_img_opened").remove(),t.find(".code_img_closed").remove();break;case"news.cnblogs.com":t.find(".topic_img").remove();break;case"g-cores.com":t.find(".swiper-slide-active").find("img").map(function(e,t){var r=$(t);r.parent().parent().parent().parent().parent().parent().removeAttr("class").removeAttr("style").html(r)});break;case"feng.com":case"young.ifeng.com":t.find("span").removeAttr("style");break;case"ftchinese.com":t.find("script").remove();break;case"segmentfault.com":t.find(".widget-codetool").remove();break;case"mp.weixin.qq.com":t.find('section[powered-by="xiumi.us"]').find("img").map(function(e,t){var r=$(t),a=r.attr("data-src");r.addClass("sr-rd-content-nobeautify").attr("src",a)});break;case"ruby-china.org":t.find(".twemoji").remove();break;case"w3cplus.com":t.find("iframe").addClass("sr-rd-content-nobeautify");break;case"zuojj.com":t.find(".syntaxhighlighter .Brush").attr("style","font-size: .7em !important;");break;case"aotu.io":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre"),n=r.find("table");r.html(a[1]),n.unwrap()}),t.find("table").addClass("sr-rd-content-center");break;case"colobu.com":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre");r.html(a[1]),r.unwrap()});break;case"hao.caibaojian.com":t.find(".tlink").map(function(e,t){$(t).html("")});break;case"wkee.net":t.find("script").remove();break;case"linux.cn":t.find("pre").attr("style","background-color: #161b20; background-image: none;"),t.find("code").attr("style","background-color: transparent; background-image: none;");break;case"zhuanlan.zhihu.com":t.find("div[data-src]").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('
')}),$("body img").each(function(e,t){var r=$(t),a=r.parent();if("column-gif"==r.attr("class")&&"GifPlayer"==a.attr("class")){var n=a.parent().prev();if(n.is("noscript")){var i=n.html(),o=$(i),s=o.attr("src"),l=o.attr("data-thumbnail");$('sr-read img[src="'+l+'"]').attr("src",s)}}}),setTimeout(function(){t.find("img").each(function(e,t){$(t).attr("src").endsWith(".gif")&&$(t).parent().next().is("svg")&&$(t).parent().next().remove()})},500);break;case"jianshu.com":t.find(".image-package").map(function(e,t){var r=$(t),a=r.find("img");r.html(a)});break;case"medium.com":t.find("figure").map(function(e,t){var r=$(t),a=r.find("img");r.replaceWith('
')});break;case"worldcup.fifa.com":t.find("iframe").css({width:"790px",height:"450px"}),t.find("div").removeClass()}},removeSpareTag:function(e,t){var r=!1,a="";["lib.csdn.net","huxiu.com","my.oschina.net","caixin.com","163.com","steachs.com","hacpai.com","apprcn.com","mp.weixin.qq.com"].includes(e)?(r=!0,a="p"):["nationalgeographic.com.cn","dgtle.com","news.mtime.com"].includes(e)?(r=!0,a="div"):["chiphell.com"].includes(e)&&(r=!0,a="font"),r&&t.find(a).map(function(e,t){var r=$(t).text().toLowerCase().trim();0==$(t).find("img").length&&""==r&&$(t).remove()})},htmlbeautify:function(e){try{e.html(function(e,t){return t.trim().replace(/<\/?blockquote/g,function(e){return"/"==e[1]?"\n?
(\n?
)*/g,"
").replace(/\/(div|p)>\n*(
\n)+/g,function(e){return e.replace("
","")})})}catch(t){return e.html()}},commbeautify:function(e,t){t.find("img:not(.sr-rd-content-nobeautify)").map(function(e,t){var r=$(t),a=(r.parent(),$("")),n=r.attr("src"),i=r.attr("data-src"),o=r.attr("data-original"),s=r.attr("original"),l=r.attr("data-original-src"),c=r.attr("data-lazy-src"),u=r.attr("real_src"),d=function(){a.removeClass("sr-rd-content-img-load"),a[0].clientWidth<300&&a[0].clientHeight<300?a.parent().removeClass("sr-rd-content-center").addClass("sr-rd-content-center-small"):a[0].clientWidth>1e3?a.css("zoom","0.6"):a[0].clientHeight>620&&/win|mac/i.test(navigator.platform)&&(a.attr("height",620),a[0].clientWidth<$("sr-rd-content").width()&&a.css({width:"auto"})),a[0].clientWidth>$("sr-rd-content").width()&&a.addClass("sr-rd-content-img")},h=function(){a.addClass("simpread-hidden"),a.parent().hasClass("sr-rd-content-center")&&a.parent().removeAttr("class").addClass("simpread-hidden")},f=void 0;r.parent()[0].tagName.toLowerCase(),f=s||n,f=i||f,f=o||f,f=l||f,f=u||f,!(f=c||f)||f.startsWith("http")||f.startsWith("data")||(f=function e(t,r){if("string"!=typeof t||!t)return null;if(t.match(/^[a-z]+\:\/\//i))return t;if(t.match(/^\/\//))return"http:"+t;if(t.match(/^[a-z]+\:/i))return t;var a;if("string"!=typeof r)return(a=document.createElement("a")).href=t,a.pathname?"http://"+t:null;if(null===(r=e(r)))return null;(a=document.createElement("a")).href=r,"/"===t[0]?r=[]:(r=a.pathname.split("/")).pop(),t=t.split("/");for(var n=0;n"),/win|mac/i.test(navigator.platform)?a.one("load",function(){return d()}).one("error",function(){return h()}):a.on("load",function(){return d()}).on("error",function(){return h()})}),t.find("sr-blockquote").map(function(t,r){var a=$(r),n=a.parent();a.removeAttr("style").removeAttr("class"),"dgtle.com"==e&&n.removeClass("quote")}),t.find("iframe:not(.sr-rd-content-nobeautify), embed:not(.sr-rd-content-nobeautify)").map(function(e,t){$(t).wrap("
")}),t.find("hr").map(function(e,t){$(t).addClass("simpread-hidden")}),t.find("pre").map(function(e,t){$(t).find("code").removeAttr("class")}),t.find("pre").removeAttr("class"),t.find("a").removeAttr("style"),t.find("sr-blocks").map(function(e,t){t.outerHTML=$(te[e]).addClass("simpread-blocks")[0].outerHTML})},cleanHTML:function(e,t,r){t&&e.find("pre").each(function(e,t){var r="",a=!1,n=!1;$(t).find("li").each(function(e,t){$(t).find("code").length>0&&(a=!0),""!=t.outerText.trim()&&(r+=t.outerText.replace(/\n/gi,"").replace(//gi,">")+"\n")}),0==a&&$(t).find("code").each(function(e,t){n=!0,""!=t.outerText.trim()&&(r+=t.outerText.replace(//gi,">")+"\n")}),a||n||(r+=t.outerText.replace(//gi,">")+"\n"),$(t).removeAttr("style").removeAttr("class").removeAttr("id").html(r)});var a,n,i=e.html();"readability-page-1"==$(e.children()).attr("id")&&1==e.children().children().length?i=e.children().children().html():1==e.children().length&&(i=e.children().html()),i=i.replace(//gi,""),e.html((a=i,n="",$.parseHTML(a).forEach(function(e,a){var i=e.tagName,o=e.outerText,s=e.outerHTML;void 0==i?n+="

"+e.textContent.replace(//gi,">").replace(/^\n|\n$/gi,"").trim()+"

":"PRE"==i?n+=s:"sr-blocks"==i.toLowerCase()?n+=s:(""!=o||s.includes("0?t.join("").replace(/, $/,""):null}function se(e,t){var r=Object.keys(t).map(function(e){return t[e]&&e.replace(/[A-Z]/,function(e){return"-"+e.toLowerCase()})+": "+t[e]+";"}).join("");switch(e){case"title":r="sr-rd-title {"+r+"}";break;case"desc":r="sr-rd-desc {"+r+"}";break;case"art":r="sr-rd-content *, sr-rd-content p, sr-rd-content div {"+r+"}";break;case"pre":r="sr-rd-content pre {"+r+"}";break;case"code":r="sr-rd-content pre code, sr-rd-content pre code * {"+r+"}"}var a=$("head").find("style#simpread-custom-"+e);0==a.length?$("head").append('"):a.html(r)}function le(e,t){var r=$("head").find("style#simpread-custom-"+e);0==r.length?$("head").append('"):r.html(t)}var ce=Object.freeze({GetColor:oe,BgColor:function(e,t){var r="rgba("+oe(e)+", "+t/100+")";return $(ne).css(ae,r),r},Opacity:function(e){var t=oe($(ne).css(ae)),r="rgba("+t+", "+e/100+")";return t?($(ne).css(ae,r),r):null},FontFamily:function(e){$("sr-read").css("font-family","default"==e?"":e)},FontSize:function(e){"-1"==ie&&void 0==(ie=$("html").attr("style"))&&(ie=""),e?$("html").attr("style","font-size: "+e+"!important;"+ie):$("html").attr("style",ie)},Layout:function(e){$("sr-read").css("margin",e?"20px "+e:"")},SiteCSS:function(e){e?$("head").append('"):$("#simpread-site-css").remove()},Preview:function(e){Object.keys(e).forEach(function(t){"css"!=t&&se(t,e[t])}),le("css",e.css)},Custom:se,CSS:le,VerifyCustom:function(e,t){switch(e){case"layout":case"margin":case"fontfamily":case"custom":return""!=t.css;case"fontsize":return""!=t.title.fontSize||""!=t.desc.fontSize||""!=t.art.fontSize||""!=t.css;case"theme":return-1!=t.css.search("simpread-theme-root")}}});function ue(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");var r;t=t||{},this._doc=e,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._wrap=null,this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug?(r=function(e){var t=e.nodeName+" ";if(e.nodeType==e.TEXT_NODE)return t+'("'+e.textContent+'")';var r=e.className&&"."+e.className.replace(/ /g,"."),a="";return e.id?a="(#"+e.id+r+")":r&&(a="("+r+")"),t+a},this.log=function(){if("undefined"!=typeof dump){var e=Array.prototype.map.call(arguments,function(e){return e&&e.nodeName?r(e):e}).join(" ");dump("Reader: (Readability) "+e+"\n")}else if("undefined"!=typeof console)["Reader: (Readability) "].concat(arguments)}):this.log=function(){}}ue.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,whitespace:/^\s*$/,hasContent:/\S$/},DIV_TO_P_ELEMS:["A","BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL","SELECT"],ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],_postProcessContent:function(e){this._fixRelativeUris(e),this._cleanClasses(e)},_removeNodes:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r],n=a.parentNode;n&&(t&&!t.call(this,a,r,e)||n.removeChild(a))}},_replaceNodeTags:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r];this._setNodeTag(a,t)}},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map(function(t){return e.call(t)});return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(t){var r=e.getElementsByTagName(t);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,r=(e.getAttribute("class")||"").split(/\s+/).filter(function(e){return-1!=t.indexOf(e)}).join(" ");for(r?e.setAttribute("class",r):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,r=this._doc.documentURI;function a(e){if(t==r&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var n=this._getAllNodesWithTag(e,["a"]);this._forEachNode(n,function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:")){var r=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",a(t))});var i=this._getAllNodesWithTag(e,["img"]);this._forEachNode(i,function(e){var t=e.getAttribute("src");t&&e.setAttribute("src",a(t))})},_getArticleTitle:function(){var e=this._doc,t="",r="";try{"string"!=typeof(t=r=e.title.trim())&&(t=r=this._getInnerText(e.getElementsByTagName("title")[0]))}catch(e){}var a=!1;function n(e){return e.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))a=/ [\\\/>»] /.test(t),n(t=r.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"))<3&&(t=r.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var i=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),o=t.trim();this._someNode(i,function(e){return e.textContent.trim()===o})||(n(t=r.substring(r.lastIndexOf(":")+1))<3?t=r.substring(r.indexOf(":")+1):n(r.substr(0,r.indexOf(":")))>5&&(t=r))}else if(t.length>150||t.length<15){var s=e.getElementsByTagName("h1");1===s.length&&(t=this._getInnerText(s[0]))}var l=n(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!a||l!=n(r.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=r),t},_prepDocument:function(){var e=this._doc;this._removeNodes(e.getElementsByTagName("style")),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(e.getElementsByTagName("font"),"SPAN")},_nextElement:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){for(var t=e.nextSibling,r=!1;(t=this._nextElement(t))&&"BR"==t.tagName;){r=!0;var a=t.nextSibling;t.parentNode.removeChild(t),t=a}if(r){var n=this._doc.createElement("p");for(e.parentNode.replaceChild(n,e),t=n.nextSibling;t;){if("BR"==t.tagName){var i=this._nextElement(t.nextSibling);if(i&&"BR"==i.tagName)break}if(!this._isPhrasingContent(t))break;var o=t.nextSibling;n.appendChild(t),t=o}for(;n.lastChild&&this._isWhitespace(n.lastChild);)n.removeChild(n.lastChild);"P"===n.parentNode.tagName&&this._setNodeTag(n.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),e.__JSDOMParser__)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var r=e.ownerDocument.createElement(t);e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e),e.readability&&(r.readability=e.readability);for(var a=0;a0?r[0].textContent.includes(this._articleTitle):this._articleTitle.includes(r[0].textContent))&&this._clean(e,"h2")}}this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._removeNodes(e.getElementsByTagName("p"),function(e){return 0===e.getElementsByTagName("img").length+e.getElementsByTagName("embed").length+e.getElementsByTagName("object").length+e.getElementsByTagName("iframe").length&&!this._getInnerText(e,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){var t=this._nextElement(e.nextSibling);t&&"P"==t.tagName&&e.parentNode.removeChild(e)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(e){var t=this._hasSingleTagInsideElement(e,"TBODY")?e.firstElementChild:e;if(this._hasSingleTagInsideElement(t,"TR")){var r=t.firstElementChild;if(this._hasSingleTagInsideElement(r,"TD")){var a=r.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),e.parentNode.replaceChild(a,e)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do{e=e.parentNode}while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var r=e.getAttribute("rel"),a=e.getAttribute("itemprop");return!(!("author"===r||a&&-1!==a.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var r=0,a=[];e.parentNode&&(a.push(e.parentNode),!t||++r!==t);)e=e.parentNode;return a},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,r=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var a=e.innerHTML;;){for(var n=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),i=[],o=this._doc.documentElement;o;){var s=o.className+" "+o.id;if(this._isProbablyVisible(o))if(this._checkByline(o,s))o=this._removeAndGetNext(o);else if(!n||!this.REGEXPS.unlikelyCandidates.test(s)||this.REGEXPS.okMaybeItsACandidate.test(s)||this._hasAncestorTag(o,"table")||"BODY"===o.tagName||"A"===o.tagName)if("DIV"!==o.tagName&&"SECTION"!==o.tagName&&"HEADER"!==o.tagName&&"H1"!==o.tagName&&"H2"!==o.tagName&&"H3"!==o.tagName&&"H4"!==o.tagName&&"H5"!==o.tagName&&"H6"!==o.tagName||!this._isElementWithoutContent(o)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(o.tagName)&&i.push(o),"DIV"===o.tagName){for(var l=null,c=o.firstChild;c;){var u=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),o.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=u}if(this._hasSingleTagInsideElement(o,"P")&&this._getLinkDensity(o)<.25){var d=o.children[0];o.parentNode.replaceChild(d,o),o=d,i.push(o)}else this._hasChildBlockElement(o)||(o=this._setNodeTag(o,"P"),i.push(o))}o=this._getNextNode(o)}else o=this._removeAndGetNext(o);else this.log("Removing unlikely candidate - "+s),o=this._removeAndGetNext(o);else this.log("Removing hidden node - "+s),o=this._removeAndGetNext(o)}var h=[];this._forEachNode(i,function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var r=this._getNodeAncestors(e,3);if(0!==r.length){var a=0;a+=1,a+=t.split(",").length,a+=Math.min(Math.floor(t.length/100),3),this._forEachNode(r,function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),h.push(e)),0===t)var r=1;else r=1===t?2:3*t;e.readability.contentScore+=a/r}})}}}});for(var f=[],p=0,g=h.length;pv.readability.contentScore){f.splice(b,0,m),f.length>this._nbTopCandidates&&f.pop();break}}}var w,y=f[0]||null,k=!1;if(null===y||"BODY"===y.tagName){y=t.createElement("DIV"),k=!0;for(var E=e.childNodes;E.length;)this.log("Moving child out:",E[0]),y.appendChild(E[0]);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],x=1;x=.75&&T.push(this._getNodeAncestors(f[x]));if(T.length>=3)for(w=y.parentNode;"BODY"!==w.tagName;){for(var N=0,C=0;C=3){y=w;break}w=w.parentNode}y.readability||this._initializeNode(y),w=y.parentNode;for(var A=y.readability.contentScore,S=A/3;"BODY"!==w.tagName;)if(w.readability){var P=w.readability.contentScore;if(PA){y=w;break}A=w.readability.contentScore,w=w.parentNode}else w=w.parentNode;for(w=y.parentNode;"BODY"!=w.tagName&&1==w.children.length;)w=(y=w).parentNode;y.readability||this._initializeNode(y)}var L=t.createElement("DIV");r&&(L.id="readability-content");for(var j=Math.max(10,.2*y.readability.contentScore),z=(w=y.parentNode).children,M=0,$=z.length;M<$;M++){var B=z[M],I=!1;if(this.log("Looking at sibling node:",B,B.readability?"with score "+B.readability.contentScore:""),this.log("Sibling has score",B.readability?B.readability.contentScore:"Unknown"),B===y)I=!0;else{var O=0;if(B.className===y.className&&""!==y.className&&(O+=.2*y.readability.contentScore),B.readability&&B.readability.contentScore+O>=j)I=!0;else if("P"===B.nodeName){var H=this._getLinkDensity(B),R=this._getInnerText(B),D=R.length;D>80&&H<.25?I=!0:D<80&&D>0&&0===H&&-1!==R.search(/\.( |$)/)&&(I=!0)}}I&&(this.log("Appending node:",B),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(B.nodeName)&&(this.log("Altering sibling:",B,"to div."),B=this._setNodeTag(B,"DIV")),L.appendChild(B),M-=1,$-=1)}if(this._debug&&this.log("Article content pre-prep: "+L.innerHTML),this._prepArticle(L),this._debug&&this.log("Article content post-prep: "+L.innerHTML),k)y.id="readability-page-1",y.className="page";else{var G=t.createElement("DIV");G.id="readability-page-1",G.className="page";var q=L.childNodes;for(this._wrap=L.childNodes[0].outerHTML.replace(L.childNodes[0].innerHTML,"");q.length;)G.appendChild(q[0]);L.appendChild(G)}this._debug&&this.log("Article content after paging: "+L.innerHTML);var U=!0,F=this._getInnerText(L,!0).length;if(F0&&e.length<100)},_getArticleMetadata:function(){var e={},t={},r=this._doc.getElementsByTagName("meta"),a=/\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi,n=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(e){var r=e.getAttribute("name"),i=e.getAttribute("property"),o=e.getAttribute("content");if(o){var s=null,l=null;if(i&&(s=i.match(a)))for(var c=s.length-1;c>=0;c--)l=s[c].toLowerCase().replace(/\s/g,""),t[l]=o.trim();!s&&r&&n.test(r)&&(l=r,o&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),t[l]=o.trim()))}}),e.title=t["dc:title"]||t["dcterm:title"]||t["og:title"]||t["weibo:article:title"]||t["weibo:webpage:title"]||t.title||t["twitter:title"],e.title||(e.title=this._getArticleTitle()),e.byline=t["dc:creator"]||t["dcterm:creator"]||t.author,e.excerpt=t["dc:description"]||t["dcterm:description"]||t["og:description"]||t["weibo:article:description"]||t["weibo:webpage:description"]||t.description||t["twitter:description"],e.siteName=t["og:site_name"],e},_removeScripts:function(e){this._removeNodes(e.getElementsByTagName("script"),function(e){return e.nodeValue="",e.removeAttribute("src"),!0}),this._removeNodes(e.getElementsByTagName("noscript"))},_hasSingleTagInsideElement:function(e,t){return 1==e.children.length&&e.children[0].tagName===t&&!this._someNode(e.childNodes,function(e){return e.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(e.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&0==e.textContent.trim().length&&(0==e.children.length||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(e){return-1!==this.DIV_TO_P_ELEMS.indexOf(e.tagName)||this._hasChildBlockElement(e)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||-1!==this.PHRASING_ELEMS.indexOf(e.tagName)||("A"===e.tagName||"DEL"===e.tagName||"INS"===e.tagName)&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&0===e.textContent.trim().length||e.nodeType===this.ELEMENT_NODE&&"BR"===e.tagName},_getInnerText:function(e,t){t=void 0===t||t;var r=e.textContent.trim();return t?r.replace(this.REGEXPS.normalize," "):r},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(e&&"svg"!==e.tagName.toLowerCase()){for(var t=0;t0&&n>r)return!1;if(e.parentNode.tagName===t&&(!a||a(e.parentNode)))return!0;e=e.parentNode,n++}return!1},_getRowAndColumnCount:function(e){for(var t=0,r=0,a=e.getElementsByTagName("tr"),n=0;n0)a._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some(function(e){return!!a.getElementsByTagName(e)[0]}))this.log("Data table because found data-y descendant"),a._readabilityDataTable=!0;else if(a.getElementsByTagName("table")[0])a._readabilityDataTable=!1;else{var i=this._getRowAndColumnCount(a);i.rows>=10||i.columns>4?a._readabilityDataTable=!0:a._readabilityDataTable=i.rows*i.columns>10}}}else a._readabilityDataTable=!1;else a._readabilityDataTable=!1}},_cleanConditionally:function(e,t){if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)){var r="ul"===t||"ol"===t;this._removeNodes(e.getElementsByTagName(t),function(e){var a=function(e){return e._readabilityDataTable};if("table"===t&&a(e))return!1;if(this._hasAncestorTag(e,"table",-1,a))return!1;var n=this._getClassWeight(e);if(this.log("Cleaning Conditionally",e),n+0<0)return!0;if(this._getCharCount(e,",")<10){for(var i=e.getElementsByTagName("p").length,o=e.getElementsByTagName("img").length,s=e.getElementsByTagName("li").length-100,l=e.getElementsByTagName("input").length,c=0,u=this._concatNodeLists(e.getElementsByTagName("object"),e.getElementsByTagName("embed"),e.getElementsByTagName("iframe")),d=0;d1&&i/o<.5&&!this._hasAncestorTag(e,"figure")||!r&&s>i||l>Math.floor(i/3)||!r&&p<25&&(0===o||o>2)&&!this._hasAncestorTag(e,"figure")||!r&&n<25&&f>.2||n>=25&&f>.5||1===c&&p<75||c>1}return!1})}},_cleanMatchedNodes:function(e,t){for(var r=this._getNextNode(e,!0),a=this._getNextNode(e);a&&a!=r;)a=t(a,a.className+" "+a.id)?this._removeAndGetNext(a):this._getNextNode(a)},_cleanHeaders:function(e){for(var t=1;t<3;t+=1)this._removeNodes(e.getElementsByTagName("h"+t),function(e){return this._getClassWeight(e)<0})},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return!(e.style&&"none"==e.style.display||e.hasAttribute("hidden"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._removeScripts(this._doc),this._prepDocument();var t=this._getArticleMetadata();this._articleTitle=t.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!t.excerpt){var a=r.getElementsByTagName("p");a.length>0&&(t.excerpt=a[0].textContent.trim())}var n=r.textContent;return{title:this._articleTitle,byline:t.byline||this._articleByline,dir:this._articleDir,content:r.innerHTML,wrap:this._wrap,textContent:n,length:n.length,excerpt:t.excerpt,siteName:t.siteName||this._articleSiteName}}};var de=Object.freeze({Readability:ue}),he=r(function(e){(function(){function t(e){var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex:
foo
",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including ``, `` and `` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var a in t)t.hasOwnProperty(a)&&(r[a]=t[a].defaultValue);return r}function r(e,t){var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var o=0;o").replace(/&/g,"&")};var d=function(e,t,r,a){var n,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),h=new RegExp(t,c.replace(/g/g,"")),f=[];do{for(n=0;o=d.exec(e);)if(h.test(o[0]))n++||(s=(i=d.lastIndex)-o[0].length);else if(n&&!--n){l=o.index+o[0].length;var p={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(f.push(p),!u)return f}}while(n&&(d.lastIndex=i));return f};i.helper.matchRecursiveRegExp=function(e,t,r,a){for(var n=d(e,t,r,a),i=[],o=0;o0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var h=0;h=0?a+(r||0):a},i.helper.splitAtIndex=function(e,t){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},i.helper.padEnd=function(e,t,r){return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){alert(e)},log:function(e){alert(e)},error:function(e){throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:':octocat:',showdown:"S"},i.Converter=function(e){function t(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return void function(e,t){"function"==typeof e&&(e=e(new i.Converter)),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var n=0;n[ \t]+¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],a=0;a'}else r.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return r}(r)};!function e(t){for(var r=0;r? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(n||(n=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,i.helper.isUndefined(r.gUrls[n]))return e;o=r.gUrls[n],i.helper.isUndefined(r.gTitles[n])||(c=r.gTitles[n])}var u='"+a+""};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,a,n,o){if("\\"===a)return r+n;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'"+n+""})),r.converter._dispatch("anchors.after",e,t,r)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,p=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,g=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,m=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,_=function(e){return function(t,r,a,n,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",h=r||"",f=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),h+'"+c+""+u+f}},b=function(e,t){return function(r,a,n){var o="mailto:";return a=a||"",n=i.subParser("unescapeSpecialChars")(n,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+n),n=i.helper.encodeEmailAddress(n)):o+=n,a+''+n+""}};i.subParser("autoLinks",function(e,t,r){return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(p,_(t))).replace(m,b(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),i.subParser("simplifiedAutoLinks",function(e,t,r){return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,_(t)):e.replace(h,_(t))).replace(g,b(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),i.subParser("blockGamut",function(e,t,r){return e=r.converter._dispatch("blockGamut.before",e,t,r),e=i.subParser("blockQuotes")(e,t,r),e=i.subParser("headers")(e,t,r),e=i.subParser("horizontalRule")(e,t,r),e=i.subParser("lists")(e,t,r),e=i.subParser("codeBlocks")(e,t,r),e=i.subParser("tables")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),i.subParser("blockQuotes",function(e,t,r){e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=i.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*
[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^  /gm,"¨0")).replace(/¨0/g,"")}),i.subParser("hashBlock")("
\n"+e+"\n
",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),i.subParser("codeBlocks",function(e,t,r){return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,a,n){var o=a,s=n,l="\n";return o=i.subParser("outdent")(o,t,r),o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="
"+o+l+"
",i.subParser("hashBlock")(o,t,r)+s})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),i.subParser("codeSpans",function(e,t,r){return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,a,n,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+""+(s=i.subParser("encodeCode")(s,t,r))+"",i.subParser("hashHTMLSpans")(s,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),i.subParser("completeHTMLDocument",function(e,t,r){if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var a="html",n="\n",i="",o='\n',s="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(n="\n","html"!==(a=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i=""+r.metadata.parsed.title+"\n";break;case"charset":o="html"===a||"html5"===a?'\n':'\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=n+"\n\n"+i+o+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),i.subParser("detab",function(e,t,r){return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,a=4-r.length%4,n=0;n/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),i.subParser("encodeBackslashEscapes",function(e,t,r){return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),i.subParser("encodeCode",function(e,t,r){return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),i.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),i.subParser("githubCodeBlocks",function(e,t,r){return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,a,n,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),o="
"+o+s+"
",o=i.subParser("hashBlock")(o,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),i.subParser("hashBlock",function(e,t,r){return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),i.subParser("hashCodeTags",function(e,t,r){return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=i.helper.replaceRecursiveRegExp(e,function(e,a,n,o){var s=n+i.subParser("encodeCode")(a,t,r)+o;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"},"]*>","","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),i.subParser("hashElement",function(e,t,r){return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"}}),i.subParser("hashHTMLBlocks",function(e,t,r){e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],n=function(e,t,a,n){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+r.converter.makeHtml(t)+n),"\n\n¨K"+(r.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var o=0;o]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),h=i.helper.replaceRecursiveRegExp(d[1],n,c,u,"im");if(h===d[1])break;e=d[0].concat(h)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),e=(e=i.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),i.subParser("hashHTMLSpans",function(e,t,r){function a(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return a(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<[^>]+?>/gi,function(e){return a(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),i.subParser("unhashHTMLSpans",function(e,t,r){e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var a=0;a]*>\\s*]*>","^ {0,3}\\s*
","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),i.subParser("headers",function(e,t,r){function a(e){var a,n;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,n=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=n+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=n+a),r.hashLinkCounts[a]?a=a+"-"+r.hashLinkCounts[a]++:r.hashLinkCounts[a]=1,a}e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=""+s+"";return i.subParser("hashBlock")(c,t,r)})).replace(s,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=n+1,u=""+s+"";return i.subParser("hashBlock")(u,t,r)});var l=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return e=e.replace(l,function(e,o,s){var l=s;t.customizedHeaderId&&(l=s.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(l,t,r),u=t.noHeaderId?"":' id="'+a(s)+'"',d=n-1+o.length,h=""+c+"";return i.subParser("hashBlock")(h,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),i.subParser("horizontalRule",function(e,t,r){e=r.converter._dispatch("horizontalRule.before",e,t,r);var a=i.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),r.converter._dispatch("horizontalRule.after",e,t,r)}),i.subParser("images",function(e,t,r){function a(e,t,a,n,o,s,l,c){var u=r.gUrls,d=r.gTitles,h=r.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)n="";else if(""===n||null===n){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),n="#"+a,i.helper.isUndefined(u[a]))return e;n=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(h[a])||(o=h[a].width,s=h[a].height)}t=t.replace(/"/g,""").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var f=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,n,i,o,s,l){return a(e,t,r,n=n.replace(/\s/g,""),i,o,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),r.converter._dispatch("images.after",e,t,r)}),i.subParser("italicsAndBold",function(e,t,r){function a(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return a(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return a(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return a(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),i.subParser("lists",function(e,t,r){function a(e,a){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(n,function(e,a,n,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,r),h="";return c&&t.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,r),d=i.subParser("blockGamut")(d,t,r)):(d=(d=i.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,r):i.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function n(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function o(e,r,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),h=n(e,r);-1!==d?(c+="\n\n<"+r+h+">\n"+a(u.slice(0,d),!!i)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+r+h+">\n"+a(u,!!i)+"\n"}(e);else{var u=n(e,r);c="\n\n<"+r+u+">\n"+a(e,!!i)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return o(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,a){return o(r,a.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),i.subParser("metadata",function(e,t,r){function a(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,a){return r.metadata.parsed[t]=a,""})}return t.metadata?(e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return a(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,n){return t&&(r.metadata.format=t),a(n),"¨M"})).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)):e}),i.subParser("outdent",function(e,t,r){return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),i.subParser("paragraphs",function(e,t,r){for(var a=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),n=[],o=a.length,s=0;s=0?n.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",n.push(l))}for(o=n.length,s=0;s]*>\s*]*>/.test(u)&&(d=!0)}n[s]=u}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),i.subParser("runExtension",function(e,t,r,a){if(e.filter)t=e.filter(t,a.converter,r);else if(e.regex){var n=e.regex;n instanceof RegExp||(n=new RegExp(n,"g")),t=t.replace(n,e.replace)}return t}),i.subParser("spanGamut",function(e,t,r){return e=r.converter._dispatch("spanGamut.before",e,t,r),e=i.subParser("codeSpans")(e,t,r),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=i.subParser("encodeBackslashEscapes")(e,t,r),e=i.subParser("images")(e,t,r),e=i.subParser("anchors")(e,t,r),e=i.subParser("autoLinks")(e,t,r),e=i.subParser("simplifiedAutoLinks")(e,t,r),e=i.subParser("emoji")(e,t,r),e=i.subParser("underline")(e,t,r),e=i.subParser("italicsAndBold")(e,t,r),e=i.subParser("strikethrough")(e,t,r),e=i.subParser("ellipsis")(e,t,r),e=i.subParser("hashHTMLSpans")(e,t,r),e=i.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),i.subParser("strikethrough",function(e,t,r){return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(a)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),i.subParser("stripLinkDefinitions",function(e,t,r){var a=function(e,a,n,o,s,l,c){return a=a.toLowerCase(),n.match(/^data:.+?\/.+?;base64,/)?r.gUrls[a]=n.replace(/\s/g,""):r.gUrls[a]=i.subParser("encodeAmpsAndAngles")(n,t,r),l?l+c:(c&&(r.gTitles[a]=c.replace(/"|'/g,""")),t.parseImgDimensions&&o&&s&&(r.gDimensions[a]={width:o,height:s}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,a)).replace(/¨0/,"")}),i.subParser("tables",function(e,t,r){function a(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function n(e,a){var n="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(n=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),""+(e=i.subParser("spanGamut")(e,t,r))+"\n"}function o(e,a){return""+i.subParser("spanGamut")(e,t,r)+"\n"}function s(e){var s,l=e.split("\n");for(s=0;s\n\n\n",n=0;n\n";for(var i=0;i\n"}return r+"\n\n"}(h,p)}return t.tables?(e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,s),r.converter._dispatch("tables.after",e,t,r)):e}),i.subParser("underline",function(e,t,r){return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,i.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),i.subParser("unescapeSpecialChars",function(e,t,r){return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),i.subParser("makeMarkdown.blockquote",function(e,t){var r="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,o=0;o "+(r=r.trim()).split("\n").join("\n> ")}),i.subParser("makeMarkdown.codeBlock",function(e,t){var r=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[a]+"\n```"}),i.subParser("makeMarkdown.codeSpan",function(e){return"`"+e.innerHTML+"`"}),i.subParser("makeMarkdown.emphasis",function(e,t){var r="";if(e.hasChildNodes()){r+="*";for(var a=e.childNodes,n=a.length,o=0;o",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),i.subParser("makeMarkdown.links",function(e,t){var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,n=a.length;r="[";for(var o=0;o",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),i.subParser("makeMarkdown.list",function(e,t,r){var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,s=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),i.subParser("makeMarkdown.strikethrough",function(e,t){var r="";if(e.hasChildNodes()){r+="~~";for(var a=e.childNodes,n=a.length,o=0;otr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=g)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),e.exports?e.exports=i:this.showdown=i}).call(t)}),fe={pangu:n,minimatch:R,beautify:re,style:ce,rdability:de,markdown:Object.freeze({default:he,__moduleExports:he})};e.Plugin=function(e){return void 0==e?fe:fe[e]},Object.defineProperty(e,"__esModule",{value:!0})}); From 3f3b8d5b16720043819ff3c825a35cecb19578c6 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Sat, 4 Jan 2020 16:16:34 +0800 Subject: [PATCH 199/329] Update some website. --- src/website_list.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/website_list.json b/src/website_list.json index c3fc27df..e390ce48 100644 --- a/src/website_list.json +++ b/src/website_list.json @@ -307,7 +307,8 @@ "include" : "[[{$('.RichContent-inner')}]]", "exclude" : [ "" - ] + ], + "css" : ".MCNLinkCard-info { margin-left: 12px;}" },{ "name" : "geekpark.net", "url" : "http://www.geekpark.net/topics/", @@ -1904,11 +1905,12 @@ "url" : "http*://post.smzdm.com/p/*", "title" : "", "desc" : "", - "include" : "<div class='news_content'>", + "include" : "[[`//*[@id='articleId']`]]", "exclude" : [ "<h1 class='item-name'>", "<span class='embed-card'>" - ] + ], + "css" : ".embed-card-logo { margin-right: 14px }" },{ "name" : "news.mydrivers.com", "url" : "http://news.mydrivers.com/*/*/*.htm", From 6074324a6211825d5ce4bf9d17dbf44d0cfc0933 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 4 Jan 2020 16:23:19 +0800 Subject: [PATCH 200/329] Format source. --- src/options/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index e13c7666..c7dd5c07 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -343,7 +343,7 @@ function sidebarRender() { }; const sidebar = <side.Sidebar items={ conf.menuItem } waves="md-waves-effect" autoClose={false} showClose={ true } - header="设定" footer=" 简悦 © 2017" onClick={ ($t,o)=>sidebarClick($t,o) } />; + header="设定" footer=" 简悦 © 2017 ~ 2019" onClick={ ($t,o)=>sidebarClick($t,o) } />; ReactDOM.render( sidebar, $( ".sidebar" )[0] ); } From e7305a894e5b706c7146ba5ee2de294a16b3e9b8 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 4 Jan 2020 18:30:09 +0800 Subject: [PATCH 201/329] Fix some sidebar bug. --- src/vender/mduikit/sidebar.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index 529ff84c..28b3e884 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -269,7 +269,7 @@ const Item = ( props ) => { } const tooltip = props.tooltip; return ( - <a style={ link_style } className={ props.route && props.waves } + <a style={ link_style } className={ props.route && props.waves } target={ props.route && props.route.startsWith( "#" ) ? "_self" : "_blank" } href={ props.route } value={ props.value } data-tooltip={ tooltip.text ? tooltip.text : props[ tooltip.target ] } data-tooltip-position={ tooltip.position } data-tooltip-delay={ tooltip.delay } onClick={ props.route && props.onClick && ( evt=>props.onClick(evt)) } > @@ -505,7 +505,7 @@ function tocRender() { const $item = $( item ), id = $item.attr( "value" ), levels = tocs.get( id ); - levels.forEach( value => { + ids[idx] && levels.forEach( value => { html += `<outline class="md-waves-effect" data-trigger="${ids[idx]}" data-id="${value.id}" class="toc-level-${ value.level }">${value.text}</outline>`; }); html.length > 0 && $item.after( `<toc><i></i>${html}</to>` ); From 1f3a5e9578bdfc08114f4dbce9bff6e99e4b0ef6 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 4 Jan 2020 18:30:47 +0800 Subject: [PATCH 202/329] Update sidebar to 0.0.4.0101. --- src/vender/mduikit/sidebar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index 28b3e884..e5eb0956 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -1,7 +1,7 @@ /*! * React Material Design: Sidebar * - * @version : 0.0.4 + * @version : 0.0.4.0104 * @update : 2019/12/30 * @homepage: https://github.com/kenshin/mduikit * @license : MIT https://github.com/kenshin/mduikit/blob/master/LICENSE From b46db9ff685b467a1f7ea48cca8ce7a72fae9d17 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 4 Jan 2020 18:31:17 +0800 Subject: [PATCH 203/329] Format source. --- src/options/options.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/options/options.js b/src/options/options.js index c7dd5c07..ae279dc5 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -100,6 +100,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) * @param {number} tab index */ function tabChange( idx ) { + if ( idx == -1 ) return; conf.tabsItem.forEach( ( item, index ) => item.active = idx == index ? true : false ); mainRender( idx ); } From cf7a785ecba0ab4d55e3fdb61e1aaa5b439a310d Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 4 Jan 2020 18:37:55 +0800 Subject: [PATCH 204/329] Add some new sidebar items. --- src/options/options.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index ae279dc5..5cabb73a 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -341,7 +341,21 @@ function sidebarRender() { const sidebarClick = ( $target, items ) => { const idx = conf.tabsItem.findIndex( item => item.value == items.value ); tabChange( idx ); - }; + }, newItems = [ + { + name: "帮助中心", + value: "help", + fontIcon: "<i class=\"fas fa-question-circle\"></i>", + route: "http://ksria.com/simpread/docs/", + }, + { + name: "开源列表", + value: "license", + fontIcon: "<i class=\"fas fa-keyboard\"></i>", + route: "http://ksria.com/simpread/docs/#/开源列表", + }, + ]; + conf.menuItem = conf.menuItem.concat( newItems ); const sidebar = <side.Sidebar items={ conf.menuItem } waves="md-waves-effect" autoClose={false} showClose={ true } header="设定" footer=" 简悦 © 2017 ~ 2019" onClick={ ($t,o)=>sidebarClick($t,o) } />; From 95624439096f1586705fae1b8fd5a27e7445d9ff Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 4 Jan 2020 18:50:35 +0800 Subject: [PATCH 205/329] Fix some sidebar bug. --- src/vender/mduikit/mduikit.css | 2 +- src/vender/mduikit/sidebar.jsx | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/vender/mduikit/mduikit.css b/src/vender/mduikit/mduikit.css index ee7f6855..c16ca443 100644 --- a/src/vender/mduikit/mduikit.css +++ b/src/vender/mduikit/mduikit.css @@ -21,7 +21,7 @@ sidebar side content a:hover { background-color: rgba(0,0,0,.04); } -sidebar side content li.active { +sidebar side content a.active { font-weight: bold; } diff --git a/src/vender/mduikit/sidebar.jsx b/src/vender/mduikit/sidebar.jsx index e5eb0956..0f7c0dae 100644 --- a/src/vender/mduikit/sidebar.jsx +++ b/src/vender/mduikit/sidebar.jsx @@ -336,6 +336,8 @@ class Sidebar extends React.Component { let $target = $( event.target ); while ( !$target.is( "a" ) ) { $target = $target.parent(); } const [ name, value, href ] = [ $target.text(), $target.attr( "value" ), $target.attr( "href" ) ]; + $target.parent().parent().find( "a" ).removeClass( "active" ); + $target.addClass( "active" ); this.props.onClick && this.props.onClick( $target, { name, value, href } ); this.props.autoClose && this.maskOnClick(); } @@ -529,9 +531,9 @@ function activeRender() { const $item = $( item ), id = $item.attr( "value" ); if ( location.hash.endsWith( id ) ) { - $item.parent().addClass( "active" ); + $item.addClass( "active" ); } else { - $item.parent().removeClass( "active" ); + $item.removeClass( "active" ); } }); } From 5267a3659fe0c1e11360be5f55984570da46491d Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 5 Jan 2020 13:19:56 +0800 Subject: [PATCH 206/329] Optimize noitfy hiden effect performance. --- src/vender/notify/notify.css | 8 ++++++-- src/vender/notify/notify.js | 8 +++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/vender/notify/notify.css b/src/vender/notify/notify.css index 6b16b72e..4a88ffa0 100644 --- a/src/vender/notify/notify.css +++ b/src/vender/notify/notify.css @@ -51,7 +51,7 @@ notify-gp notify { opacity: 0; transform: scaleY(0); transform-origin: left top 0px; - transition: transform 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms, opacity 1s cubic-bezier(0.23, 1, 0.32, 1) 0ms; + transition: all 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms, opacity 1s cubic-bezier(0.23, 1, 0.32, 1) 0ms; box-shadow: 0 3px 5px -1px rgba(0,0,0,.2), 0 6px 10px 0 rgba(0,0,0,.14), 0 1px 18px 0 rgba(0,0,0,.12); } @@ -210,7 +210,7 @@ notify-gp .notify-show { notify-gp .notify-hide { animation-name: fadeOutUp; - animation-duration: 1s; + animation-duration: 450ms; animation-fill-mode: both; } @@ -313,6 +313,10 @@ notify-gp .notify-snackbar { } to { + margin-top: 0; + padding: 0; + height: 0; + min-height: 0; opacity: 0; transform: scaleY(0); } diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 696eb306..c740b8cd 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -144,12 +144,10 @@ var Notify = ( function () { }, hidden = function( target ) { target[0].addEventListener( 'animationend', function(e) { - target.slideUp( 10, function() { - target.remove(); - if ($root.children().length === 0 ) $root.css( "z-index", 0 ); - }); + target.remove(); + if ($root.children().length === 0 ) $root.css( "z-index", 0 ); }, false ); - target.addClass( 'notify-hide' ); + target.css({ width: target[0].offsetWidth }).addClass( 'notify-hide' ) }, render = function() { var $target = $( TMPL ), From 77774ea47a297159ae043599d9b25a9a4bc077a1 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 5 Jan 2020 13:20:34 +0800 Subject: [PATCH 207/329] Update notify version to 2.0.2.0105. --- src/vender/notify/notify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index c740b8cd..8dc552be 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -58,7 +58,7 @@ * */ var Notify = ( function () { - var VERSION = "2.0.2", + var VERSION = "2.0.2.0105", name = "notify", root = "notify-gp", roottmpl= "<" + root + ">", From 7aca24fcd545e8df352269043d3e6f2a78f9c623 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sun, 5 Jan 2020 15:23:02 +0800 Subject: [PATCH 208/329] Format source. --- src/vender/notify/notify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/notify/notify.js b/src/vender/notify/notify.js index 8dc552be..9fe49119 100644 --- a/src/vender/notify/notify.js +++ b/src/vender/notify/notify.js @@ -147,7 +147,7 @@ var Notify = ( function () { target.remove(); if ($root.children().length === 0 ) $root.css( "z-index", 0 ); }, false ); - target.css({ width: target[0].offsetWidth }).addClass( 'notify-hide' ) + target.css({ width: target[0].offsetWidth }).addClass( 'notify-hide' ); }, render = function() { var $target = $( TMPL ), From 0c41e0f14f1ab18180f8e0b0e8546b04d9e1447f Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 13:01:16 +0800 Subject: [PATCH 209/329] Add 'urlscheme' UI & logic. --- src/module/urlscheme.jsx | 112 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 src/module/urlscheme.jsx diff --git a/src/module/urlscheme.jsx b/src/module/urlscheme.jsx new file mode 100644 index 00000000..77bbb2ab --- /dev/null +++ b/src/module/urlscheme.jsx @@ -0,0 +1,112 @@ +console.log( "===== simpread url scheme load =====" ) + +import Switch from 'switch'; +import TextField from 'textfield'; +import Button from 'button'; +import Dropdown from 'dropdown'; + +import * as puplugin from 'puplugin'; + +const category = [ + { name: "黑名单", value: "blacklist" }, + { name: "白名单", value: "whitelist" }, + { name: "排除列表", value: "exclusion" }, +]; + +export class URLScheme extends React.Component { + + static defaultProps = { + type: "", + url: "", + off: false, + } + + static propType = { + type : React.PropTypes.string, + url : React.PropTypes.string, + off : React.PropTypes.bool, + onChange : React.PropTypes.func, + } + + state = { + error : "", + disable: false, + }; + + onDropdownChange( value ) { + this.props.type = value; + } + + onURLChange( event ) { + const minimatch = puplugin.Plugin( "minimatch" ), + value = event.target.value.trim(); + if ( value == "" ) { + this.setState({ error : "不能为空", disable: true }); + } else if ( value.startsWith( "[[/" ) && value.endsWith( "/]]" ) && !new RegExp( value.replace( /\[\[\/|\/\]\]/ig, "" ) ).test( location.href ) ) { + this.setState({ error : "正则表达式错误", disable: true }); + } else if ( !value.startsWith( "[[/" ) && !value.startsWith( "http" ) && value != location.hostname.replace( "www.", "" ) ) { + this.setState({ error : "主域名不匹配", disable: true }); + } else if ( !value.startsWith( "[[/" ) && !minimatch( location.href, value ) ) { + this.setState({ error : "minimatch 适配错误", disable: true }); + } else { + this.setState({ error : "", disable: false }); + this.props.url = value; + } + } + + onOpenedChange( value ) { + this.props.off = value; + } + + onClose() { + $( this.refs.target ) + .addClass( "hide" )[0] + .addEventListener( 'animationend', () => { + ReactDOM.unmountComponentAtNode( $( ".simpread-urlscheme" )[0] ); + $( ".simpread-urlscheme" ).remove(); + }, false ); + } + + onSave() { + this.props.onChange && this.props.onChange( this.props.type, this.props.off, this.props.url ); + this.onClose(); + } + + render() { + return ( + <simpread-urlscheme ref="target" class="active"> + <sr-urls-head> + <sr-urls-label>请选择添加模式</sr-urls-label> + <Dropdown name={ category.filter( item => item.value == this.props.type )[0].name } items={ category } width="100%" onChange={ (v)=>this.onDropdownChange(v) } /> + </sr-urls-head> + <sr-urls-content> + <sr-urls-label>支持 domin 正则表达式 minimatch 等规则</sr-urls-label> + <TextField + multi={ false } + value={ this.props.url } + errortext={ this.state.error } + onChange={ (e)=>this.onURLChange(e) } + /> + <Switch width="100%" checked={ this.props.off } + thumbedColor="#2163f7" trackedColor="#6699FF" waves="md-waves-effect" + label="默认弹出编辑框,取消后意味着直接保存" + onChange={ (v)=>this.onOpenedChange( v ) } /> + </sr-urls-content> + <sr-urls-footer> + <Button text="取 消" mode="secondary" color="#333" waves="md-waves-effect" onClick={ ()=>this.onClose() } /> + <Button text="确 认" waves="md-waves-effect" color="#2163f7" disable={ this.state.disable } style={{ 'font-weight': 'bold' }} onClick={ ()=>this.onSave() } /> + </sr-urls-footer> + </simpread-urlscheme> + ) + } +} + +function Render( type, opened, callback ) { + if ( $( "simpread-urlscheme" ).length > 0 ) return; + $( "html" ).append( `<div class="simpread-urlscheme"></div>` ); + ReactDOM.render( <URLScheme type={ type } off={ opened } url={ location.href } onChange={ (t,f,v)=>callback(t,f,v) } />, $( ".simpread-urlscheme" )[0] ); +} + +export { + Render +} \ No newline at end of file From 7055c9a00095cccf17200fa5ecf064c2eb0d380e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 13:01:35 +0800 Subject: [PATCH 210/329] Add 'urlscheme' to webpack. --- webpack.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webpack.config.js b/webpack.config.js index f27da506..f89f4b23 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -295,6 +295,7 @@ const webpack = require( 'webpack' ), sharecard : __dirname + '/src/module/sharecard.jsx', notice : __dirname + '/src/module/notice.jsx', guide : __dirname + '/src/module/guide.jsx', + urlscheme : __dirname + '/src/module/urlscheme.jsx', editor : __dirname + '/src/module/common/editor.jsx', themesel : __dirname + '/src/module/common/theme.jsx', shortcuts : __dirname + '/src/module/common/shortcuts.jsx', From dd97b494bef217c372a241c9b19d14c2bd8f881f Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 13:01:59 +0800 Subject: [PATCH 211/329] Add 'urlscheme' design. --- src/assets/css/simpread.css | 95 +++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index ebd45727..54080fac 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -753,4 +753,99 @@ sr-mask { left: 0; top: 0; background-color: rgba(0, 0, 0, .1); +} + +/** + * URL Scheme + */ + +.simpread-urlscheme { + position: fixed; + right: 20px; + bottom: 20px; + + z-index: 2147483646; +} + +simpread-urlscheme { + display: flex; + justify-content: center; + align-items: flex-start; + flex-direction: column; + + padding: 20px 20px 0; + + width: 500px; + + color: rgba(51, 51, 51, .87); + background-color: #fff; + border-radius: 3px; + + box-shadow: rgba(0, 0, 0, 0.12) 0px 0px 2px, rgba(0, 0, 0, 0.26) 0px 2px 2px; + overflow: hidden; + + transform-origin: bottom; + transition: all .6s ease; +} + +simpread-urlscheme * { + box-sizing: border-box; +} + +simpread-urlscheme.active { + animation-name: fadeInUp; + animation-duration: 450ms; + animation-fill-mode: both; +} + +simpread-urlscheme.hide { + animation-name: fadeInDown; + animation-duration: 450ms; + animation-fill-mode: both; +} + +simpread-urlscheme sr-urls-label { + width: 100%; +} + +simpread-urlscheme sr-urls-head { + display: flex; + align-items: center; + flex-direction: row; + + width: 100%; +} + +simpread-urlscheme sr-urls-content { + width: 100%; +} + +simpread-urlscheme sr-urls-footer { + display: flex; + justify-content: flex-end; + width: 100%; +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(100px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fadeInDown { + from { + opacity: 1; + transform: translateY(0); + } + + to { + opacity: 0; + transform: translateY(100px); + } } \ No newline at end of file From 4fc7bd316e331e405b71767fbbcb036b7bc346ae Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 13:03:49 +0800 Subject: [PATCH 212/329] Add 'urlscheme' to menu click workflow. --- src/contentscripts.js | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/contentscripts.js b/src/contentscripts.js index 24ca70c9..826c1157 100644 --- a/src/contentscripts.js +++ b/src/contentscripts.js @@ -12,6 +12,7 @@ import * as read from 'read'; import * as setting from 'setting'; import * as kbd from 'keyboard'; import * as highlight from 'highlight'; +import * as scheme from 'urlscheme'; import * as util from 'util'; import { storage, STORAGE_MODE as mode } from 'storage'; @@ -144,24 +145,32 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) case msg.MESSAGE_ACTION.menu_exclusion: case msg.MESSAGE_ACTION.menu_blacklist: case msg.MESSAGE_ACTION.menu_unrdist: - if ( request.type == msg.MESSAGE_ACTION.menu_whitelist ) { - storage.read.whitelist.push( request.value.url ); - new Notify().Render( "已加入到白名单。" ); - } else if ( request.type == msg.MESSAGE_ACTION.menu_exclusion ) { - storage.read.exclusion.push( request.value.url ); - new Notify().Render( "已加入到排除列表。" ); - } else if ( request.type == msg.MESSAGE_ACTION.menu_blacklist ) { - storage.option.blacklist.push( request.value.url ); - new Notify().Render( "已加入到黑名单。" ); - } else if ( request.type == msg.MESSAGE_ACTION.menu_unrdist ) { - storage.UnRead( "add", { url: request.value.url, title: $("head").find("title").text() , desc: "" }, success => { - success && new Notify().Render( 0, "成功加入未读列表。" ); - !success && new Notify().Render( 0, "已加入未读列表,请勿重新加入。" ); + const menuSrv = ( type, url ) => { + if ( type == msg.MESSAGE_ACTION.menu_whitelist ) { + storage.read.whitelist.push( url ); + new Notify().Render( "已加入到白名单。" ); + } else if ( type == msg.MESSAGE_ACTION.menu_exclusion ) { + storage.read.exclusion.push( url ); + new Notify().Render( "已加入到排除列表。" ); + } else if ( type == msg.MESSAGE_ACTION.menu_blacklist ) { + storage.option.blacklist.push( url ); + new Notify().Render( "已加入到黑名单。" ); + } else if ( type == msg.MESSAGE_ACTION.menu_unrdist ) { + storage.UnRead( "add", { url: url, title: $("head").find("title").text() , desc: "" }, success => { + success && new Notify().Render( 0, "成功加入未读列表。" ); + !success && new Notify().Render( 0, "已加入未读列表,请勿重新加入。" ); + }); + } + storage.Write( () => { + watch.SendMessage( "option", true ); }); - } - storage.Write( () => { - watch.SendMessage( "option", true ); - }); + }; + if ( storage.option.urlscheme && /whitelist|exclusion|blacklist/ig.test( request.type )) { + scheme.Render( request.type.replace( "menu_", "" ), storage.option.urlscheme, ( type, off, value ) => { + storage.option.urlscheme = off; + menuSrv( "menu_" + type, value ); + }); + } else menuSrv( request.type, request.value.url ); break; } }); From 3a1bffd078c3f084128fb8ed1588a81daf7c4905 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 13:06:31 +0800 Subject: [PATCH 213/329] Format source. --- src/module/labs.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/module/labs.jsx b/src/module/labs.jsx index ab5c2570..acbb47da 100644 --- a/src/module/labs.jsx +++ b/src/module/labs.jsx @@ -159,6 +159,10 @@ export default class LabsOpt extends React.Component { thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「打开稍后读」?" onChange={ (s)=>this.onChange(s, "option", "menu", "list" ) } /> + <Switch width="100%" checked={ this.props.option.menu.unrdist } + thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" + label="是否显示「加入到稍后读」?" + onChange={ (s)=>this.onChange(s, "option", "menu", "unrdist" ) } /> <Switch width="100%" checked={ this.props.option.menu.whitelist } thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「加入白名单」?" @@ -171,10 +175,6 @@ export default class LabsOpt extends React.Component { thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「加入到黑名单」?" onChange={ (s)=>this.onChange(s, "option", "menu", "blacklist" ) } /> - <Switch width="100%" checked={ this.props.option.menu.unrdist } - thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" - label="是否显示「加入到稍后读」?" - onChange={ (s)=>this.onChange(s, "option", "menu", "unrdist" ) } /> </div> </div> From 412f495830a01935d5ae763fe444728ed0cd4baf Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 14:17:31 +0800 Subject: [PATCH 214/329] Add 'urlscheme' to option page. --- src/module/labs.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/module/labs.jsx b/src/module/labs.jsx index acbb47da..dfac722a 100644 --- a/src/module/labs.jsx +++ b/src/module/labs.jsx @@ -175,6 +175,10 @@ export default class LabsOpt extends React.Component { thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「加入到黑名单」?" onChange={ (s)=>this.onChange(s, "option", "menu", "blacklist" ) } /> + <Switch width="100%" checked={ this.props.option.urlscheme } + thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" + label="默认弹出编辑框,取消后意味着直接保存" + onChange={ (s)=>this.onChange(s, "option", "urlscheme" ) } /> </div> </div> From effee5e879aa7ea0a90191f4e24a4622ddcd9348 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 14:18:13 +0800 Subject: [PATCH 215/329] Add 'urlscheme' to storage. --- src/service/storage.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/storage.js b/src/service/storage.js index f06a611e..d39c3e6a 100644 --- a/src/service/storage.js +++ b/src/service/storage.js @@ -140,6 +140,7 @@ const name = "simpread", "simpread.ksria.cn" ], plugins : [], // plugin id, e.g. kw36BtjGu0 + urlscheme : true, }, statistics = { "focus" : 0, From f3b22699dcf7aaee1a6de0cde43ce6a7ddc60431 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 14:20:38 +0800 Subject: [PATCH 216/329] Format source. --- src/module/urlscheme.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/module/urlscheme.jsx b/src/module/urlscheme.jsx index 77bbb2ab..59cd7af5 100644 --- a/src/module/urlscheme.jsx +++ b/src/module/urlscheme.jsx @@ -80,7 +80,7 @@ export class URLScheme extends React.Component { <Dropdown name={ category.filter( item => item.value == this.props.type )[0].name } items={ category } width="100%" onChange={ (v)=>this.onDropdownChange(v) } /> </sr-urls-head> <sr-urls-content> - <sr-urls-label>支持 domin 正则表达式 minimatch 等规则</sr-urls-label> + <sr-urls-label>支持 域名 · 主域名 · 正则表达式 · minimatch 等规则</sr-urls-label> <TextField multi={ false } value={ this.props.url } From f91e9b6b2d1f4b903d35fce8621eabe07b2c441e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 14:45:55 +0800 Subject: [PATCH 217/329] Optimize 'urlscheme' design. --- src/assets/css/simpread.css | 22 ++++++++++++++++++++++ src/module/urlscheme.jsx | 4 +++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 54080fac..009bbe9a 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -813,10 +813,12 @@ simpread-urlscheme sr-urls-head { align-items: center; flex-direction: row; + margin-bottom: 5px; width: 100%; } simpread-urlscheme sr-urls-content { + margin-bottom: 5px; width: 100%; } @@ -826,6 +828,26 @@ simpread-urlscheme sr-urls-footer { width: 100%; } +simpread-urlscheme sr-urls-a { + color: #2163f7; + cursor: pointer; +} + +simpread-urlscheme text-field-state { + border-top: none rgba(34, 101, 247, 0.8)!important; + border-left: none rgba(34, 101, 247, 0.8)!important; + border-right: none rgba(34, 101, 247, 0.8)!important; + border-bottom: 2px solid rgba(34, 101, 247, 0.8)!important; +} + +simpread-urlscheme switch { + margin-top: 0!important; +} + +simpread-urlscheme switch content span { + font-size: 12px!important; +} + @keyframes fadeInUp { from { opacity: 0; diff --git a/src/module/urlscheme.jsx b/src/module/urlscheme.jsx index 59cd7af5..58b8b350 100644 --- a/src/module/urlscheme.jsx +++ b/src/module/urlscheme.jsx @@ -80,13 +80,15 @@ export class URLScheme extends React.Component { <Dropdown name={ category.filter( item => item.value == this.props.type )[0].name } items={ category } width="100%" onChange={ (v)=>this.onDropdownChange(v) } /> </sr-urls-head> <sr-urls-content> - <sr-urls-label>支持 域名 · 主域名 · 正则表达式 · minimatch 等规则</sr-urls-label> + <sr-urls-label>支持 域名 · 主域名 · 正则表达式 · minimatch 等规则,详细 <sr-urls-a onClick={ ()=>window.open( 'http://ksria.com/simpread/docs/#/右键菜单?id=URL编辑器', '_blank') }>请看这里</sr-urls-a> </sr-urls-label> <TextField multi={ false } value={ this.props.url } errortext={ this.state.error } onChange={ (e)=>this.onURLChange(e) } /> + </sr-urls-content> + <sr-urls-content> <Switch width="100%" checked={ this.props.off } thumbedColor="#2163f7" trackedColor="#6699FF" waves="md-waves-effect" label="默认弹出编辑框,取消后意味着直接保存" From 8a4d440d6dd220a0c844bde4be50321f7a14a457 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 14:51:43 +0800 Subject: [PATCH 218/329] Add 'dividers' to labs. --- src/assets/css/options_page.css | 6 ++++++ src/module/labs.jsx | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/assets/css/options_page.css b/src/assets/css/options_page.css index 2e5d7f25..9ac5b436 100644 --- a/src/assets/css/options_page.css +++ b/src/assets/css/options_page.css @@ -225,6 +225,12 @@ input, textarea { z-index: 3; } +.dividers { + margin: 10px 0; + width: 100%; + border-bottom: 1px solid rgba(0,0,0,.12); +} + /** * Labs style */ diff --git a/src/module/labs.jsx b/src/module/labs.jsx index dfac722a..db9225d9 100644 --- a/src/module/labs.jsx +++ b/src/module/labs.jsx @@ -155,6 +155,7 @@ export default class LabsOpt extends React.Component { thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「使用阅读模式打开此链接」?" onChange={ (s)=>this.onChange(s, "option", "menu", "link" ) } /> + <div className="dividers"></div> <Switch width="100%" checked={ this.props.option.menu.list } thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「打开稍后读」?" @@ -163,6 +164,7 @@ export default class LabsOpt extends React.Component { thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「加入到稍后读」?" onChange={ (s)=>this.onChange(s, "option", "menu", "unrdist" ) } /> + <div className="dividers"></div> <Switch width="100%" checked={ this.props.option.menu.whitelist } thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「加入白名单」?" From 85bb3c11c94735cf270c35fb6054154b69feb568 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 14:52:44 +0800 Subject: [PATCH 219/329] Format source. --- src/module/labs.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/module/labs.jsx b/src/module/labs.jsx index db9225d9..e111b311 100644 --- a/src/module/labs.jsx +++ b/src/module/labs.jsx @@ -180,6 +180,7 @@ export default class LabsOpt extends React.Component { <Switch width="100%" checked={ this.props.option.urlscheme } thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="默认弹出编辑框,取消后意味着直接保存" + desc="包括:黑名单 · 白名单 · 排除列表均可使用" onChange={ (s)=>this.onChange(s, "option", "urlscheme" ) } /> </div> </div> From 1fb66f619e2bda5db47dbdc1ff98af1c6c1abb4c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 14:54:41 +0800 Subject: [PATCH 220/329] Format source. --- src/service/util.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/service/util.js b/src/service/util.js index 369ec8d5..e1226461 100644 --- a/src/service/util.js +++ b/src/service/util.js @@ -176,6 +176,7 @@ function clearHTML( str ) { function exclusion( minimatch, data ) { const url = window.location.origin + window.location.pathname; return data.exclusion.findIndex( item => { + item == null && ( item = "" ); item = item.trim(); return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; }) == -1 ? true : false; @@ -191,6 +192,7 @@ function exclusion( minimatch, data ) { function whitelist( minimatch, data ) { const url = window.location.origin + window.location.pathname; return data.whitelist.findIndex( item => { + item == null && ( item = "" ); item = item.trim(); return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; }) != -1 ? true : false; From b8f40cfc0b69b1aa542f609bdfd5ebfc995b8aee Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 15:10:58 +0800 Subject: [PATCH 221/329] Add 'exclusion' && 'whitelist' support regext logic. --- src/service/util.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/service/util.js b/src/service/util.js index e1226461..7afc5efd 100644 --- a/src/service/util.js +++ b/src/service/util.js @@ -178,7 +178,9 @@ function exclusion( minimatch, data ) { return data.exclusion.findIndex( item => { item == null && ( item = "" ); item = item.trim(); - return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; + if ( item.startsWith( "[[/" ) && item.endsWith( "/]]" ) ) { + return new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ) ).test( url ); + } else return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; }) == -1 ? true : false; } @@ -194,7 +196,9 @@ function whitelist( minimatch, data ) { return data.whitelist.findIndex( item => { item == null && ( item = "" ); item = item.trim(); - return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; + if ( item.startsWith( "[[/" ) && item.endsWith( "/]]" ) ) { + return new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ) ).test( url ); + } else return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; }) != -1 ? true : false; } From 895a7b5fbd20f6cb728ca231211cfd4048ce206d Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 15:32:38 +0800 Subject: [PATCH 222/329] Add util.blacklist(). --- src/service/util.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/service/util.js b/src/service/util.js index 7afc5efd..10de7e47 100644 --- a/src/service/util.js +++ b/src/service/util.js @@ -202,6 +202,23 @@ function whitelist( minimatch, data ) { }) != -1 ? true : false; } +/** + * Blacklist + * + * @param {object} minimatch + * @param {object} simpread.read + * @return {boolean} true: is blacklist; false: is't blacklist + */ +function blacklist( minimatch, data ) { + return data.blacklist.findIndex( item => { + item == null && ( item = "" ); + item = item.trim(); + if ( item.startsWith( "[[/" ) && item.endsWith( "/]]" ) ) { + return location.href.replace( new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ), "g" ), "" ) == "" ? true : false; + } else return item.startsWith( "http" ) ? minimatch( location.href, item ) : location.hostname.includes( item ); + }) != -1 ? true : false; +} + export { verifyHtml as verifyHtml, html2enml as HTML2ENML, @@ -211,4 +228,5 @@ export { clearHTML as ClearHTML, exclusion as Exclusion, whitelist as Whitelist, + blacklist as Blacklist, } \ No newline at end of file From ad10eba116c49f6288b8918651f70d092b703df3 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 15:35:45 +0800 Subject: [PATCH 223/329] Optimize 'contentscripts' blacklist logic. --- src/contentscripts.js | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/contentscripts.js b/src/contentscripts.js index 826c1157..31414a27 100644 --- a/src/contentscripts.js +++ b/src/contentscripts.js @@ -56,19 +56,7 @@ storage.Read( () => { * @return {boolean} true: is blacklist; false: is't blacklist */ function blacklist() { - for ( const item of storage.option.blacklist ) { - if ( item.trim() != "" && !item.startsWith( "http" ) ) { - if ( location.hostname.includes( item ) ) { - is_blacklist = true; - break; - } - } else { - if ( location.href == item ) { - is_blacklist = true; - break; - } - } - } + is_blacklist = util.Blacklist( puplugin.Plugin( "minimatch" ), storage.option ); console.log( "current site is blacklist", is_blacklist ) return is_blacklist; } From e3653316d1e25fe8b4587f95411fc0bb7e7c3afb Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 15:36:29 +0800 Subject: [PATCH 224/329] Format source. --- src/service/util.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/service/util.js b/src/service/util.js index 10de7e47..26d9609f 100644 --- a/src/service/util.js +++ b/src/service/util.js @@ -179,7 +179,7 @@ function exclusion( minimatch, data ) { item == null && ( item = "" ); item = item.trim(); if ( item.startsWith( "[[/" ) && item.endsWith( "/]]" ) ) { - return new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ) ).test( url ); + return location.href.replace( new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ), "g" ), "" ) == "" ? true : false; } else return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; }) == -1 ? true : false; } @@ -197,7 +197,7 @@ function whitelist( minimatch, data ) { item == null && ( item = "" ); item = item.trim(); if ( item.startsWith( "[[/" ) && item.endsWith( "/]]" ) ) { - return new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ) ).test( url ); + return location.href.replace( new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ), "g" ), "" ) == "" ? true : false; } else return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; }) != -1 ? true : false; } From ef8bf762bd94dc31c7deb79ec89cb9ab63eea7c5 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 16:25:48 +0800 Subject: [PATCH 225/329] Add util.GetPageInfo(). --- src/service/util.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/service/util.js b/src/service/util.js index 26d9609f..28dd318e 100644 --- a/src/service/util.js +++ b/src/service/util.js @@ -219,6 +219,20 @@ function blacklist( minimatch, data ) { }) != -1 ? true : false; } +/** + * Get page info + * + * @return {object} include: url, title, favicon, img, desc + */ +function getPageInfo() { + const url = location.href, + title = $( "sr-read" ).find( "sr-rd-title" ).text() || $( "head" ).find( "title" ).text() || "", + favicon = $( `head link[rel~=icon]` ).attr( "href" ) || "", + img = $( `head meta[property="og:image"]` ).attr( "content" ) || $( "sr-read" ).find( "img" ).attr( "src" ) || "", + desc = $( "sr-read" ).find( "sr-rd-desc" ).text() || $( `head meta[property="og:description"]` ).attr( "content" ) || $( 'meta[name=description]' ).attr( 'content' ) || ""; + return { url, title: title.trim(), favicon, img, desc: desc.trim() }; +} + export { verifyHtml as verifyHtml, html2enml as HTML2ENML, @@ -229,4 +243,5 @@ export { exclusion as Exclusion, whitelist as Whitelist, blacklist as Blacklist, + getPageInfo as GetPageInfo, } \ No newline at end of file From 79ea682a8b522c51fc5a3a4e4d1d3c456b4d9c54 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 16:31:17 +0800 Subject: [PATCH 226/329] Add util.GetPageInfo() to 'add unread' workflow. --- src/contentscripts.js | 2 +- src/service/output.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/contentscripts.js b/src/contentscripts.js index 31414a27..547372e2 100644 --- a/src/contentscripts.js +++ b/src/contentscripts.js @@ -144,7 +144,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) storage.option.blacklist.push( url ); new Notify().Render( "已加入到黑名单。" ); } else if ( type == msg.MESSAGE_ACTION.menu_unrdist ) { - storage.UnRead( "add", { url: url, title: $("head").find("title").text() , desc: "" }, success => { + storage.UnRead( "add", util.GetPageInfo(), success => { success && new Notify().Render( 0, "成功加入未读列表。" ); !success && new Notify().Render( 0, "已加入未读列表,请勿重新加入。" ); }); diff --git a/src/service/output.js b/src/service/output.js index 13df2222..eabc897d 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -74,7 +74,7 @@ function action( type, title, desc, content ) { switch ( type ) { case "save": const url = window.location.href.replace( /(\?|&)simpread_mode=read/, "" ); - storage.UnRead( "add", { url, title, desc }, success => { + storage.UnRead( "add", util.GetPageInfo(), success => { success && new Notify().Render( 0, "成功加入未读列表。" ); !success && new Notify().Render( 0, "已加入未读列表,请勿重新加入。" ); }); From d53b4cc6e8e701a40259e0ccd0c676780bbbf83b Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 17:43:55 +0800 Subject: [PATCH 227/329] Add tips file. --- src/service/tips.js | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/service/tips.js diff --git a/src/service/tips.js b/src/service/tips.js new file mode 100644 index 00000000..3ae71153 --- /dev/null +++ b/src/service/tips.js @@ -0,0 +1,72 @@ +console.log( "=== simpread tips load ===" ) + +import Notify from 'notify'; +import * as msg from 'message'; +import {browser} from 'browser'; + +/** + * Verify current page and some plugin exist + * + * @param {array} plugins ids + */ +function Render( plugins ) { + const notify = code => { + new Notify().Render( messages[code], "不再提示", () => { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.tips_norepeat, { code })); + }); + }, + pushMessage = code => { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.tips, { code }), result => { + if ( result ) { + notify( code ); + } + }); + }, + messages = { + "klGUASLasg": '检测到当前环境有代码段,请使用 <a target="blank" href="https://simpread.ksria.cn/plugins/details/klGUASLasg">代码增强插件</a> 辅助阅读', + "VQOZdNET2d": '检测到当前环境有大量的图片,可以使用 <a target="blank" href="https://simpread.ksria.cn/plugins/details/VQOZdNET2d">点击查看大图</a> 辅助阅读', + "DxlFcL52iy": '如果你想换个论坛类页面风格,可以使用 <a target="blank" href="https://simpread.ksria.cn/plugins/details/DxlFcL52iy">Materail Design 风格</a> 辅助阅读', + } + // verify klGUASLasg + if ( $( "sr-read" ).find( "pre" ).length > 0 && plugins.findIndex( item => item == "klGUASLasg" ) == -1 ) { + pushMessage( "klGUASLasg" ); + } + // verify VQOZdNET2d + if ( $( "sr-read" ).find( "img" ).length > 5 && plugins.findIndex( item => item == "VQOZdNET2d" ) == -1 ) { + pushMessage( "VQOZdNET2d" ); + } + // verify VQOZdNET2d + if ( ( location.hostname == "www.zhihu.com" && location.pathname.startsWith( "/question/" ) ) && plugins.findIndex( item => item == "DxlFcL52iy" ) == -1 ) { + pushMessage( "DxlFcL52iy" ); + } +} + +/** + * Background call + * + * @param {string} plugin id + * @param {func} callback true: tips; false: not tip + */ +function Verify( id, callback ) { + const tips = JSON.parse( localStorage[ "simpread-tips" ] || "{}" ); + if ( !tips[id] ) { + callback( true ); + } else callback( false ); +} + +/** + * Not repeat tips + * + * @param {string} tips id + */ +function Done( id ) { + const tips = JSON.parse( localStorage[ "simpread-tips" ] || "{}" ); + tips[id] = true; + localStorage.setItem( "simpread-tips", JSON.stringify( tips )); +} + +export { + Render, + Verify, + Done, +} \ No newline at end of file From 8937f214f48a4e4a5b6a3f2cfea6e00677c26328 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 17:44:09 +0800 Subject: [PATCH 228/329] Add 'tips' to webpack. --- webpack.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webpack.config.js b/webpack.config.js index f89f4b23..4d7cced9 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -264,6 +264,7 @@ const webpack = require( 'webpack' ), permission : __dirname + '/src/service/permission.js', offline : __dirname + '/src/service/offline.js', snapshot : __dirname + '/src/service/snapshot.js', + tips : __dirname + '/src/service/tips.js', focus : __dirname + '/src/focus/focus.js', controlbar : __dirname + '/src/focus/controlbar.jsx', From 3c96f238915d7348372cc383697a620b19f8514a Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 17:45:08 +0800 Subject: [PATCH 229/329] Add tips message addListener workflow. --- src/background.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/background.js b/src/background.js index 99dab4ae..c825099d 100644 --- a/src/background.js +++ b/src/background.js @@ -10,6 +10,7 @@ import * as watch from 'watch'; import * as WebDAV from 'webdav'; import * as permission from 'permission'; +import * as tips from 'tips'; import PureRead from 'puread'; // global update site tab id @@ -288,6 +289,12 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) case msg.MESSAGE_ACTION.speak_stop: browser.tts.stop(); break; + case msg.MESSAGE_ACTION.tips: + tips.Verify( request.value.code, sendResponse ); + break; + case msg.MESSAGE_ACTION.tips_norepeat: + tips.Done( request.value.code ); + break; } }); From cb0ef66bbd7160eb12d763bc33d0185ec954e5fb Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 17:45:27 +0800 Subject: [PATCH 230/329] Add tips message. --- src/service/message.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/service/message.js b/src/service/message.js index 260b5098..2b78bec7 100644 --- a/src/service/message.js +++ b/src/service/message.js @@ -48,6 +48,9 @@ const action = { permission : "permission", // snapshot snapshot : "snapshot", + // tips + tips : "tips", + tips_norepeat : "tips_norepeat", }; /** From b2f55857fedf9880aa8f81de208a54b0123dcca4 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 17:45:37 +0800 Subject: [PATCH 231/329] Add tips to read mode workflow. --- src/read/read.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/read/read.jsx b/src/read/read.jsx index e4dc0012..affebd9d 100644 --- a/src/read/read.jsx +++ b/src/read/read.jsx @@ -15,6 +15,7 @@ import {browser} from 'browser'; import * as msg from 'message'; import * as highlight from 'highlight'; import * as run from 'runtime'; +import * as tips from 'tips'; import * as tooltip from 'tooltip'; import * as waves from 'waves'; @@ -151,6 +152,7 @@ class Read extends React.Component { setTimeout( ()=>{ this.verifyContent(); + tips.Render( storage.option.plugins ); }, 50 ); } From ed90f8b52285904dd26609180e93ece85b5fdaec Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 17:49:34 +0800 Subject: [PATCH 232/329] Format source. --- src/service/tips.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/tips.js b/src/service/tips.js index 3ae71153..89899571 100644 --- a/src/service/tips.js +++ b/src/service/tips.js @@ -35,7 +35,7 @@ function Render( plugins ) { if ( $( "sr-read" ).find( "img" ).length > 5 && plugins.findIndex( item => item == "VQOZdNET2d" ) == -1 ) { pushMessage( "VQOZdNET2d" ); } - // verify VQOZdNET2d + // verify DxlFcL52iy if ( ( location.hostname == "www.zhihu.com" && location.pathname.startsWith( "/question/" ) ) && plugins.findIndex( item => item == "DxlFcL52iy" ) == -1 ) { pushMessage( "DxlFcL52iy" ); } From 9e773b9688392dd12328b286ae9a361d3aee5f23 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 18:59:19 +0800 Subject: [PATCH 233/329] Fix some urlscheme design and logic bug. --- src/assets/css/simpread.css | 5 +---- src/module/urlscheme.jsx | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 009bbe9a..6c4c49de 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -789,6 +789,7 @@ simpread-urlscheme { } simpread-urlscheme * { + font-size: 12px!important; box-sizing: border-box; } @@ -844,10 +845,6 @@ simpread-urlscheme switch { margin-top: 0!important; } -simpread-urlscheme switch content span { - font-size: 12px!important; -} - @keyframes fadeInUp { from { opacity: 0; diff --git a/src/module/urlscheme.jsx b/src/module/urlscheme.jsx index 58b8b350..2aaf74ea 100644 --- a/src/module/urlscheme.jsx +++ b/src/module/urlscheme.jsx @@ -46,7 +46,7 @@ export class URLScheme extends React.Component { this.setState({ error : "正则表达式错误", disable: true }); } else if ( !value.startsWith( "[[/" ) && !value.startsWith( "http" ) && value != location.hostname.replace( "www.", "" ) ) { this.setState({ error : "主域名不匹配", disable: true }); - } else if ( !value.startsWith( "[[/" ) && !minimatch( location.href, value ) ) { + } else if ( !value.startsWith( "[[/" ) && value.startsWith( "http" ) && !minimatch( location.href, value ) ) { this.setState({ error : "minimatch 适配错误", disable: true }); } else { this.setState({ error : "", disable: false }); From 716c7ec08d0b162d7daad9b2dd370ae1025f9d40 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 19:15:43 +0800 Subject: [PATCH 234/329] Add tips.Help(). --- src/service/tips.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/service/tips.js b/src/service/tips.js index 89899571..1f527979 100644 --- a/src/service/tips.js +++ b/src/service/tips.js @@ -41,6 +41,20 @@ function Render( plugins ) { } } +/** + * Help + * + * @param {object} storage.statistics + */ +function Help( statistics ) { + if ( statistics.read == 0 ) { + new Notify().Render({ content: "嗨,很高兴第一次使用简悦的阅读模式,是否看看新手帮助?", action: "我要看", cancel: "老司机", callback: type => { + type == "action" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url: "http://ksria.com/simpread/guide/#readmode" })); + type == "cancel" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.tips_norepeat, { code: "readmode" })); + }}); + } +} + /** * Background call * @@ -69,4 +83,5 @@ export { Render, Verify, Done, + Help, } \ No newline at end of file From 1949185125495561f683f774f5063afa7b6d4432 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 6 Jan 2020 19:17:15 +0800 Subject: [PATCH 235/329] Add tips.Help() to 'read mode'. --- src/read/read.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/read/read.jsx b/src/read/read.jsx index affebd9d..1a1398f4 100644 --- a/src/read/read.jsx +++ b/src/read/read.jsx @@ -153,6 +153,7 @@ class Read extends React.Component { setTimeout( ()=>{ this.verifyContent(); tips.Render( storage.option.plugins ); + tips.Help( storage.statistics ); }, 50 ); } From 5dd73b167c80252549ba12d793c4e851b04d281c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 12:13:09 +0800 Subject: [PATCH 236/329] Format source. --- src/service/menu.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/service/menu.js b/src/service/menu.js index a83efc51..35894b8b 100644 --- a/src/service/menu.js +++ b/src/service/menu.js @@ -55,6 +55,9 @@ function createAll() { storage.option.menu.list && ( context.list.id = browser.contextMenus.create( context.list.menu )); + storage.option.menu.unrdist && + ( context.unrdist.id = browser.contextMenus.create( context.unrdist.menu )); + storage.option.menu.whitelist && ( context.whitelist.id = browser.contextMenus.create( context.whitelist.menu )); @@ -63,9 +66,6 @@ function createAll() { storage.option.menu.blacklist && ( context.blacklist.id = browser.contextMenus.create( context.blacklist.menu )); - - storage.option.menu.unrdist && - ( context.unrdist.id = browser.contextMenus.create( context.unrdist.menu )); } /** From b3628afc3ccf30f1068c07115be6ef4a7127b483 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 12:42:06 +0800 Subject: [PATCH 237/329] Optimize 'google analytics' logic. --- src/background.js | 24 ++++++++++++++++++------ src/options/options.js | 25 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/background.js b/src/background.js index c825099d..5d72d3e6 100644 --- a/src/background.js +++ b/src/background.js @@ -425,12 +425,24 @@ function tracked({ eventCategory, eventAction, eventLabel }) { */ analytics(); function analytics() { - (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); - ga('create', 'UA-405976-12', 'auto'); - ga('send', 'pageview'); + (function(a,b,c){var d=a.history,e=document,f=navigator||{},g=localStorage, + h=encodeURIComponent,i=d.pushState,k=function(){return Math.random().toString(36)}, + l=function(){return g.cid||(g.cid=k()),g.cid},m=function(r){var s=[];for(var t in r) + r.hasOwnProperty(t)&&void 0!==r[t]&&s.push(h(t)+"="+h(r[t]));return s.join("&")}, + n=function(r,s,t,u,v,w,x){var z="https://www.google-analytics.com/collect", + A=m({v:"1",ds:"web",aip:c.anonymizeIp?1:void 0,tid:b,cid:l(),t:r||"pageview", + sd:c.colorDepth&&screen.colorDepth?screen.colorDepth+"-bits":void 0,dr:e.referrer|| + void 0,dt:e.title,dl:e.location.origin+e.location.pathname+e.location.search,ul:c.language? + (f.language||"").toLowerCase():void 0,de:c.characterSet?e.characterSet:void 0, + sr:c.screenSize?(a.screen||{}).width+"x"+(a.screen||{}).height:void 0,vp:c.screenSize&& + a.visualViewport?(a.visualViewport||{}).width+"x"+(a.visualViewport||{}).height:void 0, + ec:s||void 0,ea:t||void 0,el:u||void 0,ev:v||void 0,exd:w||void 0,exf:"undefined"!=typeof x&& + !1==!!x?0:void 0});if(f.sendBeacon)f.sendBeacon(z,A);else{var y=new XMLHttpRequest; + y.open("POST",z,!0),y.send(A)}};d.pushState=function(r){return"function"==typeof d.onpushstate&& + d.onpushstate({state:r}),setTimeout(n,c.delay||10),i.apply(d,arguments)},n(), + a.ma={trackEvent:function o(r,s,t,u){return n("event",r,s,t,u)}, + trackException:function q(r,s){return n("exception",null,null,null,null,r,s)}}}) + (window,"UA-405976-14",{anonymizeIp:true,colorDepth:true,characterSet:true,screenSize:true,language:true}); } /** diff --git a/src/options/options.js b/src/options/options.js index 5cabb73a..46cc2d8b 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -427,3 +427,28 @@ function helpRender() { } }); } + +/** + * Google analytics + */ +analytics(); +function analytics() { + (function(a,b,c){var d=a.history,e=document,f=navigator||{},g=localStorage, + h=encodeURIComponent,i=d.pushState,k=function(){return Math.random().toString(36)}, + l=function(){return g.cid||(g.cid=k()),g.cid},m=function(r){var s=[];for(var t in r) + r.hasOwnProperty(t)&&void 0!==r[t]&&s.push(h(t)+"="+h(r[t]));return s.join("&")}, + n=function(r,s,t,u,v,w,x){var z="https://www.google-analytics.com/collect", + A=m({v:"1",ds:"web",aip:c.anonymizeIp?1:void 0,tid:b,cid:l(),t:r||"pageview", + sd:c.colorDepth&&screen.colorDepth?screen.colorDepth+"-bits":void 0,dr:e.referrer|| + void 0,dt:e.title,dl:e.location.origin+e.location.pathname+e.location.search,ul:c.language? + (f.language||"").toLowerCase():void 0,de:c.characterSet?e.characterSet:void 0, + sr:c.screenSize?(a.screen||{}).width+"x"+(a.screen||{}).height:void 0,vp:c.screenSize&& + a.visualViewport?(a.visualViewport||{}).width+"x"+(a.visualViewport||{}).height:void 0, + ec:s||void 0,ea:t||void 0,el:u||void 0,ev:v||void 0,exd:w||void 0,exf:"undefined"!=typeof x&& + !1==!!x?0:void 0});if(f.sendBeacon)f.sendBeacon(z,A);else{var y=new XMLHttpRequest; + y.open("POST",z,!0),y.send(A)}};d.pushState=function(r){return"function"==typeof d.onpushstate&& + d.onpushstate({state:r}),setTimeout(n,c.delay||10),i.apply(d,arguments)},n(), + a.ma={trackEvent:function o(r,s,t,u){return n("event",r,s,t,u)}, + trackException:function q(r,s){return n("exception",null,null,null,null,r,s)}}}) + (window,"UA-405976-14",{anonymizeIp:true,colorDepth:true,characterSet:true,screenSize:true,language:true}); +} From a5a77a96a4d4179852ecf1db9d4153ad0cf4236e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:37:28 +0800 Subject: [PATCH 238/329] Format source. --- src/service/storage.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/service/storage.js b/src/service/storage.js index d39c3e6a..544d9ff0 100644 --- a/src/service/storage.js +++ b/src/service/storage.js @@ -665,7 +665,6 @@ class Storage { service ? simpread.statistics.service[ service ]++ : simpread.statistics[ type ]++; } console.log( "current statistics is ", simpread.statistics ) - browser.runtime.sendMessage({ type: "track", value: { eventAction: type, eventCategory: "read mode", eventLabel: "click" } }); save( undefined, type == "create" ); } From ea02e0bc617029c0a9491783a70533e91ef410f7 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:39:15 +0800 Subject: [PATCH 239/329] Add 'track' push message. --- src/read/read.jsx | 1 + src/service/output.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/read/read.jsx b/src/read/read.jsx index 1a1398f4..7ce19819 100644 --- a/src/read/read.jsx +++ b/src/read/read.jsx @@ -142,6 +142,7 @@ class Read extends React.Component { tooltip.Render( rdclsjq ); waves.Render({ root: rdclsjq }); storage.Statistics( "read" ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "mode", eventAction: "readmode", eventLabel: "readmode" }) ); !this.props.wrapper.avatar && this.props.read.toc && toc.Render( "sr-read", $( "sr-rd-content" ), this.props.read.theme, this.props.read.toc_hide ); diff --git a/src/service/output.js b/src/service/output.js index eabc897d..a89f9516 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -71,6 +71,7 @@ function action( type, title, desc, content ) { type.split("_")[1] != "card" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url })); } else if ( [ "save", "markdown", "offlinemarkdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml", "snapshot", "bear", "ulysses" ].includes( type ) ) { storage.Statistics( "service", type ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "service", eventAction: "service", eventLabel: type }) ); switch ( type ) { case "save": const url = window.location.href.replace( /(\?|&)simpread_mode=read/, "" ); @@ -223,6 +224,7 @@ function action( type, title, desc, content ) { const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion, youdao, weizhi } = exp, id = type == "yinxiang" ? "evernote" : type; storage.Statistics( "service", type ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "service", eventAction: "service", eventLabel: type }) ); const service = type => { switch( type ) { case "dropbox": From 825c60b419152609c724bd75a2c2ac9bab4e1477 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:39:42 +0800 Subject: [PATCH 240/329] Add track to 'google analytics'. --- src/background.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/background.js b/src/background.js index 5d72d3e6..3500801d 100644 --- a/src/background.js +++ b/src/background.js @@ -412,12 +412,7 @@ function setMenuAndIcon( id, code ) { */ function tracked({ eventCategory, eventAction, eventLabel }) { console.log( "current track is", eventCategory, eventAction, eventLabel ) - ga( 'send', { - hitType : 'event', - eventCategory, - eventAction, - eventLabel - }); + ma.trackEvent( eventCategory, eventAction, eventAction, eventLabel ); } /** From aee4f7c3af6efdfa21b70e0b32ad39d29ef893e6 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:41:10 +0800 Subject: [PATCH 241/329] Add 'focus mode' to track. --- src/focus/focus.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/focus/focus.js b/src/focus/focus.js index 06932f62..2bd093a0 100644 --- a/src/focus/focus.js +++ b/src/focus/focus.js @@ -67,6 +67,7 @@ var storage = require( "storage" ).storage, tooltip.Render( bgclsjq ); waves.Render({ root: bgclsjq }); storage.Statistics( "focus" ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "mode", eventAction: "focusmode", eventLabel: "focusmode" }) ); // click mask remove it $( bgclsjq ).on( "click", function( event, data ) { From d1dc709b0681a20c8a876cd6dd99d69121c30d06 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:44:04 +0800 Subject: [PATCH 242/329] Add 'install / update' to track. --- src/options/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index 46cc2d8b..385a4055 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -203,7 +203,7 @@ function vernotify( first ) { updateData(); } // website_sync = true; when version is 1.1.3 website_list is newer - browser.runtime.sendMessage({ type: "track", value: { eventAction: hash.startsWith( "#firstload?ver=" ) ? "install" : "update" , eventCategory: "install", eventLabel: "install && update" } }); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "install", eventAction: hash.startsWith( "#firstload?ver=" ) ? "install" : "update", eventLabel: hash.startsWith( "#firstload?ver=" ) ? "install" : "update" }) ); history.pushState( "", "", "/options/options.html" ); } else if ( hash.startsWith( "#update?patch=" ) ) { const patch = hash.match( /[0-9\.]+/ )[0]; From b40536b863d7ffb31028e67cd649846685a72986 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:45:20 +0800 Subject: [PATCH 243/329] Change 'eventLabel' to 'eventValue'. --- src/background.js | 6 +++--- src/focus/focus.js | 2 +- src/options/options.js | 2 +- src/read/read.jsx | 2 +- src/service/output.js | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/background.js b/src/background.js index 3500801d..1d9ee53f 100644 --- a/src/background.js +++ b/src/background.js @@ -410,9 +410,9 @@ function setMenuAndIcon( id, code ) { * * @param {object} google analytics track object */ -function tracked({ eventCategory, eventAction, eventLabel }) { - console.log( "current track is", eventCategory, eventAction, eventLabel ) - ma.trackEvent( eventCategory, eventAction, eventAction, eventLabel ); +function tracked({ eventCategory, eventAction, eventValue }) { + console.log( "current track is", eventCategory, eventAction, eventValue ) + ma.trackEvent( eventCategory, eventAction, eventAction, eventValue ); } /** diff --git a/src/focus/focus.js b/src/focus/focus.js index 2bd093a0..24ba031f 100644 --- a/src/focus/focus.js +++ b/src/focus/focus.js @@ -67,7 +67,7 @@ var storage = require( "storage" ).storage, tooltip.Render( bgclsjq ); waves.Render({ root: bgclsjq }); storage.Statistics( "focus" ); - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "mode", eventAction: "focusmode", eventLabel: "focusmode" }) ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "mode", eventAction: "focusmode", eventValue: "focusmode" }) ); // click mask remove it $( bgclsjq ).on( "click", function( event, data ) { diff --git a/src/options/options.js b/src/options/options.js index 385a4055..1eeb1f44 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -203,7 +203,7 @@ function vernotify( first ) { updateData(); } // website_sync = true; when version is 1.1.3 website_list is newer - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "install", eventAction: hash.startsWith( "#firstload?ver=" ) ? "install" : "update", eventLabel: hash.startsWith( "#firstload?ver=" ) ? "install" : "update" }) ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "install", eventAction: hash.startsWith( "#firstload?ver=" ) ? "install" : "update", eventValue: hash.startsWith( "#firstload?ver=" ) ? "install" : "update" }) ); history.pushState( "", "", "/options/options.html" ); } else if ( hash.startsWith( "#update?patch=" ) ) { const patch = hash.match( /[0-9\.]+/ )[0]; diff --git a/src/read/read.jsx b/src/read/read.jsx index 7ce19819..6899e4f8 100644 --- a/src/read/read.jsx +++ b/src/read/read.jsx @@ -142,7 +142,7 @@ class Read extends React.Component { tooltip.Render( rdclsjq ); waves.Render({ root: rdclsjq }); storage.Statistics( "read" ); - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "mode", eventAction: "readmode", eventLabel: "readmode" }) ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "mode", eventAction: "readmode", eventValue: "readmode" }) ); !this.props.wrapper.avatar && this.props.read.toc && toc.Render( "sr-read", $( "sr-rd-content" ), this.props.read.theme, this.props.read.toc_hide ); diff --git a/src/service/output.js b/src/service/output.js index a89f9516..8e4b4c7a 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -71,7 +71,7 @@ function action( type, title, desc, content ) { type.split("_")[1] != "card" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url })); } else if ( [ "save", "markdown", "offlinemarkdown", "png", "kindle", "pdf", "epub", "temp", "html", "offlinehtml", "snapshot", "bear", "ulysses" ].includes( type ) ) { storage.Statistics( "service", type ); - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "service", eventAction: "service", eventLabel: type }) ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "service", eventAction: "service", eventValue: type }) ); switch ( type ) { case "save": const url = window.location.href.replace( /(\?|&)simpread_mode=read/, "" ); @@ -224,7 +224,7 @@ function action( type, title, desc, content ) { const { dropbox, pocket, instapaper, linnk, evernote, onenote, gdrive, jianguo, yuque, notion, youdao, weizhi } = exp, id = type == "yinxiang" ? "evernote" : type; storage.Statistics( "service", type ); - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "service", eventAction: "service", eventLabel: type }) ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "service", eventAction: "service", eventValue: type }) ); const service = type => { switch( type ) { case "dropbox": From 66bc3fa3b87707e918ff2601461046f8acb970b6 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:51:26 +0800 Subject: [PATCH 244/329] Format source. --- src/focus/focus.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/focus/focus.js b/src/focus/focus.js index 24ba031f..afffd518 100644 --- a/src/focus/focus.js +++ b/src/focus/focus.js @@ -6,6 +6,8 @@ var storage = require( "storage" ).storage, fcontrol = require( "controlbar" ), tooltip = require( "tooltip" ), waves = require( "waves" ), + browser = require( "browser" ).browser, + msg = require( "message" ), focus = ( function () { var $parent, From d291266d734d0eac8012bdc5fb57d28681900181 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:52:45 +0800 Subject: [PATCH 245/329] Add 'unintall' to track. --- src/background.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/background.js b/src/background.js index 1d9ee53f..ae90b0ef 100644 --- a/src/background.js +++ b/src/background.js @@ -444,5 +444,6 @@ function analytics() { * Uninstall */ function uninstall() { + ma.trackEvent( "uninstall", "uninstall", "uninstall", "uninstall" ); browser.runtime.setUninstallURL( storage.option.uninstall ? storage.service + "/uninstall" : "" ); } \ No newline at end of file From e0b016cc5979aaf7b82917b68425c6fb66ba8768 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 14:56:55 +0800 Subject: [PATCH 246/329] Format source. --- src/service/tips.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/tips.js b/src/service/tips.js index 1f527979..6c2012b1 100644 --- a/src/service/tips.js +++ b/src/service/tips.js @@ -47,7 +47,7 @@ function Render( plugins ) { * @param {object} storage.statistics */ function Help( statistics ) { - if ( statistics.read == 0 ) { + if ( statistics.read == 1 ) { new Notify().Render({ content: "嗨,很高兴第一次使用简悦的阅读模式,是否看看新手帮助?", action: "我要看", cancel: "老司机", callback: type => { type == "action" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url: "http://ksria.com/simpread/guide/#readmode" })); type == "cancel" && browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.tips_norepeat, { code: "readmode" })); From eba560325d9e6f237d844826e08a8146ab1b5ab0 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 15:00:04 +0800 Subject: [PATCH 247/329] Add 'sync' to track. --- src/module/common.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/module/common.jsx b/src/module/common.jsx index 32f7aff2..6f1db268 100644 --- a/src/module/common.jsx +++ b/src/module/common.jsx @@ -9,7 +9,7 @@ import * as ver from 'version'; import * as menu from 'menu'; import * as watch from 'watch'; import * as exp from 'export'; -import {br} from 'browser'; +import {browser,br}from 'browser'; import * as msg from 'message'; export default class CommonOpt extends React.Component { @@ -101,6 +101,7 @@ export default class CommonOpt extends React.Component { }; storage.Safe( ()=> { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "service", eventAction: "sync", eventValue: storage.option.save_at }) ); if ( storage.option.save_at == "dropbox" ) { const sec_dbx = storage.secret.dropbox; !sec_dbx.access_token ? From 73a1068493780b869a355b79bc2db3a41998005e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 15:41:25 +0800 Subject: [PATCH 248/329] Optimize menu and add 'separator'. --- src/service/menu.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/service/menu.js b/src/service/menu.js index 35894b8b..5ecdcbe6 100644 --- a/src/service/menu.js +++ b/src/service/menu.js @@ -23,14 +23,14 @@ const context = { "documentUrlPatterns" : [ "http://*/*" , "https://*/*" ] }; -Object.assign( context.focus.menu, menu, { id: "focus", "title" : "聚焦模式" }); -Object.assign( context.read.menu, menu, { id: "read", "title" : "阅读模式" }); -Object.assign( context.list.menu, menu, { id: "list", "title" : "打开稍后读" }); -Object.assign( context.link.menu, menu, { id: "link", "title" : "使用阅读模式打开此链接", contexts: [ "link" ] }); +Object.assign( context.focus.menu, menu, { id: "focus", "title" : "聚焦模式" }); +Object.assign( context.read.menu, menu, { id: "read", "title" : "阅读模式" }); +Object.assign( context.link.menu, menu, { id: "link", "title" : "使用阅读模式打开此链接", contexts: [ "link" ] }); +Object.assign( context.unrdist.menu,menu, { id: "unrdist", "title" : "将当前页面加入稍后读" }); +Object.assign( context.list.menu, menu, { id: "list", "title" : "打开稍后读" }); Object.assign( context.whitelist.menu, menu, { id: "whitelist", "title" : "将当前页面加入到白名单" }); Object.assign( context.exclusion.menu, menu, { id: "exclusion", "title" : "将当前页面加入到排除列表" }); Object.assign( context.blacklist.menu, menu, { id: "blacklist", "title" : "将当前页面加入到黑名单" }); -Object.assign( context.unrdist.menu, menu, { id: "unrdist", "title" : "将当前页面加入稍后读" }); /** * Listen contextMenus message @@ -43,6 +43,8 @@ function onClicked( callback ) { * Create all context menu */ function createAll() { + browser.contextMenus.create({ "type": "separator" }); + storage.option.menu.focus && ( context.focus.id = browser.contextMenus.create( context.focus.menu )); @@ -52,12 +54,18 @@ function createAll() { storage.option.menu.link && ( context.link.id = browser.contextMenus.create( context.link.menu )); + browser.contextMenus.create({ "type": "separator" }); + browser.contextMenus.create({ "type": "separator" }); + storage.option.menu.list && ( context.list.id = browser.contextMenus.create( context.list.menu )); storage.option.menu.unrdist && ( context.unrdist.id = browser.contextMenus.create( context.unrdist.menu )); + browser.contextMenus.create({ "type": "separator" }); + browser.contextMenus.create({ "type": "separator" }); + storage.option.menu.whitelist && ( context.whitelist.id = browser.contextMenus.create( context.whitelist.menu )); @@ -66,6 +74,8 @@ function createAll() { storage.option.menu.blacklist && ( context.blacklist.id = browser.contextMenus.create( context.blacklist.menu )); + + browser.contextMenus.create({ "type": "separator" }); } /** From 7ab60da8fedc729e897251b9fbc1f174f2baaf0e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 15:42:13 +0800 Subject: [PATCH 249/329] Format source. --- src/service/menu.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/service/menu.js b/src/service/menu.js index 5ecdcbe6..b5aeeeae 100644 --- a/src/service/menu.js +++ b/src/service/menu.js @@ -23,11 +23,13 @@ const context = { "documentUrlPatterns" : [ "http://*/*" , "https://*/*" ] }; -Object.assign( context.focus.menu, menu, { id: "focus", "title" : "聚焦模式" }); -Object.assign( context.read.menu, menu, { id: "read", "title" : "阅读模式" }); -Object.assign( context.link.menu, menu, { id: "link", "title" : "使用阅读模式打开此链接", contexts: [ "link" ] }); -Object.assign( context.unrdist.menu,menu, { id: "unrdist", "title" : "将当前页面加入稍后读" }); -Object.assign( context.list.menu, menu, { id: "list", "title" : "打开稍后读" }); +Object.assign( context.focus.menu, menu, { id: "focus", "title" : "聚焦模式" }); +Object.assign( context.read.menu, menu, { id: "read", "title" : "阅读模式" }); +Object.assign( context.link.menu, menu, { id: "link", "title" : "使用阅读模式打开此链接", contexts: [ "link" ] }); + +Object.assign( context.list.menu, menu, { id: "list", "title" : "打开稍后读" }); +Object.assign( context.unrdist.menu, menu, { id: "unrdist", "title" : "将当前页面加入稍后读" }); + Object.assign( context.whitelist.menu, menu, { id: "whitelist", "title" : "将当前页面加入到白名单" }); Object.assign( context.exclusion.menu, menu, { id: "exclusion", "title" : "将当前页面加入到排除列表" }); Object.assign( context.blacklist.menu, menu, { id: "blacklist", "title" : "将当前页面加入到黑名单" }); From bdd85a3e0292f7762375d25b7a2035de2ad0a897 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 15:44:36 +0800 Subject: [PATCH 250/329] Add 'menu click' to track. --- src/background.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/background.js b/src/background.js index ae90b0ef..9a5645e1 100644 --- a/src/background.js +++ b/src/background.js @@ -66,6 +66,7 @@ function getNewsitesHandler( result ) { */ menu.OnClicked( ( info, tab ) => { console.log( "background contentmenu Listener", info, tab ); + ma.trackEvent( "menu", "menu", "menu", info.menuItemId ); if ( info.menuItemId == "link" ) { info.linkUrl && browser.tabs.create({ url: info.linkUrl + "?simpread_mode=read" }); } else if ( info.menuItemId == "list" ) { From 07209a2c51ff8d7c40da9768b81a8d8ab4d91b17 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:25:14 +0800 Subject: [PATCH 251/329] Add 'lazyload' to data structure. --- src/service/storage.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/storage.js b/src/service/storage.js index 544d9ff0..82427433 100644 --- a/src/service/storage.js +++ b/src/service/storage.js @@ -128,6 +128,7 @@ const name = "simpread", whitelist: false, exclusion: false, blacklist: false, + lazyload: false, unrdist: false, }, origins : [], From c10bbb99e6c89778d5ef8565486a1039e62f24ca Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:25:55 +0800 Subject: [PATCH 252/329] Add lazyload message. --- src/service/message.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/service/message.js b/src/service/message.js index 2b78bec7..57f81c72 100644 --- a/src/service/message.js +++ b/src/service/message.js @@ -9,10 +9,12 @@ const action = { tab_selected : "tab_selected", new_tab : "new_tab", close_tab : "close_tab", + // menu menu : "menu", menu_whitelist : "menu_whitelist", menu_exclusion : "menu_exclusion", menu_blacklist : "menu_blacklist", + menu_lazyload : "menu_lazyload", menu_unrdist : "menu_unrdist", updated : "updated", save_verify : "save_verify", From c55c4810cf2f2f4a8151d72929f6f4e4e4982f84 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:26:34 +0800 Subject: [PATCH 253/329] Add 'lazyload' to menu. --- src/background.js | 2 ++ src/service/menu.js | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/src/background.js b/src/background.js index 9a5645e1..56a3f039 100644 --- a/src/background.js +++ b/src/background.js @@ -79,6 +79,8 @@ menu.OnClicked( ( info, tab ) => { browser.tabs.sendMessage( tab.id, msg.Add( msg.MESSAGE_ACTION.menu_blacklist, {url: info.pageUrl } )); } else if ( info.menuItemId == "unrdist" ) { browser.tabs.sendMessage( tab.id, msg.Add( msg.MESSAGE_ACTION.menu_unrdist, {url: info.pageUrl } )); + } else if ( info.menuItemId == "lazyload" ) { + browser.tabs.sendMessage( tab.id, msg.Add( msg.MESSAGE_ACTION.menu_lazyload, {url: info.pageUrl } )); } else { if ( !tab.url.startsWith( "chrome://" ) ) browser.tabs.sendMessage( tab.id, msg.Add(info.menuItemId)); } diff --git a/src/service/menu.js b/src/service/menu.js index b5aeeeae..881781ca 100644 --- a/src/service/menu.js +++ b/src/service/menu.js @@ -16,6 +16,7 @@ const context = { exclusion : { id: "", menu: {} }, blacklist : { id: "", menu: {} }, unrdist : { id: "", menu: {} }, + lazyload : { id: "", menu: {} }, }, menu = { "type" : "normal", @@ -33,6 +34,7 @@ Object.assign( context.unrdist.menu, menu, { id: "unrdist", "title" : "将 Object.assign( context.whitelist.menu, menu, { id: "whitelist", "title" : "将当前页面加入到白名单" }); Object.assign( context.exclusion.menu, menu, { id: "exclusion", "title" : "将当前页面加入到排除列表" }); Object.assign( context.blacklist.menu, menu, { id: "blacklist", "title" : "将当前页面加入到黑名单" }); +Object.assign( context.lazyload.menu, menu, { id: "lazyload", "title" : "将当前页面加入到延迟加载" }); /** * Listen contextMenus message @@ -77,6 +79,9 @@ function createAll() { storage.option.menu.blacklist && ( context.blacklist.id = browser.contextMenus.create( context.blacklist.menu )); + storage.option.menu.lazyload && + ( context.lazyload.id = browser.contextMenus.create( context.lazyload.menu )); + browser.contextMenus.create({ "type": "separator" }); } From 134291c8ae0c2d374e2fd0e8eae1e9661ffd501c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:27:09 +0800 Subject: [PATCH 254/329] Add 'lazyload' to urlscheme. --- src/module/urlscheme.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/module/urlscheme.jsx b/src/module/urlscheme.jsx index 2aaf74ea..afc616c9 100644 --- a/src/module/urlscheme.jsx +++ b/src/module/urlscheme.jsx @@ -11,6 +11,7 @@ const category = [ { name: "黑名单", value: "blacklist" }, { name: "白名单", value: "whitelist" }, { name: "排除列表", value: "exclusion" }, + { name: "延迟加载", value: "lazyload" }, ]; export class URLScheme extends React.Component { From f1cb94b261969ee5c18b4953c5bc756b5abff61a Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:27:39 +0800 Subject: [PATCH 255/329] Add 'lazyload' to options labs. --- src/module/labs.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/module/labs.jsx b/src/module/labs.jsx index e111b311..279960a9 100644 --- a/src/module/labs.jsx +++ b/src/module/labs.jsx @@ -177,6 +177,10 @@ export default class LabsOpt extends React.Component { thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="是否显示「加入到黑名单」?" onChange={ (s)=>this.onChange(s, "option", "menu", "blacklist" ) } /> + <Switch width="100%" checked={ this.props.option.menu.lazyload } + thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" + label="是否显示「加入到延迟加载」?" + onChange={ (s)=>this.onChange(s, "option", "menu", "lazyload" ) } /> <Switch width="100%" checked={ this.props.option.urlscheme } thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="默认弹出编辑框,取消后意味着直接保存" From 1d6e84d3ab52c0fea1c3e36e63a2e57a113b091c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:28:10 +0800 Subject: [PATCH 256/329] Add util.Lazyload(). --- src/service/util.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/service/util.js b/src/service/util.js index 28dd318e..6036bead 100644 --- a/src/service/util.js +++ b/src/service/util.js @@ -219,6 +219,23 @@ function blacklist( minimatch, data ) { }) != -1 ? true : false; } +/** + * Lazyload + * + * @param {object} minimatch + * @param {object} simpread.read + * @return {boolean} true: is blacklist; false: is't blacklist + */ +function lazyload( minimatch, data ) { + return data.lazyload.findIndex( item => { + item == null && ( item = "" ); + item = item.trim(); + if ( item.startsWith( "[[/" ) && item.endsWith( "/]]" ) ) { + return location.href.replace( new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ), "g" ), "" ) == "" ? true : false; + } else return item.startsWith( "http" ) ? minimatch( location.href, item ) : location.hostname.includes( item ); + }) != -1 ? true : false; +} + /** * Get page info * @@ -243,5 +260,6 @@ export { exclusion as Exclusion, whitelist as Whitelist, blacklist as Blacklist, + lazyload as Lazyload, getPageInfo as GetPageInfo, } \ No newline at end of file From 1dded2246bee921a60ca40a8ba15f5f6968f83f7 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:28:32 +0800 Subject: [PATCH 257/329] Add 'lazyload' to workflow. --- src/contentscripts.js | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/src/contentscripts.js b/src/contentscripts.js index 547372e2..e1b9f8da 100644 --- a/src/contentscripts.js +++ b/src/contentscripts.js @@ -68,25 +68,7 @@ function blacklist() { */ function preload() { - let is_proload = true; - if ( storage.option.preload == false ) { - is_proload = false; - } else if ( storage.option.preload ) { - for ( const item of storage.option.lazyload ) { - if ( item.trim() != "" && !item.startsWith( "http" ) ) { - if ( location.hostname.includes( item ) ) { - is_proload = false; - break; - } - } else { - if ( location.href == item ) { - is_proload = false; - break; - } - } - } - } - return is_proload; + return !util.Lazyload( puplugin.Plugin( "minimatch" ), storage.option ); } /** @@ -132,6 +114,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) case msg.MESSAGE_ACTION.menu_whitelist: case msg.MESSAGE_ACTION.menu_exclusion: case msg.MESSAGE_ACTION.menu_blacklist: + case msg.MESSAGE_ACTION.menu_lazyload: case msg.MESSAGE_ACTION.menu_unrdist: const menuSrv = ( type, url ) => { if ( type == msg.MESSAGE_ACTION.menu_whitelist ) { @@ -143,6 +126,9 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) } else if ( type == msg.MESSAGE_ACTION.menu_blacklist ) { storage.option.blacklist.push( url ); new Notify().Render( "已加入到黑名单。" ); + } else if ( type == msg.MESSAGE_ACTION.menu_lazyload ) { + storage.option.lazyload.push( url ); + new Notify().Render( "已加入到延迟加载。" ); } else if ( type == msg.MESSAGE_ACTION.menu_unrdist ) { storage.UnRead( "add", util.GetPageInfo(), success => { success && new Notify().Render( 0, "成功加入未读列表。" ); @@ -153,7 +139,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) watch.SendMessage( "option", true ); }); }; - if ( storage.option.urlscheme && /whitelist|exclusion|blacklist/ig.test( request.type )) { + if ( storage.option.urlscheme && /whitelist|exclusion|blacklist|lazyload/ig.test( request.type )) { scheme.Render( request.type.replace( "menu_", "" ), storage.option.urlscheme, ( type, off, value ) => { storage.option.urlscheme = off; menuSrv( "menu_" + type, value ); From ae1a0557b229326c8640ac50b54332c989f60f45 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:34:36 +0800 Subject: [PATCH 258/329] Format source. --- src/contentscripts.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/contentscripts.js b/src/contentscripts.js index e1b9f8da..04be3be2 100644 --- a/src/contentscripts.js +++ b/src/contentscripts.js @@ -46,7 +46,7 @@ storage.Read( () => { }); } else { bindShortcuts(); - preload() && autoOpen(); + !isLazyload() && autoOpen(); } }); @@ -62,13 +62,13 @@ function blacklist() { } /** - * Preload verify + * isLazyload verify * - * @return {boolen} + * @return {boolen} true: lazyload; false: preload */ -function preload() { - return !util.Lazyload( puplugin.Plugin( "minimatch" ), storage.option ); +function isLazyload() { + return util.Lazyload( puplugin.Plugin( "minimatch" ), storage.option ); } /** @@ -86,7 +86,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) bindShortcuts(); break; case msg.MESSAGE_ACTION.tab_selected: - if ( preload() == false ) { + if ( isLazyload() ) { browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.browser_action, { code: 0 , url: window.location.href } )); } else browserAction( request.value.is_update ); break; From 33f6d82b0dca6a69400371f8405cfa7c4a615fd4 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Tue, 7 Jan 2020 18:38:43 +0800 Subject: [PATCH 259/329] Format source. --- src/background.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/background.js b/src/background.js index 56a3f039..a7c6b6a1 100644 --- a/src/background.js +++ b/src/background.js @@ -218,7 +218,7 @@ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) }); /** - * Listen runtime message, include: `shortcuts` `browser_action` + * Listen runtime message */ browser.runtime.onMessage.addListener( function( request, sender, sendResponse ) { console.log( "background runtime Listener", request ); From 04a002f9ea834f9673fc8bee0ba88347de8283c4 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 12:06:30 +0800 Subject: [PATCH 260/329] Optimize autoOpen() logic. --- src/contentscripts.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/contentscripts.js b/src/contentscripts.js index 04be3be2..c6734eb8 100644 --- a/src/contentscripts.js +++ b/src/contentscripts.js @@ -232,13 +232,21 @@ function readMode() { } /** - * Auto open read mode + * Auto open read mode, include: + * + * - http://xxxx?simpread_mode=read + * - auto && location.href not include exclusion list + * - location.href include white list */ function autoOpen() { getCurrent( mode.read ); - if ( window.location.href.includes( "simpread_mode=read" ) || - ( storage.current.auto && util.Exclusion( puplugin.Plugin( "minimatch" ), storage.current )) || - ( !storage.current.auto && util.Whitelist( puplugin.Plugin( "minimatch" ), storage.current )) + const suffix = window.location.href.includes( "simpread_mode=read" ), + auto = storage.current.auto, + minimatch = puplugin.Plugin( "minimatch" ), + whitelist = util.Whitelist( minimatch, storage.current ), + exclusion = util.Exclusion( minimatch, storage.current ); + if ( + suffix || whitelist || ( auto && exclusion ) ) { switch ( storage.current.site.name ) { case "my.oschina.net": @@ -257,6 +265,7 @@ function autoOpen() { break; default: pr.state == "adapter" && readMode(); + pr.state == "temp" && pr.current.site.html != "" && whitelist && readMode(); break; } } From 2cce2b81b67e9f722347750b0080d53035629672 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 12:09:20 +0800 Subject: [PATCH 261/329] Optimize util.Exclusion() return logic. --- src/contentscripts.js | 2 +- src/service/util.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/contentscripts.js b/src/contentscripts.js index c6734eb8..18e29ffe 100644 --- a/src/contentscripts.js +++ b/src/contentscripts.js @@ -246,7 +246,7 @@ function autoOpen() { whitelist = util.Whitelist( minimatch, storage.current ), exclusion = util.Exclusion( minimatch, storage.current ); if ( - suffix || whitelist || ( auto && exclusion ) + suffix || whitelist || ( auto && exclusion == false ) ) { switch ( storage.current.site.name ) { case "my.oschina.net": diff --git a/src/service/util.js b/src/service/util.js index 6036bead..20b73666 100644 --- a/src/service/util.js +++ b/src/service/util.js @@ -171,7 +171,7 @@ function clearHTML( str ) { * * @param {object} minimatch * @param {object} simpread.read - * @return {boolen} true: not exist; false: exist + * @return {boolen} true: exist; false: not exist */ function exclusion( minimatch, data ) { const url = window.location.origin + window.location.pathname; @@ -181,7 +181,7 @@ function exclusion( minimatch, data ) { if ( item.startsWith( "[[/" ) && item.endsWith( "/]]" ) ) { return location.href.replace( new RegExp( item.replace( /\[\[\/|\/\]\]/ig, "" ), "g" ), "" ) == "" ? true : false; } else return item.startsWith( "http" ) ? minimatch( url, item ) : item == data.site.name; - }) == -1 ? true : false; + }) != -1 ? true : false; } /** From 35d1f4267fd99fa7448ac982637086650368356e Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 12:56:21 +0800 Subject: [PATCH 262/329] Remove bad 'ga' source. --- src/background.js | 28 ++-------------------------- src/options/options.js | 25 ------------------------- 2 files changed, 2 insertions(+), 51 deletions(-) diff --git a/src/background.js b/src/background.js index a7c6b6a1..ceb6b24f 100644 --- a/src/background.js +++ b/src/background.js @@ -415,32 +415,8 @@ function setMenuAndIcon( id, code ) { */ function tracked({ eventCategory, eventAction, eventValue }) { console.log( "current track is", eventCategory, eventAction, eventValue ) - ma.trackEvent( eventCategory, eventAction, eventAction, eventValue ); -} - -/** - * Google analytics - */ -analytics(); -function analytics() { - (function(a,b,c){var d=a.history,e=document,f=navigator||{},g=localStorage, - h=encodeURIComponent,i=d.pushState,k=function(){return Math.random().toString(36)}, - l=function(){return g.cid||(g.cid=k()),g.cid},m=function(r){var s=[];for(var t in r) - r.hasOwnProperty(t)&&void 0!==r[t]&&s.push(h(t)+"="+h(r[t]));return s.join("&")}, - n=function(r,s,t,u,v,w,x){var z="https://www.google-analytics.com/collect", - A=m({v:"1",ds:"web",aip:c.anonymizeIp?1:void 0,tid:b,cid:l(),t:r||"pageview", - sd:c.colorDepth&&screen.colorDepth?screen.colorDepth+"-bits":void 0,dr:e.referrer|| - void 0,dt:e.title,dl:e.location.origin+e.location.pathname+e.location.search,ul:c.language? - (f.language||"").toLowerCase():void 0,de:c.characterSet?e.characterSet:void 0, - sr:c.screenSize?(a.screen||{}).width+"x"+(a.screen||{}).height:void 0,vp:c.screenSize&& - a.visualViewport?(a.visualViewport||{}).width+"x"+(a.visualViewport||{}).height:void 0, - ec:s||void 0,ea:t||void 0,el:u||void 0,ev:v||void 0,exd:w||void 0,exf:"undefined"!=typeof x&& - !1==!!x?0:void 0});if(f.sendBeacon)f.sendBeacon(z,A);else{var y=new XMLHttpRequest; - y.open("POST",z,!0),y.send(A)}};d.pushState=function(r){return"function"==typeof d.onpushstate&& - d.onpushstate({state:r}),setTimeout(n,c.delay||10),i.apply(d,arguments)},n(), - a.ma={trackEvent:function o(r,s,t,u){return n("event",r,s,t,u)}, - trackException:function q(r,s){return n("exception",null,null,null,null,r,s)}}}) - (window,"UA-405976-14",{anonymizeIp:true,colorDepth:true,characterSet:true,screenSize:true,language:true}); + //ma.trackEvent( eventCategory, eventAction, eventAction, eventValue ); + _gaq.push([ '_trackEvent', eventCategory, eventValue ]); } /** diff --git a/src/options/options.js b/src/options/options.js index 1eeb1f44..1278e7ba 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -427,28 +427,3 @@ function helpRender() { } }); } - -/** - * Google analytics - */ -analytics(); -function analytics() { - (function(a,b,c){var d=a.history,e=document,f=navigator||{},g=localStorage, - h=encodeURIComponent,i=d.pushState,k=function(){return Math.random().toString(36)}, - l=function(){return g.cid||(g.cid=k()),g.cid},m=function(r){var s=[];for(var t in r) - r.hasOwnProperty(t)&&void 0!==r[t]&&s.push(h(t)+"="+h(r[t]));return s.join("&")}, - n=function(r,s,t,u,v,w,x){var z="https://www.google-analytics.com/collect", - A=m({v:"1",ds:"web",aip:c.anonymizeIp?1:void 0,tid:b,cid:l(),t:r||"pageview", - sd:c.colorDepth&&screen.colorDepth?screen.colorDepth+"-bits":void 0,dr:e.referrer|| - void 0,dt:e.title,dl:e.location.origin+e.location.pathname+e.location.search,ul:c.language? - (f.language||"").toLowerCase():void 0,de:c.characterSet?e.characterSet:void 0, - sr:c.screenSize?(a.screen||{}).width+"x"+(a.screen||{}).height:void 0,vp:c.screenSize&& - a.visualViewport?(a.visualViewport||{}).width+"x"+(a.visualViewport||{}).height:void 0, - ec:s||void 0,ea:t||void 0,el:u||void 0,ev:v||void 0,exd:w||void 0,exf:"undefined"!=typeof x&& - !1==!!x?0:void 0});if(f.sendBeacon)f.sendBeacon(z,A);else{var y=new XMLHttpRequest; - y.open("POST",z,!0),y.send(A)}};d.pushState=function(r){return"function"==typeof d.onpushstate&& - d.onpushstate({state:r}),setTimeout(n,c.delay||10),i.apply(d,arguments)},n(), - a.ma={trackEvent:function o(r,s,t,u){return n("event",r,s,t,u)}, - trackException:function q(r,s){return n("exception",null,null,null,null,r,s)}}}) - (window,"UA-405976-14",{anonymizeIp:true,colorDepth:true,characterSet:true,screenSize:true,language:true}); -} From 725faead56dd18a9010c4e1044c14a6dd0f2e144 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 13:04:50 +0800 Subject: [PATCH 263/329] Remove old source. --- src/background.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/background.js b/src/background.js index ceb6b24f..6b7809b0 100644 --- a/src/background.js +++ b/src/background.js @@ -66,7 +66,7 @@ function getNewsitesHandler( result ) { */ menu.OnClicked( ( info, tab ) => { console.log( "background contentmenu Listener", info, tab ); - ma.trackEvent( "menu", "menu", "menu", info.menuItemId ); + _gaq.push([ '_trackEvent', "menu", info.menuItemId ]); if ( info.menuItemId == "link" ) { info.linkUrl && browser.tabs.create({ url: info.linkUrl + "?simpread_mode=read" }); } else if ( info.menuItemId == "list" ) { @@ -415,7 +415,6 @@ function setMenuAndIcon( id, code ) { */ function tracked({ eventCategory, eventAction, eventValue }) { console.log( "current track is", eventCategory, eventAction, eventValue ) - //ma.trackEvent( eventCategory, eventAction, eventAction, eventValue ); _gaq.push([ '_trackEvent', eventCategory, eventValue ]); } @@ -423,6 +422,6 @@ function tracked({ eventCategory, eventAction, eventValue }) { * Uninstall */ function uninstall() { - ma.trackEvent( "uninstall", "uninstall", "uninstall", "uninstall" ); browser.runtime.setUninstallURL( storage.option.uninstall ? storage.service + "/uninstall" : "" ); + _gaq.push([ '_trackEvent', "install", "uninstall" ]); } \ No newline at end of file From b6fd716c274fb40098fbe1e814a76b490eb6da98 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 13:13:37 +0800 Subject: [PATCH 264/329] Add ga.js to all page. --- src/ga.js | 22 ++++++++++++++++++++++ src/manifest.json | 4 ++-- src/options/custom.html | 1 + src/options/notice.html | 1 + src/options/options.html | 1 + src/options/sitemgr.html | 1 + webpack.config.js | 1 + 7 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/ga.js diff --git a/src/ga.js b/src/ga.js new file mode 100644 index 00000000..ac94924d --- /dev/null +++ b/src/ga.js @@ -0,0 +1,22 @@ + +/** + * Track using the asynchronous tracking API. + * + * See http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html + * for information on how to use the asynchronous tracking API. + * _gaq.push(['_trackEvent', e.target.id, 'clicked']); + */ + +var _AnalyticsCode = 'UA-405976-14'; +var _gaq = _gaq || []; +_gaq.push(['_setAccount', _AnalyticsCode]); +_gaq.push(['_trackPageview']); + +(function() { + var ga = document.createElement('script'); + ga.type = 'text/javascript'; + ga.async = true; + ga.src = 'https://ssl.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; + s.parentNode.insertBefore(ga, s); +})(); \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index f37a7bc2..b069e730 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -20,7 +20,7 @@ ], "optional_permissions": [ "cookies", "https://*.youdao.com/", "downloads" ], "background": { - "scripts" : [ "/bundle/common.js", "/bundle/background.js" ] + "scripts" : [ "/ga.js", "/bundle/common.js", "/bundle/background.js" ] }, "content_scripts" : [ { @@ -47,6 +47,6 @@ ], "offline_enabled" : true, "update_url" : "https://clients2.google.com/service/update2/crx", - "content_security_policy" : "script-src 'self' 'unsafe-eval' https://www.google-analytics.com; object-src 'self'", + "content_security_policy" : "script-src 'self' 'unsafe-eval' https://ssl.google-analytics.com; object-src 'self'", "manifest_version": 2 } \ No newline at end of file diff --git a/src/options/custom.html b/src/options/custom.html index 319afafa..f5017481 100644 --- a/src/options/custom.html +++ b/src/options/custom.html @@ -84,6 +84,7 @@ <div class="bottom"> <span>简悦 SimpRead - 为你提供「如杂志般沉浸式阅读体验」的扩展</span> <span> © 2017 - 2019 <a href="http://ksria.com/simpread">ksria.com</a> by <a href="http://kenshin.wang" target="_blank">Kenshin Wang</a></span> </div> + <script src="../ga.js"></script> <script src="../bundle/common.js"></script> <script src="../bundle/vendors.js"></script> <script src="../bundle/custom.js"></script> diff --git a/src/options/notice.html b/src/options/notice.html index 7700873e..bad78a23 100644 --- a/src/options/notice.html +++ b/src/options/notice.html @@ -11,6 +11,7 @@ <div class="bottom"> <span>简悦 SimpRead - 为你提供「如杂志般沉浸式阅读体验」的扩展</span> <span> © 2017 - 2019 <a href="http://ksria.com/simpread">ksria.com</a> by <a href="http://kenshin.wang" target="_blank">Kenshin Wang</a></span> </div> + <script src="../ga.js"></script> <script src="../bundle/common.js"></script> <script src="../bundle/vendors.js"></script> <script src="../bundle/notice.js"></script> diff --git a/src/options/options.html b/src/options/options.html index c740b07f..3ac74f9b 100644 --- a/src/options/options.html +++ b/src/options/options.html @@ -20,6 +20,7 @@ <div class="bottom" style="opacity:0;"> <span>简悦 SimpRead - 为你提供「如杂志般沉浸式阅读体验」的扩展</span> <span> © 2017 - 2019 <a href="http://ksria.com/simpread">ksria.com</a> by <a href="http://kenshin.wang" target="_blank">Kenshin Wang</a></span> </div> + <script src="../ga.js"></script> <script src="../bundle/common.js"></script> <script src="../bundle/vendors.js"></script> <script src="../bundle/options.js"></script> diff --git a/src/options/sitemgr.html b/src/options/sitemgr.html index 7097812b..b8512bd4 100644 --- a/src/options/sitemgr.html +++ b/src/options/sitemgr.html @@ -23,6 +23,7 @@ <div class="bottom"> <span>简悦 SimpRead - 为你提供「如杂志般沉浸式阅读体验」的扩展</span> <span> © 2017 - 2019 <a href="http://ksria.com/simpread">ksria.com</a> by <a href="http://kenshin.wang" target="_blank">Kenshin Wang</a></span> </div> + <script src="../ga.js"></script> <script src="../bundle/common.js"></script> <script src="../bundle/vendors.js"></script> <script src="../bundle/sitemgr.js"></script> diff --git a/webpack.config.js b/webpack.config.js index 4d7cced9..5843c49a 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -49,6 +49,7 @@ const webpack = require( 'webpack' ), { from : "src/manifest.json" , to : '../' }, { from : "src//help_tips.json" , to : '../' }, { from : "src/website_list.json" , to : '../' }, + { from : "src/ga.js" , to : '../' }, { from : 'src/options/options.html', to : '../options/' }, { from : 'src/options/custom.html', to : '../options/' }, { from : 'src/options/sitemgr.html', to : '../options/' }, From ede26b109e9102d48b16fc8171e0b3c1c0069e48 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 13:18:54 +0800 Subject: [PATCH 265/329] Format source. --- src/module/common.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/module/common.jsx b/src/module/common.jsx index 6f1db268..be98141e 100644 --- a/src/module/common.jsx +++ b/src/module/common.jsx @@ -101,7 +101,7 @@ export default class CommonOpt extends React.Component { }; storage.Safe( ()=> { - browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "service", eventAction: "sync", eventValue: storage.option.save_at }) ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.track, { eventCategory: "sync", eventAction: "sync", eventValue: storage.option.save_at }) ); if ( storage.option.save_at == "dropbox" ) { const sec_dbx = storage.secret.dropbox; !sec_dbx.access_token ? From dc830ff2e18cd8808e9e7c9ad5bdf365ba0b7cd4 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 14:25:36 +0800 Subject: [PATCH 266/329] Format source. --- src/options/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index 1278e7ba..f40dd58b 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -191,7 +191,7 @@ function vernotify( first ) { if ( hash.startsWith( "#firstload?ver=" ) || hash.startsWith( "#update?ver=" ) ) { const prefix = hash.match( /\w+/ )[0], version = hash.match( /[0-9\.]+/ )[0], - msg = ver.Notify( first, prefix, version ); + message = ver.Notify( first, prefix, version ); new Notify().Render( "简悦 版本提示", msg ); From 9e862e6a3cfff41fa5f13ca634d57adab31207eb Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 14:27:07 +0800 Subject: [PATCH 267/329] Format source. --- src/options/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options/options.js b/src/options/options.js index f40dd58b..6b38939e 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -193,7 +193,7 @@ function vernotify( first ) { version = hash.match( /[0-9\.]+/ )[0], message = ver.Notify( first, prefix, version ); - new Notify().Render( "简悦 版本提示", msg ); + new Notify().Render( "简悦 版本提示", message ); loadState = { first: true }; if ( hash.startsWith( "#update?ver=" )) { From 2f6e00ad89c26951d0db81ffd2a5a8ecc71ad9fe Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Wed, 8 Jan 2020 15:58:56 +0800 Subject: [PATCH 268/329] Format source. --- src/background.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/background.js b/src/background.js index 6b7809b0..87d4de50 100644 --- a/src/background.js +++ b/src/background.js @@ -66,7 +66,7 @@ function getNewsitesHandler( result ) { */ menu.OnClicked( ( info, tab ) => { console.log( "background contentmenu Listener", info, tab ); - _gaq.push([ '_trackEvent', "menu", info.menuItemId ]); + tracked({ eventCategory: "menu", eventAction: "menu", eventValue: info.menuItemId }); if ( info.menuItemId == "link" ) { info.linkUrl && browser.tabs.create({ url: info.linkUrl + "?simpread_mode=read" }); } else if ( info.menuItemId == "list" ) { @@ -423,5 +423,5 @@ function tracked({ eventCategory, eventAction, eventValue }) { */ function uninstall() { browser.runtime.setUninstallURL( storage.option.uninstall ? storage.service + "/uninstall" : "" ); - _gaq.push([ '_trackEvent', "install", "uninstall" ]); + tracked({ eventCategory: "install", eventAction: "install", eventValue: "uninstall" }); } \ No newline at end of file From c0d1e6c1cc2e463678c85f04221db5913d340e3a Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 13:00:11 +0800 Subject: [PATCH 269/329] Optimize instapaper and fix 'corb' bug. --- src/vender/instapaper.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/vender/instapaper.js b/src/vender/instapaper.js index 8b8e8ac5..5d0c367d 100644 --- a/src/vender/instapaper.js +++ b/src/vender/instapaper.js @@ -110,13 +110,13 @@ Instapaper = (function() { // Creates new Ajax request // Always uses POST request(options) { - var auth, req; + var auth, req, settings; req = options.req || (options.req = this.makeRequestObject({ url: options.url, data: options.data })); auth = this.authTemplate(options.req); - return $.ajax({ + settings = { url: `${this.baseUrl}${options.url}`, dataType: (function() { return options.dataType || "json"; @@ -126,7 +126,11 @@ Instapaper = (function() { headers: { Authorization: auth } - }); + }; + if ( options.url == "bookmarks/add" ) { + return settings; + } + return $.ajax(settings); } // ## Specific API Methods From ba1cb03f2301a2d893e58abdbc1dfd2c3bb79db7 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 13:04:53 +0800 Subject: [PATCH 270/329] Fix instapaper corb bug. --- src/service/export.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/service/export.js b/src/service/export.js index 594b6508..ccd56c30 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -403,12 +403,10 @@ class Ins { this.ins.token_secret = this.token_secret; this.ins.consumer_key = this.consumer_key; this.ins.consumer_secret = this.consumer_secret; - this.ins.add( url, title, description ).done( result => { - if ( result && result.length > 0 ) callback( "success", undefined ); - else callback( undefined, "error" ); - }).fail( ( jqXHR, textStatus, error ) => { - console.error( jqXHR, textStatus, error ) - callback( undefined, textStatus ); + const settings = this.ins.add( url, title, description ); + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.CORB, { settings } ), result => { + if ( result.done ) { callback( "success", undefined ); } + else callback( undefined, result.fail ); }); } } From 75d41d638f6534ab5bcfe236c68fad4b67f3c4a0 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 15:04:26 +0800 Subject: [PATCH 271/329] Fix linnk corb bug. --- src/service/export.js | 51 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/service/export.js b/src/service/export.js index ccd56c30..511a7c33 100644 --- a/src/service/export.js +++ b/src/service/export.js @@ -465,33 +465,36 @@ class Linnk { targetURL: url, title, tagsStr : this.tags, - }; - - $.ajax({ + }, + settings = { url : "https://linnk.net/a/api/bookmark/new", type : "POST", headers : { Authorization: this.access_token }, data, - }).done( ( result, textStatus, jqXHR ) => { - const data = JSON.parse(result); - if ( data && data.code == 200 ) callback( "success", undefined ); - else callback( undefined, "error" ); - }).fail( ( jqXHR, textStatus, error ) => { - console.error( jqXHR, textStatus, error ) - callback( undefined, textStatus ); + }; + + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.CORB, { settings } ), result => { + if ( result.done ) { + const data = JSON.parse( result.done ); + if ( data && data.code == 200 ) callback( "success", undefined ); + else callback( undefined, "error" ); + } else callback( undefined, result.fail ); }); } Groups( callback ) { - $.ajax({ + const settings = { url : "https://linnk.net/a/api/group/my", type : "GET", headers : { Authorization: this.access_token }, - }).done( ( result, textStatus, jqXHR ) => { - callback( JSON.parse(result), undefined ); - }).fail( ( jqXHR, textStatus, error ) => { - console.error( jqXHR, textStatus, error ) - callback( undefined, textStatus ); + }; + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.CORB, { settings } ), result => { + if ( result.done ) { + const data = JSON.parse( result.done ); + if ( data.code != 200 ) { + callback( undefined, this.error_code[ data.code ] ); + } else callback( data, undefined ); + } else callback( undefined, "error" ); }); } @@ -502,27 +505,27 @@ class Linnk { } NewGroup( name, callback ) { - $.ajax({ + const settings = { url : "https://linnk.net/a/api/group/new", type : "POST", headers : { Authorization: this.access_token }, data : { groupName: name }, - }).done( ( result, textStatus, jqXHR ) => { - callback( JSON.parse(result), undefined ); - }).fail( ( jqXHR, textStatus, error ) => { - console.error( jqXHR, textStatus, error ) - callback( undefined, textStatus ); + }; + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.CORB, { settings } ), result => { + if ( result.done ) { + callback( JSON.parse( result.done ), undefined ); + } else callback( undefined, result.fail ); }); } GetSafeGroup( name, callback ) { - this.Groups( result => { + this.Groups( ( result, error ) => { if ( result && result.code == 200 ) { const group = this.GetGroup( name, result.data ); !group && this.NewGroup( name, callback ); group && callback({ data: group, code: 200 }, undefined ); } else { - callback( undefined, "error" ); + callback( undefined, error == "error" ? "error" : error ); } }) } From c4b96a0b11755bab6e923b98debc6dc12097f46a Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 15:05:07 +0800 Subject: [PATCH 272/329] Fix linnk access_token fail workflow bug. --- src/service/output.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/service/output.js b/src/service/output.js index 8e4b4c7a..d23f8631 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -241,12 +241,13 @@ function action( type, title, desc, content ) { break; case "linnk": const notify = new Notify().Render({ content: `开始保存到 Linnk,请稍等...`, state: "loading" }); + linnk.access_token = storage.secret.linnk.access_token; linnk.GetSafeGroup( linnk.group_name, ( result, error ) => { notify.complete(); if ( !error ) { linnk.group_id = result.data.groupId; linnk.Add( window.location.href, title, ( result, error ) => exp.svcCbWrapper( result, error, linnk.name, type, new Notify() )); - } else new Notify().Render( 2, `${ linnk.name } 保存失败,请稍后重新再试。` ); + } else new Notify().Render( 2, error == "error" ? `${ linnk.name } 保存失败,请稍后重新再试。` : error ); }); break; case "evernote": From 1c259f3d5f524dbd96f68b2f9f86a94cac025164 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 15:25:07 +0800 Subject: [PATCH 273/329] Fix fab 'z-index' bug. --- src/vender/mduikit/fab.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vender/mduikit/fab.jsx b/src/vender/mduikit/fab.jsx index 306bf6ea..96edef73 100644 --- a/src/vender/mduikit/fab.jsx +++ b/src/vender/mduikit/fab.jsx @@ -1,8 +1,8 @@ /*! * React Material Design: FAB( Floating Action Button ) * - * @version : 0.0.3 - * @update : 2018/04/26 + * @version : 0.0.3.0109 + * @update : 2020/01/09 * @homepage: https://github.com/kenshin/mduikit * @license : MIT https://github.com/kenshin/mduikit/blob/master/LICENSE * @author : Kenshin Wang <kenshin@ksria.com> @@ -40,6 +40,7 @@ const cssinjs = () => { width: '100px', height: '100%', + zIndex: 2147483647, }, origin : { From cf762e8db0e20885dc8ec507ed843f6d267e76e8 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 15:46:26 +0800 Subject: [PATCH 274/329] Update some website. --- src/website_list.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/website_list.json b/src/website_list.json index e390ce48..213cbbcc 100644 --- a/src/website_list.json +++ b/src/website_list.json @@ -710,7 +710,8 @@ "<table class='navbox'>", "<div class='thumb'>", "<div class='dablink'>", - "<table class='metadata'>" + "<table class='metadata'>", + "<math>" ] },{ "name" : "article.pmcaff.com", From d332133dd8a6344c033c3f842fd180a3bbfed9ff Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 15:48:16 +0800 Subject: [PATCH 275/329] Format source. --- src/read/controlbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/read/controlbar.jsx b/src/read/controlbar.jsx index 05268bb5..a2a2cc0b 100644 --- a/src/read/controlbar.jsx +++ b/src/read/controlbar.jsx @@ -109,7 +109,7 @@ export default class ReadCtlbar extends React.Component { break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || - [ "fullscreen", "save", "markdown", "offlinemarkdown", "png", "epub", "pdf", "kindle", "temp", "bear", "ulysses", "html", "offlinehtml", "snapshot", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao", "weizhi" ].includes( type )) { + [ "fullscreen", "save", "markdown", "offlinemarkdown", "png", "epub", "pdf", "kindle", "temp", "bear", "ulysses", "html", "offlinehtml", "snapshot", "dropbox", "pocket", "instapaper", "linnk", "yinxiang", "evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao", "weizhi" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } From 828d23bc62891dcbe6d7e0cf5765c9de61715424 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 16:03:46 +0800 Subject: [PATCH 276/329] Add some service to 'focus mode'. --- src/focus/controlbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/focus/controlbar.jsx b/src/focus/controlbar.jsx index cde160d3..e23e2633 100644 --- a/src/focus/controlbar.jsx +++ b/src/focus/controlbar.jsx @@ -65,7 +65,7 @@ class FControl extends React.Component { break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || - [ "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "notion", "youdao" ].includes( type )) { + [ "save", "markdown", "offlinemarkdown", "png", "epub", "pdf", "kindle", "temp", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao", "weizhi" ].includes( type )) { const [ title, desc, content ] = [ $( "head title" ).text().trim(), "", $( ".simpread-focus-highlight" ).html().trim() ]; output.Action( type, title, desc, content ); } From 33bd19f3f521d920a8711256aba82662121a9de5 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 16:04:58 +0800 Subject: [PATCH 277/329] Add some service to 'focus mode'. --- src/focus/controlbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/focus/controlbar.jsx b/src/focus/controlbar.jsx index e23e2633..a86500de 100644 --- a/src/focus/controlbar.jsx +++ b/src/focus/controlbar.jsx @@ -65,7 +65,7 @@ class FControl extends React.Component { break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || - [ "save", "markdown", "offlinemarkdown", "png", "epub", "pdf", "kindle", "temp", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao", "weizhi" ].includes( type )) { + [ "save", "markdown", "offlinemarkdown", "png", "epub", "pdf", "kindle", "temp", "bear", "ulysses", "html", "offlinehtml", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive", "jianguo", "yuque", "notion", "youdao", "weizhi" ].includes( type )) { const [ title, desc, content ] = [ $( "head title" ).text().trim(), "", $( ".simpread-focus-highlight" ).html().trim() ]; output.Action( type, title, desc, content ); } From 36792f4a5c373bc68df4d046b77827d427a7b9ea Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 16:10:17 +0800 Subject: [PATCH 278/329] Remove 'snapshot' from 'focus mode'. --- src/service/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/config.js b/src/service/config.js index 98863a6e..57e50a2f 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -656,6 +656,7 @@ const focusItems = ( items => { dels.forEach( del => delete news[ del ] ); delete news.option.items.fullscreen; delete news.option.items.tempread; + delete news.download.items.snapshot; news.top = { "name" : "返回顶部", "icon" : ss.IconPath("top_icon"), From 7bb4bd95e116eb454e6b764b75b9e24347453615 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 16:36:02 +0800 Subject: [PATCH 279/329] Remove 'offline' from 'focus mode'. --- src/service/config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/service/config.js b/src/service/config.js index 57e50a2f..d4329f14 100644 --- a/src/service/config.js +++ b/src/service/config.js @@ -657,6 +657,8 @@ const focusItems = ( items => { delete news.option.items.fullscreen; delete news.option.items.tempread; delete news.download.items.snapshot; + delete news.download.items.offlinehtml; + delete news.download.items.offlinemarkdown; news.top = { "name" : "返回顶部", "icon" : ss.IconPath("top_icon"), From 2aeb4c5804ad1267ffb1785502f666cd27699994 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Thu, 9 Jan 2020 18:31:02 +0800 Subject: [PATCH 280/329] Add some website. --- src/website_list.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/website_list.json b/src/website_list.json index 213cbbcc..cf8dc537 100644 --- a/src/website_list.json +++ b/src/website_list.json @@ -965,6 +965,15 @@ "exclude" : [ "" ] + },{ + "name" : "infoq.cn", + "url" : "http*://www.infoq.cn/article/*", + "title" : "<title>", + "desc" : "", + "include" : "<div class='article-content'>", + "exclude" : [ + "" + ] },{ "name" : "infoq.com", "url" : "http://www.infoq.com/cn/articles/", From a1228545ee74bdbdc163724553dee12a70940679 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 10 Jan 2020 12:58:16 +0800 Subject: [PATCH 281/329] Add th.GetAll(). --- src/service/theme.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/service/theme.js b/src/service/theme.js index a2ede087..e86a1f2f 100644 --- a/src/service/theme.js +++ b/src/service/theme.js @@ -70,6 +70,10 @@ class Theme { return themes[theme]; } + GetAll() { + findThemeStyle(); + } + constructor() { require( `../assets/css/theme_common.css` ); names.forEach( name => require( `../assets/css/theme_${name}.css` ) ); @@ -90,13 +94,13 @@ function findThemeStyle( callback ) { if ( css.startsWith( flag ) ) { const arr = css.replace( flag, "" ).match( /\w+/ ), name = arr[ arr.length - 1 ]; - callback( name, css, $target ); + callback && callback( name, css, $target ); } else if ( css.search( ".simpread-font" ) > -1 ) { - themes["global"] = css; + !themes["global"] && ( themes["global"] = css ); } else if ( css.search( "(pointer: coarse)" ) == -1 && css.search( ".simpread-theme-root" ) > -1 ) { - themes["common"] = css; + !themes["common"] && ( themes["common"] = css ); } else if ( css.search( "(pointer: coarse)" ) > -1 && css.search( "sr-read" ) > -1 ) { - themes["mobile"] = css; + !themes["mobile"] && ( themes["mobile"] = css ); } }); } From 0e44c94597b847276515425142540a0ac338307b Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 10 Jan 2020 12:58:38 +0800 Subject: [PATCH 282/329] Add th.GetAll() to workflow. --- src/service/output.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/output.js b/src/service/output.js index d23f8631..80d104d2 100644 --- a/src/service/output.js +++ b/src/service/output.js @@ -30,6 +30,7 @@ function action( type, title, desc, content ) { const styles = callback => { ss.SpecialCSS( storage.pr.mathjax, special => { + th.GetAll(); const theme = th.Get( storage.read.theme ), global = th.Get( "global" ), common = th.Get( "common" ), From 897e4c7ed415be3e4c226d1519abf494e7caa647 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 10 Jan 2020 13:54:01 +0800 Subject: [PATCH 283/329] Format source. --- src/module/labs.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/module/labs.jsx b/src/module/labs.jsx index 279960a9..07af910f 100644 --- a/src/module/labs.jsx +++ b/src/module/labs.jsx @@ -184,7 +184,7 @@ export default class LabsOpt extends React.Component { <Switch width="100%" checked={ this.props.option.urlscheme } thumbedColor="#3F51B5" trackedColor="#7986CB" waves="md-waves-effect" label="默认弹出编辑框,取消后意味着直接保存" - desc="包括:黑名单 · 白名单 · 排除列表均可使用" + desc="包括:黑名单 · 白名单 · 排除列表 · 延迟加载均可使用" onChange={ (s)=>this.onChange(s, "option", "urlscheme" ) } /> </div> </div> From 75b70c8d726b09b578a00f4345c7f61fc4600504 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 10 Jan 2020 14:25:20 +0800 Subject: [PATCH 284/329] Fix focus mode controlbar some bug. --- src/focus/controlbar.jsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/focus/controlbar.jsx b/src/focus/controlbar.jsx index a86500de..41247f90 100644 --- a/src/focus/controlbar.jsx +++ b/src/focus/controlbar.jsx @@ -33,6 +33,13 @@ class FControl extends React.Component { }); } + onClose() { + setTimeout( ()=> { + $( "fab-bg" ).css({ width: '100px' }) + $( "fab" ).find( "ul[type=hori]" ).css({ opacity: 0, visibility: "hidden" }) + }, 200 ); + } + onAction( event, type ) { console.log( "fab type is =", type ) @@ -46,9 +53,11 @@ class FControl extends React.Component { break; case "setting": setting.Render( ()=>setTimeout( ()=>se.Render(), 500 )); + this.onClose(); break; case "siteeditor": se.Render(); + this.onClose(); break; case "remove": new Notify().Render( "移动鼠标选择不想显示的内容,只针对本次有效。" ); From 08b9717b9578f0bf6d913e930ee3fabef83723c6 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Fri, 10 Jan 2020 15:24:09 +0800 Subject: [PATCH 285/329] Update some website. --- src/website_list.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/website_list.json b/src/website_list.json index cf8dc537..9745ce28 100644 --- a/src/website_list.json +++ b/src/website_list.json @@ -252,7 +252,7 @@ "url" : "http*://www.dgtle.com/article-*.html", "title" : "<title>", "desc" : "[[{$('meta[name=description]').attr('content')}]]", - "include" : "[[{$('.view_content').html()||$('#view_content').html()}]]", + "include" : "[[{$('.view_content').html()||$('#view_content').html()||$('#articleContent').html()||$('.forum-viewthread-article-box').html()}]]", "exclude" : [ "<div id='comments_top'>", "[[/src=\\S+(xxxxxbbs)\\S+'/]]" @@ -404,6 +404,15 @@ "exclude" : [ "[[`/html[1]/div[1]/sr-read[1]/sr-rd-content[1]/div[1]`]]" ] + },{ + "name" : "spaces.ac.cn", + "url" : "https://spaces.ac.cn/archives/*", + "title" : "<span class='sub-title'>", + "desc" : "[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]", + "include" : "<div class='PostContent'>", + "exclude" : [ + "" + ] },{ "name" : "huxiu.com", "url" : "https://www.huxiu.com/article/", From 2d4b06e50180a61fe2d43d1c271b5bb7c5abe062 Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Sat, 11 Jan 2020 18:36:33 +0800 Subject: [PATCH 286/329] Update puread file. --- src/vender/puread/puplugin.min.js | 2 +- src/vender/puread/puread.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vender/puread/puplugin.min.js b/src/vender/puread/puplugin.min.js index 250a3e74..75404f25 100644 --- a/src/vender/puread/puplugin.min.js +++ b/src/vender/puread/puplugin.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.puplugin={})}(this,function(e){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(e,t){return e(t={exports:{}},t.exports),t.exports}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=r(function(e,t){e.exports=function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n=function(){function e(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,r,a){return r&&e(t.prototype,r),a&&e(t,a),t}}(),i=r(1).Pangu,o=function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=(void 0===t?"undefined":a(t))&&"function"!=typeof t?e:t}(this,Object.getPrototypeOf(t).call(this));return e.topTags=/^(html|head|body|#document)$/i,e.ignoreTags=/^(script|code|pre|textarea)$/i,e.spaceSensitiveTags=/^(a|del|pre|s|strike|u)$/i,e.spaceLikeTags=/^(br|hr|i|img|pangu)$/i,e.blockTags=/^(div|h1|h2|h3|h4|h5|h6|p)$/i,e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":a(t)));e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),n(t,[{key:"canIgnoreNode",value:function(e){for(var t=e.parentNode;t&&t.nodeName&&-1===t.nodeName.search(this.topTags);){if(t.nodeName.search(this.ignoreTags)>=0||t.isContentEditable||"true"===t.getAttribute("g_editable"))return!0;t=t.parentNode}return!1}},{key:"isFirstTextChild",value:function(e,t){for(var r=e.childNodes,a=0;a<r.length;a++){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"isLastTextChild",value:function(e,t){for(var r=e.childNodes,a=r.length-1;a>-1;a--){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"spacingNodeByXPath",value:function(e,t){for(var r=document.evaluate(e,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),a=void 0,n=void 0,i=r.snapshotLength-1;i>-1;--i)if(a=r.snapshotItem(i),this.canIgnoreNode(a))n=a;else{var o=this.spacing(a.data);if(a.data!==o&&(a.data=o),n){if(a.nextSibling&&a.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}var s=a.data.toString().substr(-1)+n.data.toString().substr(0,1),l=this.spacing(s);if(l!==s){for(var c=n;c.parentNode&&-1===c.nodeName.search(this.spaceSensitiveTags)&&this.isFirstTextChild(c.parentNode,c);)c=c.parentNode;for(var u=a;u.parentNode&&-1===u.nodeName.search(this.spaceSensitiveTags)&&this.isLastTextChild(u.parentNode,u);)u=u.parentNode;if(u.nextSibling&&u.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}if(-1===u.nodeName.search(this.blockTags))if(-1===c.nodeName.search(this.spaceSensitiveTags))-1===c.nodeName.search(this.ignoreTags)&&-1===c.nodeName.search(this.blockTags)&&(n.previousSibling?-1===n.previousSibling.nodeName.search(this.spaceLikeTags)&&(n.data=" "+n.data):this.canIgnoreNode(n)||(n.data=" "+n.data));else if(-1===u.nodeName.search(this.spaceSensitiveTags))a.data=a.data+" ";else{var d=document.createElement("pangu");d.innerHTML=" ",c.previousSibling?-1===c.previousSibling.nodeName.search(this.spaceLikeTags)&&c.parentNode.insertBefore(d,c):c.parentNode.insertBefore(d,c),d.previousElementSibling||d.parentNode&&d.parentNode.removeChild(d)}}}n=a}}},{key:"spacingNode",value:function(e){this.spacingNodeByXPath(".//*/text()[normalize-space(.)]",e)}},{key:"spacingElementById",value:function(e){var t='id("'+e+'")//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByClassName",value:function(e){var t='//*[contains(concat(" ", normalize-space(@class), " "), "'+e+'")]//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByTagName",value:function(e){var t="//"+e+"//text()";this.spacingNodeByXPath(t,document)}},{key:"spacingPageTitle",value:function(){this.spacingNodeByXPath("/html/head/title/text()",document)}},{key:"spacingPageBody",value:function(){for(var e="/html/body//*/text()[normalize-space(.)]",t=["script","style","textarea"],r=0;r<t.length;r++){var a=t[r];e+='[translate(name(..),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")!="'+a+'"]'}this.spacingNodeByXPath(e,document)}},{key:"spacingPage",value:function(){this.spacingPageTitle(),this.spacingPageBody()}}]),t}(i),s=new o;(e.exports=s).Pangu=o},function(e,t){var r=function(){function e(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,r,a){return r&&e(t.prototype,r),a&&e(t,a),t}}(),a=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])(["])/g,n=/(["])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,i=/(["']+)(\s*)(.+?)(\s*)(["']+)/g,o=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])( )(')([A-Za-z])/g,s=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])(#)([A-Za-z0-9\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff]+)(#)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,l=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])(#([^ ]))/g,c=/(([^ ])#)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,u=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\+\-\*\/=&\\|<>])([A-Za-z0-9])/g,d=/([A-Za-z0-9])([\+\-\*\/=&\\|<>])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,h=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c]+(.*?)[\)\]\}>\u201d]+)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,f=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c>])/g,p=/([\)\]\}>\u201d<])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,g=/([\(\[\{<\u201c]+)(\s*)(.+?)(\s*)([\)\]\}>\u201d]+)/,m=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([~!;:,\.\?\u2026])([A-Za-z0-9])/g,_=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([A-Za-z0-9`\$%\^&\*\-=\+\\\|\/@\u00a1-\u00ff\u2022\u2027\u2150-\u218f])/g,b=/([A-Za-z0-9`~\$%\^&\*\-=\+\\\|\/!;:,\.\?\u00a1-\u00ff\u2022\u2026\u2027\u2150-\u218f])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,v=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return r(e,[{key:"spacing",value:function(e){var t=e,r=t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(a,"$1 $2")).replace(n,"$1 $2")).replace(i,"$1$3$5")).replace(o,"$1$3$4")).replace(s,"$1 $2$3$4 $5")).replace(l,"$1 $2")).replace(c,"$1 $3")).replace(u,"$1 $2 $3")).replace(d,"$1 $2 $3"),v=t.replace(h,"$1 $2 $4");return t=v,r===v&&(t=(t=t.replace(f,"$1 $2")).replace(p,"$1 $2")),t=(t=(t=(t=t.replace(g,"$1$3$5")).replace(m,"$1$2 $3")).replace(_,"$1 $2")).replace(b,"$1 $2")}},{key:"spacingText",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];try{var r=this.spacing(e);t(null,r)}catch(e){t(e)}}}]),e}(),w=new v;(e.exports=w).Pangu=v}])});n.pangu;function i(e,t){for(var r=0,a=e.length-1;a>=0;a--){var n=e[a];"."===n?e.splice(a,1):".."===n?(e.splice(a,1),r++):r&&(e.splice(a,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(e){return o.exec(e).slice(1)};function l(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,t="/"===a.charAt(0))}return e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"),(t?"/":"")+e||"."}function c(e){var t=u(e),r="/"===b(e,-1);return(e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e}function u(e){return"/"===e.charAt(0)}function d(){return c(_(Array.prototype.slice.call(arguments,0),function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function h(e,t){function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var r=e.length-1;r>=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=l(e).substr(1),t=l(t).substr(1);for(var a=r(e.split("/")),n=r(t.split("/")),i=Math.min(a.length,n.length),o=i,s=0;s<i;s++)if(a[s]!==n[s]){o=s;break}var c=[];for(s=o;s<a.length;s++)c.push("..");return(c=c.concat(n.slice(o))).join("/")}function f(e){var t=s(e),r=t[0],a=t[1];return r||a?(a&&(a=a.substr(0,a.length-1)),r+a):"."}function p(e,t){var r=s(e)[2];return t&&r.substr(-1*t.length)===t&&(r=r.substr(0,r.length-t.length)),r}function g(e){return s(e)[3]}var m={extname:g,basename:p,dirname:f,sep:"/",delimiter:":",relative:h,join:d,isAbsolute:u,normalize:c,resolve:l};function _(e,t){if(e.filter)return e.filter(t);for(var r=[],a=0;a<e.length;a++)t(e[a],a,e)&&r.push(e[a]);return r}var b="b"==="ab".substr(-1)?function(e,t,r){return e.substr(t,r)}:function(e,t,r){return t<0&&(t=e.length+t),e.substr(t,r)},v=Object.freeze({resolve:l,normalize:c,isAbsolute:u,join:d,relative:h,sep:"/",delimiter:":",dirname:f,basename:p,extname:g,default:m}),w=function(e,t){for(var r=[],a=0;a<e.length;a++){var n=t(e[a],a);y(n)?r.push.apply(r,n):r.push(n)}return r},y=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},k=E;function E(e,t,r){e instanceof RegExp&&(e=T(e,r)),t instanceof RegExp&&(t=T(t,r));var a=x(e,t,r);return a&&{start:a[0],end:a[1],pre:r.slice(0,a[0]),body:r.slice(a[0]+e.length,a[1]),post:r.slice(a[1]+t.length)}}function T(e,t){var r=t.match(e);return r?r[0]:null}function x(e,t,r){var a,n,i,o,s,l=r.indexOf(e),c=r.indexOf(t,l+1),u=l;if(l>=0&&c>0){for(a=[],i=r.length;u>=0&&!s;)u==l?(a.push(u),l=r.indexOf(e,u+1)):1==a.length?s=[a.pop(),c]:((n=a.pop())<i&&(i=n,o=c),c=r.indexOf(t,u+1)),u=l<c&&l>=0?l:c;a.length&&(s=[i,o])}return s}E.range=x;var N=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(t,r){var a=[];var n=k("{","}",t);if(!n||/\$$/.test(n.pre))return[t];var i=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(n.body);var o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(n.body);var s=i||o;var l=n.body.indexOf(",")>=0;if(!s&&!l)return n.post.match(/,.*\}/)?(t=n.pre+"{"+n.body+S+n.post,e(t)):[t];var c;if(s)c=n.body.split(/\.\./);else if(1===(c=function e(t){if(!t)return[""];var r=[];var a=k("{","}",t);if(!a)return t.split(",");var n=a.pre;var i=a.body;var o=a.post;var s=n.split(",");s[s.length-1]+="{"+i+"}";var l=e(o);o.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l));r.push.apply(r,s);return r}(n.body)).length&&1===(c=e(c[0],!1).map(M)).length){var u=n.post.length?e(n.post,!1):[""];return u.map(function(e){return n.pre+c[0]+e})}var d=n.pre;var u=n.post.length?e(n.post,!1):[""];var h;if(s){var f=j(c[0]),p=j(c[1]),g=Math.max(c[0].length,c[1].length),m=3==c.length?Math.abs(j(c[2])):1,_=I,b=p<f;b&&(m*=-1,_=O);var v=c.some(B);h=[];for(var y=f;_(y,p);y+=m){var E;if(o)"\\"===(E=String.fromCharCode(y))&&(E="");else if(E=String(y),v){var T=g-E.length;if(T>0){var x=new Array(T+1).join("0");E=y<0?"-"+x+E.slice(1):x+E}}h.push(E)}}else h=w(c,function(t){return e(t,!1)});for(var N=0;N<h.length;N++)for(var C=0;C<u.length;C++){var A=d+h[N]+u[C];(!r||s||A)&&a.push(A)}return a}(function(e){return e.split("\\\\").join(C).split("\\{").join(A).split("\\}").join(S).split("\\,").join(P).split("\\.").join(L)}(e),!0).map(z)},C="\0SLASH"+Math.random()+"\0",A="\0OPEN"+Math.random()+"\0",S="\0CLOSE"+Math.random()+"\0",P="\0COMMA"+Math.random()+"\0",L="\0PERIOD"+Math.random()+"\0";function j(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function z(e){return e.split(C).join("\\").split(A).join("{").split(S).join("}").split(P).join(",").split(L).join(".")}function M(e){return"{"+e+"}"}function B(e){return/^-?0\d/.test(e)}function I(e,t){return e<=t}function O(e,t){return e>=t}var H=v&&m||v,R=Y;Y.Minimatch=Q;var D={sep:"/"};try{D=H}catch(e){}var G=Y.GLOBSTAR=Q.GLOBSTAR={},q={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},U="[^/]",F=U+"*?",V="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",W="(?:(?!(?:\\/|^)\\.).)*?",X="().*{}+?[]^$\\!".split("").reduce(function(e,t){return e[t]=!0,e},{});var Z=/\/+/;function K(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function Y(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new Q(t,r).match(e))}function Q(e,t){if(!(this instanceof Q))return new Q(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==D.sep&&(e=e.split(D.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function J(e,t){if(t||(t=this instanceof Q?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:N(e)}Y.filter=function(e,t){return t=t||{},function(r,a,n){return Y(r,e,t)}},Y.defaults=function(e){if(!e||!Object.keys(e).length)return Y;var t=Y,r=function(r,a,n){return t.minimatch(r,a,K(e,n))};return r.Minimatch=function(r,a){return new t.Minimatch(r,K(e,a))},r},Q.defaults=function(e){return e&&Object.keys(e).length?Y.defaults(e).Minimatch:Q},Q.prototype.debug=function(){},Q.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(Z)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r},Q.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(this.options.nonegate)return;for(var a=0,n=e.length;a<n&&"!"===e.charAt(a);a++)t=!t,r++;r&&(this.pattern=e.substr(r));this.negate=t},Y.braceExpand=function(e,t){return J(e,t)},Q.prototype.braceExpand=J,Q.prototype.parse=function(e,t){if(e.length>65536)throw new TypeError("pattern is too long");var r=this.options;if(!r.noglobstar&&"**"===e)return G;if(""===e)return"";var a,n="",i=!!r.nocase,o=!1,s=[],l=[],c=!1,u=-1,d=-1,h="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=this;function p(){if(a){switch(a){case"*":n+=F,i=!0;break;case"?":n+=U,i=!0;break;default:n+="\\"+a}f.debug("clearStateChar %j %j",a,n),a=!1}}for(var g,m=0,_=e.length;m<_&&(g=e.charAt(m));m++)if(this.debug("%s\t%s %s %j",e,m,n,g),o&&X[g])n+="\\"+g,o=!1;else switch(g){case"/":return!1;case"\\":p(),o=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,m,n,g),c){this.debug(" in class"),"!"===g&&m===d+1&&(g="^"),n+=g;continue}f.debug("call clearStateChar %j",a),p(),a=g,r.noext&&p();continue;case"(":if(c){n+="(";continue}if(!a){n+="\\(";continue}s.push({type:a,start:m-1,reStart:n.length,open:q[a].open,close:q[a].close}),n+="!"===a?"(?:(?!(?:":"(?:",this.debug("plType %j %j",a,n),a=!1;continue;case")":if(c||!s.length){n+="\\)";continue}p(),i=!0;var b=s.pop();n+=b.close,"!"===b.type&&l.push(b),b.reEnd=n.length;continue;case"|":if(c||!s.length||o){n+="\\|",o=!1;continue}p(),n+="|";continue;case"[":if(p(),c){n+="\\"+g;continue}c=!0,d=m,u=n.length,n+=g;continue;case"]":if(m===d+1||!c){n+="\\"+g,o=!1;continue}if(c)var v,w=e.substring(d+1,m);i=!0,c=!1,n+=g;continue;default:p(),o?o=!1:!X[g]||"^"===g&&c||(n+="\\"),n+=g}c&&(w=e.substr(d+1),v=this.parse(w,ee),n=n.substr(0,u)+"\\["+v[0],i=i||v[1]);for(b=s.pop();b;b=s.pop()){var y=n.slice(b.reStart+b.open.length);this.debug("setting tail",n,b),y=y.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,t,r){return r||(r="\\"),t+t+r+"|"}),this.debug("tail=%j\n %s",y,y,b,n);var k="*"===b.type?F:"?"===b.type?U:"\\"+b.type;i=!0,n=n.slice(0,b.reStart)+k+"\\("+y}p(),o&&(n+="\\\\");var E=!1;switch(n.charAt(0)){case".":case"[":case"(":E=!0}for(var T=l.length-1;T>-1;T--){var x=l[T],N=n.slice(0,x.reStart),C=n.slice(x.reStart,x.reEnd-8),A=n.slice(x.reEnd-8,x.reEnd),S=n.slice(x.reEnd);A+=S;var P=N.split("(").length-1,L=S;for(m=0;m<P;m++)L=L.replace(/\)[+*?]?/,"");var j="";""===(S=L)&&t!==ee&&(j="$");var z=N+C+S+j+A;n=z}""!==n&&i&&(n="(?=.)"+n);E&&(n=h+n);if(t===ee)return[n,i];if(!i)return e.replace(/\\(.)/g,"$1");var M=r.nocase?"i":"";try{var $=new RegExp("^"+n+"$",M)}catch(e){return new RegExp("$.")}return $._glob=e,$._src=n,$};var ee={};Y.makeRe=function(e,t){return new Q(e,t||{}).makeRe()},Q.prototype.makeRe=function(){if(this.regexp||!1===this.regexp)return this.regexp;var e=this.set;if(!e.length)return this.regexp=!1,this.regexp;var t=this.options,r=t.noglobstar?F:t.dot?V:W,a=t.nocase?"i":"",n=e.map(function(e){return e.map(function(e){return e===G?r:"string"==typeof e?e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):e._src}).join("\\/")}).join("|");n="^(?:"+n+")$",this.negate&&(n="^(?!"+n+").*$");try{this.regexp=new RegExp(n,a)}catch(e){this.regexp=!1}return this.regexp},Y.match=function(e,t,r){var a=new Q(t,r=r||{});return e=e.filter(function(e){return a.match(e)}),a.options.nonull&&!e.length&&e.push(t),e},Q.prototype.match=function(e,t){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return""===e;if("/"===e&&t)return!0;var r=this.options;"/"!==D.sep&&(e=e.split(D.sep).join("/"));e=e.split(Z),this.debug(this.pattern,"split",e);var a,n,i=this.set;for(this.debug(this.pattern,"set",i),n=e.length-1;n>=0&&!(a=e[n]);n--);for(n=0;n<i.length;n++){var o=i[n],s=e;r.matchBase&&1===o.length&&(s=[a]);var l=this.matchOne(s,o,t);if(l)return!!r.flipNegate||!this.negate}return!r.flipNegate&&this.negate},Q.prototype.matchOne=function(e,t,r){var a=this.options;this.debug("matchOne",{this:this,file:e,pattern:t}),this.debug("matchOne",e.length,t.length);for(var n=0,i=0,o=e.length,s=t.length;n<o&&i<s;n++,i++){this.debug("matchOne loop");var l,c=t[i],u=e[n];if(this.debug(t,c,u),!1===c)return!1;if(c===G){this.debug("GLOBSTAR",[t,c,u]);var d=n,h=i+1;if(h===s){for(this.debug("** at the end");n<o;n++)if("."===e[n]||".."===e[n]||!a.dot&&"."===e[n].charAt(0))return!1;return!0}for(;d<o;){var f=e[d];if(this.debug("\nglobstar while",e,d,t,h,f),this.matchOne(e.slice(d),t.slice(h),r))return this.debug("globstar found match!",d,o,f),!0;if("."===f||".."===f||!a.dot&&"."===f.charAt(0)){this.debug("dot detected!",e,d,t,h);break}this.debug("globstar swallow a segment, and continue"),d++}return!(!r||(this.debug("\n>>> no match, partial?",e,d,t,h),d!==o))}if("string"==typeof c?(l=a.nocase?u.toLowerCase()===c.toLowerCase():u===c,this.debug("string match",c,u,l)):(l=u.match(c),this.debug("pattern match",c,u,l)),!l)return!1}if(n===o&&i===s)return!0;if(n===o)return r;if(i===s)return n===o-1&&""===e[n];throw new Error("wtf?")};var te=[];var re=Object.freeze({before:function(e,t){te=[],"zhuanlan.zhihu.com"==e&&t.find("a[data-draft-type]").map(function(e,t){var r=$(t.outerHTML);r.find(".LinkCard-meta svg").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("<sr-blocks></sr-blocks>")}),"sspai.com"==e&&t.find(".ssApp").map(function(e,t){var r=$($("body").find(".ss-app-card")[e].outerHTML);r.find(".code_box").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("<sr-blocks></sr-blocks>")}),"question.zhihu.com"==e&&t.find(".RichText-MCNLinkCardContainer").map(function(e,t){var r=$($("body").find(".RichText-MCNLinkCardContainer")[e].outerHTML);te[e]=r[0].outerHTML,$(t).replaceWith("<sr-blocks></sr-blocks>")}),"post.smzdm.com"==e&&t.find(".embed-card").map(function(e,t){var r=$($("body").find(".embed-card")[e].outerHTML);te[e]=r[0].outerHTML,$(t).parent().replaceWith("<sr-blocks></sr-blocks>")})},specbeautify:function(e,t){switch(e){case"sspai.com":t.find(".relation-apps").remove(),t.find(".ss-app-card").remove();break;case"post.smzdm.com":t.find("img.face").addClass("sr-rd-content-nobeautify"),t.find(".insert-outer img").addClass("sr-rd-content-nobeautify");break;case"infoq.com":t.find("img").map(function(e,t){"left"==$(t).css("float")&&$(t).addClass("sr-rd-content-nobeautify")}),t.find("script").remove();break;case"appinn.com":case"hacpai.com":t.find(".emoji").addClass("sr-rd-content-nobeautify");break;case"douban.com":t.find(".review-content").children().unwrap(),t.find("table").addClass("sr-rd-content-center"),t.find("p").css({"white-space":"pre-wrap"}),t.find(".cc").removeClass();break;case"qdaily.com":t.find("img").map(function(e,t){var r=$(t);0==Number.parseInt(r.css("height"))&&r.remove()}),t.find(".com-insert-images").map(function(e,t){var r=$(t),a=r.find("img").map(function(e,t){return"<div>"+t.outerHTML+"</div>"}).get().join("");r.empty().removeAttr("class").append(a)}),t.find(".com-insert-embed").remove();break;case"news.mtime.com":t.find(".newspictool").map(function(e,t){var r=$(t),a=r.find("img"),n=r.find("p:last");r.removeAttr("class").addClass("sr-rd-content-center").empty().append(a).append(n)});break;case"blog.csdn.net":t.find(".save_code").remove(),t.find(".pre-numbering").remove(),t.find("pre").removeAttr("style").removeAttr("class"),t.find("code").removeAttr("style"),t.find(".dp-highlighter").map(function(e,t){$(t).find(".bar .tools").remove(),$(t).next().is("pre")&&$(t).next().remove()});break;case"news.sohu.com":t.find(".conserve-photo").remove(),t.find("table").addClass("sr-rd-content-center");break;case"qq.com":t.find(".rv-root-v2, #backqqcom").remove();break;case"azofreeware.com":t.find("iframe").remove();break;case"apprcn.com":t.find("img").map(function(e,t){var r=$(t),a=r.attr("src");a&&a.includes("Apprcn_Wechat_Small.jpeg")&&r.parent().remove()}),t.find("a").map(function(e,t){var r=$(t);"来自反斗软件"==r.text()&&r.parent().remove()});break;case"tieba.baidu.com":t.find(".BDE_Smiley").addClass("sr-rd-content-nobeautify"),t.find(".replace_div").removeAttr("class").removeAttr("style"),t.find(".replace_tip").remove(),t.find(".d_post_content, .j_d_post_content, .post_bubble_top, .post_bubble_middle, .post_bubble_bottom").map(function(e,t){$(t).removeAttr("class").removeAttr("style")}),$("body").find(".p_author_face").map(function(e,t){var r=$(t).find("img"),a=r.attr("data-tb-lazyload"),n=r.attr("username");a&&$("sr-rd-mult-avatar").find("span").map(function(e,t){var r=$(t);r.text()==n&&r.parent().find("img").attr("src",a)})});break;case"jingyan.baidu.com":t.find(".exp-image-wraper").removeAttr("class").removeAttr("href");break;case"question.zhihu.com":t.find(".zu-edit-button").remove(),t.find("a.external").map(function(e,t){$(t).removeAttr("class").attr("style","border: none;")}),t.find(".VagueImage").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('<img class="sr-rd-content-img" src="'+a+'" style="zoom: 0.6;">')});break;case"chiphell.com":t.find("img").map(function(e,t){var r=$(t),a=r.parent(),n=r.attr("src"),i=r.attr("smilieid");a.is("ignore_js_op")&&r.unwrap(),i&&n&&n.includes("static/image/smiley")&&r.addClass("sr-rd-content-nobeautify").attr("style","width: 50px;")}),t.find(".quote").remove();break;case"jiemian.com":t.find("script").remove();break;case"36kr.com":t.find(".load-html-img").removeAttr("class");break;case"cnblogs.com":t.find(".cnblogs_code").removeClass(),t.find(".cnblogs_code_hide").removeClass().removeAttr("style"),t.find(".cnblogs_code_toolbar").remove(),t.find(".code_img_opened").remove(),t.find(".code_img_closed").remove();break;case"news.cnblogs.com":t.find(".topic_img").remove();break;case"g-cores.com":t.find(".swiper-slide-active").find("img").map(function(e,t){var r=$(t);r.parent().parent().parent().parent().parent().parent().removeAttr("class").removeAttr("style").html(r)});break;case"feng.com":case"young.ifeng.com":t.find("span").removeAttr("style");break;case"ftchinese.com":t.find("script").remove();break;case"segmentfault.com":t.find(".widget-codetool").remove();break;case"mp.weixin.qq.com":t.find('section[powered-by="xiumi.us"]').find("img").map(function(e,t){var r=$(t),a=r.attr("data-src");r.addClass("sr-rd-content-nobeautify").attr("src",a)});break;case"ruby-china.org":t.find(".twemoji").remove();break;case"w3cplus.com":t.find("iframe").addClass("sr-rd-content-nobeautify");break;case"zuojj.com":t.find(".syntaxhighlighter .Brush").attr("style","font-size: .7em !important;");break;case"aotu.io":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre"),n=r.find("table");r.html(a[1]),n.unwrap()}),t.find("table").addClass("sr-rd-content-center");break;case"colobu.com":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre");r.html(a[1]),r.unwrap()});break;case"hao.caibaojian.com":t.find(".tlink").map(function(e,t){$(t).html("<link>")});break;case"wkee.net":t.find("script").remove();break;case"linux.cn":t.find("pre").attr("style","background-color: #161b20; background-image: none;"),t.find("code").attr("style","background-color: transparent; background-image: none;");break;case"zhuanlan.zhihu.com":t.find("div[data-src]").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('<div class="sr-rd-content-center"><img src="'+a+'"></div>')}),$("body img").each(function(e,t){var r=$(t),a=r.parent();if("column-gif"==r.attr("class")&&"GifPlayer"==a.attr("class")){var n=a.parent().prev();if(n.is("noscript")){var i=n.html(),o=$(i),s=o.attr("src"),l=o.attr("data-thumbnail");$('sr-read img[src="'+l+'"]').attr("src",s)}}}),setTimeout(function(){t.find("img").each(function(e,t){$(t).attr("src").endsWith(".gif")&&$(t).parent().next().is("svg")&&$(t).parent().next().remove()})},500);break;case"jianshu.com":t.find(".image-package").map(function(e,t){var r=$(t),a=r.find("img");r.html(a)});break;case"medium.com":t.find("figure").map(function(e,t){var r=$(t),a=r.find("img");r.replaceWith('<div class="sr-rd-content-center"><img class="sr-rd-content-nobeautify" src="'+a.attr("data-src")+'" style="max-width:100%"></div>')});break;case"worldcup.fifa.com":t.find("iframe").css({width:"790px",height:"450px"}),t.find("div").removeClass()}},removeSpareTag:function(e,t){var r=!1,a="";["lib.csdn.net","huxiu.com","my.oschina.net","caixin.com","163.com","steachs.com","hacpai.com","apprcn.com","mp.weixin.qq.com"].includes(e)?(r=!0,a="p"):["nationalgeographic.com.cn","dgtle.com","news.mtime.com"].includes(e)?(r=!0,a="div"):["chiphell.com"].includes(e)&&(r=!0,a="font"),r&&t.find(a).map(function(e,t){var r=$(t).text().toLowerCase().trim();0==$(t).find("img").length&&""==r&&$(t).remove()})},htmlbeautify:function(e){try{e.html(function(e,t){return t.trim().replace(/<\/?blockquote/g,function(e){return"/"==e[1]?"</sr-blockquote":"<sr-blockquote"}).replace(/<br>\n?<br>(\n?<br>)*/g,"<br>").replace(/\/(div|p)>\n*(<br>\n)+/g,function(e){return e.replace("<br>","")})})}catch(t){return e.html()}},commbeautify:function(e,t){t.find("img:not(.sr-rd-content-nobeautify)").map(function(e,t){var r=$(t),a=(r.parent(),$("<img class='sr-rd-content-img-load'>")),n=r.attr("src"),i=r.attr("data-src"),o=r.attr("data-original"),s=r.attr("original"),l=r.attr("data-original-src"),c=r.attr("data-lazy-src"),u=r.attr("real_src"),d=function(){a.removeClass("sr-rd-content-img-load"),a[0].clientWidth<300&&a[0].clientHeight<300?a.parent().removeClass("sr-rd-content-center").addClass("sr-rd-content-center-small"):a[0].clientWidth>1e3?a.css("zoom","0.6"):a[0].clientHeight>620&&/win|mac/i.test(navigator.platform)&&(a.attr("height",620),a[0].clientWidth<$("sr-rd-content").width()&&a.css({width:"auto"})),a[0].clientWidth>$("sr-rd-content").width()&&a.addClass("sr-rd-content-img")},h=function(){a.addClass("simpread-hidden"),a.parent().hasClass("sr-rd-content-center")&&a.parent().removeAttr("class").addClass("simpread-hidden")},f=void 0;r.parent()[0].tagName.toLowerCase(),f=s||n,f=i||f,f=o||f,f=l||f,f=u||f,!(f=c||f)||f.startsWith("http")||f.startsWith("data")||(f=function e(t,r){if("string"!=typeof t||!t)return null;if(t.match(/^[a-z]+\:\/\//i))return t;if(t.match(/^\/\//))return"http:"+t;if(t.match(/^[a-z]+\:/i))return t;var a;if("string"!=typeof r)return(a=document.createElement("a")).href=t,a.pathname?"http://"+t:null;if(null===(r=e(r)))return null;(a=document.createElement("a")).href=r,"/"===t[0]?r=[]:(r=a.pathname.split("/")).pop(),t=t.split("/");for(var n=0;n<t.length;++n)if("."!==t[n])if(".."===t[n]){if(void 0===r.pop()||0===r.length)return null}else r.push(t[n]);return a.protocol+"//"+a.hostname+r.join("/")}(f,location.href)),a.attr("src",f).replaceAll(r).wrap("<div class='sr-rd-content-center'></div>"),/win|mac/i.test(navigator.platform)?a.one("load",function(){return d()}).one("error",function(){return h()}):a.on("load",function(){return d()}).on("error",function(){return h()})}),t.find("sr-blockquote").map(function(t,r){var a=$(r),n=a.parent();a.removeAttr("style").removeAttr("class"),"dgtle.com"==e&&n.removeClass("quote")}),t.find("iframe:not(.sr-rd-content-nobeautify), embed:not(.sr-rd-content-nobeautify)").map(function(e,t){$(t).wrap("<div class='sr-rd-content-center'></div>")}),t.find("hr").map(function(e,t){$(t).addClass("simpread-hidden")}),t.find("pre").map(function(e,t){$(t).find("code").removeAttr("class")}),t.find("pre").removeAttr("class"),t.find("a").removeAttr("style"),t.find("sr-blocks").map(function(e,t){t.outerHTML=$(te[e]).addClass("simpread-blocks")[0].outerHTML})},cleanHTML:function(e,t,r){t&&e.find("pre").each(function(e,t){var r="",a=!1,n=!1;$(t).find("li").each(function(e,t){$(t).find("code").length>0&&(a=!0),""!=t.outerText.trim()&&(r+=t.outerText.replace(/\n/gi,"").replace(/</gi,"<").replace(/>/gi,">")+"\n")}),0==a&&$(t).find("code").each(function(e,t){n=!0,""!=t.outerText.trim()&&(r+=t.outerText.replace(/</gi,"<").replace(/>/gi,">")+"\n")}),a||n||(r+=t.outerText.replace(/</gi,"<").replace(/>/gi,">")+"\n"),$(t).removeAttr("style").removeAttr("class").removeAttr("id").html(r)});var a,n,i=e.html();"readability-page-1"==$(e.children()).attr("id")&&1==e.children().children().length?i=e.children().children().html():1==e.children().length&&(i=e.children().html()),i=i.replace(/<!--[\S ]+-->/gi,""),e.html((a=i,n="",$.parseHTML(a).forEach(function(e,a){var i=e.tagName,o=e.outerText,s=e.outerHTML;void 0==i?n+="<p>"+e.textContent.replace(/</gi,"<").replace(/>/gi,">").replace(/^\n|\n$/gi,"").trim()+"</p>":"PRE"==i?n+=s:"sr-blocks"==i.toLowerCase()?n+=s:(""!=o||s.includes("<img"))&&(n+=t&&0==r?s.replace(/ (style|id|class)="[\w ;%@#!-:(),\u4e00-\u9fa5]*"/gi,""):s)}),n)),t&&e.find("p").each(function(e,t){t.tagName;var r=t.outerText,a=t.outerHTML;""!=r.trim()||a.includes("<img")||(t.outerText="")})}}),ae="background-color",ne=".simpread-focus-root",ie="-1";function oe(e){var t=e?e.match(/[0-9]+, /gi):[];return t.length>0?t.join("").replace(/, $/,""):null}function se(e,t){var r=Object.keys(t).map(function(e){return t[e]&&e.replace(/[A-Z]/,function(e){return"-"+e.toLowerCase()})+": "+t[e]+";"}).join("");switch(e){case"title":r="sr-rd-title {"+r+"}";break;case"desc":r="sr-rd-desc {"+r+"}";break;case"art":r="sr-rd-content *, sr-rd-content p, sr-rd-content div {"+r+"}";break;case"pre":r="sr-rd-content pre {"+r+"}";break;case"code":r="sr-rd-content pre code, sr-rd-content pre code * {"+r+"}"}var a=$("head").find("style#simpread-custom-"+e);0==a.length?$("head").append('<style type="text/css" id="simpread-custom-'+e+'">'+r+"</style>"):a.html(r)}function le(e,t){var r=$("head").find("style#simpread-custom-"+e);0==r.length?$("head").append('<style type="text/css" id="simpread-custom-'+e+'">'+t+"</style>"):r.html(t)}var ce=Object.freeze({GetColor:oe,BgColor:function(e,t){var r="rgba("+oe(e)+", "+t/100+")";return $(ne).css(ae,r),r},Opacity:function(e){var t=oe($(ne).css(ae)),r="rgba("+t+", "+e/100+")";return t?($(ne).css(ae,r),r):null},FontFamily:function(e){$("sr-read").css("font-family","default"==e?"":e)},FontSize:function(e){"-1"==ie&&void 0==(ie=$("html").attr("style"))&&(ie=""),e?$("html").attr("style","font-size: "+e+"!important;"+ie):$("html").attr("style",ie)},Layout:function(e){$("sr-read").css("margin",e?"20px "+e:"")},SiteCSS:function(e){e?$("head").append('<style type="text/css" id="simpread-site-css">'+e+"</style>"):$("#simpread-site-css").remove()},Preview:function(e){Object.keys(e).forEach(function(t){"css"!=t&&se(t,e[t])}),le("css",e.css)},Custom:se,CSS:le,VerifyCustom:function(e,t){switch(e){case"layout":case"margin":case"fontfamily":case"custom":return""!=t.css;case"fontsize":return""!=t.title.fontSize||""!=t.desc.fontSize||""!=t.art.fontSize||""!=t.css;case"theme":return-1!=t.css.search("simpread-theme-root")}}});function ue(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");var r;t=t||{},this._doc=e,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._wrap=null,this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug?(r=function(e){var t=e.nodeName+" ";if(e.nodeType==e.TEXT_NODE)return t+'("'+e.textContent+'")';var r=e.className&&"."+e.className.replace(/ /g,"."),a="";return e.id?a="(#"+e.id+r+")":r&&(a="("+r+")"),t+a},this.log=function(){if("undefined"!=typeof dump){var e=Array.prototype.map.call(arguments,function(e){return e&&e.nodeName?r(e):e}).join(" ");dump("Reader: (Readability) "+e+"\n")}else if("undefined"!=typeof console)["Reader: (Readability) "].concat(arguments)}):this.log=function(){}}ue.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,whitespace:/^\s*$/,hasContent:/\S$/},DIV_TO_P_ELEMS:["A","BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL","SELECT"],ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],_postProcessContent:function(e){this._fixRelativeUris(e),this._cleanClasses(e)},_removeNodes:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r],n=a.parentNode;n&&(t&&!t.call(this,a,r,e)||n.removeChild(a))}},_replaceNodeTags:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r];this._setNodeTag(a,t)}},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map(function(t){return e.call(t)});return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(t){var r=e.getElementsByTagName(t);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,r=(e.getAttribute("class")||"").split(/\s+/).filter(function(e){return-1!=t.indexOf(e)}).join(" ");for(r?e.setAttribute("class",r):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,r=this._doc.documentURI;function a(e){if(t==r&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var n=this._getAllNodesWithTag(e,["a"]);this._forEachNode(n,function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:")){var r=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",a(t))});var i=this._getAllNodesWithTag(e,["img"]);this._forEachNode(i,function(e){var t=e.getAttribute("src");t&&e.setAttribute("src",a(t))})},_getArticleTitle:function(){var e=this._doc,t="",r="";try{"string"!=typeof(t=r=e.title.trim())&&(t=r=this._getInnerText(e.getElementsByTagName("title")[0]))}catch(e){}var a=!1;function n(e){return e.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))a=/ [\\\/>»] /.test(t),n(t=r.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"))<3&&(t=r.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var i=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),o=t.trim();this._someNode(i,function(e){return e.textContent.trim()===o})||(n(t=r.substring(r.lastIndexOf(":")+1))<3?t=r.substring(r.indexOf(":")+1):n(r.substr(0,r.indexOf(":")))>5&&(t=r))}else if(t.length>150||t.length<15){var s=e.getElementsByTagName("h1");1===s.length&&(t=this._getInnerText(s[0]))}var l=n(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!a||l!=n(r.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=r),t},_prepDocument:function(){var e=this._doc;this._removeNodes(e.getElementsByTagName("style")),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(e.getElementsByTagName("font"),"SPAN")},_nextElement:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){for(var t=e.nextSibling,r=!1;(t=this._nextElement(t))&&"BR"==t.tagName;){r=!0;var a=t.nextSibling;t.parentNode.removeChild(t),t=a}if(r){var n=this._doc.createElement("p");for(e.parentNode.replaceChild(n,e),t=n.nextSibling;t;){if("BR"==t.tagName){var i=this._nextElement(t.nextSibling);if(i&&"BR"==i.tagName)break}if(!this._isPhrasingContent(t))break;var o=t.nextSibling;n.appendChild(t),t=o}for(;n.lastChild&&this._isWhitespace(n.lastChild);)n.removeChild(n.lastChild);"P"===n.parentNode.tagName&&this._setNodeTag(n.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),e.__JSDOMParser__)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var r=e.ownerDocument.createElement(t);e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e),e.readability&&(r.readability=e.readability);for(var a=0;a<e.attributes.length;a++)try{r.setAttribute(e.attributes[a].name,e.attributes[a].value)}catch(e){}return r},_prepArticle:function(e){this._cleanStyles(e),this._markDataTables(e),this._cleanConditionally(e,"form"),this._cleanConditionally(e,"fieldset"),this._clean(e,"object"),this._clean(e,"embed"),this._clean(e,"h1"),this._clean(e,"footer"),this._clean(e,"link"),this._clean(e,"aside");var t=this.DEFAULT_CHAR_THRESHOLD;this._forEachNode(e.children,function(e){this._cleanMatchedNodes(e,function(e,r){return/share/.test(r)&&e.textContent.length<t})});var r=e.getElementsByTagName("h2");if(1===r.length){var a=(r[0].textContent.length-this._articleTitle.length)/this._articleTitle.length;if(Math.abs(a)<.5){(a>0?r[0].textContent.includes(this._articleTitle):this._articleTitle.includes(r[0].textContent))&&this._clean(e,"h2")}}this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._removeNodes(e.getElementsByTagName("p"),function(e){return 0===e.getElementsByTagName("img").length+e.getElementsByTagName("embed").length+e.getElementsByTagName("object").length+e.getElementsByTagName("iframe").length&&!this._getInnerText(e,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){var t=this._nextElement(e.nextSibling);t&&"P"==t.tagName&&e.parentNode.removeChild(e)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(e){var t=this._hasSingleTagInsideElement(e,"TBODY")?e.firstElementChild:e;if(this._hasSingleTagInsideElement(t,"TR")){var r=t.firstElementChild;if(this._hasSingleTagInsideElement(r,"TD")){var a=r.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),e.parentNode.replaceChild(a,e)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do{e=e.parentNode}while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var r=e.getAttribute("rel"),a=e.getAttribute("itemprop");return!(!("author"===r||a&&-1!==a.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var r=0,a=[];e.parentNode&&(a.push(e.parentNode),!t||++r!==t);)e=e.parentNode;return a},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,r=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var a=e.innerHTML;;){for(var n=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),i=[],o=this._doc.documentElement;o;){var s=o.className+" "+o.id;if(this._isProbablyVisible(o))if(this._checkByline(o,s))o=this._removeAndGetNext(o);else if(!n||!this.REGEXPS.unlikelyCandidates.test(s)||this.REGEXPS.okMaybeItsACandidate.test(s)||this._hasAncestorTag(o,"table")||"BODY"===o.tagName||"A"===o.tagName)if("DIV"!==o.tagName&&"SECTION"!==o.tagName&&"HEADER"!==o.tagName&&"H1"!==o.tagName&&"H2"!==o.tagName&&"H3"!==o.tagName&&"H4"!==o.tagName&&"H5"!==o.tagName&&"H6"!==o.tagName||!this._isElementWithoutContent(o)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(o.tagName)&&i.push(o),"DIV"===o.tagName){for(var l=null,c=o.firstChild;c;){var u=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),o.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=u}if(this._hasSingleTagInsideElement(o,"P")&&this._getLinkDensity(o)<.25){var d=o.children[0];o.parentNode.replaceChild(d,o),o=d,i.push(o)}else this._hasChildBlockElement(o)||(o=this._setNodeTag(o,"P"),i.push(o))}o=this._getNextNode(o)}else o=this._removeAndGetNext(o);else this.log("Removing unlikely candidate - "+s),o=this._removeAndGetNext(o);else this.log("Removing hidden node - "+s),o=this._removeAndGetNext(o)}var h=[];this._forEachNode(i,function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var r=this._getNodeAncestors(e,3);if(0!==r.length){var a=0;a+=1,a+=t.split(",").length,a+=Math.min(Math.floor(t.length/100),3),this._forEachNode(r,function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),h.push(e)),0===t)var r=1;else r=1===t?2:3*t;e.readability.contentScore+=a/r}})}}}});for(var f=[],p=0,g=h.length;p<g;p+=1){var m=h[p],_=m.readability.contentScore*(1-this._getLinkDensity(m));m.readability.contentScore=_,this.log("Candidate:",m,"with score "+_);for(var b=0;b<this._nbTopCandidates;b++){var v=f[b];if(!v||_>v.readability.contentScore){f.splice(b,0,m),f.length>this._nbTopCandidates&&f.pop();break}}}var w,y=f[0]||null,k=!1;if(null===y||"BODY"===y.tagName){y=t.createElement("DIV"),k=!0;for(var E=e.childNodes;E.length;)this.log("Moving child out:",E[0]),y.appendChild(E[0]);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],x=1;x<f.length;x++)f[x].readability.contentScore/y.readability.contentScore>=.75&&T.push(this._getNodeAncestors(f[x]));if(T.length>=3)for(w=y.parentNode;"BODY"!==w.tagName;){for(var N=0,C=0;C<T.length&&N<3;C++)N+=Number(T[C].includes(w));if(N>=3){y=w;break}w=w.parentNode}y.readability||this._initializeNode(y),w=y.parentNode;for(var A=y.readability.contentScore,S=A/3;"BODY"!==w.tagName;)if(w.readability){var P=w.readability.contentScore;if(P<S)break;if(P>A){y=w;break}A=w.readability.contentScore,w=w.parentNode}else w=w.parentNode;for(w=y.parentNode;"BODY"!=w.tagName&&1==w.children.length;)w=(y=w).parentNode;y.readability||this._initializeNode(y)}var L=t.createElement("DIV");r&&(L.id="readability-content");for(var j=Math.max(10,.2*y.readability.contentScore),z=(w=y.parentNode).children,M=0,$=z.length;M<$;M++){var B=z[M],I=!1;if(this.log("Looking at sibling node:",B,B.readability?"with score "+B.readability.contentScore:""),this.log("Sibling has score",B.readability?B.readability.contentScore:"Unknown"),B===y)I=!0;else{var O=0;if(B.className===y.className&&""!==y.className&&(O+=.2*y.readability.contentScore),B.readability&&B.readability.contentScore+O>=j)I=!0;else if("P"===B.nodeName){var H=this._getLinkDensity(B),R=this._getInnerText(B),D=R.length;D>80&&H<.25?I=!0:D<80&&D>0&&0===H&&-1!==R.search(/\.( |$)/)&&(I=!0)}}I&&(this.log("Appending node:",B),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(B.nodeName)&&(this.log("Altering sibling:",B,"to div."),B=this._setNodeTag(B,"DIV")),L.appendChild(B),M-=1,$-=1)}if(this._debug&&this.log("Article content pre-prep: "+L.innerHTML),this._prepArticle(L),this._debug&&this.log("Article content post-prep: "+L.innerHTML),k)y.id="readability-page-1",y.className="page";else{var G=t.createElement("DIV");G.id="readability-page-1",G.className="page";var q=L.childNodes;for(this._wrap=L.childNodes[0].outerHTML.replace(L.childNodes[0].innerHTML,"");q.length;)G.appendChild(q[0]);L.appendChild(G)}this._debug&&this.log("Article content after paging: "+L.innerHTML);var U=!0,F=this._getInnerText(L,!0).length;if(F<this._charThreshold)if(U=!1,e.innerHTML=a,this._flagIsActive(this.FLAG_STRIP_UNLIKELYS))this._removeFlag(this.FLAG_STRIP_UNLIKELYS),this._attempts.push({articleContent:L,textLength:F});else if(this._flagIsActive(this.FLAG_WEIGHT_CLASSES))this._removeFlag(this.FLAG_WEIGHT_CLASSES),this._attempts.push({articleContent:L,textLength:F});else if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY))this._removeFlag(this.FLAG_CLEAN_CONDITIONALLY),this._attempts.push({articleContent:L,textLength:F});else{if(this._attempts.push({articleContent:L,textLength:F}),this._attempts.sort(function(e,t){return t.textLength-e.textLength}),!this._attempts[0].textLength)return null;L=this._attempts[0].articleContent,U=!0}if(U){var V=[w,y].concat(this._getNodeAncestors(w));return this._someNode(V,function(e){if(!e.tagName)return!1;var t=e.getAttribute("dir");return!!t&&(this._articleDir=t,!0)}),L}}},_isValidByline:function(e){return("string"==typeof e||e instanceof String)&&((e=e.trim()).length>0&&e.length<100)},_getArticleMetadata:function(){var e={},t={},r=this._doc.getElementsByTagName("meta"),a=/\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi,n=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(e){var r=e.getAttribute("name"),i=e.getAttribute("property"),o=e.getAttribute("content");if(o){var s=null,l=null;if(i&&(s=i.match(a)))for(var c=s.length-1;c>=0;c--)l=s[c].toLowerCase().replace(/\s/g,""),t[l]=o.trim();!s&&r&&n.test(r)&&(l=r,o&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),t[l]=o.trim()))}}),e.title=t["dc:title"]||t["dcterm:title"]||t["og:title"]||t["weibo:article:title"]||t["weibo:webpage:title"]||t.title||t["twitter:title"],e.title||(e.title=this._getArticleTitle()),e.byline=t["dc:creator"]||t["dcterm:creator"]||t.author,e.excerpt=t["dc:description"]||t["dcterm:description"]||t["og:description"]||t["weibo:article:description"]||t["weibo:webpage:description"]||t.description||t["twitter:description"],e.siteName=t["og:site_name"],e},_removeScripts:function(e){this._removeNodes(e.getElementsByTagName("script"),function(e){return e.nodeValue="",e.removeAttribute("src"),!0}),this._removeNodes(e.getElementsByTagName("noscript"))},_hasSingleTagInsideElement:function(e,t){return 1==e.children.length&&e.children[0].tagName===t&&!this._someNode(e.childNodes,function(e){return e.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(e.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&0==e.textContent.trim().length&&(0==e.children.length||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(e){return-1!==this.DIV_TO_P_ELEMS.indexOf(e.tagName)||this._hasChildBlockElement(e)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||-1!==this.PHRASING_ELEMS.indexOf(e.tagName)||("A"===e.tagName||"DEL"===e.tagName||"INS"===e.tagName)&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&0===e.textContent.trim().length||e.nodeType===this.ELEMENT_NODE&&"BR"===e.tagName},_getInnerText:function(e,t){t=void 0===t||t;var r=e.textContent.trim();return t?r.replace(this.REGEXPS.normalize," "):r},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(e&&"svg"!==e.tagName.toLowerCase()){for(var t=0;t<this.PRESENTATIONAL_ATTRIBUTES.length;t++)e.removeAttribute(this.PRESENTATIONAL_ATTRIBUTES[t]);-1!==this.DEPRECATED_SIZE_ATTRIBUTE_ELEMS.indexOf(e.tagName)&&(e.removeAttribute("width"),e.removeAttribute("height"));for(var r=e.firstElementChild;null!==r;)this._cleanStyles(r),r=r.nextElementSibling}},_getLinkDensity:function(e){var t=this._getInnerText(e).length;if(0===t)return 0;var r=0;return this._forEachNode(e.getElementsByTagName("a"),function(e){r+=this._getInnerText(e).length}),r/t},_getClassWeight:function(e){if(!this._flagIsActive(this.FLAG_WEIGHT_CLASSES))return 0;var t=0;return"string"==typeof e.className&&""!==e.className&&(this.REGEXPS.negative.test(e.className)&&(t-=25),this.REGEXPS.positive.test(e.className)&&(t+=25)),"string"==typeof e.id&&""!==e.id&&(this.REGEXPS.negative.test(e.id)&&(t-=25),this.REGEXPS.positive.test(e.id)&&(t+=25)),t},_clean:function(e,t){var r=-1!==["object","embed","iframe"].indexOf(t);this._removeNodes(e.getElementsByTagName(t),function(e){if(r){for(var t=0;t<e.attributes.length;t++)if(this.REGEXPS.videos.test(e.attributes[t].value))return!1;if("object"===e.tagName&&this.REGEXPS.videos.test(e.innerHTML))return!1}return!0})},_hasAncestorTag:function(e,t,r,a){r=r||3,t=t.toUpperCase();for(var n=0;e.parentNode;){if(r>0&&n>r)return!1;if(e.parentNode.tagName===t&&(!a||a(e.parentNode)))return!0;e=e.parentNode,n++}return!1},_getRowAndColumnCount:function(e){for(var t=0,r=0,a=e.getElementsByTagName("tr"),n=0;n<a.length;n++){var i=a[n].getAttribute("rowspan")||0;i&&(i=parseInt(i,10)),t+=i||1;for(var o=0,s=a[n].getElementsByTagName("td"),l=0;l<s.length;l++){var c=s[l].getAttribute("colspan")||0;c&&(c=parseInt(c,10)),o+=c||1}r=Math.max(r,o)}return{rows:t,columns:r}},_markDataTables:function(e){for(var t=e.getElementsByTagName("table"),r=0;r<t.length;r++){var a=t[r];if("presentation"!=a.getAttribute("role"))if("0"!=a.getAttribute("datatable"))if(a.getAttribute("summary"))a._readabilityDataTable=!0;else{var n=a.getElementsByTagName("caption")[0];if(n&&n.childNodes.length>0)a._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some(function(e){return!!a.getElementsByTagName(e)[0]}))this.log("Data table because found data-y descendant"),a._readabilityDataTable=!0;else if(a.getElementsByTagName("table")[0])a._readabilityDataTable=!1;else{var i=this._getRowAndColumnCount(a);i.rows>=10||i.columns>4?a._readabilityDataTable=!0:a._readabilityDataTable=i.rows*i.columns>10}}}else a._readabilityDataTable=!1;else a._readabilityDataTable=!1}},_cleanConditionally:function(e,t){if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)){var r="ul"===t||"ol"===t;this._removeNodes(e.getElementsByTagName(t),function(e){var a=function(e){return e._readabilityDataTable};if("table"===t&&a(e))return!1;if(this._hasAncestorTag(e,"table",-1,a))return!1;var n=this._getClassWeight(e);if(this.log("Cleaning Conditionally",e),n+0<0)return!0;if(this._getCharCount(e,",")<10){for(var i=e.getElementsByTagName("p").length,o=e.getElementsByTagName("img").length,s=e.getElementsByTagName("li").length-100,l=e.getElementsByTagName("input").length,c=0,u=this._concatNodeLists(e.getElementsByTagName("object"),e.getElementsByTagName("embed"),e.getElementsByTagName("iframe")),d=0;d<u.length;d++){for(var h=0;h<u[d].attributes.length;h++)if(this.REGEXPS.videos.test(u[d].attributes[h].value))return!1;if("object"===u[d].tagName&&this.REGEXPS.videos.test(u[d].innerHTML))return!1;c++}var f=this._getLinkDensity(e),p=this._getInnerText(e).length;return o>1&&i/o<.5&&!this._hasAncestorTag(e,"figure")||!r&&s>i||l>Math.floor(i/3)||!r&&p<25&&(0===o||o>2)&&!this._hasAncestorTag(e,"figure")||!r&&n<25&&f>.2||n>=25&&f>.5||1===c&&p<75||c>1}return!1})}},_cleanMatchedNodes:function(e,t){for(var r=this._getNextNode(e,!0),a=this._getNextNode(e);a&&a!=r;)a=t(a,a.className+" "+a.id)?this._removeAndGetNext(a):this._getNextNode(a)},_cleanHeaders:function(e){for(var t=1;t<3;t+=1)this._removeNodes(e.getElementsByTagName("h"+t),function(e){return this._getClassWeight(e)<0})},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return!(e.style&&"none"==e.style.display||e.hasAttribute("hidden"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._removeScripts(this._doc),this._prepDocument();var t=this._getArticleMetadata();this._articleTitle=t.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!t.excerpt){var a=r.getElementsByTagName("p");a.length>0&&(t.excerpt=a[0].textContent.trim())}var n=r.textContent;return{title:this._articleTitle,byline:t.byline||this._articleByline,dir:this._articleDir,content:r.innerHTML,wrap:this._wrap,textContent:n,length:n.length,excerpt:t.excerpt,siteName:t.siteName||this._articleSiteName}}};var de=Object.freeze({Readability:ue}),he=r(function(e){(function(){function t(e){var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as <br> (GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex: <div>foo</div>",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var a in t)t.hasOwnProperty(a)&&(r[a]=t[a].defaultValue);return r}function r(e,t){var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var o=0;o<e.length;++o){var s=r+" sub-extension "+o+": ",l=e[o];if("object"!=(void 0===l?"undefined":a(l)))return n.valid=!1,n.error=s+"must be an object, but "+(void 0===l?"undefined":a(l))+" given",n;if(!i.helper.isString(l.type))return n.valid=!1,n.error=s+'property "type" must be a string, but '+a(l.type)+" given",n;var c=l.type=l.type.toLowerCase();if("language"===c&&(c=l.type="lang"),"html"===c&&(c=l.type="output"),"lang"!==c&&"output"!==c&&"listener"!==c)return n.valid=!1,n.error=s+"type "+c+' is not recognized. Valid values: "lang/language", "output/html" or "listener"',n;if("listener"===c){if(i.helper.isUndefined(l.listeners))return n.valid=!1,n.error=s+'. Extensions of type "listener" must have a property called "listeners"',n}else if(i.helper.isUndefined(l.filter)&&i.helper.isUndefined(l.regex))return n.valid=!1,n.error=s+c+' extensions must define either a "regex" property or a "filter" method',n;if(l.listeners){if("object"!=a(l.listeners))return n.valid=!1,n.error=s+'"listeners" property must be an object but '+a(l.listeners)+" given",n;for(var u in l.listeners)if(l.listeners.hasOwnProperty(u)&&"function"!=typeof l.listeners[u])return n.valid=!1,n.error=s+'"listeners" property must be an hash of [event name]: [callback]. listeners.'+u+" must be a function but "+a(l.listeners[u])+" given",n}if(l.filter){if("function"!=typeof l.filter)return n.valid=!1,n.error=s+'"filter" must be a function, but '+a(l.filter)+" given",n}else if(l.regex){if(i.helper.isString(l.regex)&&(l.regex=new RegExp(l.regex,"g")),!(l.regex instanceof RegExp))return n.valid=!1,n.error=s+'"regex" property must either be a string or a RegExp object, but '+a(l.regex)+" given",n;if(i.helper.isUndefined(l.replace))return n.valid=!1,n.error=s+'"regex" extensions must implement a replace string or function',n}}return n}function n(e,t){return"¨E"+t.charCodeAt(0)+"E"}var i={},o={},s={},l=t(!0),c="vanilla",u={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:t(!0),allOn:function(){var e=t(!0),r={};for(var a in e)e.hasOwnProperty(a)&&(r[a]=!0);return r}()};i.helper={},i.extensions={},i.setOption=function(e,t){return l[e]=t,this},i.getOption=function(e){return l[e]},i.getOptions=function(){return l},i.resetOptions=function(){l=t(!0)},i.setFlavor=function(e){if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");i.resetOptions();var t=u[e];for(var r in c=e,t)t.hasOwnProperty(r)&&(l[r]=t[r])},i.getFlavor=function(){return c},i.getFlavorOptions=function(e){if(u.hasOwnProperty(e))return u[e]},i.getDefaultOptions=function(e){return t(e)},i.subParser=function(e,t){if(i.helper.isString(e)){if(void 0===t){if(o.hasOwnProperty(e))return o[e];throw Error("SubParser named "+e+" not registered!")}o[e]=t}},i.extension=function(e,t){if(!i.helper.isString(e))throw Error("Extension 'name' must be a string");if(e=i.helper.stdExtName(e),i.helper.isUndefined(t)){if(!s.hasOwnProperty(e))throw Error("Extension named "+e+" is not registered!");return s[e]}"function"==typeof t&&(t=t()),i.helper.isArray(t)||(t=[t]);var a=r(t,e);if(!a.valid)throw Error(a.error);s[e]=t},i.getAllExtensions=function(){return s},i.removeExtension=function(e){delete s[e]},i.resetExtensions=function(){s={}},i.validateExtension=function(e){var t=r(e,null);return!!t.valid||!1},i.hasOwnProperty("helper")||(i.helper={}),i.helper.isString=function(e){return"string"==typeof e||e instanceof String},i.helper.isFunction=function(e){return e&&"[object Function]"==={}.toString.call(e)},i.helper.isArray=function(e){return Array.isArray(e)},i.helper.isUndefined=function(e){return void 0===e},i.helper.forEach=function(e,t){if(i.helper.isUndefined(e))throw new Error("obj param is required");if(i.helper.isUndefined(t))throw new Error("callback param is required");if(!i.helper.isFunction(t))throw new Error("callback param must be a function/closure");if("function"==typeof e.forEach)e.forEach(t);else if(i.helper.isArray(e))for(var r=0;r<e.length;r++)t(e[r],r,e);else{if("object"!=(void 0===e?"undefined":a(e)))throw new Error("obj does not seem to be an array or an iterable object");for(var n in e)e.hasOwnProperty(n)&&t(e[n],n,e)}},i.helper.stdExtName=function(e){return e.replace(/[_?*+\/\\.^-]/g,"").replace(/\s/g,"").toLowerCase()},i.helper.escapeCharactersCallback=n,i.helper.escapeCharacters=function(e,t,r){var a="(["+t.replace(/([\[\]\\])/g,"\\$1")+"])";r&&(a="\\\\"+a);var i=new RegExp(a,"g");return e.replace(i,n)},i.helper.unescapeHTMLEntities=function(e){return e.replace(/"/g,'"').replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")};var d=function(e,t,r,a){var n,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),h=new RegExp(t,c.replace(/g/g,"")),f=[];do{for(n=0;o=d.exec(e);)if(h.test(o[0]))n++||(s=(i=d.lastIndex)-o[0].length);else if(n&&!--n){l=o.index+o[0].length;var p={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(f.push(p),!u)return f}}while(n&&(d.lastIndex=i));return f};i.helper.matchRecursiveRegExp=function(e,t,r,a){for(var n=d(e,t,r,a),i=[],o=0;o<n.length;++o)i.push([e.slice(n[o].wholeMatch.start,n[o].wholeMatch.end),e.slice(n[o].match.start,n[o].match.end),e.slice(n[o].left.start,n[o].left.end),e.slice(n[o].right.start,n[o].right.end)]);return i},i.helper.replaceRecursiveRegExp=function(e,t,r,a,n){if(!i.helper.isFunction(t)){var o=t;t=function(){return o}}var s=d(e,r,a,n),l=e,c=s.length;if(c>0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var h=0;h<c;++h)u.push(t(e.slice(s[h].wholeMatch.start,s[h].wholeMatch.end),e.slice(s[h].match.start,s[h].match.end),e.slice(s[h].left.start,s[h].left.end),e.slice(s[h].right.start,s[h].right.end))),h<c-1&&u.push(e.slice(s[h].wholeMatch.end,s[h+1].wholeMatch.start));s[c-1].wholeMatch.end<e.length&&u.push(e.slice(s[c-1].wholeMatch.end)),l=u.join("")}return l},i.helper.regexIndexOf=function(e,t,r){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";if(t instanceof RegExp==0)throw"InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp";var a=e.substring(r||0).search(t);return a>=0?a+(r||0):a},i.helper.splitAtIndex=function(e,t){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},i.helper.padEnd=function(e,t,r){return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){alert(e)},log:function(e){alert(e)},error:function(e){throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:'<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">',showdown:"<span style=\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>"},i.Converter=function(e){function t(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return void function(e,t){"function"==typeof e&&(e=e(new i.Converter)),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var n=0;n<e.length;++n)switch(e[n].type){case"lang":d.push(e[n]);break;case"output":h.push(e[n]);break;default:throw Error("Extension loader error: Type unrecognized!!!")}}(i.extensions[e],e);if(i.helper.isUndefined(s[e]))throw Error('Extension "'+e+'" could not be loaded. It was either not found or is not a valid extension.');e=s[e]}"function"==typeof e&&(e=e()),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var o=0;o<e.length;++o){switch(e[o].type){case"lang":d.push(e[o]);break;case"output":h.push(e[o])}if(e[o].hasOwnProperty("listeners"))for(var l in e[o].listeners)e[o].listeners.hasOwnProperty(l)&&n(l,e[o].listeners[l])}}function n(e,t){if(!i.helper.isString(e))throw Error("Invalid argument in converter.listen() method: name must be a string, but "+(void 0===e?"undefined":a(e))+" given");if("function"!=typeof t)throw Error("Invalid argument in converter.listen() method: callback must be a function, but "+(void 0===t?"undefined":a(t))+" given");f.hasOwnProperty(e)||(f[e]=[]),f[e].push(t)}var o={},d=[],h=[],f={},p=c,g={parsed:{},raw:"",format:""};!function(){for(var r in e=e||{},l)l.hasOwnProperty(r)&&(o[r]=l[r]);if("object"!=(void 0===e?"undefined":a(e)))throw Error("Converter expects the passed parameter to be an object, but "+(void 0===e?"undefined":a(e))+" was passed instead.");for(var n in e)e.hasOwnProperty(n)&&(o[n]=e[n]);o.extensions&&i.helper.forEach(o.extensions,t)}(),this._dispatch=function(e,t,r,a){if(f.hasOwnProperty(e))for(var n=0;n<f[e].length;++n){var i=f[e][n](e,t,this,r,a);i&&void 0!==i&&(t=i)}return t},this.listen=function(e,t){return n(e,t),this},this.makeHtml=function(e){if(!e)return e;var t={gHtmlBlocks:[],gHtmlMdBlocks:[],gHtmlSpans:[],gUrls:{},gTitles:{},gDimensions:{},gListLevel:0,hashLinkCounts:{},langExtensions:d,outputModifiers:h,converter:this,ghCodeBlocks:[],metadata:{parsed:{},raw:"",format:""}};return e=(e=(e=(e=(e=e.replace(/¨/g,"¨T")).replace(/\$/g,"¨D")).replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/\u00A0/g," "),o.smartIndentationFix&&(e=function(e){var t=e.match(/^\s*/)[0].length,r=new RegExp("^\\s{0,"+t+"}","gm");return e.replace(r,"")}(e)),e="\n\n"+e+"\n\n",e=(e=i.subParser("detab")(e,o,t)).replace(/^[ \t]+$/gm,""),i.helper.forEach(d,function(r){e=i.subParser("runExtension")(r,e,o,t)}),e=i.subParser("metadata")(e,o,t),e=i.subParser("hashPreCodeTags")(e,o,t),e=i.subParser("githubCodeBlocks")(e,o,t),e=i.subParser("hashHTMLBlocks")(e,o,t),e=i.subParser("hashCodeTags")(e,o,t),e=i.subParser("stripLinkDefinitions")(e,o,t),e=i.subParser("blockGamut")(e,o,t),e=i.subParser("unhashHTMLSpans")(e,o,t),e=(e=(e=i.subParser("unescapeSpecialChars")(e,o,t)).replace(/¨D/g,"$$")).replace(/¨T/g,"¨"),e=i.subParser("completeHTMLDocument")(e,o,t),i.helper.forEach(h,function(r){e=i.subParser("runExtension")(r,e,o,t)}),g=t.metadata,e},this.makeMarkdown=this.makeMd=function(e,t){if(e=(e=(e=e.replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/>[ \t]+</,">¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],a=0;a<t.length;++a)if(1===t[a].childElementCount&&"code"===t[a].firstChild.tagName.toLowerCase()){var n=t[a].firstChild.innerHTML.trim(),o=t[a].firstChild.getAttribute("data-language")||"";if(""===o)for(var s=t[a].firstChild.className.split(" "),l=0;l<s.length;++l){var c=s[l].match(/^language-(.+)$/);if(null!==c){o=c[1];break}}n=i.helper.unescapeHTMLEntities(n),r.push(n),t[a].outerHTML='<precode language="'+o+'" precodenum="'+a.toString()+'"></precode>'}else r.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return r}(r)};!function e(t){for(var r=0;r<t.childNodes.length;++r){var a=t.childNodes[r];3===a.nodeType?/\S/.test(a.nodeValue)?(a.nodeValue=a.nodeValue.split("\n").join(" "),a.nodeValue=a.nodeValue.replace(/(\s)+/g,"$1")):(t.removeChild(a),--r):1===a.nodeType&&e(a)}}(r);for(var n=r.childNodes,o="",s=0;s<n.length;s++)o+=i.subParser("makeMarkdown.node")(n[s],a);return o},this.setOption=function(e,t){o[e]=t},this.getOption=function(e){return o[e]},this.getOptions=function(){return o},this.addExtension=function(e,r){t(e,r=r||null)},this.useExtension=function(e){t(e)},this.setFlavor=function(e){if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");var t=u[e];for(var r in p=e,t)t.hasOwnProperty(r)&&(o[r]=t[r])},this.getFlavor=function(){return p},this.removeExtension=function(e){i.helper.isArray(e)||(e=[e]);for(var t=0;t<e.length;++t){for(var r=e[t],a=0;a<d.length;++a)d[a]===r&&d[a].splice(a,1);for(;0<h.length;++a)h[0]===r&&h[0].splice(a,1)}},this.getAllExtensions=function(){return{language:d,output:h}},this.getMetadata=function(e){return e?g.raw:g.parsed},this.getMetadataFormat=function(){return g.format},this._setMetadataPair=function(e,t){g.parsed[e]=t},this._setMetadataFormat=function(e){g.format=e},this._setMetadataRaw=function(e){g.raw=e}},i.subParser("anchors",function(e,t,r){var a=function(e,a,n,o,s,l,c){if(i.helper.isUndefined(c)&&(c=""),n=n.toLowerCase(),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(n||(n=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,i.helper.isUndefined(r.gUrls[n]))return e;o=r.gUrls[n],i.helper.isUndefined(r.gTitles[n])||(c=r.gTitles[n])}var u='<a href="'+(o=o.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback))+'"';return""!==c&&null!==c&&(u+=' title="'+(c=(c=c.replace(/"/g,""")).replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback))+'"'),t.openLinksInNewWindow&&!/^#/.test(o)&&(u+=' target="¨E95Eblank"'),u+">"+a+"</a>"};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,a,n,o){if("\\"===a)return r+n;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'<a href="'+s+'"'+l+">"+n+"</a>"})),r.converter._dispatch("anchors.after",e,t,r)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,p=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,g=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,m=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,_=function(e){return function(t,r,a,n,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",h=r||"",f=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),h+'<a href="'+a+'"'+d+">"+c+"</a>"+u+f}},b=function(e,t){return function(r,a,n){var o="mailto:";return a=a||"",n=i.subParser("unescapeSpecialChars")(n,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+n),n=i.helper.encodeEmailAddress(n)):o+=n,a+'<a href="'+o+'">'+n+"</a>"}};i.subParser("autoLinks",function(e,t,r){return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(p,_(t))).replace(m,b(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),i.subParser("simplifiedAutoLinks",function(e,t,r){return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,_(t)):e.replace(h,_(t))).replace(g,b(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),i.subParser("blockGamut",function(e,t,r){return e=r.converter._dispatch("blockGamut.before",e,t,r),e=i.subParser("blockQuotes")(e,t,r),e=i.subParser("headers")(e,t,r),e=i.subParser("horizontalRule")(e,t,r),e=i.subParser("lists")(e,t,r),e=i.subParser("codeBlocks")(e,t,r),e=i.subParser("tables")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),i.subParser("blockQuotes",function(e,t,r){e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=i.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^ /gm,"¨0")).replace(/¨0/g,"")}),i.subParser("hashBlock")("<blockquote>\n"+e+"\n</blockquote>",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),i.subParser("codeBlocks",function(e,t,r){return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,a,n){var o=a,s=n,l="\n";return o=i.subParser("outdent")(o,t,r),o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="<pre><code>"+o+l+"</code></pre>",i.subParser("hashBlock")(o,t,r)+s})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),i.subParser("codeSpans",function(e,t,r){return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,a,n,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+"<code>"+(s=i.subParser("encodeCode")(s,t,r))+"</code>",i.subParser("hashHTMLSpans")(s,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),i.subParser("completeHTMLDocument",function(e,t,r){if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var a="html",n="<!DOCTYPE HTML>\n",i="",o='<meta charset="utf-8">\n',s="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(n="<!DOCTYPE "+r.metadata.parsed.doctype+">\n","html"!==(a=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='<meta charset="utf-8">')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i="<title>"+r.metadata.parsed.title+"\n";break;case"charset":o="html"===a||"html5"===a?'\n':'\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=n+"\n\n"+i+o+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),i.subParser("detab",function(e,t,r){return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,a=4-r.length%4,n=0;n/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),i.subParser("encodeBackslashEscapes",function(e,t,r){return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),i.subParser("encodeCode",function(e,t,r){return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),i.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),i.subParser("githubCodeBlocks",function(e,t,r){return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,a,n,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),o="
"+o+s+"
",o=i.subParser("hashBlock")(o,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),i.subParser("hashBlock",function(e,t,r){return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),i.subParser("hashCodeTags",function(e,t,r){return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=i.helper.replaceRecursiveRegExp(e,function(e,a,n,o){var s=n+i.subParser("encodeCode")(a,t,r)+o;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"},"]*>","","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),i.subParser("hashElement",function(e,t,r){return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"}}),i.subParser("hashHTMLBlocks",function(e,t,r){e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],n=function(e,t,a,n){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+r.converter.makeHtml(t)+n),"\n\n¨K"+(r.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var o=0;o]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),h=i.helper.replaceRecursiveRegExp(d[1],n,c,u,"im");if(h===d[1])break;e=d[0].concat(h)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),e=(e=i.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),i.subParser("hashHTMLSpans",function(e,t,r){function a(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return a(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<[^>]+?>/gi,function(e){return a(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),i.subParser("unhashHTMLSpans",function(e,t,r){e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var a=0;a]*>\\s*]*>","^ {0,3}\\s*","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),i.subParser("headers",function(e,t,r){function a(e){var a,n;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,n=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=n+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=n+a),r.hashLinkCounts[a]?a=a+"-"+r.hashLinkCounts[a]++:r.hashLinkCounts[a]=1,a}e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=""+s+"";return i.subParser("hashBlock")(c,t,r)})).replace(s,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=n+1,u=""+s+"";return i.subParser("hashBlock")(u,t,r)});var l=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return e=e.replace(l,function(e,o,s){var l=s;t.customizedHeaderId&&(l=s.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(l,t,r),u=t.noHeaderId?"":' id="'+a(s)+'"',d=n-1+o.length,h=""+c+"";return i.subParser("hashBlock")(h,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),i.subParser("horizontalRule",function(e,t,r){e=r.converter._dispatch("horizontalRule.before",e,t,r);var a=i.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),r.converter._dispatch("horizontalRule.after",e,t,r)}),i.subParser("images",function(e,t,r){function a(e,t,a,n,o,s,l,c){var u=r.gUrls,d=r.gTitles,h=r.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)n="";else if(""===n||null===n){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),n="#"+a,i.helper.isUndefined(u[a]))return e;n=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(h[a])||(o=h[a].width,s=h[a].height)}t=t.replace(/"/g,""").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var f=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,n,i,o,s,l){return a(e,t,r,n=n.replace(/\s/g,""),i,o,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),r.converter._dispatch("images.after",e,t,r)}),i.subParser("italicsAndBold",function(e,t,r){function a(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return a(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return a(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return a(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),i.subParser("lists",function(e,t,r){function a(e,a){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(n,function(e,a,n,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,r),h="";return c&&t.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,r),d=i.subParser("blockGamut")(d,t,r)):(d=(d=i.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,r):i.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function n(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function o(e,r,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),h=n(e,r);-1!==d?(c+="\n\n<"+r+h+">\n"+a(u.slice(0,d),!!i)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+r+h+">\n"+a(u,!!i)+"\n"}(e);else{var u=n(e,r);c="\n\n<"+r+u+">\n"+a(e,!!i)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return o(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,a){return o(r,a.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),i.subParser("metadata",function(e,t,r){function a(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,a){return r.metadata.parsed[t]=a,""})}return t.metadata?(e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return a(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,n){return t&&(r.metadata.format=t),a(n),"¨M"})).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)):e}),i.subParser("outdent",function(e,t,r){return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),i.subParser("paragraphs",function(e,t,r){for(var a=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),n=[],o=a.length,s=0;s=0?n.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",n.push(l))}for(o=n.length,s=0;s]*>\s*]*>/.test(u)&&(d=!0)}n[s]=u}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),i.subParser("runExtension",function(e,t,r,a){if(e.filter)t=e.filter(t,a.converter,r);else if(e.regex){var n=e.regex;n instanceof RegExp||(n=new RegExp(n,"g")),t=t.replace(n,e.replace)}return t}),i.subParser("spanGamut",function(e,t,r){return e=r.converter._dispatch("spanGamut.before",e,t,r),e=i.subParser("codeSpans")(e,t,r),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=i.subParser("encodeBackslashEscapes")(e,t,r),e=i.subParser("images")(e,t,r),e=i.subParser("anchors")(e,t,r),e=i.subParser("autoLinks")(e,t,r),e=i.subParser("simplifiedAutoLinks")(e,t,r),e=i.subParser("emoji")(e,t,r),e=i.subParser("underline")(e,t,r),e=i.subParser("italicsAndBold")(e,t,r),e=i.subParser("strikethrough")(e,t,r),e=i.subParser("ellipsis")(e,t,r),e=i.subParser("hashHTMLSpans")(e,t,r),e=i.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),i.subParser("strikethrough",function(e,t,r){return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(a)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),i.subParser("stripLinkDefinitions",function(e,t,r){var a=function(e,a,n,o,s,l,c){return a=a.toLowerCase(),n.match(/^data:.+?\/.+?;base64,/)?r.gUrls[a]=n.replace(/\s/g,""):r.gUrls[a]=i.subParser("encodeAmpsAndAngles")(n,t,r),l?l+c:(c&&(r.gTitles[a]=c.replace(/"|'/g,""")),t.parseImgDimensions&&o&&s&&(r.gDimensions[a]={width:o,height:s}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,a)).replace(/¨0/,"")}),i.subParser("tables",function(e,t,r){function a(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function n(e,a){var n="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(n=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),""+(e=i.subParser("spanGamut")(e,t,r))+"\n"}function o(e,a){return""+i.subParser("spanGamut")(e,t,r)+"\n"}function s(e){var s,l=e.split("\n");for(s=0;s\n\n\n",n=0;n\n";for(var i=0;i\n"}return r+"\n\n"}(h,p)}return t.tables?(e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,s),r.converter._dispatch("tables.after",e,t,r)):e}),i.subParser("underline",function(e,t,r){return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,i.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),i.subParser("unescapeSpecialChars",function(e,t,r){return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),i.subParser("makeMarkdown.blockquote",function(e,t){var r="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,o=0;o "+(r=r.trim()).split("\n").join("\n> ")}),i.subParser("makeMarkdown.codeBlock",function(e,t){var r=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[a]+"\n```"}),i.subParser("makeMarkdown.codeSpan",function(e){return"`"+e.innerHTML+"`"}),i.subParser("makeMarkdown.emphasis",function(e,t){var r="";if(e.hasChildNodes()){r+="*";for(var a=e.childNodes,n=a.length,o=0;o",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),i.subParser("makeMarkdown.links",function(e,t){var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,n=a.length;r="[";for(var o=0;o",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),i.subParser("makeMarkdown.list",function(e,t,r){var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,s=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),i.subParser("makeMarkdown.strikethrough",function(e,t){var r="";if(e.hasChildNodes()){r+="~~";for(var a=e.childNodes,n=a.length,o=0;otr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=g)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),e.exports?e.exports=i:this.showdown=i}).call(t)}),fe={pangu:n,minimatch:R,beautify:re,style:ce,rdability:de,markdown:Object.freeze({default:he,__moduleExports:he})};e.Plugin=function(e){return void 0==e?fe:fe[e]},Object.defineProperty(e,"__esModule",{value:!0})}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.puplugin={})}(this,function(e){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(e,t){return e(t={exports:{}},t.exports),t.exports}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=r(function(e,t){e.exports=function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n=function(){function e(e,t){for(var r=0;r=0||t.isContentEditable||"true"===t.getAttribute("g_editable"))return!0;t=t.parentNode}return!1}},{key:"isFirstTextChild",value:function(e,t){for(var r=e.childNodes,a=0;a-1;a--){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"spacingNodeByXPath",value:function(e,t){for(var r=document.evaluate(e,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),a=void 0,n=void 0,i=r.snapshotLength-1;i>-1;--i)if(a=r.snapshotItem(i),this.canIgnoreNode(a))n=a;else{var o=this.spacing(a.data);if(a.data!==o&&(a.data=o),n){if(a.nextSibling&&a.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}var s=a.data.toString().substr(-1)+n.data.toString().substr(0,1),l=this.spacing(s);if(l!==s){for(var c=n;c.parentNode&&-1===c.nodeName.search(this.spaceSensitiveTags)&&this.isFirstTextChild(c.parentNode,c);)c=c.parentNode;for(var u=a;u.parentNode&&-1===u.nodeName.search(this.spaceSensitiveTags)&&this.isLastTextChild(u.parentNode,u);)u=u.parentNode;if(u.nextSibling&&u.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}if(-1===u.nodeName.search(this.blockTags))if(-1===c.nodeName.search(this.spaceSensitiveTags))-1===c.nodeName.search(this.ignoreTags)&&-1===c.nodeName.search(this.blockTags)&&(n.previousSibling?-1===n.previousSibling.nodeName.search(this.spaceLikeTags)&&(n.data=" "+n.data):this.canIgnoreNode(n)||(n.data=" "+n.data));else if(-1===u.nodeName.search(this.spaceSensitiveTags))a.data=a.data+" ";else{var d=document.createElement("pangu");d.innerHTML=" ",c.previousSibling?-1===c.previousSibling.nodeName.search(this.spaceLikeTags)&&c.parentNode.insertBefore(d,c):c.parentNode.insertBefore(d,c),d.previousElementSibling||d.parentNode&&d.parentNode.removeChild(d)}}}n=a}}},{key:"spacingNode",value:function(e){this.spacingNodeByXPath(".//*/text()[normalize-space(.)]",e)}},{key:"spacingElementById",value:function(e){var t='id("'+e+'")//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByClassName",value:function(e){var t='//*[contains(concat(" ", normalize-space(@class), " "), "'+e+'")]//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByTagName",value:function(e){var t="//"+e+"//text()";this.spacingNodeByXPath(t,document)}},{key:"spacingPageTitle",value:function(){this.spacingNodeByXPath("/html/head/title/text()",document)}},{key:"spacingPageBody",value:function(){for(var e="/html/body//*/text()[normalize-space(.)]",t=["script","style","textarea"],r=0;r])([A-Za-z0-9])/g,d=/([A-Za-z0-9])([\+\-\*\/=&\\|<>])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,h=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c]+(.*?)[\)\]\}>\u201d]+)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,f=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c>])/g,p=/([\)\]\}>\u201d<])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,g=/([\(\[\{<\u201c]+)(\s*)(.+?)(\s*)([\)\]\}>\u201d]+)/,m=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([~!;:,\.\?\u2026])([A-Za-z0-9])/g,_=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([A-Za-z0-9`\$%\^&\*\-=\+\\\|\/@\u00a1-\u00ff\u2022\u2027\u2150-\u218f])/g,b=/([A-Za-z0-9`~\$%\^&\*\-=\+\\\|\/!;:,\.\?\u00a1-\u00ff\u2022\u2026\u2027\u2150-\u218f])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,v=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return r(e,[{key:"spacing",value:function(e){var t=e,r=t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(a,"$1 $2")).replace(n,"$1 $2")).replace(i,"$1$3$5")).replace(o,"$1$3$4")).replace(s,"$1 $2$3$4 $5")).replace(l,"$1 $2")).replace(c,"$1 $3")).replace(u,"$1 $2 $3")).replace(d,"$1 $2 $3"),v=t.replace(h,"$1 $2 $4");return t=v,r===v&&(t=(t=t.replace(f,"$1 $2")).replace(p,"$1 $2")),t=(t=(t=(t=t.replace(g,"$1$3$5")).replace(m,"$1$2 $3")).replace(_,"$1 $2")).replace(b,"$1 $2")}},{key:"spacingText",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];try{var r=this.spacing(e);t(null,r)}catch(e){t(e)}}}]),e}(),w=new v;(e.exports=w).Pangu=v}])});n.pangu;function i(e,t){for(var r=0,a=e.length-1;a>=0;a--){var n=e[a];"."===n?e.splice(a,1):".."===n?(e.splice(a,1),r++):r&&(e.splice(a,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(e){return o.exec(e).slice(1)};function l(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,t="/"===a.charAt(0))}return e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"),(t?"/":"")+e||"."}function c(e){var t=u(e),r="/"===b(e,-1);return(e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e}function u(e){return"/"===e.charAt(0)}function d(){return c(_(Array.prototype.slice.call(arguments,0),function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function h(e,t){function r(e){for(var t=0;t=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=l(e).substr(1),t=l(t).substr(1);for(var a=r(e.split("/")),n=r(t.split("/")),i=Math.min(a.length,n.length),o=i,s=0;s=0&&c>0){for(a=[],i=r.length;u>=0&&!s;)u==l?(a.push(u),l=r.indexOf(e,u+1)):1==a.length?s=[a.pop(),c]:((n=a.pop())=0?l:c;a.length&&(s=[i,o])}return s}E.range=x;var N=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(t,r){var a=[];var n=k("{","}",t);if(!n||/\$$/.test(n.pre))return[t];var i=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(n.body);var o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(n.body);var s=i||o;var l=n.body.indexOf(",")>=0;if(!s&&!l)return n.post.match(/,.*\}/)?(t=n.pre+"{"+n.body+S+n.post,e(t)):[t];var c;if(s)c=n.body.split(/\.\./);else if(1===(c=function e(t){if(!t)return[""];var r=[];var a=k("{","}",t);if(!a)return t.split(",");var n=a.pre;var i=a.body;var o=a.post;var s=n.split(",");s[s.length-1]+="{"+i+"}";var l=e(o);o.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l));r.push.apply(r,s);return r}(n.body)).length&&1===(c=e(c[0],!1).map(M)).length){var u=n.post.length?e(n.post,!1):[""];return u.map(function(e){return n.pre+c[0]+e})}var d=n.pre;var u=n.post.length?e(n.post,!1):[""];var h;if(s){var f=j(c[0]),p=j(c[1]),g=Math.max(c[0].length,c[1].length),m=3==c.length?Math.abs(j(c[2])):1,_=I,b=p0){var x=new Array(T+1).join("0");E=y<0?"-"+x+E.slice(1):x+E}}h.push(E)}}else h=w(c,function(t){return e(t,!1)});for(var N=0;N=t}var H=v&&m||v,R=Y;Y.Minimatch=Q;var D={sep:"/"};try{D=H}catch(e){}var G=Y.GLOBSTAR=Q.GLOBSTAR={},q={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},U="[^/]",F=U+"*?",V="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",W="(?:(?!(?:\\/|^)\\.).)*?",X="().*{}+?[]^$\\!".split("").reduce(function(e,t){return e[t]=!0,e},{});var Z=/\/+/;function K(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function Y(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new Q(t,r).match(e))}function Q(e,t){if(!(this instanceof Q))return new Q(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==D.sep&&(e=e.split(D.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function J(e,t){if(t||(t=this instanceof Q?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:N(e)}Y.filter=function(e,t){return t=t||{},function(r,a,n){return Y(r,e,t)}},Y.defaults=function(e){if(!e||!Object.keys(e).length)return Y;var t=Y,r=function(r,a,n){return t.minimatch(r,a,K(e,n))};return r.Minimatch=function(r,a){return new t.Minimatch(r,K(e,a))},r},Q.defaults=function(e){return e&&Object.keys(e).length?Y.defaults(e).Minimatch:Q},Q.prototype.debug=function(){},Q.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(Z)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r},Q.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(this.options.nonegate)return;for(var a=0,n=e.length;a65536)throw new TypeError("pattern is too long");var r=this.options;if(!r.noglobstar&&"**"===e)return G;if(""===e)return"";var a,n="",i=!!r.nocase,o=!1,s=[],l=[],c=!1,u=-1,d=-1,h="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=this;function p(){if(a){switch(a){case"*":n+=F,i=!0;break;case"?":n+=U,i=!0;break;default:n+="\\"+a}f.debug("clearStateChar %j %j",a,n),a=!1}}for(var g,m=0,_=e.length;m<_&&(g=e.charAt(m));m++)if(this.debug("%s\t%s %s %j",e,m,n,g),o&&X[g])n+="\\"+g,o=!1;else switch(g){case"/":return!1;case"\\":p(),o=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,m,n,g),c){this.debug(" in class"),"!"===g&&m===d+1&&(g="^"),n+=g;continue}f.debug("call clearStateChar %j",a),p(),a=g,r.noext&&p();continue;case"(":if(c){n+="(";continue}if(!a){n+="\\(";continue}s.push({type:a,start:m-1,reStart:n.length,open:q[a].open,close:q[a].close}),n+="!"===a?"(?:(?!(?:":"(?:",this.debug("plType %j %j",a,n),a=!1;continue;case")":if(c||!s.length){n+="\\)";continue}p(),i=!0;var b=s.pop();n+=b.close,"!"===b.type&&l.push(b),b.reEnd=n.length;continue;case"|":if(c||!s.length||o){n+="\\|",o=!1;continue}p(),n+="|";continue;case"[":if(p(),c){n+="\\"+g;continue}c=!0,d=m,u=n.length,n+=g;continue;case"]":if(m===d+1||!c){n+="\\"+g,o=!1;continue}if(c)var v,w=e.substring(d+1,m);i=!0,c=!1,n+=g;continue;default:p(),o?o=!1:!X[g]||"^"===g&&c||(n+="\\"),n+=g}c&&(w=e.substr(d+1),v=this.parse(w,ee),n=n.substr(0,u)+"\\["+v[0],i=i||v[1]);for(b=s.pop();b;b=s.pop()){var y=n.slice(b.reStart+b.open.length);this.debug("setting tail",n,b),y=y.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,t,r){return r||(r="\\"),t+t+r+"|"}),this.debug("tail=%j\n %s",y,y,b,n);var k="*"===b.type?F:"?"===b.type?U:"\\"+b.type;i=!0,n=n.slice(0,b.reStart)+k+"\\("+y}p(),o&&(n+="\\\\");var E=!1;switch(n.charAt(0)){case".":case"[":case"(":E=!0}for(var T=l.length-1;T>-1;T--){var x=l[T],N=n.slice(0,x.reStart),C=n.slice(x.reStart,x.reEnd-8),A=n.slice(x.reEnd-8,x.reEnd),S=n.slice(x.reEnd);A+=S;var P=N.split("(").length-1,L=S;for(m=0;m=0&&!(a=e[n]);n--);for(n=0;n>> no match, partial?",e,d,t,h),d!==o))}if("string"==typeof c?(l=a.nocase?u.toLowerCase()===c.toLowerCase():u===c,this.debug("string match",c,u,l)):(l=u.match(c),this.debug("pattern match",c,u,l)),!l)return!1}if(n===o&&i===s)return!0;if(n===o)return r;if(i===s)return n===o-1&&""===e[n];throw new Error("wtf?")};var te=[];var re=Object.freeze({before:function(e,t){te=[],"zhuanlan.zhihu.com"==e&&t.find("a[data-draft-type]").map(function(e,t){var r=$(t.outerHTML);r.find(".LinkCard-meta svg").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")}),"sspai.com"==e&&t.find(".ssApp").map(function(e,t){var r=$($("body").find(".ss-app-card")[e].outerHTML);r.find(".code_box").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")}),"question.zhihu.com"==e&&t.find(".RichText-MCNLinkCardContainer").map(function(e,t){var r=$($("body").find(".RichText-MCNLinkCardContainer")[e].outerHTML);te[e]=r[0].outerHTML,$(t).replaceWith("")}),"post.smzdm.com"==e&&t.find(".embed-card").map(function(e,t){var r=$($("body").find(".embed-card")[e].outerHTML);te[e]=r[0].outerHTML,$(t).parent().replaceWith("")})},specbeautify:function(e,t){switch(e){case"sspai.com":t.find(".relation-apps").remove(),t.find(".ss-app-card").remove();break;case"post.smzdm.com":t.find("img.face").addClass("sr-rd-content-nobeautify"),t.find(".insert-outer img").addClass("sr-rd-content-nobeautify");break;case"infoq.com":t.find("img").map(function(e,t){"left"==$(t).css("float")&&$(t).addClass("sr-rd-content-nobeautify")}),t.find("script").remove();break;case"appinn.com":case"hacpai.com":t.find(".emoji").addClass("sr-rd-content-nobeautify");break;case"douban.com":t.find(".review-content").children().unwrap(),t.find("table").addClass("sr-rd-content-center"),t.find("p").css({"white-space":"pre-wrap"}),t.find(".cc").removeClass();break;case"qdaily.com":t.find("img").map(function(e,t){var r=$(t);0==Number.parseInt(r.css("height"))&&r.remove()}),t.find(".com-insert-images").map(function(e,t){var r=$(t),a=r.find("img").map(function(e,t){return"
"+t.outerHTML+"
"}).get().join("");r.empty().removeAttr("class").append(a)}),t.find(".com-insert-embed").remove();break;case"news.mtime.com":t.find(".newspictool").map(function(e,t){var r=$(t),a=r.find("img"),n=r.find("p:last");r.removeAttr("class").addClass("sr-rd-content-center").empty().append(a).append(n)});break;case"blog.csdn.net":t.find(".save_code").remove(),t.find(".pre-numbering").remove(),t.find("pre").removeAttr("style").removeAttr("class"),t.find("code").removeAttr("style"),t.find(".dp-highlighter").map(function(e,t){$(t).find(".bar .tools").remove(),$(t).next().is("pre")&&$(t).next().remove()});break;case"news.sohu.com":t.find(".conserve-photo").remove(),t.find("table").addClass("sr-rd-content-center");break;case"qq.com":t.find(".rv-root-v2, #backqqcom").remove();break;case"azofreeware.com":t.find("iframe").remove();break;case"apprcn.com":t.find("img").map(function(e,t){var r=$(t),a=r.attr("src");a&&a.includes("Apprcn_Wechat_Small.jpeg")&&r.parent().remove()}),t.find("a").map(function(e,t){var r=$(t);"来自反斗软件"==r.text()&&r.parent().remove()});break;case"tieba.baidu.com":t.find(".BDE_Smiley").addClass("sr-rd-content-nobeautify"),t.find(".replace_div").removeAttr("class").removeAttr("style"),t.find(".replace_tip").remove(),t.find(".d_post_content, .j_d_post_content, .post_bubble_top, .post_bubble_middle, .post_bubble_bottom").map(function(e,t){$(t).removeAttr("class").removeAttr("style")}),$("body").find(".p_author_face").map(function(e,t){var r=$(t).find("img"),a=r.attr("data-tb-lazyload"),n=r.attr("username");a&&$("sr-rd-mult-avatar").find("span").map(function(e,t){var r=$(t);r.text()==n&&r.parent().find("img").attr("src",a)})});break;case"jingyan.baidu.com":t.find(".exp-image-wraper").removeAttr("class").removeAttr("href");break;case"question.zhihu.com":t.find(".zu-edit-button").remove(),t.find("a.external").map(function(e,t){$(t).removeAttr("class").attr("style","border: none;")}),t.find(".VagueImage").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('')});break;case"chiphell.com":t.find("img").map(function(e,t){var r=$(t),a=r.parent(),n=r.attr("src"),i=r.attr("smilieid");a.is("ignore_js_op")&&r.unwrap(),i&&n&&n.includes("static/image/smiley")&&r.addClass("sr-rd-content-nobeautify").attr("style","width: 50px;")}),t.find(".quote").remove();break;case"jiemian.com":t.find("script").remove();break;case"36kr.com":t.find(".load-html-img").removeAttr("class");break;case"cnblogs.com":t.find(".cnblogs_code").removeClass(),t.find(".cnblogs_code_hide").removeClass().removeAttr("style"),t.find(".cnblogs_code_toolbar").remove(),t.find(".code_img_opened").remove(),t.find(".code_img_closed").remove();break;case"news.cnblogs.com":t.find(".topic_img").remove();break;case"g-cores.com":t.find(".swiper-slide-active").find("img").map(function(e,t){var r=$(t);r.parent().parent().parent().parent().parent().parent().removeAttr("class").removeAttr("style").html(r)});break;case"feng.com":case"young.ifeng.com":t.find("span").removeAttr("style");break;case"ftchinese.com":t.find("script").remove();break;case"segmentfault.com":t.find(".widget-codetool").remove();break;case"mp.weixin.qq.com":t.find('section[powered-by="xiumi.us"]').find("img").map(function(e,t){var r=$(t),a=r.attr("data-src");r.addClass("sr-rd-content-nobeautify").attr("src",a)});break;case"ruby-china.org":t.find(".twemoji").remove();break;case"w3cplus.com":t.find("iframe").addClass("sr-rd-content-nobeautify");break;case"zuojj.com":t.find(".syntaxhighlighter .Brush").attr("style","font-size: .7em !important;");break;case"aotu.io":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre"),n=r.find("table");r.html(a[1]),n.unwrap()}),t.find("table").addClass("sr-rd-content-center");break;case"colobu.com":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre");r.html(a[1]),r.unwrap()});break;case"hao.caibaojian.com":t.find(".tlink").map(function(e,t){$(t).html("")});break;case"wkee.net":t.find("script").remove();break;case"linux.cn":t.find("pre").attr("style","background-color: #161b20; background-image: none;"),t.find("code").attr("style","background-color: transparent; background-image: none;");break;case"zhuanlan.zhihu.com":t.find("div[data-src]").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('
')}),$("body img").each(function(e,t){var r=$(t),a=r.parent();if("column-gif"==r.attr("class")&&"GifPlayer"==a.attr("class")){var n=a.parent().prev();if(n.is("noscript")){var i=n.html(),o=$(i),s=o.attr("src"),l=o.attr("data-thumbnail");$('sr-read img[src="'+l+'"]').attr("src",s)}}}),setTimeout(function(){t.find("img").each(function(e,t){$(t).attr("src").endsWith(".gif")&&$(t).parent().next().is("svg")&&$(t).parent().next().remove()})},500);break;case"jianshu.com":t.find(".image-package").map(function(e,t){var r=$(t),a=r.find("img");r.html(a)});break;case"medium.com":t.find("figure").map(function(e,t){var r=$(t),a=r.find("img");r.replaceWith('
')});break;case"worldcup.fifa.com":t.find("iframe").css({width:"790px",height:"450px"}),t.find("div").removeClass()}},removeSpareTag:function(e,t){var r=!1,a="";["lib.csdn.net","huxiu.com","my.oschina.net","caixin.com","163.com","steachs.com","hacpai.com","apprcn.com","mp.weixin.qq.com"].includes(e)?(r=!0,a="p"):["nationalgeographic.com.cn","dgtle.com","news.mtime.com"].includes(e)?(r=!0,a="div"):["chiphell.com"].includes(e)&&(r=!0,a="font"),r&&t.find(a).map(function(e,t){var r=$(t).text().toLowerCase().trim();0==$(t).find("img").length&&""==r&&$(t).remove()})},htmlbeautify:function(e){try{e.html(function(e,t){return t.trim().replace(/<\/?blockquote/g,function(e){return"/"==e[1]?"\n?
(\n?
)*/g,"
").replace(/\/(div|p)>\n*(
\n)+/g,function(e){return e.replace("
","")})})}catch(t){return e.html()}},commbeautify:function(e,t){t.find("img:not(.sr-rd-content-nobeautify)").map(function(e,t){var r=$(t),a=(r.parent(),$("")),n=r.attr("src"),i=r.attr("data-src"),o=r.attr("data-original"),s=r.attr("original"),l=r.attr("data-original-src"),c=r.attr("data-lazy-src"),u=r.attr("real_src"),d=function(){a.removeClass("sr-rd-content-img-load"),a[0].clientWidth<300&&a[0].clientHeight<300?a.parent().removeClass("sr-rd-content-center").addClass("sr-rd-content-center-small"):a[0].clientWidth>1e3?a.css("zoom","0.6"):a[0].clientHeight>620&&/win|mac/i.test(navigator.platform)&&(a.attr("height",620),a[0].clientWidth<$("sr-rd-content").width()&&a.css({width:"auto"})),a[0].clientWidth>$("sr-rd-content").width()&&a.addClass("sr-rd-content-img")},h=function(){a.addClass("simpread-hidden"),a.parent().hasClass("sr-rd-content-center")&&a.parent().removeAttr("class").addClass("simpread-hidden")},f=void 0;r.parent()[0].tagName.toLowerCase(),f=s||n,f=i||f,f=o||f,f=l||f,f=u||f,!(f=c||f)||f.startsWith("http")||f.startsWith("data")||(f=function e(t,r){if("string"!=typeof t||!t)return null;if(t.match(/^[a-z]+\:\/\//i))return t;if(t.match(/^\/\//))return"http:"+t;if(t.match(/^[a-z]+\:/i))return t;var a;if("string"!=typeof r)return(a=document.createElement("a")).href=t,a.pathname?"http://"+t:null;if(null===(r=e(r)))return null;(a=document.createElement("a")).href=r,"/"===t[0]?r=[]:(r=a.pathname.split("/")).pop(),t=t.split("/");for(var n=0;n"),/win|mac/i.test(navigator.platform)?a.one("load",function(){return d()}).one("error",function(){return h()}):a.on("load",function(){return d()}).on("error",function(){return h()})}),t.find("sr-blockquote").map(function(t,r){var a=$(r),n=a.parent();a.removeAttr("style").removeAttr("class"),"dgtle.com"==e&&n.removeClass("quote")}),t.find("iframe:not(.sr-rd-content-nobeautify), embed:not(.sr-rd-content-nobeautify)").map(function(e,t){$(t).wrap("
")}),t.find("hr").map(function(e,t){$(t).addClass("simpread-hidden")}),t.find("pre").map(function(e,t){$(t).find("code").removeAttr("class")}),t.find("pre").removeAttr("class"),t.find("a").removeAttr("style"),t.find("sr-blocks").map(function(e,t){t.outerHTML=$(te[e]).addClass("simpread-blocks")[0].outerHTML})},cleanHTML:function(e,t,r){t&&e.find(".crayon-syntax .crayon-plain-wrap textarea").map(function(e,t){$(t).parent().parent().replaceWith('
'+t.innerHTML+"
")}),t&&e.find(".syntaxhighlighter").map(function(e,t){var r="";$(t).find(".container div").map(function(e,t){r+=t.innerText+"\n"}),$(t).replaceWith('
'+r+"
")}),t&&e.find("pre:not(.sr-rd-content-nobeautify)").each(function(e,t){var r="",a=!1,n=!1;$(t).find("li").each(function(e,t){$(t).find("code").length>0&&(a=!0),""!=t.outerText.trim()&&(r+=t.outerText.replace(/\n/gi,"").replace(//gi,">")+"\n")}),0==a&&$(t).find("code").each(function(e,t){n=!0,""!=t.outerText.trim()&&(r+=t.outerText.replace(//gi,">")+"\n")}),a||n||(r+=t.outerText.replace(//gi,">")+"\n"),$(t).removeAttr("style").removeAttr("class").removeAttr("id").html(r)});var a,n,i=e.html();"readability-page-1"==$(e.children()).attr("id")&&1==e.children().children().length?i=e.children().children().html():1==e.children().length&&(i=e.children().html()),i=i.replace(//gi,""),e.html((a=i,n="",$.parseHTML(a).forEach(function(e,a){var i=e.tagName,o=e.outerText,s=e.outerHTML;void 0==i?n+="

"+e.textContent.replace(//gi,">").replace(/^\n|\n$/gi,"").trim()+"

":"PRE"==i?n+=s:"sr-blocks"==i.toLowerCase()?n+=s:(""!=o||s.includes("0?t.join("").replace(/, $/,""):null}function se(e,t){var r=Object.keys(t).map(function(e){return t[e]&&e.replace(/[A-Z]/,function(e){return"-"+e.toLowerCase()})+": "+t[e]+";"}).join("");switch(e){case"title":r="sr-rd-title {"+r+"}";break;case"desc":r="sr-rd-desc {"+r+"}";break;case"art":r="sr-rd-content *, sr-rd-content p, sr-rd-content div {"+r+"}";break;case"pre":r="sr-rd-content pre {"+r+"}";break;case"code":r="sr-rd-content pre code, sr-rd-content pre code * {"+r+"}"}var a=$("head").find("style#simpread-custom-"+e);0==a.length?$("head").append('"):a.html(r)}function le(e,t){var r=$("head").find("style#simpread-custom-"+e);0==r.length?$("head").append('"):r.html(t)}var ce=Object.freeze({GetColor:oe,BgColor:function(e,t){var r="rgba("+oe(e)+", "+t/100+")";return $(ne).css(ae,r),r},Opacity:function(e){var t=oe($(ne).css(ae)),r="rgba("+t+", "+e/100+")";return t?($(ne).css(ae,r),r):null},FontFamily:function(e){$("sr-read").css("font-family","default"==e?"":e)},FontSize:function(e){"-1"==ie&&void 0==(ie=$("html").attr("style"))&&(ie=""),e?$("html").attr("style","font-size: "+e+"!important;"+ie):$("html").attr("style",ie)},Layout:function(e){$("sr-read").css("margin",e?"20px "+e:"")},SiteCSS:function(e){e?$("head").append('"):$("#simpread-site-css").remove()},Preview:function(e){Object.keys(e).forEach(function(t){"css"!=t&&se(t,e[t])}),le("css",e.css)},Custom:se,CSS:le,VerifyCustom:function(e,t){switch(e){case"layout":case"margin":case"fontfamily":case"custom":return""!=t.css;case"fontsize":return""!=t.title.fontSize||""!=t.desc.fontSize||""!=t.art.fontSize||""!=t.css;case"theme":return-1!=t.css.search("simpread-theme-root")}}});function ue(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");var r;t=t||{},this._doc=e,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._wrap=null,this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug?(r=function(e){var t=e.nodeName+" ";if(e.nodeType==e.TEXT_NODE)return t+'("'+e.textContent+'")';var r=e.className&&"."+e.className.replace(/ /g,"."),a="";return e.id?a="(#"+e.id+r+")":r&&(a="("+r+")"),t+a},this.log=function(){if("undefined"!=typeof dump){var e=Array.prototype.map.call(arguments,function(e){return e&&e.nodeName?r(e):e}).join(" ");dump("Reader: (Readability) "+e+"\n")}else if("undefined"!=typeof console)["Reader: (Readability) "].concat(arguments)}):this.log=function(){}}ue.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,whitespace:/^\s*$/,hasContent:/\S$/},DIV_TO_P_ELEMS:["A","BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL","SELECT"],ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],_postProcessContent:function(e){this._fixRelativeUris(e),this._cleanClasses(e)},_removeNodes:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r],n=a.parentNode;n&&(t&&!t.call(this,a,r,e)||n.removeChild(a))}},_replaceNodeTags:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r];this._setNodeTag(a,t)}},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map(function(t){return e.call(t)});return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(t){var r=e.getElementsByTagName(t);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,r=(e.getAttribute("class")||"").split(/\s+/).filter(function(e){return-1!=t.indexOf(e)}).join(" ");for(r?e.setAttribute("class",r):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,r=this._doc.documentURI;function a(e){if(t==r&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var n=this._getAllNodesWithTag(e,["a"]);this._forEachNode(n,function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:")){var r=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",a(t))});var i=this._getAllNodesWithTag(e,["img"]);this._forEachNode(i,function(e){var t=e.getAttribute("src");t&&e.setAttribute("src",a(t))})},_getArticleTitle:function(){var e=this._doc,t="",r="";try{"string"!=typeof(t=r=e.title.trim())&&(t=r=this._getInnerText(e.getElementsByTagName("title")[0]))}catch(e){}var a=!1;function n(e){return e.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))a=/ [\\\/>»] /.test(t),n(t=r.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"))<3&&(t=r.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var i=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),o=t.trim();this._someNode(i,function(e){return e.textContent.trim()===o})||(n(t=r.substring(r.lastIndexOf(":")+1))<3?t=r.substring(r.indexOf(":")+1):n(r.substr(0,r.indexOf(":")))>5&&(t=r))}else if(t.length>150||t.length<15){var s=e.getElementsByTagName("h1");1===s.length&&(t=this._getInnerText(s[0]))}var l=n(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!a||l!=n(r.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=r),t},_prepDocument:function(){var e=this._doc;this._removeNodes(e.getElementsByTagName("style")),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(e.getElementsByTagName("font"),"SPAN")},_nextElement:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){for(var t=e.nextSibling,r=!1;(t=this._nextElement(t))&&"BR"==t.tagName;){r=!0;var a=t.nextSibling;t.parentNode.removeChild(t),t=a}if(r){var n=this._doc.createElement("p");for(e.parentNode.replaceChild(n,e),t=n.nextSibling;t;){if("BR"==t.tagName){var i=this._nextElement(t.nextSibling);if(i&&"BR"==i.tagName)break}if(!this._isPhrasingContent(t))break;var o=t.nextSibling;n.appendChild(t),t=o}for(;n.lastChild&&this._isWhitespace(n.lastChild);)n.removeChild(n.lastChild);"P"===n.parentNode.tagName&&this._setNodeTag(n.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),e.__JSDOMParser__)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var r=e.ownerDocument.createElement(t);e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e),e.readability&&(r.readability=e.readability);for(var a=0;a0?r[0].textContent.includes(this._articleTitle):this._articleTitle.includes(r[0].textContent))&&this._clean(e,"h2")}}this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._removeNodes(e.getElementsByTagName("p"),function(e){return 0===e.getElementsByTagName("img").length+e.getElementsByTagName("embed").length+e.getElementsByTagName("object").length+e.getElementsByTagName("iframe").length&&!this._getInnerText(e,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){var t=this._nextElement(e.nextSibling);t&&"P"==t.tagName&&e.parentNode.removeChild(e)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(e){var t=this._hasSingleTagInsideElement(e,"TBODY")?e.firstElementChild:e;if(this._hasSingleTagInsideElement(t,"TR")){var r=t.firstElementChild;if(this._hasSingleTagInsideElement(r,"TD")){var a=r.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),e.parentNode.replaceChild(a,e)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do{e=e.parentNode}while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var r=e.getAttribute("rel"),a=e.getAttribute("itemprop");return!(!("author"===r||a&&-1!==a.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var r=0,a=[];e.parentNode&&(a.push(e.parentNode),!t||++r!==t);)e=e.parentNode;return a},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,r=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var a=e.innerHTML;;){for(var n=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),i=[],o=this._doc.documentElement;o;){var s=o.className+" "+o.id;if(this._isProbablyVisible(o))if(this._checkByline(o,s))o=this._removeAndGetNext(o);else if(!n||!this.REGEXPS.unlikelyCandidates.test(s)||this.REGEXPS.okMaybeItsACandidate.test(s)||this._hasAncestorTag(o,"table")||"BODY"===o.tagName||"A"===o.tagName)if("DIV"!==o.tagName&&"SECTION"!==o.tagName&&"HEADER"!==o.tagName&&"H1"!==o.tagName&&"H2"!==o.tagName&&"H3"!==o.tagName&&"H4"!==o.tagName&&"H5"!==o.tagName&&"H6"!==o.tagName||!this._isElementWithoutContent(o)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(o.tagName)&&i.push(o),"DIV"===o.tagName){for(var l=null,c=o.firstChild;c;){var u=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),o.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=u}if(this._hasSingleTagInsideElement(o,"P")&&this._getLinkDensity(o)<.25){var d=o.children[0];o.parentNode.replaceChild(d,o),o=d,i.push(o)}else this._hasChildBlockElement(o)||(o=this._setNodeTag(o,"P"),i.push(o))}o=this._getNextNode(o)}else o=this._removeAndGetNext(o);else this.log("Removing unlikely candidate - "+s),o=this._removeAndGetNext(o);else this.log("Removing hidden node - "+s),o=this._removeAndGetNext(o)}var h=[];this._forEachNode(i,function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var r=this._getNodeAncestors(e,3);if(0!==r.length){var a=0;a+=1,a+=t.split(",").length,a+=Math.min(Math.floor(t.length/100),3),this._forEachNode(r,function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),h.push(e)),0===t)var r=1;else r=1===t?2:3*t;e.readability.contentScore+=a/r}})}}}});for(var f=[],p=0,g=h.length;pv.readability.contentScore){f.splice(b,0,m),f.length>this._nbTopCandidates&&f.pop();break}}}var w,y=f[0]||null,k=!1;if(null===y||"BODY"===y.tagName){y=t.createElement("DIV"),k=!0;for(var E=e.childNodes;E.length;)this.log("Moving child out:",E[0]),y.appendChild(E[0]);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],x=1;x=.75&&T.push(this._getNodeAncestors(f[x]));if(T.length>=3)for(w=y.parentNode;"BODY"!==w.tagName;){for(var N=0,C=0;C=3){y=w;break}w=w.parentNode}y.readability||this._initializeNode(y),w=y.parentNode;for(var A=y.readability.contentScore,S=A/3;"BODY"!==w.tagName;)if(w.readability){var P=w.readability.contentScore;if(PA){y=w;break}A=w.readability.contentScore,w=w.parentNode}else w=w.parentNode;for(w=y.parentNode;"BODY"!=w.tagName&&1==w.children.length;)w=(y=w).parentNode;y.readability||this._initializeNode(y)}var L=t.createElement("DIV");r&&(L.id="readability-content");for(var j=Math.max(10,.2*y.readability.contentScore),z=(w=y.parentNode).children,M=0,$=z.length;M<$;M++){var B=z[M],I=!1;if(this.log("Looking at sibling node:",B,B.readability?"with score "+B.readability.contentScore:""),this.log("Sibling has score",B.readability?B.readability.contentScore:"Unknown"),B===y)I=!0;else{var O=0;if(B.className===y.className&&""!==y.className&&(O+=.2*y.readability.contentScore),B.readability&&B.readability.contentScore+O>=j)I=!0;else if("P"===B.nodeName){var H=this._getLinkDensity(B),R=this._getInnerText(B),D=R.length;D>80&&H<.25?I=!0:D<80&&D>0&&0===H&&-1!==R.search(/\.( |$)/)&&(I=!0)}}I&&(this.log("Appending node:",B),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(B.nodeName)&&(this.log("Altering sibling:",B,"to div."),B=this._setNodeTag(B,"DIV")),L.appendChild(B),M-=1,$-=1)}if(this._debug&&this.log("Article content pre-prep: "+L.innerHTML),this._prepArticle(L),this._debug&&this.log("Article content post-prep: "+L.innerHTML),k)y.id="readability-page-1",y.className="page";else{var G=t.createElement("DIV");G.id="readability-page-1",G.className="page";var q=L.childNodes;for(this._wrap=L.childNodes[0].outerHTML.replace(L.childNodes[0].innerHTML,"");q.length;)G.appendChild(q[0]);L.appendChild(G)}this._debug&&this.log("Article content after paging: "+L.innerHTML);var U=!0,F=this._getInnerText(L,!0).length;if(F0&&e.length<100)},_getArticleMetadata:function(){var e={},t={},r=this._doc.getElementsByTagName("meta"),a=/\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi,n=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(e){var r=e.getAttribute("name"),i=e.getAttribute("property"),o=e.getAttribute("content");if(o){var s=null,l=null;if(i&&(s=i.match(a)))for(var c=s.length-1;c>=0;c--)l=s[c].toLowerCase().replace(/\s/g,""),t[l]=o.trim();!s&&r&&n.test(r)&&(l=r,o&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),t[l]=o.trim()))}}),e.title=t["dc:title"]||t["dcterm:title"]||t["og:title"]||t["weibo:article:title"]||t["weibo:webpage:title"]||t.title||t["twitter:title"],e.title||(e.title=this._getArticleTitle()),e.byline=t["dc:creator"]||t["dcterm:creator"]||t.author,e.excerpt=t["dc:description"]||t["dcterm:description"]||t["og:description"]||t["weibo:article:description"]||t["weibo:webpage:description"]||t.description||t["twitter:description"],e.siteName=t["og:site_name"],e},_removeScripts:function(e){this._removeNodes(e.getElementsByTagName("script"),function(e){return e.nodeValue="",e.removeAttribute("src"),!0}),this._removeNodes(e.getElementsByTagName("noscript"))},_hasSingleTagInsideElement:function(e,t){return 1==e.children.length&&e.children[0].tagName===t&&!this._someNode(e.childNodes,function(e){return e.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(e.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&0==e.textContent.trim().length&&(0==e.children.length||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(e){return-1!==this.DIV_TO_P_ELEMS.indexOf(e.tagName)||this._hasChildBlockElement(e)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||-1!==this.PHRASING_ELEMS.indexOf(e.tagName)||("A"===e.tagName||"DEL"===e.tagName||"INS"===e.tagName)&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&0===e.textContent.trim().length||e.nodeType===this.ELEMENT_NODE&&"BR"===e.tagName},_getInnerText:function(e,t){t=void 0===t||t;var r=e.textContent.trim();return t?r.replace(this.REGEXPS.normalize," "):r},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(e&&"svg"!==e.tagName.toLowerCase()){for(var t=0;t0&&n>r)return!1;if(e.parentNode.tagName===t&&(!a||a(e.parentNode)))return!0;e=e.parentNode,n++}return!1},_getRowAndColumnCount:function(e){for(var t=0,r=0,a=e.getElementsByTagName("tr"),n=0;n0)a._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some(function(e){return!!a.getElementsByTagName(e)[0]}))this.log("Data table because found data-y descendant"),a._readabilityDataTable=!0;else if(a.getElementsByTagName("table")[0])a._readabilityDataTable=!1;else{var i=this._getRowAndColumnCount(a);i.rows>=10||i.columns>4?a._readabilityDataTable=!0:a._readabilityDataTable=i.rows*i.columns>10}}}else a._readabilityDataTable=!1;else a._readabilityDataTable=!1}},_cleanConditionally:function(e,t){if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)){var r="ul"===t||"ol"===t;this._removeNodes(e.getElementsByTagName(t),function(e){var a=function(e){return e._readabilityDataTable};if("table"===t&&a(e))return!1;if(this._hasAncestorTag(e,"table",-1,a))return!1;var n=this._getClassWeight(e);if(this.log("Cleaning Conditionally",e),n+0<0)return!0;if(this._getCharCount(e,",")<10){for(var i=e.getElementsByTagName("p").length,o=e.getElementsByTagName("img").length,s=e.getElementsByTagName("li").length-100,l=e.getElementsByTagName("input").length,c=0,u=this._concatNodeLists(e.getElementsByTagName("object"),e.getElementsByTagName("embed"),e.getElementsByTagName("iframe")),d=0;d1&&i/o<.5&&!this._hasAncestorTag(e,"figure")||!r&&s>i||l>Math.floor(i/3)||!r&&p<25&&(0===o||o>2)&&!this._hasAncestorTag(e,"figure")||!r&&n<25&&f>.2||n>=25&&f>.5||1===c&&p<75||c>1}return!1})}},_cleanMatchedNodes:function(e,t){for(var r=this._getNextNode(e,!0),a=this._getNextNode(e);a&&a!=r;)a=t(a,a.className+" "+a.id)?this._removeAndGetNext(a):this._getNextNode(a)},_cleanHeaders:function(e){for(var t=1;t<3;t+=1)this._removeNodes(e.getElementsByTagName("h"+t),function(e){return this._getClassWeight(e)<0})},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return!(e.style&&"none"==e.style.display||e.hasAttribute("hidden"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._removeScripts(this._doc),this._prepDocument();var t=this._getArticleMetadata();this._articleTitle=t.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!t.excerpt){var a=r.getElementsByTagName("p");a.length>0&&(t.excerpt=a[0].textContent.trim())}var n=r.textContent;return{title:this._articleTitle,byline:t.byline||this._articleByline,dir:this._articleDir,content:r.innerHTML,wrap:this._wrap,textContent:n,length:n.length,excerpt:t.excerpt,siteName:t.siteName||this._articleSiteName}}};var de=Object.freeze({Readability:ue}),he=r(function(e){(function(){function t(e){var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex:
foo
",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including ``, `` and `` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var a in t)t.hasOwnProperty(a)&&(r[a]=t[a].defaultValue);return r}function r(e,t){var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var o=0;o").replace(/&/g,"&")};var d=function(e,t,r,a){var n,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),h=new RegExp(t,c.replace(/g/g,"")),f=[];do{for(n=0;o=d.exec(e);)if(h.test(o[0]))n++||(s=(i=d.lastIndex)-o[0].length);else if(n&&!--n){l=o.index+o[0].length;var p={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(f.push(p),!u)return f}}while(n&&(d.lastIndex=i));return f};i.helper.matchRecursiveRegExp=function(e,t,r,a){for(var n=d(e,t,r,a),i=[],o=0;o0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var h=0;h=0?a+(r||0):a},i.helper.splitAtIndex=function(e,t){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},i.helper.padEnd=function(e,t,r){return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){alert(e)},log:function(e){alert(e)},error:function(e){throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:':octocat:',showdown:"S"},i.Converter=function(e){function t(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return void function(e,t){"function"==typeof e&&(e=e(new i.Converter)),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var n=0;n[ \t]+¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],a=0;a'}else r.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return r}(r)};!function e(t){for(var r=0;r? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(n||(n=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,i.helper.isUndefined(r.gUrls[n]))return e;o=r.gUrls[n],i.helper.isUndefined(r.gTitles[n])||(c=r.gTitles[n])}var u='"+a+""};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,a,n,o){if("\\"===a)return r+n;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'"+n+""})),r.converter._dispatch("anchors.after",e,t,r)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,p=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,g=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,m=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,_=function(e){return function(t,r,a,n,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",h=r||"",f=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),h+'"+c+""+u+f}},b=function(e,t){return function(r,a,n){var o="mailto:";return a=a||"",n=i.subParser("unescapeSpecialChars")(n,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+n),n=i.helper.encodeEmailAddress(n)):o+=n,a+''+n+""}};i.subParser("autoLinks",function(e,t,r){return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(p,_(t))).replace(m,b(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),i.subParser("simplifiedAutoLinks",function(e,t,r){return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,_(t)):e.replace(h,_(t))).replace(g,b(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),i.subParser("blockGamut",function(e,t,r){return e=r.converter._dispatch("blockGamut.before",e,t,r),e=i.subParser("blockQuotes")(e,t,r),e=i.subParser("headers")(e,t,r),e=i.subParser("horizontalRule")(e,t,r),e=i.subParser("lists")(e,t,r),e=i.subParser("codeBlocks")(e,t,r),e=i.subParser("tables")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),i.subParser("blockQuotes",function(e,t,r){e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=i.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*
[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^  /gm,"¨0")).replace(/¨0/g,"")}),i.subParser("hashBlock")("
\n"+e+"\n
",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),i.subParser("codeBlocks",function(e,t,r){return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,a,n){var o=a,s=n,l="\n";return o=i.subParser("outdent")(o,t,r),o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="
"+o+l+"
",i.subParser("hashBlock")(o,t,r)+s})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),i.subParser("codeSpans",function(e,t,r){return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,a,n,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+""+(s=i.subParser("encodeCode")(s,t,r))+"",i.subParser("hashHTMLSpans")(s,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),i.subParser("completeHTMLDocument",function(e,t,r){if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var a="html",n="\n",i="",o='\n',s="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(n="\n","html"!==(a=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i=""+r.metadata.parsed.title+"\n";break;case"charset":o="html"===a||"html5"===a?'\n':'\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=n+"\n\n"+i+o+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),i.subParser("detab",function(e,t,r){return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,a=4-r.length%4,n=0;n/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),i.subParser("encodeBackslashEscapes",function(e,t,r){return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),i.subParser("encodeCode",function(e,t,r){return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),i.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),i.subParser("githubCodeBlocks",function(e,t,r){return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,a,n,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),o="
"+o+s+"
",o=i.subParser("hashBlock")(o,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),i.subParser("hashBlock",function(e,t,r){return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),i.subParser("hashCodeTags",function(e,t,r){return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=i.helper.replaceRecursiveRegExp(e,function(e,a,n,o){var s=n+i.subParser("encodeCode")(a,t,r)+o;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"},"]*>","","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),i.subParser("hashElement",function(e,t,r){return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"}}),i.subParser("hashHTMLBlocks",function(e,t,r){e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],n=function(e,t,a,n){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+r.converter.makeHtml(t)+n),"\n\n¨K"+(r.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var o=0;o]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),h=i.helper.replaceRecursiveRegExp(d[1],n,c,u,"im");if(h===d[1])break;e=d[0].concat(h)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),e=(e=i.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),i.subParser("hashHTMLSpans",function(e,t,r){function a(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return a(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<[^>]+?>/gi,function(e){return a(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),i.subParser("unhashHTMLSpans",function(e,t,r){e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var a=0;a]*>\\s*]*>","^ {0,3}\\s*
","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),i.subParser("headers",function(e,t,r){function a(e){var a,n;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,n=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=n+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=n+a),r.hashLinkCounts[a]?a=a+"-"+r.hashLinkCounts[a]++:r.hashLinkCounts[a]=1,a}e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=""+s+"";return i.subParser("hashBlock")(c,t,r)})).replace(s,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=n+1,u=""+s+"";return i.subParser("hashBlock")(u,t,r)});var l=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return e=e.replace(l,function(e,o,s){var l=s;t.customizedHeaderId&&(l=s.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(l,t,r),u=t.noHeaderId?"":' id="'+a(s)+'"',d=n-1+o.length,h=""+c+"";return i.subParser("hashBlock")(h,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),i.subParser("horizontalRule",function(e,t,r){e=r.converter._dispatch("horizontalRule.before",e,t,r);var a=i.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),r.converter._dispatch("horizontalRule.after",e,t,r)}),i.subParser("images",function(e,t,r){function a(e,t,a,n,o,s,l,c){var u=r.gUrls,d=r.gTitles,h=r.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)n="";else if(""===n||null===n){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),n="#"+a,i.helper.isUndefined(u[a]))return e;n=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(h[a])||(o=h[a].width,s=h[a].height)}t=t.replace(/"/g,""").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var f=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,n,i,o,s,l){return a(e,t,r,n=n.replace(/\s/g,""),i,o,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),r.converter._dispatch("images.after",e,t,r)}),i.subParser("italicsAndBold",function(e,t,r){function a(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return a(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return a(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return a(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),i.subParser("lists",function(e,t,r){function a(e,a){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(n,function(e,a,n,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,r),h="";return c&&t.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,r),d=i.subParser("blockGamut")(d,t,r)):(d=(d=i.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,r):i.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function n(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function o(e,r,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),h=n(e,r);-1!==d?(c+="\n\n<"+r+h+">\n"+a(u.slice(0,d),!!i)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+r+h+">\n"+a(u,!!i)+"\n"}(e);else{var u=n(e,r);c="\n\n<"+r+u+">\n"+a(e,!!i)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return o(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,a){return o(r,a.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),i.subParser("metadata",function(e,t,r){function a(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,a){return r.metadata.parsed[t]=a,""})}return t.metadata?(e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return a(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,n){return t&&(r.metadata.format=t),a(n),"¨M"})).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)):e}),i.subParser("outdent",function(e,t,r){return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),i.subParser("paragraphs",function(e,t,r){for(var a=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),n=[],o=a.length,s=0;s=0?n.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",n.push(l))}for(o=n.length,s=0;s]*>\s*]*>/.test(u)&&(d=!0)}n[s]=u}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),i.subParser("runExtension",function(e,t,r,a){if(e.filter)t=e.filter(t,a.converter,r);else if(e.regex){var n=e.regex;n instanceof RegExp||(n=new RegExp(n,"g")),t=t.replace(n,e.replace)}return t}),i.subParser("spanGamut",function(e,t,r){return e=r.converter._dispatch("spanGamut.before",e,t,r),e=i.subParser("codeSpans")(e,t,r),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=i.subParser("encodeBackslashEscapes")(e,t,r),e=i.subParser("images")(e,t,r),e=i.subParser("anchors")(e,t,r),e=i.subParser("autoLinks")(e,t,r),e=i.subParser("simplifiedAutoLinks")(e,t,r),e=i.subParser("emoji")(e,t,r),e=i.subParser("underline")(e,t,r),e=i.subParser("italicsAndBold")(e,t,r),e=i.subParser("strikethrough")(e,t,r),e=i.subParser("ellipsis")(e,t,r),e=i.subParser("hashHTMLSpans")(e,t,r),e=i.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),i.subParser("strikethrough",function(e,t,r){return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(a)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),i.subParser("stripLinkDefinitions",function(e,t,r){var a=function(e,a,n,o,s,l,c){return a=a.toLowerCase(),n.match(/^data:.+?\/.+?;base64,/)?r.gUrls[a]=n.replace(/\s/g,""):r.gUrls[a]=i.subParser("encodeAmpsAndAngles")(n,t,r),l?l+c:(c&&(r.gTitles[a]=c.replace(/"|'/g,""")),t.parseImgDimensions&&o&&s&&(r.gDimensions[a]={width:o,height:s}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,a)).replace(/¨0/,"")}),i.subParser("tables",function(e,t,r){function a(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function n(e,a){var n="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(n=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),""+(e=i.subParser("spanGamut")(e,t,r))+"\n"}function o(e,a){return""+i.subParser("spanGamut")(e,t,r)+"\n"}function s(e){var s,l=e.split("\n");for(s=0;s\n\n\n",n=0;n\n";for(var i=0;i\n"}return r+"\n\n"}(h,p)}return t.tables?(e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,s),r.converter._dispatch("tables.after",e,t,r)):e}),i.subParser("underline",function(e,t,r){return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,i.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),i.subParser("unescapeSpecialChars",function(e,t,r){return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),i.subParser("makeMarkdown.blockquote",function(e,t){var r="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,o=0;o "+(r=r.trim()).split("\n").join("\n> ")}),i.subParser("makeMarkdown.codeBlock",function(e,t){var r=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[a]+"\n```"}),i.subParser("makeMarkdown.codeSpan",function(e){return"`"+e.innerHTML+"`"}),i.subParser("makeMarkdown.emphasis",function(e,t){var r="";if(e.hasChildNodes()){r+="*";for(var a=e.childNodes,n=a.length,o=0;o",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),i.subParser("makeMarkdown.links",function(e,t){var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,n=a.length;r="[";for(var o=0;o",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),i.subParser("makeMarkdown.list",function(e,t,r){var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,s=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),i.subParser("makeMarkdown.strikethrough",function(e,t){var r="";if(e.hasChildNodes()){r+="~~";for(var a=e.childNodes,n=a.length,o=0;otr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=g)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),e.exports?e.exports=i:this.showdown=i}).call(t)}),fe={pangu:n,minimatch:R,beautify:re,style:ce,rdability:de,markdown:Object.freeze({default:he,__moduleExports:he})};e.Plugin=function(e){return void 0==e?fe:fe[e]},Object.defineProperty(e,"__esModule",{value:!0})}); diff --git a/src/vender/puread/puread.min.js b/src/vender/puread/puread.min.js index 71e3315c..51a4be02 100644 --- a/src/vender/puread/puread.min.js +++ b/src/vender/puread/puread.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.PureRead=e()}(this,function(){"use strict";var t=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e=function(){function t(t,e){for(var r=0;r?$|<[^/][-_a-zA-Z0-9]+>?$/gi);return e&&e.length>0?[1,e]:[-1,void 0]}function c(t){var e=s(t),r=a(e,2),n=r[0],i=r[1];if(2==n)return t;if(1==n){var o=i[0].trim().replace(/['"<>]/g,"").replace(/ /gi,"=").split("="),l=a(o,3),u=l[0],c=l[1],h=l[2];return c?"class"===c.toLowerCase()?c=u+"."+h:"id"===c.toLowerCase()&&(c=u+"#"+h):c=u,c}return null}function h(t){return/^(\[\[)[\[{`'/]{1}[ \S]+[}`'/\]]\]\]{1}($)/g.test(t)}function d(t){var e=[t.replace(/(^)\[\[|\]\]$/g,"")],r=e[0],n=e[1];switch(r[0]){case"{":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)(),n=0;break;case"'":t=(t=r.replace(/^'|'$/g,"")).match(/^<[a-zA-Z0-9_-]+>/g).join("").replace(/<|>/g,"")+":contains("+t.replace(/<[/a-zA-Z0-9_-]+>/g,"")+")",n=1;break;case"/":t=r.replace(/^\/|\/$/g,"").replace(/\\{2}/g,"\\").replace(/'/g,'"'),n=2;break;case"[":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)()[0],n=3;break;case"`":r=p(r=r.replace(/^`|`$/g,"")),t=$(r),n=4;break;default:n=-1}return[t,n]}function f(t){try{if(""!=t.id)return void 0==t.id?"":"//*[@id='"+t.id+"']";if(t===document.body)return"/html[1]/"+t.tagName.toLowerCase();for(var e=0,r=t.parentNode.childNodes,n=0;n0&&void 0!==arguments[0]?arguments[0]:{global:[],custom:[],local:[]};t(this,n),this.url=(r=(e="/"!=(e=window.location.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,""),window.location.protocol+"//"+window.location.hostname+r+"/"),this.sites=i,this.current={},this.state="none",this.origins=[],this.mathjax=void 0,b=location.href}return e(n,[{key:"SetURL",value:function(t){var e,r=u(t),n=(e="/"!=(e=r.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,"");this.url=r.protocol+"//"+r.hostname+n+"/",b=t}},{key:"SetMinimatch",value:function(t){v=t}},{key:"SetRdability",value:function(t){g=t}},{key:"SetMarkdown",value:function(t){y=t}},{key:"isMathJax",value:function(){var t=this;return void 0==this.mathjax&&(this.mathjax=!1,$("body").find("script").each(function(e,r){r.type.startsWith("math")&&(t.mathjax=!0)})),this.mathjax}},{key:"MathJaxMode",value:function(){var t=x();if(-1!=t)return this.Newsite("read",t[0].outerHTML),this.dom=t[0],this.state="temp",t;var e=k();if(e&&""!=e.content){var r=j(e.content),n=r.id,i=r.cls,a=r.tag;return""!=n?"<"+a+' id="'+n+'">':""!=i?"<"+a+' class="'+i+'">':void 0}}},{key:"Readability",value:function(){try{var t=k();if(!t||""==t.content)throw"Readability error";this.Newsite("read",t.content,t.excerpt);var e=j(t.wrap),r=e.id,n=e.cls,i=e.tag;this.dom=""!=r?$("body").find("#"+r)[0]:""!=n?$("body").find("."+n.replace(/ /gi,"."))[0]:$("body").find(""+i)[0],this.state="temp"}catch(t){var a=x();-1!=a?(this.Newsite("read",a[0].outerHTML),this.dom=a[0],this.state="temp"):this.current.site=l(m)}}},{key:"Getsite",value:function(t,e){return this.sites[t].find(function(t){return t[0]==e})}},{key:"Getsites",value:function(){var t=this,e=[],n=function(){if(v(location.href,"file://**/*.txt")||v(location.href,"http*://**/*.txt"))return function(){var t=location.pathname.split("/").pop(),e="file:"==location.protocol?"local":"remote",r={name:"txtread::"+e,title:"",desc:"",include:"<pre>",auto:!1,exclude:[]};"remote"==e&&(r.include="",r.html=$("body pre").html().replace(/\n/gi,"<br>"));return!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".txt",""))+""),r}();if($($("body").children()[0]).is("pre")&&(v(location.href,"file://**/*.md")||v(location.href,"http*://**/*.md")))return function(){var t=location.pathname.split("/").pop(),e={name:"txtread::"+("file:"==location.protocol?"local":"remote"),title:"",desc:"",include:"",auto:!1,exclude:[]},r=(new y.default.Converter).makeHtml($("body pre").text());return e.html=r,!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".md",""))+""),e}();var t=/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi,e={name:$("meta[name='simpread:name']").attr("content"),url:$("meta[name='simpread:url']").attr("content"),title:$("meta[name='simpread:title']").attr("content"),desc:$("meta[name='simpread:desc']").attr("content"),include:$("meta[name='simpread:include']").attr("content"),exp:$("meta[name='simpread:exclude']").attr("content"),auto:$("meta[name='simpread:auto']").attr("content"),exclude:[]};if(e.name&&e.include){if(e.url&&!v(location.href,e.url))return;!e.title&&(e.title=""),!e.desc&&(e.desc=""),!e.exp&&(e.exp=""),e.name="metaread::"+e.name,e.auto="true"==e.auto;var r=["title","desc","include","exp"].findIndex(function(r){return""!=e[r]&&!e[r].match(t)});return e.exclude.push(e.exp),delete e.exp,-1==r?e:void 0}return}();if(this.current.url=this.url,n)this.current.auto=n.auto,this.current.url=n.url,delete n.auto,delete n.url,this.current.site=r({},n),this.current.site.name.startsWith("metaread::")&&(this.state="meta"),this.current.site.name.startsWith("txtread::")&&(this.state="txt");else if(_("local",new Map(this.sites.local),this.url,e),_("global",new Map(this.sites.global),this.url,e),_("person",new Map(this.sites.person),this.url,e),_("custom",new Map(this.sites.custom),this.url,e),e.length>0){var i=void 0;if(e.forEach(function(e){e[1].active&&(i=e,t.current.url=i[0],t.current.site=t.Safesite(r({},i[1]),i[2],i[0]),t.state="adapter")}),!i){var a=e[0];a[1].active=!0,this.current.url=a[0],this.current.site=this.Safesite(r({},a[1]),a[2],a[0]),this.state="adapter"}}else{var o=function(){if(location.pathname.includes("thread")||location.pathname.includes("forum.php")){if($(".t_f").length>0&&$(".favatar").find(".authi").length>0&&$(".avatar").find("img").length>0)return{avatar:[{name:"[[{$('.favatar').find('.authi')}]]"},{url:"[[{$('.avatar').find('img')}]]"}],include:"[[{$('.t_f')}]]"}}else if(/\/t\/[\w-]+\/\d+/.test(location.pathname)&&$("meta[name=generator]").attr("content").includes("discourse"))return{avatar:[{name:"[[{$('.topic-avatar').find('.a[data-user-card]')}]]"},{url:"[[{$('.topic-avatar').find('img')}]]"}],include:"[[{$('.cooked')}]]"};return-1}();-1!=o?(this.Newmultisite("read",o),this.state="temp"):this.Readability()}this.current.site.matching=e}},{key:"Addsites",value:function(t){var e=0;if(0==this.sites.global.length)this.sites.global=this.Formatsites(t),e=this.sites.global.length;else{var r=function(t,e){var r=new Map(e),n=[].concat(o(r.keys())),i=0;return t.map(function(t){n.includes(t[0])?n.includes(t[0]):i++}),{count:i,newsites:t}}(this.Formatsites(t),this.sites.global);e=r.count,this.sites.global=r.newsites}return e}},{key:"Addlocalsites",value:function(t){return this.sites.local=[].concat(o(t)),this.sites.local}},{key:"Addallsites",value:function(t){return this.sites={global:[].concat(o(t.global)),person:[].concat(o(t.person)),custom:[].concat(o(t.custom)),local:[].concat(o(t.local))},this.sites}},{key:"Newsite",value:function(t,e,n){var i={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]",include:"",exclude:[]}};e&&(i.site.html=e),this.current.mode=i.mode,this.current.url=i.url,this.current.site=this.Safesite(r({},i.site),"local",i.url),n&&(this.current.site.excerpt=n)}},{key:"Newmultisite",value:function(t,e){var n={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"",include:e.include,exclude:[],avatar:e.avatar}};this.current.mode=n.mode,this.current.url=n.url,this.current.site=this.Safesite(r({},n.site),"local",n.url)}},{key:"Updatesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1==n&&(n=this.sites[t].length),this.sites[t].splice(n,1,r)}},{key:"Deletesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1!=n&&this.sites[t].splice(n,1),r(n)}},{key:"Safesite",value:function(t,e,r){return t.url=r,t.target=e,""==t.name&&(t.name="tempread::"),(!t.avatar||0==t.avatar.length)&&(t.avatar=[{name:""},{url:""}]),(!t.paging||0==t.paging.length)&&(t.paging=[{prev:""},{next:""}]),t}},{key:"Cleansite",value:function(t){return delete t.url,delete t.html,delete t.target,delete t.matching,t.avatar&&t.avatar.length>0&&""==t.avatar[0].name&&delete t.avatar,t.paging&&t.paging.length>0&&""==t.paging[0].prev&&delete t.paging,t}},{key:"Formatsites",value:function(t){var e=new Map,r=!0,n=!1,i=void 0;try{for(var a,l=t.sites[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var u=a.value;if(0==O(u)){var s=u.url;delete u.url,e.set(s,u)}}}catch(t){n=!0,i=t}finally{try{!r&&l.return&&l.return()}finally{if(n)throw i}}return[].concat(o(e))}},{key:"Clearsites",value:function(t){t?this.sites[t]=[]:this.sites={global:[],custom:[],local:[]}}},{key:"Origins",value:function(t){var e=t.origins.map(function(t){return t.url});return(e=new Set(this.origins.concat(e))).forEach(function(t){""!=t.trim()&&t.trim().startsWith("http")&&t.trim().endsWith(".json")||e.delete(t)}),this.origins=[].concat(o(e)),this.origins}},{key:"Addorigins",value:function(t){return this.sites.custom=[].concat(o(t)),this.sites.custom}},{key:"Clearorigins",value:function(){var t=this.sites.custom.length;return this.sites.custom=[],t}}]),n}();function x(){var t=$("body"),e=!0,r=!1,n=void 0;try{for(var i,a=["[itemprop='articleBody']","article",".post-content",".entry-content",".post-article",".content-post",".article-entry",".article-content",".article-body",".markdown-body",".post",".content"][Symbol.iterator]();!(e=(i=a.next()).done);e=!0){var o=i.value,l=t.find(o);if(l.length>0)return l}}catch(t){r=!0,n=t}finally{try{!e&&a.return&&a.return()}finally{if(r)throw n}}return-1}function k(){var t=document.location,e=(t.href,t.host,t.protocol,t.host,t.protocol.substr(0,t.protocol.indexOf(":")),t.protocol,t.host,t.pathname.substr(0,t.pathname.lastIndexOf("/")+1),new g.Readability(document.cloneNode(!0)).parse());return e}function _(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=function(t){var e=t.replace("www.","").match(/\.\S+\.\S+/g);return e?e[0].substr(1):t.replace("www.","")},a=u(b),s=[].concat(o(e.keys())),c=r.match(/[.a-zA-z0-9-_]+/g)[1].replace("www.",""),h=i(a.hostname),d=function(){return"/"==a.pathname||/\/(default|index|portal).[0-9a-zA-Z]+$/.test(a.pathname)},f=!0,p=!1,m=void 0;try{for(var g,y=s[Symbol.iterator]();!(f=(g=y.next()).done);f=!0){var w=g.value,x=e.get(w).name,$=i(x);w.startsWith("[[/")&&w.endsWith("/]]")&&new RegExp(w.replace(/^\[\[\/|\/\]\]/g,"")).test(location.href)?n.push([w,l(e.get(w)),t]):d()||w.endsWith("*")||w.replace(/^http[s]?:/,"")!=r.replace(/^http[s]?:/,"")?w.match(/\*/g)&&1==w.match(/\*/g).length&&!d()&&w.endsWith("*")&&c.includes($)&&h==$&&r.includes(x)?n.push([w,l(e.get(w)),t]):v(a.origin+a.pathname,w)&&n.push([w,l(e.get(w)),t]):n.push([w,l(e.get(w)),t])}}catch(t){p=!0,m=t}finally{try{!f&&y.return&&y.return()}finally{if(p)throw m}}}function O(t){if(!t.name||!t.url||!t.include)return-1;if(-1==s(t.title)[0]||-1==s(t.include)[0]||-1==s(t.desc)[0])return-2;if(t.paging){if(2!=t.paging.length)return-3;if(!t.paging[0].prev)return-4;if(!t.paging[1].next)return-5;if(-1==s(t.paging[0].prev)[0]||-1==s(t.paging[1].next)[0])return-6}if(t.avatar){if(2!=t.avatar.length)return-7;if(!t.avatar[0].name)return-8;if(!t.avatar[1].url)return-9;if(-1==s(t.avatar[0].name)[0]||-1==s(t.avatar[1].url)[0])return-10}return 0}function j(t){var e=t.replace('<div id="readability-page-1" class="page">',""),r=$(e)[0],n=r.outerHTML.replace(r.innerHTML,""),i=$(n)[0],a=i.tagName.toLowerCase(),o=i.className;return{id:i.id,cls:o,tag:a}}function S(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text",r=$("html");if(h(t)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?t=o:3==l?t=M(r.find(o)):4==l&&(t=o.html())}else"html"==e?t=M(r.find(t)):"multi"==e||(t=r.find(t).text().trim());return t}function M(t){var e="";switch(t.length){case 0:e="<sr-rd-content-error></sr-rd-content-error>";break;case 1:e=t.html().trim();break;default:e=t.map(function(t,e){return $(e).html()}).get().join("<br>")}return e}return function(r){function o(e){t(this,o);var r=i(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.version="0.0.4 build 1226",r.org_url=location.href,r.html={},r.plugin={},r.pure=!1,r.cleanup=!1,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,w),e(o,[{key:"Exist",value:function(){return this.org_url==location.href}},{key:"AddPlugin",value:function(t){this.plugin={minimatch:t.minimatch,pangu:t.pangu,beautify:t.beautify,stylesheet:t.style,rdability:t.rdability,markdown:t.markdown},n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMinimatch",this).call(this,this.plugin.minimatch),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetRdability",this).call(this,this.plugin.rdability),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMarkdown",this).call(this,this.plugin.markdown)}},{key:"ReadMode",value:function(){var t,e,r,n,i;this.html=(t=this.current.site,e=l(t),r=c(""==t.title?"<title>":t.title),n=c(t.desc),i=c(t.include),e.title=""==t.title||"<title>"==t.title?$("head title").text():S(r),e.desc=function(t){if(void 0==t)return t;var e=t.length,r=t.indexOf("。")+1;return e>100&&(t=r>0?t.substr(0,r):t.substr(0,101)+"......"),t}(t.excerpt?t.excerpt:S(n)),e.include=""==t.include&&""!=t.html?t.html:S(i,"html"),e.avatar&&e.avatar.length>0&&""==e.avatar[0].name&&delete e.avatar,e.paging&&e.paging.length>0&&""==e.paging[0].prev&&delete e.paging,e.avatar&&e.avatar.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r),"html")}),e.paging&&e.paging.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r))}),e)}},{key:"TempMode",value:function(t,e){this.state="temp",this.dom=e,this.Newsite(t,e.outerHTML)}},{key:"GetDom",value:function(t,e){return S(c(t),e)}},{key:"Include",value:function(){var t=this.current.site.include,e=[],r=c(t);try{if(h(r)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?(t=t.replace(/\[\[{\$\(|}\]\]|\).html\(\)/g,""),e=$(d("[[["+t+"]]]")[0])):3==l&&(e=o)}else r&&(e=$("body").find(r))}catch(t){}return e}},{key:"Exclude",value:function(t){return function(t,e){var r=[],n="",i=!0,o=!1,l=void 0;try{for(var u,s=e[Symbol.iterator]();!(i=(u=s.next()).done);i=!0){var f=u.value;if(h(f)){var p=d(f),m=a(p,2),v=m[0],g=m[1];if(1==g)n=v;else if(2==g){var y=t.html().match(new RegExp(v,"g"));if(y&&y.length>0){var b=y.join("");n="*["+b+"]"}else n=void 0}else 3==g?v.remove():4==g&&v.remove()}else n=c(f);n&&r.push(n)}}catch(t){o=!0,l=t}finally{try{!i&&s.return&&s.return()}finally{if(o)throw l}}return r.join(",")}(t,this.current.site.exclude)}},{key:"Beautify",value:function(t){0!=t.children().length&&this.plugin.beautify&&(this.plugin.beautify.before(this.current.site.name,t),this.cleanup&&this.plugin.beautify.cleanHTML(t,this.pure,this.isMathJax()),this.plugin.beautify.specbeautify(this.current.site.name,t),this.plugin.beautify.removeSpareTag(this.current.site.name,t),this.plugin.beautify.htmlbeautify(t),this.plugin.beautify.commbeautify(this.current.site.name,t))}},{key:"Format",value:function(t){this.plugin.pangu&&this.plugin.pangu.spacingElementByClassName(t)}},{key:"Utils",value:function(){return{dom2Xpath:f,xPath2Dom:p}}}]),o}()}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.PureRead=e()}(this,function(){"use strict";var t=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},n=function t(e,r,n){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,r);if(void 0===i){var a=Object.getPrototypeOf(e);return null===a?void 0:t(a,r,n)}if("value"in i)return i.value;var o=i.get;return void 0!==o?o.call(n):void 0},i=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},a=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,l=t[Symbol.iterator]();!(n=(o=l.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{!n&&l.return&&l.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)};function l(t){return $.extend(!0,{},t)}function u(t){if(document){var e=document.createElement("a");return e.href=t,e}var r=t.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);return r&&{href:t,protocol:r[1],host:r[2],hostname:r[3],port:r[4],pathname:r[5],search:r[6],hash:r[7]}}function s(t){if(""==t)return[0,t];if(h(t))return[2,t];var e=t.match(/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi);return e&&e.length>0?[1,e]:[-1,void 0]}function c(t){var e=s(t),r=a(e,2),n=r[0],i=r[1];if(2==n)return t;if(1==n){var o=i[0].trim().replace(/['"<>]/g,"").replace(/ /gi,"=").split("="),l=a(o,3),u=l[0],c=l[1],h=l[2];return c?"class"===c.toLowerCase()?c=u+"."+h:"id"===c.toLowerCase()&&(c=u+"#"+h):c=u,c}return null}function h(t){return/^(\[\[)[\[{`'/]{1}[ \S]+[}`'/\]]\]\]{1}($)/g.test(t)}function d(t){var e=[t.replace(/(^)\[\[|\]\]$/g,"")],r=e[0],n=e[1];switch(r[0]){case"{":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)(),n=0;break;case"'":t=(t=r.replace(/^'|'$/g,"")).match(/^<[a-zA-Z0-9_-]+>/g).join("").replace(/<|>/g,"")+":contains("+t.replace(/<[/a-zA-Z0-9_-]+>/g,"")+")",n=1;break;case"/":t=r.replace(/^\/|\/$/g,"").replace(/\\{2}/g,"\\").replace(/'/g,'"'),n=2;break;case"[":r=r.replace(/^{|}$/g,""),t=new Function("return "+r)()[0],n=3;break;case"`":r=p(r=r.replace(/^`|`$/g,"")),t=$(r),n=4;break;default:n=-1}return[t,n]}function f(t){try{if(""!=t.id)return void 0==t.id?"":"//*[@id='"+t.id+"']";if(t===document.body)return"/html[1]/"+t.tagName.toLowerCase();for(var e=0,r=t.parentNode.childNodes,n=0;n<r.length;n++){var i=r[n];if(i===t)return f(t.parentNode)+"/"+t.tagName.toLowerCase()+"["+(e+1)+"]";1===i.nodeType&&i.tagName===t.tagName&&e++}}catch(t){return""}}function p(t){return document.evaluate(t,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}var m={url:"",target:"",matching:[],name:"",title:"",desc:"",exclude:[],include:"",avatar:[],paging:[]},v=void 0,g=void 0,y=void 0,b=void 0,w=function(){function n(){var e,r,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{global:[],custom:[],local:[]};t(this,n),this.url=(r=(e="/"!=(e=window.location.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,""),window.location.protocol+"//"+window.location.hostname+r+"/"),this.sites=i,this.current={},this.state="none",this.origins=[],this.mathjax=void 0,b=location.href}return e(n,[{key:"SetURL",value:function(t){var e,r=u(t),n=(e="/"!=(e=r.pathname)&&e.endsWith("/")?e=e.replace(/\/$/,""):e).replace(/\/[%@#.~a-zA-Z0-9_-]+$|^\/$/g,"");this.url=r.protocol+"//"+r.hostname+n+"/",b=t}},{key:"SetMinimatch",value:function(t){v=t}},{key:"SetRdability",value:function(t){g=t}},{key:"SetMarkdown",value:function(t){y=t}},{key:"isMathJax",value:function(){var t=this;return void 0==this.mathjax&&(this.mathjax=!1,$("body").find("script").each(function(e,r){r.type.startsWith("math")&&(t.mathjax=!0)})),this.mathjax}},{key:"MathJaxMode",value:function(){var t=x();if(-1!=t)return this.Newsite("read",t[0].outerHTML),this.dom=t[0],this.state="temp",t;var e=k();if(e&&""!=e.content){var r=j(e.content),n=r.id,i=r.cls,a=r.tag;return""!=n?"<"+a+' id="'+n+'">':""!=i?"<"+a+' class="'+i+'">':void 0}}},{key:"Readability",value:function(){try{var t=k();if(!t||""==t.content)throw"Readability error";this.Newsite("read",t.content,t.excerpt);var e=j(t.wrap),r=e.id,n=e.cls,i=e.tag;this.dom=""!=r?$("body").find("#"+r)[0]:""!=n?$("body").find("."+n.replace(/ /gi,"."))[0]:$("body").find(""+i)[0],this.state="temp"}catch(t){var a=x();-1!=a?(this.Newsite("read",a[0].outerHTML),this.dom=a[0],this.state="temp"):this.current.site=l(m)}}},{key:"Getsite",value:function(t,e){return this.sites[t].find(function(t){return t[0]==e})}},{key:"Getsites",value:function(){var t=this,e=[],n=function(){if(v(location.href,"file://**/*.txt")||v(location.href,"http*://**/*.txt"))return function(){var t=location.pathname.split("/").pop(),e="file:"==location.protocol?"local":"remote",r={name:"txtread::"+e,title:"<title>",desc:"",include:"<pre>",auto:!1,exclude:[]};"remote"==e&&(r.include="",r.html=$("body pre").html().replace(/\n/gi,"<br>"));return!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".txt",""))+""),r}();if($($("body").children()[0]).is("pre")&&(v(location.href,"file://**/*.md")||v(location.href,"http*://**/*.md")))return function(){var t=location.pathname.split("/").pop(),e={name:"txtread::"+("file:"==location.protocol?"local":"remote"),title:"",desc:"",include:"",auto:!1,exclude:[]},r=(new y.default.Converter).makeHtml($("body pre").text());return e.html=r,!$("title").html()&&$("head").append("<title>"+decodeURI(t.replace(".md",""))+""),e}();var t=/<\S+ (class|id)=("|')?[\w-_=;:' ]+("|')?>?$|<[^/][-_a-zA-Z0-9]+>?$/gi,e={name:$("meta[name='simpread:name']").attr("content"),url:$("meta[name='simpread:url']").attr("content"),title:$("meta[name='simpread:title']").attr("content"),desc:$("meta[name='simpread:desc']").attr("content"),include:$("meta[name='simpread:include']").attr("content"),exp:$("meta[name='simpread:exclude']").attr("content"),auto:$("meta[name='simpread:auto']").attr("content"),exclude:[]};if(e.name&&e.include){if(e.url&&!v(location.href,e.url))return;!e.title&&(e.title=""),!e.desc&&(e.desc=""),!e.exp&&(e.exp=""),e.name="metaread::"+e.name,e.auto="true"==e.auto;var r=["title","desc","include","exp"].findIndex(function(r){return""!=e[r]&&!e[r].match(t)});return e.exclude.push(e.exp),delete e.exp,-1==r?e:void 0}return}();if(this.current.url=this.url,n)this.current.auto=n.auto,this.current.url=n.url,delete n.auto,delete n.url,this.current.site=r({},n),this.current.site.name.startsWith("metaread::")&&(this.state="meta"),this.current.site.name.startsWith("txtread::")&&(this.state="txt");else if(_("local",new Map(this.sites.local),this.url,e),_("global",new Map(this.sites.global),this.url,e),_("person",new Map(this.sites.person),this.url,e),_("custom",new Map(this.sites.custom),this.url,e),e.length>0){var i=void 0;if(e.forEach(function(e){e[1].active&&(i=e,t.current.url=i[0],t.current.site=t.Safesite(r({},i[1]),i[2],i[0]),t.state="adapter")}),!i){var a=e[0];a[1].active=!0,this.current.url=a[0],this.current.site=this.Safesite(r({},a[1]),a[2],a[0]),this.state="adapter"}}else{var o=function(){if(location.pathname.includes("thread")||location.pathname.includes("forum.php")){if($(".t_f").length>0&&$(".favatar").find(".authi").length>0&&$(".avatar").find("img").length>0)return{avatar:[{name:"[[{$('.favatar').find('.authi')}]]"},{url:"[[{$('.avatar').find('img')}]]"}],include:"[[{$('.t_f')}]]"}}else if(/\/t\/[\w-]+\/\d+/.test(location.pathname)&&$("meta[name=generator]").attr("content").includes("discourse"))return{avatar:[{name:"[[{$('.topic-avatar').find('.a[data-user-card]')}]]"},{url:"[[{$('.topic-avatar').find('img')}]]"}],include:"[[{$('.cooked')}]]"};return-1}();-1!=o?(this.Newmultisite("read",o),this.state="temp"):this.Readability()}this.current.site.matching=e}},{key:"Addsites",value:function(t){var e=0;if(0==this.sites.global.length)this.sites.global=this.Formatsites(t),e=this.sites.global.length;else{var r=function(t,e){var r=new Map(e),n=[].concat(o(r.keys())),i=0;return t.map(function(t){n.includes(t[0])?n.includes(t[0]):i++}),{count:i,newsites:t}}(this.Formatsites(t),this.sites.global);e=r.count,this.sites.global=r.newsites}return e}},{key:"Addlocalsites",value:function(t){return this.sites.local=[].concat(o(t)),this.sites.local}},{key:"Addallsites",value:function(t){return this.sites={global:[].concat(o(t.global)),person:[].concat(o(t.person)),custom:[].concat(o(t.custom)),local:[].concat(o(t.local))},this.sites}},{key:"Newsite",value:function(t,e,n){var i={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]",include:"",exclude:[]}};e&&(i.site.html=e),this.current.mode=i.mode,this.current.url=i.url,this.current.site=this.Safesite(r({},i.site),"local",i.url),n&&(this.current.site.excerpt=n)}},{key:"Newmultisite",value:function(t,e){var n={mode:t,url:window.location.href,site:{name:"tempread::"+window.location.host,title:"<title>",desc:"",include:e.include,exclude:[],avatar:e.avatar}};this.current.mode=n.mode,this.current.url=n.url,this.current.site=this.Safesite(r({},n.site),"local",n.url)}},{key:"Updatesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1==n&&(n=this.sites[t].length),this.sites[t].splice(n,1,r)}},{key:"Deletesite",value:function(t,e,r){var n=this.sites[t].findIndex(function(t){return t[0]==e});-1!=n&&this.sites[t].splice(n,1),r(n)}},{key:"Safesite",value:function(t,e,r){return t.url=r,t.target=e,""==t.name&&(t.name="tempread::"),(!t.avatar||0==t.avatar.length)&&(t.avatar=[{name:""},{url:""}]),(!t.paging||0==t.paging.length)&&(t.paging=[{prev:""},{next:""}]),t}},{key:"Cleansite",value:function(t){return delete t.url,delete t.html,delete t.target,delete t.matching,t.avatar&&t.avatar.length>0&&""==t.avatar[0].name&&delete t.avatar,t.paging&&t.paging.length>0&&""==t.paging[0].prev&&delete t.paging,t}},{key:"Formatsites",value:function(t){var e=new Map,r=!0,n=!1,i=void 0;try{for(var a,l=t.sites[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var u=a.value;if(0==O(u)){var s=u.url;delete u.url,e.set(s,u)}}}catch(t){n=!0,i=t}finally{try{!r&&l.return&&l.return()}finally{if(n)throw i}}return[].concat(o(e))}},{key:"Clearsites",value:function(t){t?this.sites[t]=[]:this.sites={global:[],custom:[],local:[]}}},{key:"Origins",value:function(t){var e=t.origins.map(function(t){return t.url});return(e=new Set(this.origins.concat(e))).forEach(function(t){""!=t.trim()&&t.trim().startsWith("http")&&t.trim().endsWith(".json")||e.delete(t)}),this.origins=[].concat(o(e)),this.origins}},{key:"Addorigins",value:function(t){return this.sites.custom=[].concat(o(t)),this.sites.custom}},{key:"Clearorigins",value:function(){var t=this.sites.custom.length;return this.sites.custom=[],t}}]),n}();function x(){var t=$("body"),e=!0,r=!1,n=void 0;try{for(var i,a=["[itemprop='articleBody']","article",".post-content",".entry-content",".post-article",".content-post",".article-entry",".article-content",".article-body",".markdown-body",".post",".content"][Symbol.iterator]();!(e=(i=a.next()).done);e=!0){var o=i.value,l=t.find(o);if(l.length>0)return l}}catch(t){r=!0,n=t}finally{try{!e&&a.return&&a.return()}finally{if(r)throw n}}return-1}function k(){var t=document.location,e=(t.href,t.host,t.protocol,t.host,t.protocol.substr(0,t.protocol.indexOf(":")),t.protocol,t.host,t.pathname.substr(0,t.pathname.lastIndexOf("/")+1),new g.Readability(document.cloneNode(!0)).parse());return e}function _(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=function(t){var e=t.replace("www.","").match(/\.\S+\.\S+/g);return e?e[0].substr(1):t.replace("www.","")},a=u(b),s=[].concat(o(e.keys())),c=r.match(/[.a-zA-z0-9-_]+/g)[1].replace("www.",""),h=i(a.hostname),d=function(){return"/"==a.pathname||/\/(default|index|portal).[0-9a-zA-Z]+$/.test(a.pathname)},f=!0,p=!1,m=void 0;try{for(var g,y=s[Symbol.iterator]();!(f=(g=y.next()).done);f=!0){var w=g.value,x=e.get(w).name,$=i(x);w.startsWith("[[/")&&w.endsWith("/]]")&&new RegExp(w.replace(/^\[\[\/|\/\]\]/g,"")).test(location.href)?n.push([w,l(e.get(w)),t]):d()||w.endsWith("*")||w.replace(/^http[s]?:/,"")!=r.replace(/^http[s]?:/,"")?w.match(/\*/g)&&1==w.match(/\*/g).length&&!d()&&w.endsWith("*")&&c.includes($)&&h==$&&r.includes(x)?n.push([w,l(e.get(w)),t]):v(a.origin+a.pathname,w)&&n.push([w,l(e.get(w)),t]):n.push([w,l(e.get(w)),t])}}catch(t){p=!0,m=t}finally{try{!f&&y.return&&y.return()}finally{if(p)throw m}}}function O(t){if(!t.name||!t.url||!t.include)return-1;if(-1==s(t.title)[0]||-1==s(t.include)[0]||-1==s(t.desc)[0])return-2;if(t.paging){if(2!=t.paging.length)return-3;if(!t.paging[0].prev)return-4;if(!t.paging[1].next)return-5;if(-1==s(t.paging[0].prev)[0]||-1==s(t.paging[1].next)[0])return-6}if(t.avatar){if(2!=t.avatar.length)return-7;if(!t.avatar[0].name)return-8;if(!t.avatar[1].url)return-9;if(-1==s(t.avatar[0].name)[0]||-1==s(t.avatar[1].url)[0])return-10}return 0}function j(t){var e=t.replace('<div id="readability-page-1" class="page">',""),r=$(e)[0],n=r.outerHTML.replace(r.innerHTML,""),i=$(n)[0],a=i.tagName.toLowerCase(),o=i.className;return{id:i.id,cls:o,tag:a}}function S(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text",r=$("html");if(h(t)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?t=o:3==l?t=M(r.find(o)):4==l&&(t=o.html())}else"html"==e?t=M(r.find(t)):"multi"==e||(t=r.find(t).text().trim());return t}function M(t){var e="";switch(t.length){case 0:e="<sr-rd-content-error></sr-rd-content-error>";break;case 1:e=t.html().trim();break;default:e=t.map(function(t,e){return $(e).html()}).get().join("<br>")}return e}return function(r){function o(e){t(this,o);var r=i(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));return r.version="0.0.4 build 0111",r.org_url=location.href,r.html={},r.plugin={},r.pure=!1,r.cleanup=!1,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,w),e(o,[{key:"Exist",value:function(){return this.org_url==location.href}},{key:"AddPlugin",value:function(t){this.plugin={minimatch:t.minimatch,pangu:t.pangu,beautify:t.beautify,stylesheet:t.style,rdability:t.rdability,markdown:t.markdown},n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMinimatch",this).call(this,this.plugin.minimatch),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetRdability",this).call(this,this.plugin.rdability),n(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"SetMarkdown",this).call(this,this.plugin.markdown)}},{key:"ReadMode",value:function(){var t,e,r,n,i;this.html=(t=this.current.site,e=l(t),r=c(""==t.title?"<title>":t.title),n=c(t.desc),i=c(t.include),e.title=""==t.title||"<title>"==t.title?$("head title").text():S(r),e.desc=function(t){if(void 0==t)return t;var e=t.length,r=t.indexOf("。")+1;return e>100&&(t=r>0?t.substr(0,r):t.substr(0,101)+"......"),t}(t.excerpt?t.excerpt:S(n)),e.include=""==t.include&&""!=t.html?t.html:S(i,"html"),e.avatar&&e.avatar.length>0&&""==e.avatar[0].name&&delete e.avatar,e.paging&&e.paging.length>0&&""==e.paging[0].prev&&delete e.paging,e.avatar&&e.avatar.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r),"html")}),e.paging&&e.paging.forEach(function(t){var e=Object.keys(t).join(),r=t[e];t[e]=S(c(r))}),e)}},{key:"TempMode",value:function(t,e){this.state="temp",this.dom=e,this.Newsite(t,e.outerHTML)}},{key:"GetDom",value:function(t,e){return S(c(t),e)}},{key:"Include",value:function(){var t=this.current.site.include,e=[],r=c(t);try{if(h(r)){var n=d(t),i=a(n,2),o=i[0],l=i[1];0==l?(t=t.replace(/\[\[{\$\(|}\]\]|\).html\(\)/g,""),e=$(d("[[["+t+"]]]")[0])):3==l&&(e=o)}else r&&(e=$("body").find(r))}catch(t){}return e}},{key:"Exclude",value:function(t){return function(t,e){var r=[],n="",i=!0,o=!1,l=void 0;try{for(var u,s=e[Symbol.iterator]();!(i=(u=s.next()).done);i=!0){var f=u.value;if(h(f)){var p=d(f),m=a(p,2),v=m[0],g=m[1];if(1==g)n=v;else if(2==g){var y=t.html().match(new RegExp(v,"g"));if(y&&y.length>0){var b=y.join("");n="*["+b+"]"}else n=void 0}else 3==g?v.remove():4==g&&v.remove()}else n=c(f);n&&r.push(n)}}catch(t){o=!0,l=t}finally{try{!i&&s.return&&s.return()}finally{if(o)throw l}}return r.join(",")}(t,this.current.site.exclude)}},{key:"Beautify",value:function(t){0!=t.children().length&&this.plugin.beautify&&(this.plugin.beautify.before(this.current.site.name,t),this.cleanup&&this.plugin.beautify.cleanHTML(t,this.pure,this.isMathJax()),this.plugin.beautify.specbeautify(this.current.site.name,t),this.plugin.beautify.removeSpareTag(this.current.site.name,t),this.plugin.beautify.htmlbeautify(t),this.plugin.beautify.commbeautify(this.current.site.name,t))}},{key:"Format",value:function(t){this.plugin.pangu&&this.plugin.pangu.spacingElementByClassName(t)}},{key:"Utils",value:function(){return{dom2Xpath:f,xPath2Dom:p}}}]),o}()}); From cef094203cfe7b3139f237e3d334201bfcc4248c Mon Sep 17 00:00:00 2001 From: Kenshin <fxblog@gmail.com> Date: Mon, 13 Jan 2020 14:38:30 +0800 Subject: [PATCH 287/329] Update puread files. --- src/vender/puread/puplugin.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vender/puread/puplugin.min.js b/src/vender/puread/puplugin.min.js index 75404f25..a297f030 100644 --- a/src/vender/puread/puplugin.min.js +++ b/src/vender/puread/puplugin.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.puplugin={})}(this,function(e){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(e,t){return e(t={exports:{}},t.exports),t.exports}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=r(function(e,t){e.exports=function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n=function(){function e(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,r,a){return r&&e(t.prototype,r),a&&e(t,a),t}}(),i=r(1).Pangu,o=function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=(void 0===t?"undefined":a(t))&&"function"!=typeof t?e:t}(this,Object.getPrototypeOf(t).call(this));return e.topTags=/^(html|head|body|#document)$/i,e.ignoreTags=/^(script|code|pre|textarea)$/i,e.spaceSensitiveTags=/^(a|del|pre|s|strike|u)$/i,e.spaceLikeTags=/^(br|hr|i|img|pangu)$/i,e.blockTags=/^(div|h1|h2|h3|h4|h5|h6|p)$/i,e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":a(t)));e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),n(t,[{key:"canIgnoreNode",value:function(e){for(var t=e.parentNode;t&&t.nodeName&&-1===t.nodeName.search(this.topTags);){if(t.nodeName.search(this.ignoreTags)>=0||t.isContentEditable||"true"===t.getAttribute("g_editable"))return!0;t=t.parentNode}return!1}},{key:"isFirstTextChild",value:function(e,t){for(var r=e.childNodes,a=0;a<r.length;a++){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"isLastTextChild",value:function(e,t){for(var r=e.childNodes,a=r.length-1;a>-1;a--){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"spacingNodeByXPath",value:function(e,t){for(var r=document.evaluate(e,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),a=void 0,n=void 0,i=r.snapshotLength-1;i>-1;--i)if(a=r.snapshotItem(i),this.canIgnoreNode(a))n=a;else{var o=this.spacing(a.data);if(a.data!==o&&(a.data=o),n){if(a.nextSibling&&a.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}var s=a.data.toString().substr(-1)+n.data.toString().substr(0,1),l=this.spacing(s);if(l!==s){for(var c=n;c.parentNode&&-1===c.nodeName.search(this.spaceSensitiveTags)&&this.isFirstTextChild(c.parentNode,c);)c=c.parentNode;for(var u=a;u.parentNode&&-1===u.nodeName.search(this.spaceSensitiveTags)&&this.isLastTextChild(u.parentNode,u);)u=u.parentNode;if(u.nextSibling&&u.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}if(-1===u.nodeName.search(this.blockTags))if(-1===c.nodeName.search(this.spaceSensitiveTags))-1===c.nodeName.search(this.ignoreTags)&&-1===c.nodeName.search(this.blockTags)&&(n.previousSibling?-1===n.previousSibling.nodeName.search(this.spaceLikeTags)&&(n.data=" "+n.data):this.canIgnoreNode(n)||(n.data=" "+n.data));else if(-1===u.nodeName.search(this.spaceSensitiveTags))a.data=a.data+" ";else{var d=document.createElement("pangu");d.innerHTML=" ",c.previousSibling?-1===c.previousSibling.nodeName.search(this.spaceLikeTags)&&c.parentNode.insertBefore(d,c):c.parentNode.insertBefore(d,c),d.previousElementSibling||d.parentNode&&d.parentNode.removeChild(d)}}}n=a}}},{key:"spacingNode",value:function(e){this.spacingNodeByXPath(".//*/text()[normalize-space(.)]",e)}},{key:"spacingElementById",value:function(e){var t='id("'+e+'")//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByClassName",value:function(e){var t='//*[contains(concat(" ", normalize-space(@class), " "), "'+e+'")]//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByTagName",value:function(e){var t="//"+e+"//text()";this.spacingNodeByXPath(t,document)}},{key:"spacingPageTitle",value:function(){this.spacingNodeByXPath("/html/head/title/text()",document)}},{key:"spacingPageBody",value:function(){for(var e="/html/body//*/text()[normalize-space(.)]",t=["script","style","textarea"],r=0;r<t.length;r++){var a=t[r];e+='[translate(name(..),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")!="'+a+'"]'}this.spacingNodeByXPath(e,document)}},{key:"spacingPage",value:function(){this.spacingPageTitle(),this.spacingPageBody()}}]),t}(i),s=new o;(e.exports=s).Pangu=o},function(e,t){var r=function(){function e(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,r,a){return r&&e(t.prototype,r),a&&e(t,a),t}}(),a=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])(["])/g,n=/(["])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,i=/(["']+)(\s*)(.+?)(\s*)(["']+)/g,o=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])( )(')([A-Za-z])/g,s=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])(#)([A-Za-z0-9\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff]+)(#)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,l=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])(#([^ ]))/g,c=/(([^ ])#)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,u=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\+\-\*\/=&\\|<>])([A-Za-z0-9])/g,d=/([A-Za-z0-9])([\+\-\*\/=&\\|<>])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,h=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c]+(.*?)[\)\]\}>\u201d]+)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,f=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c>])/g,p=/([\)\]\}>\u201d<])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,g=/([\(\[\{<\u201c]+)(\s*)(.+?)(\s*)([\)\]\}>\u201d]+)/,m=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([~!;:,\.\?\u2026])([A-Za-z0-9])/g,_=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([A-Za-z0-9`\$%\^&\*\-=\+\\\|\/@\u00a1-\u00ff\u2022\u2027\u2150-\u218f])/g,b=/([A-Za-z0-9`~\$%\^&\*\-=\+\\\|\/!;:,\.\?\u00a1-\u00ff\u2022\u2026\u2027\u2150-\u218f])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,v=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return r(e,[{key:"spacing",value:function(e){var t=e,r=t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(a,"$1 $2")).replace(n,"$1 $2")).replace(i,"$1$3$5")).replace(o,"$1$3$4")).replace(s,"$1 $2$3$4 $5")).replace(l,"$1 $2")).replace(c,"$1 $3")).replace(u,"$1 $2 $3")).replace(d,"$1 $2 $3"),v=t.replace(h,"$1 $2 $4");return t=v,r===v&&(t=(t=t.replace(f,"$1 $2")).replace(p,"$1 $2")),t=(t=(t=(t=t.replace(g,"$1$3$5")).replace(m,"$1$2 $3")).replace(_,"$1 $2")).replace(b,"$1 $2")}},{key:"spacingText",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];try{var r=this.spacing(e);t(null,r)}catch(e){t(e)}}}]),e}(),w=new v;(e.exports=w).Pangu=v}])});n.pangu;function i(e,t){for(var r=0,a=e.length-1;a>=0;a--){var n=e[a];"."===n?e.splice(a,1):".."===n?(e.splice(a,1),r++):r&&(e.splice(a,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(e){return o.exec(e).slice(1)};function l(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,t="/"===a.charAt(0))}return e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"),(t?"/":"")+e||"."}function c(e){var t=u(e),r="/"===b(e,-1);return(e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e}function u(e){return"/"===e.charAt(0)}function d(){return c(_(Array.prototype.slice.call(arguments,0),function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function h(e,t){function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var r=e.length-1;r>=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=l(e).substr(1),t=l(t).substr(1);for(var a=r(e.split("/")),n=r(t.split("/")),i=Math.min(a.length,n.length),o=i,s=0;s<i;s++)if(a[s]!==n[s]){o=s;break}var c=[];for(s=o;s<a.length;s++)c.push("..");return(c=c.concat(n.slice(o))).join("/")}function f(e){var t=s(e),r=t[0],a=t[1];return r||a?(a&&(a=a.substr(0,a.length-1)),r+a):"."}function p(e,t){var r=s(e)[2];return t&&r.substr(-1*t.length)===t&&(r=r.substr(0,r.length-t.length)),r}function g(e){return s(e)[3]}var m={extname:g,basename:p,dirname:f,sep:"/",delimiter:":",relative:h,join:d,isAbsolute:u,normalize:c,resolve:l};function _(e,t){if(e.filter)return e.filter(t);for(var r=[],a=0;a<e.length;a++)t(e[a],a,e)&&r.push(e[a]);return r}var b="b"==="ab".substr(-1)?function(e,t,r){return e.substr(t,r)}:function(e,t,r){return t<0&&(t=e.length+t),e.substr(t,r)},v=Object.freeze({resolve:l,normalize:c,isAbsolute:u,join:d,relative:h,sep:"/",delimiter:":",dirname:f,basename:p,extname:g,default:m}),w=function(e,t){for(var r=[],a=0;a<e.length;a++){var n=t(e[a],a);y(n)?r.push.apply(r,n):r.push(n)}return r},y=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},k=E;function E(e,t,r){e instanceof RegExp&&(e=T(e,r)),t instanceof RegExp&&(t=T(t,r));var a=x(e,t,r);return a&&{start:a[0],end:a[1],pre:r.slice(0,a[0]),body:r.slice(a[0]+e.length,a[1]),post:r.slice(a[1]+t.length)}}function T(e,t){var r=t.match(e);return r?r[0]:null}function x(e,t,r){var a,n,i,o,s,l=r.indexOf(e),c=r.indexOf(t,l+1),u=l;if(l>=0&&c>0){for(a=[],i=r.length;u>=0&&!s;)u==l?(a.push(u),l=r.indexOf(e,u+1)):1==a.length?s=[a.pop(),c]:((n=a.pop())<i&&(i=n,o=c),c=r.indexOf(t,u+1)),u=l<c&&l>=0?l:c;a.length&&(s=[i,o])}return s}E.range=x;var N=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(t,r){var a=[];var n=k("{","}",t);if(!n||/\$$/.test(n.pre))return[t];var i=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(n.body);var o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(n.body);var s=i||o;var l=n.body.indexOf(",")>=0;if(!s&&!l)return n.post.match(/,.*\}/)?(t=n.pre+"{"+n.body+S+n.post,e(t)):[t];var c;if(s)c=n.body.split(/\.\./);else if(1===(c=function e(t){if(!t)return[""];var r=[];var a=k("{","}",t);if(!a)return t.split(",");var n=a.pre;var i=a.body;var o=a.post;var s=n.split(",");s[s.length-1]+="{"+i+"}";var l=e(o);o.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l));r.push.apply(r,s);return r}(n.body)).length&&1===(c=e(c[0],!1).map(M)).length){var u=n.post.length?e(n.post,!1):[""];return u.map(function(e){return n.pre+c[0]+e})}var d=n.pre;var u=n.post.length?e(n.post,!1):[""];var h;if(s){var f=j(c[0]),p=j(c[1]),g=Math.max(c[0].length,c[1].length),m=3==c.length?Math.abs(j(c[2])):1,_=I,b=p<f;b&&(m*=-1,_=O);var v=c.some(B);h=[];for(var y=f;_(y,p);y+=m){var E;if(o)"\\"===(E=String.fromCharCode(y))&&(E="");else if(E=String(y),v){var T=g-E.length;if(T>0){var x=new Array(T+1).join("0");E=y<0?"-"+x+E.slice(1):x+E}}h.push(E)}}else h=w(c,function(t){return e(t,!1)});for(var N=0;N<h.length;N++)for(var C=0;C<u.length;C++){var A=d+h[N]+u[C];(!r||s||A)&&a.push(A)}return a}(function(e){return e.split("\\\\").join(C).split("\\{").join(A).split("\\}").join(S).split("\\,").join(P).split("\\.").join(L)}(e),!0).map(z)},C="\0SLASH"+Math.random()+"\0",A="\0OPEN"+Math.random()+"\0",S="\0CLOSE"+Math.random()+"\0",P="\0COMMA"+Math.random()+"\0",L="\0PERIOD"+Math.random()+"\0";function j(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function z(e){return e.split(C).join("\\").split(A).join("{").split(S).join("}").split(P).join(",").split(L).join(".")}function M(e){return"{"+e+"}"}function B(e){return/^-?0\d/.test(e)}function I(e,t){return e<=t}function O(e,t){return e>=t}var H=v&&m||v,R=Y;Y.Minimatch=Q;var D={sep:"/"};try{D=H}catch(e){}var G=Y.GLOBSTAR=Q.GLOBSTAR={},q={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},U="[^/]",F=U+"*?",V="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",W="(?:(?!(?:\\/|^)\\.).)*?",X="().*{}+?[]^$\\!".split("").reduce(function(e,t){return e[t]=!0,e},{});var Z=/\/+/;function K(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function Y(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new Q(t,r).match(e))}function Q(e,t){if(!(this instanceof Q))return new Q(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==D.sep&&(e=e.split(D.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function J(e,t){if(t||(t=this instanceof Q?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:N(e)}Y.filter=function(e,t){return t=t||{},function(r,a,n){return Y(r,e,t)}},Y.defaults=function(e){if(!e||!Object.keys(e).length)return Y;var t=Y,r=function(r,a,n){return t.minimatch(r,a,K(e,n))};return r.Minimatch=function(r,a){return new t.Minimatch(r,K(e,a))},r},Q.defaults=function(e){return e&&Object.keys(e).length?Y.defaults(e).Minimatch:Q},Q.prototype.debug=function(){},Q.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(Z)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r},Q.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(this.options.nonegate)return;for(var a=0,n=e.length;a<n&&"!"===e.charAt(a);a++)t=!t,r++;r&&(this.pattern=e.substr(r));this.negate=t},Y.braceExpand=function(e,t){return J(e,t)},Q.prototype.braceExpand=J,Q.prototype.parse=function(e,t){if(e.length>65536)throw new TypeError("pattern is too long");var r=this.options;if(!r.noglobstar&&"**"===e)return G;if(""===e)return"";var a,n="",i=!!r.nocase,o=!1,s=[],l=[],c=!1,u=-1,d=-1,h="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=this;function p(){if(a){switch(a){case"*":n+=F,i=!0;break;case"?":n+=U,i=!0;break;default:n+="\\"+a}f.debug("clearStateChar %j %j",a,n),a=!1}}for(var g,m=0,_=e.length;m<_&&(g=e.charAt(m));m++)if(this.debug("%s\t%s %s %j",e,m,n,g),o&&X[g])n+="\\"+g,o=!1;else switch(g){case"/":return!1;case"\\":p(),o=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,m,n,g),c){this.debug(" in class"),"!"===g&&m===d+1&&(g="^"),n+=g;continue}f.debug("call clearStateChar %j",a),p(),a=g,r.noext&&p();continue;case"(":if(c){n+="(";continue}if(!a){n+="\\(";continue}s.push({type:a,start:m-1,reStart:n.length,open:q[a].open,close:q[a].close}),n+="!"===a?"(?:(?!(?:":"(?:",this.debug("plType %j %j",a,n),a=!1;continue;case")":if(c||!s.length){n+="\\)";continue}p(),i=!0;var b=s.pop();n+=b.close,"!"===b.type&&l.push(b),b.reEnd=n.length;continue;case"|":if(c||!s.length||o){n+="\\|",o=!1;continue}p(),n+="|";continue;case"[":if(p(),c){n+="\\"+g;continue}c=!0,d=m,u=n.length,n+=g;continue;case"]":if(m===d+1||!c){n+="\\"+g,o=!1;continue}if(c)var v,w=e.substring(d+1,m);i=!0,c=!1,n+=g;continue;default:p(),o?o=!1:!X[g]||"^"===g&&c||(n+="\\"),n+=g}c&&(w=e.substr(d+1),v=this.parse(w,ee),n=n.substr(0,u)+"\\["+v[0],i=i||v[1]);for(b=s.pop();b;b=s.pop()){var y=n.slice(b.reStart+b.open.length);this.debug("setting tail",n,b),y=y.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,t,r){return r||(r="\\"),t+t+r+"|"}),this.debug("tail=%j\n %s",y,y,b,n);var k="*"===b.type?F:"?"===b.type?U:"\\"+b.type;i=!0,n=n.slice(0,b.reStart)+k+"\\("+y}p(),o&&(n+="\\\\");var E=!1;switch(n.charAt(0)){case".":case"[":case"(":E=!0}for(var T=l.length-1;T>-1;T--){var x=l[T],N=n.slice(0,x.reStart),C=n.slice(x.reStart,x.reEnd-8),A=n.slice(x.reEnd-8,x.reEnd),S=n.slice(x.reEnd);A+=S;var P=N.split("(").length-1,L=S;for(m=0;m<P;m++)L=L.replace(/\)[+*?]?/,"");var j="";""===(S=L)&&t!==ee&&(j="$");var z=N+C+S+j+A;n=z}""!==n&&i&&(n="(?=.)"+n);E&&(n=h+n);if(t===ee)return[n,i];if(!i)return e.replace(/\\(.)/g,"$1");var M=r.nocase?"i":"";try{var $=new RegExp("^"+n+"$",M)}catch(e){return new RegExp("$.")}return $._glob=e,$._src=n,$};var ee={};Y.makeRe=function(e,t){return new Q(e,t||{}).makeRe()},Q.prototype.makeRe=function(){if(this.regexp||!1===this.regexp)return this.regexp;var e=this.set;if(!e.length)return this.regexp=!1,this.regexp;var t=this.options,r=t.noglobstar?F:t.dot?V:W,a=t.nocase?"i":"",n=e.map(function(e){return e.map(function(e){return e===G?r:"string"==typeof e?e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):e._src}).join("\\/")}).join("|");n="^(?:"+n+")$",this.negate&&(n="^(?!"+n+").*$");try{this.regexp=new RegExp(n,a)}catch(e){this.regexp=!1}return this.regexp},Y.match=function(e,t,r){var a=new Q(t,r=r||{});return e=e.filter(function(e){return a.match(e)}),a.options.nonull&&!e.length&&e.push(t),e},Q.prototype.match=function(e,t){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return""===e;if("/"===e&&t)return!0;var r=this.options;"/"!==D.sep&&(e=e.split(D.sep).join("/"));e=e.split(Z),this.debug(this.pattern,"split",e);var a,n,i=this.set;for(this.debug(this.pattern,"set",i),n=e.length-1;n>=0&&!(a=e[n]);n--);for(n=0;n<i.length;n++){var o=i[n],s=e;r.matchBase&&1===o.length&&(s=[a]);var l=this.matchOne(s,o,t);if(l)return!!r.flipNegate||!this.negate}return!r.flipNegate&&this.negate},Q.prototype.matchOne=function(e,t,r){var a=this.options;this.debug("matchOne",{this:this,file:e,pattern:t}),this.debug("matchOne",e.length,t.length);for(var n=0,i=0,o=e.length,s=t.length;n<o&&i<s;n++,i++){this.debug("matchOne loop");var l,c=t[i],u=e[n];if(this.debug(t,c,u),!1===c)return!1;if(c===G){this.debug("GLOBSTAR",[t,c,u]);var d=n,h=i+1;if(h===s){for(this.debug("** at the end");n<o;n++)if("."===e[n]||".."===e[n]||!a.dot&&"."===e[n].charAt(0))return!1;return!0}for(;d<o;){var f=e[d];if(this.debug("\nglobstar while",e,d,t,h,f),this.matchOne(e.slice(d),t.slice(h),r))return this.debug("globstar found match!",d,o,f),!0;if("."===f||".."===f||!a.dot&&"."===f.charAt(0)){this.debug("dot detected!",e,d,t,h);break}this.debug("globstar swallow a segment, and continue"),d++}return!(!r||(this.debug("\n>>> no match, partial?",e,d,t,h),d!==o))}if("string"==typeof c?(l=a.nocase?u.toLowerCase()===c.toLowerCase():u===c,this.debug("string match",c,u,l)):(l=u.match(c),this.debug("pattern match",c,u,l)),!l)return!1}if(n===o&&i===s)return!0;if(n===o)return r;if(i===s)return n===o-1&&""===e[n];throw new Error("wtf?")};var te=[];var re=Object.freeze({before:function(e,t){te=[],"zhuanlan.zhihu.com"==e&&t.find("a[data-draft-type]").map(function(e,t){var r=$(t.outerHTML);r.find(".LinkCard-meta svg").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("<sr-blocks></sr-blocks>")}),"sspai.com"==e&&t.find(".ssApp").map(function(e,t){var r=$($("body").find(".ss-app-card")[e].outerHTML);r.find(".code_box").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("<sr-blocks></sr-blocks>")}),"question.zhihu.com"==e&&t.find(".RichText-MCNLinkCardContainer").map(function(e,t){var r=$($("body").find(".RichText-MCNLinkCardContainer")[e].outerHTML);te[e]=r[0].outerHTML,$(t).replaceWith("<sr-blocks></sr-blocks>")}),"post.smzdm.com"==e&&t.find(".embed-card").map(function(e,t){var r=$($("body").find(".embed-card")[e].outerHTML);te[e]=r[0].outerHTML,$(t).parent().replaceWith("<sr-blocks></sr-blocks>")})},specbeautify:function(e,t){switch(e){case"sspai.com":t.find(".relation-apps").remove(),t.find(".ss-app-card").remove();break;case"post.smzdm.com":t.find("img.face").addClass("sr-rd-content-nobeautify"),t.find(".insert-outer img").addClass("sr-rd-content-nobeautify");break;case"infoq.com":t.find("img").map(function(e,t){"left"==$(t).css("float")&&$(t).addClass("sr-rd-content-nobeautify")}),t.find("script").remove();break;case"appinn.com":case"hacpai.com":t.find(".emoji").addClass("sr-rd-content-nobeautify");break;case"douban.com":t.find(".review-content").children().unwrap(),t.find("table").addClass("sr-rd-content-center"),t.find("p").css({"white-space":"pre-wrap"}),t.find(".cc").removeClass();break;case"qdaily.com":t.find("img").map(function(e,t){var r=$(t);0==Number.parseInt(r.css("height"))&&r.remove()}),t.find(".com-insert-images").map(function(e,t){var r=$(t),a=r.find("img").map(function(e,t){return"<div>"+t.outerHTML+"</div>"}).get().join("");r.empty().removeAttr("class").append(a)}),t.find(".com-insert-embed").remove();break;case"news.mtime.com":t.find(".newspictool").map(function(e,t){var r=$(t),a=r.find("img"),n=r.find("p:last");r.removeAttr("class").addClass("sr-rd-content-center").empty().append(a).append(n)});break;case"blog.csdn.net":t.find(".save_code").remove(),t.find(".pre-numbering").remove(),t.find("pre").removeAttr("style").removeAttr("class"),t.find("code").removeAttr("style"),t.find(".dp-highlighter").map(function(e,t){$(t).find(".bar .tools").remove(),$(t).next().is("pre")&&$(t).next().remove()});break;case"news.sohu.com":t.find(".conserve-photo").remove(),t.find("table").addClass("sr-rd-content-center");break;case"qq.com":t.find(".rv-root-v2, #backqqcom").remove();break;case"azofreeware.com":t.find("iframe").remove();break;case"apprcn.com":t.find("img").map(function(e,t){var r=$(t),a=r.attr("src");a&&a.includes("Apprcn_Wechat_Small.jpeg")&&r.parent().remove()}),t.find("a").map(function(e,t){var r=$(t);"来自反斗软件"==r.text()&&r.parent().remove()});break;case"tieba.baidu.com":t.find(".BDE_Smiley").addClass("sr-rd-content-nobeautify"),t.find(".replace_div").removeAttr("class").removeAttr("style"),t.find(".replace_tip").remove(),t.find(".d_post_content, .j_d_post_content, .post_bubble_top, .post_bubble_middle, .post_bubble_bottom").map(function(e,t){$(t).removeAttr("class").removeAttr("style")}),$("body").find(".p_author_face").map(function(e,t){var r=$(t).find("img"),a=r.attr("data-tb-lazyload"),n=r.attr("username");a&&$("sr-rd-mult-avatar").find("span").map(function(e,t){var r=$(t);r.text()==n&&r.parent().find("img").attr("src",a)})});break;case"jingyan.baidu.com":t.find(".exp-image-wraper").removeAttr("class").removeAttr("href");break;case"question.zhihu.com":t.find(".zu-edit-button").remove(),t.find("a.external").map(function(e,t){$(t).removeAttr("class").attr("style","border: none;")}),t.find(".VagueImage").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('<img class="sr-rd-content-img" src="'+a+'" style="zoom: 0.6;">')});break;case"chiphell.com":t.find("img").map(function(e,t){var r=$(t),a=r.parent(),n=r.attr("src"),i=r.attr("smilieid");a.is("ignore_js_op")&&r.unwrap(),i&&n&&n.includes("static/image/smiley")&&r.addClass("sr-rd-content-nobeautify").attr("style","width: 50px;")}),t.find(".quote").remove();break;case"jiemian.com":t.find("script").remove();break;case"36kr.com":t.find(".load-html-img").removeAttr("class");break;case"cnblogs.com":t.find(".cnblogs_code").removeClass(),t.find(".cnblogs_code_hide").removeClass().removeAttr("style"),t.find(".cnblogs_code_toolbar").remove(),t.find(".code_img_opened").remove(),t.find(".code_img_closed").remove();break;case"news.cnblogs.com":t.find(".topic_img").remove();break;case"g-cores.com":t.find(".swiper-slide-active").find("img").map(function(e,t){var r=$(t);r.parent().parent().parent().parent().parent().parent().removeAttr("class").removeAttr("style").html(r)});break;case"feng.com":case"young.ifeng.com":t.find("span").removeAttr("style");break;case"ftchinese.com":t.find("script").remove();break;case"segmentfault.com":t.find(".widget-codetool").remove();break;case"mp.weixin.qq.com":t.find('section[powered-by="xiumi.us"]').find("img").map(function(e,t){var r=$(t),a=r.attr("data-src");r.addClass("sr-rd-content-nobeautify").attr("src",a)});break;case"ruby-china.org":t.find(".twemoji").remove();break;case"w3cplus.com":t.find("iframe").addClass("sr-rd-content-nobeautify");break;case"zuojj.com":t.find(".syntaxhighlighter .Brush").attr("style","font-size: .7em !important;");break;case"aotu.io":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre"),n=r.find("table");r.html(a[1]),n.unwrap()}),t.find("table").addClass("sr-rd-content-center");break;case"colobu.com":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre");r.html(a[1]),r.unwrap()});break;case"hao.caibaojian.com":t.find(".tlink").map(function(e,t){$(t).html("<link>")});break;case"wkee.net":t.find("script").remove();break;case"linux.cn":t.find("pre").attr("style","background-color: #161b20; background-image: none;"),t.find("code").attr("style","background-color: transparent; background-image: none;");break;case"zhuanlan.zhihu.com":t.find("div[data-src]").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('<div class="sr-rd-content-center"><img src="'+a+'"></div>')}),$("body img").each(function(e,t){var r=$(t),a=r.parent();if("column-gif"==r.attr("class")&&"GifPlayer"==a.attr("class")){var n=a.parent().prev();if(n.is("noscript")){var i=n.html(),o=$(i),s=o.attr("src"),l=o.attr("data-thumbnail");$('sr-read img[src="'+l+'"]').attr("src",s)}}}),setTimeout(function(){t.find("img").each(function(e,t){$(t).attr("src").endsWith(".gif")&&$(t).parent().next().is("svg")&&$(t).parent().next().remove()})},500);break;case"jianshu.com":t.find(".image-package").map(function(e,t){var r=$(t),a=r.find("img");r.html(a)});break;case"medium.com":t.find("figure").map(function(e,t){var r=$(t),a=r.find("img");r.replaceWith('<div class="sr-rd-content-center"><img class="sr-rd-content-nobeautify" src="'+a.attr("data-src")+'" style="max-width:100%"></div>')});break;case"worldcup.fifa.com":t.find("iframe").css({width:"790px",height:"450px"}),t.find("div").removeClass()}},removeSpareTag:function(e,t){var r=!1,a="";["lib.csdn.net","huxiu.com","my.oschina.net","caixin.com","163.com","steachs.com","hacpai.com","apprcn.com","mp.weixin.qq.com"].includes(e)?(r=!0,a="p"):["nationalgeographic.com.cn","dgtle.com","news.mtime.com"].includes(e)?(r=!0,a="div"):["chiphell.com"].includes(e)&&(r=!0,a="font"),r&&t.find(a).map(function(e,t){var r=$(t).text().toLowerCase().trim();0==$(t).find("img").length&&""==r&&$(t).remove()})},htmlbeautify:function(e){try{e.html(function(e,t){return t.trim().replace(/<\/?blockquote/g,function(e){return"/"==e[1]?"</sr-blockquote":"<sr-blockquote"}).replace(/<br>\n?<br>(\n?<br>)*/g,"<br>").replace(/\/(div|p)>\n*(<br>\n)+/g,function(e){return e.replace("<br>","")})})}catch(t){return e.html()}},commbeautify:function(e,t){t.find("img:not(.sr-rd-content-nobeautify)").map(function(e,t){var r=$(t),a=(r.parent(),$("<img class='sr-rd-content-img-load'>")),n=r.attr("src"),i=r.attr("data-src"),o=r.attr("data-original"),s=r.attr("original"),l=r.attr("data-original-src"),c=r.attr("data-lazy-src"),u=r.attr("real_src"),d=function(){a.removeClass("sr-rd-content-img-load"),a[0].clientWidth<300&&a[0].clientHeight<300?a.parent().removeClass("sr-rd-content-center").addClass("sr-rd-content-center-small"):a[0].clientWidth>1e3?a.css("zoom","0.6"):a[0].clientHeight>620&&/win|mac/i.test(navigator.platform)&&(a.attr("height",620),a[0].clientWidth<$("sr-rd-content").width()&&a.css({width:"auto"})),a[0].clientWidth>$("sr-rd-content").width()&&a.addClass("sr-rd-content-img")},h=function(){a.addClass("simpread-hidden"),a.parent().hasClass("sr-rd-content-center")&&a.parent().removeAttr("class").addClass("simpread-hidden")},f=void 0;r.parent()[0].tagName.toLowerCase(),f=s||n,f=i||f,f=o||f,f=l||f,f=u||f,!(f=c||f)||f.startsWith("http")||f.startsWith("data")||(f=function e(t,r){if("string"!=typeof t||!t)return null;if(t.match(/^[a-z]+\:\/\//i))return t;if(t.match(/^\/\//))return"http:"+t;if(t.match(/^[a-z]+\:/i))return t;var a;if("string"!=typeof r)return(a=document.createElement("a")).href=t,a.pathname?"http://"+t:null;if(null===(r=e(r)))return null;(a=document.createElement("a")).href=r,"/"===t[0]?r=[]:(r=a.pathname.split("/")).pop(),t=t.split("/");for(var n=0;n<t.length;++n)if("."!==t[n])if(".."===t[n]){if(void 0===r.pop()||0===r.length)return null}else r.push(t[n]);return a.protocol+"//"+a.hostname+r.join("/")}(f,location.href)),a.attr("src",f).replaceAll(r).wrap("<div class='sr-rd-content-center'></div>"),/win|mac/i.test(navigator.platform)?a.one("load",function(){return d()}).one("error",function(){return h()}):a.on("load",function(){return d()}).on("error",function(){return h()})}),t.find("sr-blockquote").map(function(t,r){var a=$(r),n=a.parent();a.removeAttr("style").removeAttr("class"),"dgtle.com"==e&&n.removeClass("quote")}),t.find("iframe:not(.sr-rd-content-nobeautify), embed:not(.sr-rd-content-nobeautify)").map(function(e,t){$(t).wrap("<div class='sr-rd-content-center'></div>")}),t.find("hr").map(function(e,t){$(t).addClass("simpread-hidden")}),t.find("pre").map(function(e,t){$(t).find("code").removeAttr("class")}),t.find("pre").removeAttr("class"),t.find("a").removeAttr("style"),t.find("sr-blocks").map(function(e,t){t.outerHTML=$(te[e]).addClass("simpread-blocks")[0].outerHTML})},cleanHTML:function(e,t,r){t&&e.find(".crayon-syntax .crayon-plain-wrap textarea").map(function(e,t){$(t).parent().parent().replaceWith('<pre class="sr-rd-content-nobeautify">'+t.innerHTML+"</pre>")}),t&&e.find(".syntaxhighlighter").map(function(e,t){var r="";$(t).find(".container div").map(function(e,t){r+=t.innerText+"\n"}),$(t).replaceWith('<pre class="sr-rd-content-nobeautify">'+r+"</pre>")}),t&&e.find("pre:not(.sr-rd-content-nobeautify)").each(function(e,t){var r="",a=!1,n=!1;$(t).find("li").each(function(e,t){$(t).find("code").length>0&&(a=!0),""!=t.outerText.trim()&&(r+=t.outerText.replace(/\n/gi,"").replace(/</gi,"<").replace(/>/gi,">")+"\n")}),0==a&&$(t).find("code").each(function(e,t){n=!0,""!=t.outerText.trim()&&(r+=t.outerText.replace(/</gi,"<").replace(/>/gi,">")+"\n")}),a||n||(r+=t.outerText.replace(/</gi,"<").replace(/>/gi,">")+"\n"),$(t).removeAttr("style").removeAttr("class").removeAttr("id").html(r)});var a,n,i=e.html();"readability-page-1"==$(e.children()).attr("id")&&1==e.children().children().length?i=e.children().children().html():1==e.children().length&&(i=e.children().html()),i=i.replace(/<!--[\S ]+-->/gi,""),e.html((a=i,n="",$.parseHTML(a).forEach(function(e,a){var i=e.tagName,o=e.outerText,s=e.outerHTML;void 0==i?n+="<p>"+e.textContent.replace(/</gi,"<").replace(/>/gi,">").replace(/^\n|\n$/gi,"").trim()+"</p>":"PRE"==i?n+=s:"sr-blocks"==i.toLowerCase()?n+=s:(""!=o||s.includes("<img"))&&(n+=t&&0==r?s.replace(/ (style|id|class)="[\w ;%@#!-:(),\u4e00-\u9fa5]*"/gi,""):s)}),n)),t&&e.find("p").each(function(e,t){t.tagName;var r=t.outerText,a=t.outerHTML;""!=r.trim()||a.includes("<img")||(t.outerText="")})}}),ae="background-color",ne=".simpread-focus-root",ie="-1";function oe(e){var t=e?e.match(/[0-9]+, /gi):[];return t.length>0?t.join("").replace(/, $/,""):null}function se(e,t){var r=Object.keys(t).map(function(e){return t[e]&&e.replace(/[A-Z]/,function(e){return"-"+e.toLowerCase()})+": "+t[e]+";"}).join("");switch(e){case"title":r="sr-rd-title {"+r+"}";break;case"desc":r="sr-rd-desc {"+r+"}";break;case"art":r="sr-rd-content *, sr-rd-content p, sr-rd-content div {"+r+"}";break;case"pre":r="sr-rd-content pre {"+r+"}";break;case"code":r="sr-rd-content pre code, sr-rd-content pre code * {"+r+"}"}var a=$("head").find("style#simpread-custom-"+e);0==a.length?$("head").append('<style type="text/css" id="simpread-custom-'+e+'">'+r+"</style>"):a.html(r)}function le(e,t){var r=$("head").find("style#simpread-custom-"+e);0==r.length?$("head").append('<style type="text/css" id="simpread-custom-'+e+'">'+t+"</style>"):r.html(t)}var ce=Object.freeze({GetColor:oe,BgColor:function(e,t){var r="rgba("+oe(e)+", "+t/100+")";return $(ne).css(ae,r),r},Opacity:function(e){var t=oe($(ne).css(ae)),r="rgba("+t+", "+e/100+")";return t?($(ne).css(ae,r),r):null},FontFamily:function(e){$("sr-read").css("font-family","default"==e?"":e)},FontSize:function(e){"-1"==ie&&void 0==(ie=$("html").attr("style"))&&(ie=""),e?$("html").attr("style","font-size: "+e+"!important;"+ie):$("html").attr("style",ie)},Layout:function(e){$("sr-read").css("margin",e?"20px "+e:"")},SiteCSS:function(e){e?$("head").append('<style type="text/css" id="simpread-site-css">'+e+"</style>"):$("#simpread-site-css").remove()},Preview:function(e){Object.keys(e).forEach(function(t){"css"!=t&&se(t,e[t])}),le("css",e.css)},Custom:se,CSS:le,VerifyCustom:function(e,t){switch(e){case"layout":case"margin":case"fontfamily":case"custom":return""!=t.css;case"fontsize":return""!=t.title.fontSize||""!=t.desc.fontSize||""!=t.art.fontSize||""!=t.css;case"theme":return-1!=t.css.search("simpread-theme-root")}}});function ue(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");var r;t=t||{},this._doc=e,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._wrap=null,this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug?(r=function(e){var t=e.nodeName+" ";if(e.nodeType==e.TEXT_NODE)return t+'("'+e.textContent+'")';var r=e.className&&"."+e.className.replace(/ /g,"."),a="";return e.id?a="(#"+e.id+r+")":r&&(a="("+r+")"),t+a},this.log=function(){if("undefined"!=typeof dump){var e=Array.prototype.map.call(arguments,function(e){return e&&e.nodeName?r(e):e}).join(" ");dump("Reader: (Readability) "+e+"\n")}else if("undefined"!=typeof console)["Reader: (Readability) "].concat(arguments)}):this.log=function(){}}ue.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,whitespace:/^\s*$/,hasContent:/\S$/},DIV_TO_P_ELEMS:["A","BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL","SELECT"],ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],_postProcessContent:function(e){this._fixRelativeUris(e),this._cleanClasses(e)},_removeNodes:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r],n=a.parentNode;n&&(t&&!t.call(this,a,r,e)||n.removeChild(a))}},_replaceNodeTags:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r];this._setNodeTag(a,t)}},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map(function(t){return e.call(t)});return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(t){var r=e.getElementsByTagName(t);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,r=(e.getAttribute("class")||"").split(/\s+/).filter(function(e){return-1!=t.indexOf(e)}).join(" ");for(r?e.setAttribute("class",r):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,r=this._doc.documentURI;function a(e){if(t==r&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var n=this._getAllNodesWithTag(e,["a"]);this._forEachNode(n,function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:")){var r=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",a(t))});var i=this._getAllNodesWithTag(e,["img"]);this._forEachNode(i,function(e){var t=e.getAttribute("src");t&&e.setAttribute("src",a(t))})},_getArticleTitle:function(){var e=this._doc,t="",r="";try{"string"!=typeof(t=r=e.title.trim())&&(t=r=this._getInnerText(e.getElementsByTagName("title")[0]))}catch(e){}var a=!1;function n(e){return e.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))a=/ [\\\/>»] /.test(t),n(t=r.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"))<3&&(t=r.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var i=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),o=t.trim();this._someNode(i,function(e){return e.textContent.trim()===o})||(n(t=r.substring(r.lastIndexOf(":")+1))<3?t=r.substring(r.indexOf(":")+1):n(r.substr(0,r.indexOf(":")))>5&&(t=r))}else if(t.length>150||t.length<15){var s=e.getElementsByTagName("h1");1===s.length&&(t=this._getInnerText(s[0]))}var l=n(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!a||l!=n(r.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=r),t},_prepDocument:function(){var e=this._doc;this._removeNodes(e.getElementsByTagName("style")),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(e.getElementsByTagName("font"),"SPAN")},_nextElement:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){for(var t=e.nextSibling,r=!1;(t=this._nextElement(t))&&"BR"==t.tagName;){r=!0;var a=t.nextSibling;t.parentNode.removeChild(t),t=a}if(r){var n=this._doc.createElement("p");for(e.parentNode.replaceChild(n,e),t=n.nextSibling;t;){if("BR"==t.tagName){var i=this._nextElement(t.nextSibling);if(i&&"BR"==i.tagName)break}if(!this._isPhrasingContent(t))break;var o=t.nextSibling;n.appendChild(t),t=o}for(;n.lastChild&&this._isWhitespace(n.lastChild);)n.removeChild(n.lastChild);"P"===n.parentNode.tagName&&this._setNodeTag(n.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),e.__JSDOMParser__)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var r=e.ownerDocument.createElement(t);e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e),e.readability&&(r.readability=e.readability);for(var a=0;a<e.attributes.length;a++)try{r.setAttribute(e.attributes[a].name,e.attributes[a].value)}catch(e){}return r},_prepArticle:function(e){this._cleanStyles(e),this._markDataTables(e),this._cleanConditionally(e,"form"),this._cleanConditionally(e,"fieldset"),this._clean(e,"object"),this._clean(e,"embed"),this._clean(e,"h1"),this._clean(e,"footer"),this._clean(e,"link"),this._clean(e,"aside");var t=this.DEFAULT_CHAR_THRESHOLD;this._forEachNode(e.children,function(e){this._cleanMatchedNodes(e,function(e,r){return/share/.test(r)&&e.textContent.length<t})});var r=e.getElementsByTagName("h2");if(1===r.length){var a=(r[0].textContent.length-this._articleTitle.length)/this._articleTitle.length;if(Math.abs(a)<.5){(a>0?r[0].textContent.includes(this._articleTitle):this._articleTitle.includes(r[0].textContent))&&this._clean(e,"h2")}}this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._removeNodes(e.getElementsByTagName("p"),function(e){return 0===e.getElementsByTagName("img").length+e.getElementsByTagName("embed").length+e.getElementsByTagName("object").length+e.getElementsByTagName("iframe").length&&!this._getInnerText(e,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){var t=this._nextElement(e.nextSibling);t&&"P"==t.tagName&&e.parentNode.removeChild(e)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(e){var t=this._hasSingleTagInsideElement(e,"TBODY")?e.firstElementChild:e;if(this._hasSingleTagInsideElement(t,"TR")){var r=t.firstElementChild;if(this._hasSingleTagInsideElement(r,"TD")){var a=r.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),e.parentNode.replaceChild(a,e)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do{e=e.parentNode}while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var r=e.getAttribute("rel"),a=e.getAttribute("itemprop");return!(!("author"===r||a&&-1!==a.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var r=0,a=[];e.parentNode&&(a.push(e.parentNode),!t||++r!==t);)e=e.parentNode;return a},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,r=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var a=e.innerHTML;;){for(var n=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),i=[],o=this._doc.documentElement;o;){var s=o.className+" "+o.id;if(this._isProbablyVisible(o))if(this._checkByline(o,s))o=this._removeAndGetNext(o);else if(!n||!this.REGEXPS.unlikelyCandidates.test(s)||this.REGEXPS.okMaybeItsACandidate.test(s)||this._hasAncestorTag(o,"table")||"BODY"===o.tagName||"A"===o.tagName)if("DIV"!==o.tagName&&"SECTION"!==o.tagName&&"HEADER"!==o.tagName&&"H1"!==o.tagName&&"H2"!==o.tagName&&"H3"!==o.tagName&&"H4"!==o.tagName&&"H5"!==o.tagName&&"H6"!==o.tagName||!this._isElementWithoutContent(o)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(o.tagName)&&i.push(o),"DIV"===o.tagName){for(var l=null,c=o.firstChild;c;){var u=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),o.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=u}if(this._hasSingleTagInsideElement(o,"P")&&this._getLinkDensity(o)<.25){var d=o.children[0];o.parentNode.replaceChild(d,o),o=d,i.push(o)}else this._hasChildBlockElement(o)||(o=this._setNodeTag(o,"P"),i.push(o))}o=this._getNextNode(o)}else o=this._removeAndGetNext(o);else this.log("Removing unlikely candidate - "+s),o=this._removeAndGetNext(o);else this.log("Removing hidden node - "+s),o=this._removeAndGetNext(o)}var h=[];this._forEachNode(i,function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var r=this._getNodeAncestors(e,3);if(0!==r.length){var a=0;a+=1,a+=t.split(",").length,a+=Math.min(Math.floor(t.length/100),3),this._forEachNode(r,function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),h.push(e)),0===t)var r=1;else r=1===t?2:3*t;e.readability.contentScore+=a/r}})}}}});for(var f=[],p=0,g=h.length;p<g;p+=1){var m=h[p],_=m.readability.contentScore*(1-this._getLinkDensity(m));m.readability.contentScore=_,this.log("Candidate:",m,"with score "+_);for(var b=0;b<this._nbTopCandidates;b++){var v=f[b];if(!v||_>v.readability.contentScore){f.splice(b,0,m),f.length>this._nbTopCandidates&&f.pop();break}}}var w,y=f[0]||null,k=!1;if(null===y||"BODY"===y.tagName){y=t.createElement("DIV"),k=!0;for(var E=e.childNodes;E.length;)this.log("Moving child out:",E[0]),y.appendChild(E[0]);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],x=1;x<f.length;x++)f[x].readability.contentScore/y.readability.contentScore>=.75&&T.push(this._getNodeAncestors(f[x]));if(T.length>=3)for(w=y.parentNode;"BODY"!==w.tagName;){for(var N=0,C=0;C<T.length&&N<3;C++)N+=Number(T[C].includes(w));if(N>=3){y=w;break}w=w.parentNode}y.readability||this._initializeNode(y),w=y.parentNode;for(var A=y.readability.contentScore,S=A/3;"BODY"!==w.tagName;)if(w.readability){var P=w.readability.contentScore;if(P<S)break;if(P>A){y=w;break}A=w.readability.contentScore,w=w.parentNode}else w=w.parentNode;for(w=y.parentNode;"BODY"!=w.tagName&&1==w.children.length;)w=(y=w).parentNode;y.readability||this._initializeNode(y)}var L=t.createElement("DIV");r&&(L.id="readability-content");for(var j=Math.max(10,.2*y.readability.contentScore),z=(w=y.parentNode).children,M=0,$=z.length;M<$;M++){var B=z[M],I=!1;if(this.log("Looking at sibling node:",B,B.readability?"with score "+B.readability.contentScore:""),this.log("Sibling has score",B.readability?B.readability.contentScore:"Unknown"),B===y)I=!0;else{var O=0;if(B.className===y.className&&""!==y.className&&(O+=.2*y.readability.contentScore),B.readability&&B.readability.contentScore+O>=j)I=!0;else if("P"===B.nodeName){var H=this._getLinkDensity(B),R=this._getInnerText(B),D=R.length;D>80&&H<.25?I=!0:D<80&&D>0&&0===H&&-1!==R.search(/\.( |$)/)&&(I=!0)}}I&&(this.log("Appending node:",B),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(B.nodeName)&&(this.log("Altering sibling:",B,"to div."),B=this._setNodeTag(B,"DIV")),L.appendChild(B),M-=1,$-=1)}if(this._debug&&this.log("Article content pre-prep: "+L.innerHTML),this._prepArticle(L),this._debug&&this.log("Article content post-prep: "+L.innerHTML),k)y.id="readability-page-1",y.className="page";else{var G=t.createElement("DIV");G.id="readability-page-1",G.className="page";var q=L.childNodes;for(this._wrap=L.childNodes[0].outerHTML.replace(L.childNodes[0].innerHTML,"");q.length;)G.appendChild(q[0]);L.appendChild(G)}this._debug&&this.log("Article content after paging: "+L.innerHTML);var U=!0,F=this._getInnerText(L,!0).length;if(F<this._charThreshold)if(U=!1,e.innerHTML=a,this._flagIsActive(this.FLAG_STRIP_UNLIKELYS))this._removeFlag(this.FLAG_STRIP_UNLIKELYS),this._attempts.push({articleContent:L,textLength:F});else if(this._flagIsActive(this.FLAG_WEIGHT_CLASSES))this._removeFlag(this.FLAG_WEIGHT_CLASSES),this._attempts.push({articleContent:L,textLength:F});else if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY))this._removeFlag(this.FLAG_CLEAN_CONDITIONALLY),this._attempts.push({articleContent:L,textLength:F});else{if(this._attempts.push({articleContent:L,textLength:F}),this._attempts.sort(function(e,t){return t.textLength-e.textLength}),!this._attempts[0].textLength)return null;L=this._attempts[0].articleContent,U=!0}if(U){var V=[w,y].concat(this._getNodeAncestors(w));return this._someNode(V,function(e){if(!e.tagName)return!1;var t=e.getAttribute("dir");return!!t&&(this._articleDir=t,!0)}),L}}},_isValidByline:function(e){return("string"==typeof e||e instanceof String)&&((e=e.trim()).length>0&&e.length<100)},_getArticleMetadata:function(){var e={},t={},r=this._doc.getElementsByTagName("meta"),a=/\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi,n=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(e){var r=e.getAttribute("name"),i=e.getAttribute("property"),o=e.getAttribute("content");if(o){var s=null,l=null;if(i&&(s=i.match(a)))for(var c=s.length-1;c>=0;c--)l=s[c].toLowerCase().replace(/\s/g,""),t[l]=o.trim();!s&&r&&n.test(r)&&(l=r,o&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),t[l]=o.trim()))}}),e.title=t["dc:title"]||t["dcterm:title"]||t["og:title"]||t["weibo:article:title"]||t["weibo:webpage:title"]||t.title||t["twitter:title"],e.title||(e.title=this._getArticleTitle()),e.byline=t["dc:creator"]||t["dcterm:creator"]||t.author,e.excerpt=t["dc:description"]||t["dcterm:description"]||t["og:description"]||t["weibo:article:description"]||t["weibo:webpage:description"]||t.description||t["twitter:description"],e.siteName=t["og:site_name"],e},_removeScripts:function(e){this._removeNodes(e.getElementsByTagName("script"),function(e){return e.nodeValue="",e.removeAttribute("src"),!0}),this._removeNodes(e.getElementsByTagName("noscript"))},_hasSingleTagInsideElement:function(e,t){return 1==e.children.length&&e.children[0].tagName===t&&!this._someNode(e.childNodes,function(e){return e.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(e.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&0==e.textContent.trim().length&&(0==e.children.length||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(e){return-1!==this.DIV_TO_P_ELEMS.indexOf(e.tagName)||this._hasChildBlockElement(e)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||-1!==this.PHRASING_ELEMS.indexOf(e.tagName)||("A"===e.tagName||"DEL"===e.tagName||"INS"===e.tagName)&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&0===e.textContent.trim().length||e.nodeType===this.ELEMENT_NODE&&"BR"===e.tagName},_getInnerText:function(e,t){t=void 0===t||t;var r=e.textContent.trim();return t?r.replace(this.REGEXPS.normalize," "):r},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(e&&"svg"!==e.tagName.toLowerCase()){for(var t=0;t<this.PRESENTATIONAL_ATTRIBUTES.length;t++)e.removeAttribute(this.PRESENTATIONAL_ATTRIBUTES[t]);-1!==this.DEPRECATED_SIZE_ATTRIBUTE_ELEMS.indexOf(e.tagName)&&(e.removeAttribute("width"),e.removeAttribute("height"));for(var r=e.firstElementChild;null!==r;)this._cleanStyles(r),r=r.nextElementSibling}},_getLinkDensity:function(e){var t=this._getInnerText(e).length;if(0===t)return 0;var r=0;return this._forEachNode(e.getElementsByTagName("a"),function(e){r+=this._getInnerText(e).length}),r/t},_getClassWeight:function(e){if(!this._flagIsActive(this.FLAG_WEIGHT_CLASSES))return 0;var t=0;return"string"==typeof e.className&&""!==e.className&&(this.REGEXPS.negative.test(e.className)&&(t-=25),this.REGEXPS.positive.test(e.className)&&(t+=25)),"string"==typeof e.id&&""!==e.id&&(this.REGEXPS.negative.test(e.id)&&(t-=25),this.REGEXPS.positive.test(e.id)&&(t+=25)),t},_clean:function(e,t){var r=-1!==["object","embed","iframe"].indexOf(t);this._removeNodes(e.getElementsByTagName(t),function(e){if(r){for(var t=0;t<e.attributes.length;t++)if(this.REGEXPS.videos.test(e.attributes[t].value))return!1;if("object"===e.tagName&&this.REGEXPS.videos.test(e.innerHTML))return!1}return!0})},_hasAncestorTag:function(e,t,r,a){r=r||3,t=t.toUpperCase();for(var n=0;e.parentNode;){if(r>0&&n>r)return!1;if(e.parentNode.tagName===t&&(!a||a(e.parentNode)))return!0;e=e.parentNode,n++}return!1},_getRowAndColumnCount:function(e){for(var t=0,r=0,a=e.getElementsByTagName("tr"),n=0;n<a.length;n++){var i=a[n].getAttribute("rowspan")||0;i&&(i=parseInt(i,10)),t+=i||1;for(var o=0,s=a[n].getElementsByTagName("td"),l=0;l<s.length;l++){var c=s[l].getAttribute("colspan")||0;c&&(c=parseInt(c,10)),o+=c||1}r=Math.max(r,o)}return{rows:t,columns:r}},_markDataTables:function(e){for(var t=e.getElementsByTagName("table"),r=0;r<t.length;r++){var a=t[r];if("presentation"!=a.getAttribute("role"))if("0"!=a.getAttribute("datatable"))if(a.getAttribute("summary"))a._readabilityDataTable=!0;else{var n=a.getElementsByTagName("caption")[0];if(n&&n.childNodes.length>0)a._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some(function(e){return!!a.getElementsByTagName(e)[0]}))this.log("Data table because found data-y descendant"),a._readabilityDataTable=!0;else if(a.getElementsByTagName("table")[0])a._readabilityDataTable=!1;else{var i=this._getRowAndColumnCount(a);i.rows>=10||i.columns>4?a._readabilityDataTable=!0:a._readabilityDataTable=i.rows*i.columns>10}}}else a._readabilityDataTable=!1;else a._readabilityDataTable=!1}},_cleanConditionally:function(e,t){if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)){var r="ul"===t||"ol"===t;this._removeNodes(e.getElementsByTagName(t),function(e){var a=function(e){return e._readabilityDataTable};if("table"===t&&a(e))return!1;if(this._hasAncestorTag(e,"table",-1,a))return!1;var n=this._getClassWeight(e);if(this.log("Cleaning Conditionally",e),n+0<0)return!0;if(this._getCharCount(e,",")<10){for(var i=e.getElementsByTagName("p").length,o=e.getElementsByTagName("img").length,s=e.getElementsByTagName("li").length-100,l=e.getElementsByTagName("input").length,c=0,u=this._concatNodeLists(e.getElementsByTagName("object"),e.getElementsByTagName("embed"),e.getElementsByTagName("iframe")),d=0;d<u.length;d++){for(var h=0;h<u[d].attributes.length;h++)if(this.REGEXPS.videos.test(u[d].attributes[h].value))return!1;if("object"===u[d].tagName&&this.REGEXPS.videos.test(u[d].innerHTML))return!1;c++}var f=this._getLinkDensity(e),p=this._getInnerText(e).length;return o>1&&i/o<.5&&!this._hasAncestorTag(e,"figure")||!r&&s>i||l>Math.floor(i/3)||!r&&p<25&&(0===o||o>2)&&!this._hasAncestorTag(e,"figure")||!r&&n<25&&f>.2||n>=25&&f>.5||1===c&&p<75||c>1}return!1})}},_cleanMatchedNodes:function(e,t){for(var r=this._getNextNode(e,!0),a=this._getNextNode(e);a&&a!=r;)a=t(a,a.className+" "+a.id)?this._removeAndGetNext(a):this._getNextNode(a)},_cleanHeaders:function(e){for(var t=1;t<3;t+=1)this._removeNodes(e.getElementsByTagName("h"+t),function(e){return this._getClassWeight(e)<0})},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return!(e.style&&"none"==e.style.display||e.hasAttribute("hidden"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._removeScripts(this._doc),this._prepDocument();var t=this._getArticleMetadata();this._articleTitle=t.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!t.excerpt){var a=r.getElementsByTagName("p");a.length>0&&(t.excerpt=a[0].textContent.trim())}var n=r.textContent;return{title:this._articleTitle,byline:t.byline||this._articleByline,dir:this._articleDir,content:r.innerHTML,wrap:this._wrap,textContent:n,length:n.length,excerpt:t.excerpt,siteName:t.siteName||this._articleSiteName}}};var de=Object.freeze({Readability:ue}),he=r(function(e){(function(){function t(e){var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as <br> (GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex: <div>foo</div>",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var a in t)t.hasOwnProperty(a)&&(r[a]=t[a].defaultValue);return r}function r(e,t){var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var o=0;o<e.length;++o){var s=r+" sub-extension "+o+": ",l=e[o];if("object"!=(void 0===l?"undefined":a(l)))return n.valid=!1,n.error=s+"must be an object, but "+(void 0===l?"undefined":a(l))+" given",n;if(!i.helper.isString(l.type))return n.valid=!1,n.error=s+'property "type" must be a string, but '+a(l.type)+" given",n;var c=l.type=l.type.toLowerCase();if("language"===c&&(c=l.type="lang"),"html"===c&&(c=l.type="output"),"lang"!==c&&"output"!==c&&"listener"!==c)return n.valid=!1,n.error=s+"type "+c+' is not recognized. Valid values: "lang/language", "output/html" or "listener"',n;if("listener"===c){if(i.helper.isUndefined(l.listeners))return n.valid=!1,n.error=s+'. Extensions of type "listener" must have a property called "listeners"',n}else if(i.helper.isUndefined(l.filter)&&i.helper.isUndefined(l.regex))return n.valid=!1,n.error=s+c+' extensions must define either a "regex" property or a "filter" method',n;if(l.listeners){if("object"!=a(l.listeners))return n.valid=!1,n.error=s+'"listeners" property must be an object but '+a(l.listeners)+" given",n;for(var u in l.listeners)if(l.listeners.hasOwnProperty(u)&&"function"!=typeof l.listeners[u])return n.valid=!1,n.error=s+'"listeners" property must be an hash of [event name]: [callback]. listeners.'+u+" must be a function but "+a(l.listeners[u])+" given",n}if(l.filter){if("function"!=typeof l.filter)return n.valid=!1,n.error=s+'"filter" must be a function, but '+a(l.filter)+" given",n}else if(l.regex){if(i.helper.isString(l.regex)&&(l.regex=new RegExp(l.regex,"g")),!(l.regex instanceof RegExp))return n.valid=!1,n.error=s+'"regex" property must either be a string or a RegExp object, but '+a(l.regex)+" given",n;if(i.helper.isUndefined(l.replace))return n.valid=!1,n.error=s+'"regex" extensions must implement a replace string or function',n}}return n}function n(e,t){return"¨E"+t.charCodeAt(0)+"E"}var i={},o={},s={},l=t(!0),c="vanilla",u={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:t(!0),allOn:function(){var e=t(!0),r={};for(var a in e)e.hasOwnProperty(a)&&(r[a]=!0);return r}()};i.helper={},i.extensions={},i.setOption=function(e,t){return l[e]=t,this},i.getOption=function(e){return l[e]},i.getOptions=function(){return l},i.resetOptions=function(){l=t(!0)},i.setFlavor=function(e){if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");i.resetOptions();var t=u[e];for(var r in c=e,t)t.hasOwnProperty(r)&&(l[r]=t[r])},i.getFlavor=function(){return c},i.getFlavorOptions=function(e){if(u.hasOwnProperty(e))return u[e]},i.getDefaultOptions=function(e){return t(e)},i.subParser=function(e,t){if(i.helper.isString(e)){if(void 0===t){if(o.hasOwnProperty(e))return o[e];throw Error("SubParser named "+e+" not registered!")}o[e]=t}},i.extension=function(e,t){if(!i.helper.isString(e))throw Error("Extension 'name' must be a string");if(e=i.helper.stdExtName(e),i.helper.isUndefined(t)){if(!s.hasOwnProperty(e))throw Error("Extension named "+e+" is not registered!");return s[e]}"function"==typeof t&&(t=t()),i.helper.isArray(t)||(t=[t]);var a=r(t,e);if(!a.valid)throw Error(a.error);s[e]=t},i.getAllExtensions=function(){return s},i.removeExtension=function(e){delete s[e]},i.resetExtensions=function(){s={}},i.validateExtension=function(e){var t=r(e,null);return!!t.valid||!1},i.hasOwnProperty("helper")||(i.helper={}),i.helper.isString=function(e){return"string"==typeof e||e instanceof String},i.helper.isFunction=function(e){return e&&"[object Function]"==={}.toString.call(e)},i.helper.isArray=function(e){return Array.isArray(e)},i.helper.isUndefined=function(e){return void 0===e},i.helper.forEach=function(e,t){if(i.helper.isUndefined(e))throw new Error("obj param is required");if(i.helper.isUndefined(t))throw new Error("callback param is required");if(!i.helper.isFunction(t))throw new Error("callback param must be a function/closure");if("function"==typeof e.forEach)e.forEach(t);else if(i.helper.isArray(e))for(var r=0;r<e.length;r++)t(e[r],r,e);else{if("object"!=(void 0===e?"undefined":a(e)))throw new Error("obj does not seem to be an array or an iterable object");for(var n in e)e.hasOwnProperty(n)&&t(e[n],n,e)}},i.helper.stdExtName=function(e){return e.replace(/[_?*+\/\\.^-]/g,"").replace(/\s/g,"").toLowerCase()},i.helper.escapeCharactersCallback=n,i.helper.escapeCharacters=function(e,t,r){var a="(["+t.replace(/([\[\]\\])/g,"\\$1")+"])";r&&(a="\\\\"+a);var i=new RegExp(a,"g");return e.replace(i,n)},i.helper.unescapeHTMLEntities=function(e){return e.replace(/"/g,'"').replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")};var d=function(e,t,r,a){var n,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),h=new RegExp(t,c.replace(/g/g,"")),f=[];do{for(n=0;o=d.exec(e);)if(h.test(o[0]))n++||(s=(i=d.lastIndex)-o[0].length);else if(n&&!--n){l=o.index+o[0].length;var p={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(f.push(p),!u)return f}}while(n&&(d.lastIndex=i));return f};i.helper.matchRecursiveRegExp=function(e,t,r,a){for(var n=d(e,t,r,a),i=[],o=0;o<n.length;++o)i.push([e.slice(n[o].wholeMatch.start,n[o].wholeMatch.end),e.slice(n[o].match.start,n[o].match.end),e.slice(n[o].left.start,n[o].left.end),e.slice(n[o].right.start,n[o].right.end)]);return i},i.helper.replaceRecursiveRegExp=function(e,t,r,a,n){if(!i.helper.isFunction(t)){var o=t;t=function(){return o}}var s=d(e,r,a,n),l=e,c=s.length;if(c>0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var h=0;h<c;++h)u.push(t(e.slice(s[h].wholeMatch.start,s[h].wholeMatch.end),e.slice(s[h].match.start,s[h].match.end),e.slice(s[h].left.start,s[h].left.end),e.slice(s[h].right.start,s[h].right.end))),h<c-1&&u.push(e.slice(s[h].wholeMatch.end,s[h+1].wholeMatch.start));s[c-1].wholeMatch.end<e.length&&u.push(e.slice(s[c-1].wholeMatch.end)),l=u.join("")}return l},i.helper.regexIndexOf=function(e,t,r){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";if(t instanceof RegExp==0)throw"InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp";var a=e.substring(r||0).search(t);return a>=0?a+(r||0):a},i.helper.splitAtIndex=function(e,t){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},i.helper.padEnd=function(e,t,r){return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){alert(e)},log:function(e){alert(e)},error:function(e){throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:'<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">',showdown:"<span style=\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>"},i.Converter=function(e){function t(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return void function(e,t){"function"==typeof e&&(e=e(new i.Converter)),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var n=0;n<e.length;++n)switch(e[n].type){case"lang":d.push(e[n]);break;case"output":h.push(e[n]);break;default:throw Error("Extension loader error: Type unrecognized!!!")}}(i.extensions[e],e);if(i.helper.isUndefined(s[e]))throw Error('Extension "'+e+'" could not be loaded. It was either not found or is not a valid extension.');e=s[e]}"function"==typeof e&&(e=e()),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var o=0;o<e.length;++o){switch(e[o].type){case"lang":d.push(e[o]);break;case"output":h.push(e[o])}if(e[o].hasOwnProperty("listeners"))for(var l in e[o].listeners)e[o].listeners.hasOwnProperty(l)&&n(l,e[o].listeners[l])}}function n(e,t){if(!i.helper.isString(e))throw Error("Invalid argument in converter.listen() method: name must be a string, but "+(void 0===e?"undefined":a(e))+" given");if("function"!=typeof t)throw Error("Invalid argument in converter.listen() method: callback must be a function, but "+(void 0===t?"undefined":a(t))+" given");f.hasOwnProperty(e)||(f[e]=[]),f[e].push(t)}var o={},d=[],h=[],f={},p=c,g={parsed:{},raw:"",format:""};!function(){for(var r in e=e||{},l)l.hasOwnProperty(r)&&(o[r]=l[r]);if("object"!=(void 0===e?"undefined":a(e)))throw Error("Converter expects the passed parameter to be an object, but "+(void 0===e?"undefined":a(e))+" was passed instead.");for(var n in e)e.hasOwnProperty(n)&&(o[n]=e[n]);o.extensions&&i.helper.forEach(o.extensions,t)}(),this._dispatch=function(e,t,r,a){if(f.hasOwnProperty(e))for(var n=0;n<f[e].length;++n){var i=f[e][n](e,t,this,r,a);i&&void 0!==i&&(t=i)}return t},this.listen=function(e,t){return n(e,t),this},this.makeHtml=function(e){if(!e)return e;var t={gHtmlBlocks:[],gHtmlMdBlocks:[],gHtmlSpans:[],gUrls:{},gTitles:{},gDimensions:{},gListLevel:0,hashLinkCounts:{},langExtensions:d,outputModifiers:h,converter:this,ghCodeBlocks:[],metadata:{parsed:{},raw:"",format:""}};return e=(e=(e=(e=(e=e.replace(/¨/g,"¨T")).replace(/\$/g,"¨D")).replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/\u00A0/g," "),o.smartIndentationFix&&(e=function(e){var t=e.match(/^\s*/)[0].length,r=new RegExp("^\\s{0,"+t+"}","gm");return e.replace(r,"")}(e)),e="\n\n"+e+"\n\n",e=(e=i.subParser("detab")(e,o,t)).replace(/^[ \t]+$/gm,""),i.helper.forEach(d,function(r){e=i.subParser("runExtension")(r,e,o,t)}),e=i.subParser("metadata")(e,o,t),e=i.subParser("hashPreCodeTags")(e,o,t),e=i.subParser("githubCodeBlocks")(e,o,t),e=i.subParser("hashHTMLBlocks")(e,o,t),e=i.subParser("hashCodeTags")(e,o,t),e=i.subParser("stripLinkDefinitions")(e,o,t),e=i.subParser("blockGamut")(e,o,t),e=i.subParser("unhashHTMLSpans")(e,o,t),e=(e=(e=i.subParser("unescapeSpecialChars")(e,o,t)).replace(/¨D/g,"$$")).replace(/¨T/g,"¨"),e=i.subParser("completeHTMLDocument")(e,o,t),i.helper.forEach(h,function(r){e=i.subParser("runExtension")(r,e,o,t)}),g=t.metadata,e},this.makeMarkdown=this.makeMd=function(e,t){if(e=(e=(e=e.replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/>[ \t]+</,">¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],a=0;a<t.length;++a)if(1===t[a].childElementCount&&"code"===t[a].firstChild.tagName.toLowerCase()){var n=t[a].firstChild.innerHTML.trim(),o=t[a].firstChild.getAttribute("data-language")||"";if(""===o)for(var s=t[a].firstChild.className.split(" "),l=0;l<s.length;++l){var c=s[l].match(/^language-(.+)$/);if(null!==c){o=c[1];break}}n=i.helper.unescapeHTMLEntities(n),r.push(n),t[a].outerHTML='<precode language="'+o+'" precodenum="'+a.toString()+'"></precode>'}else r.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return r}(r)};!function e(t){for(var r=0;r<t.childNodes.length;++r){var a=t.childNodes[r];3===a.nodeType?/\S/.test(a.nodeValue)?(a.nodeValue=a.nodeValue.split("\n").join(" "),a.nodeValue=a.nodeValue.replace(/(\s)+/g,"$1")):(t.removeChild(a),--r):1===a.nodeType&&e(a)}}(r);for(var n=r.childNodes,o="",s=0;s<n.length;s++)o+=i.subParser("makeMarkdown.node")(n[s],a);return o},this.setOption=function(e,t){o[e]=t},this.getOption=function(e){return o[e]},this.getOptions=function(){return o},this.addExtension=function(e,r){t(e,r=r||null)},this.useExtension=function(e){t(e)},this.setFlavor=function(e){if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");var t=u[e];for(var r in p=e,t)t.hasOwnProperty(r)&&(o[r]=t[r])},this.getFlavor=function(){return p},this.removeExtension=function(e){i.helper.isArray(e)||(e=[e]);for(var t=0;t<e.length;++t){for(var r=e[t],a=0;a<d.length;++a)d[a]===r&&d[a].splice(a,1);for(;0<h.length;++a)h[0]===r&&h[0].splice(a,1)}},this.getAllExtensions=function(){return{language:d,output:h}},this.getMetadata=function(e){return e?g.raw:g.parsed},this.getMetadataFormat=function(){return g.format},this._setMetadataPair=function(e,t){g.parsed[e]=t},this._setMetadataFormat=function(e){g.format=e},this._setMetadataRaw=function(e){g.raw=e}},i.subParser("anchors",function(e,t,r){var a=function(e,a,n,o,s,l,c){if(i.helper.isUndefined(c)&&(c=""),n=n.toLowerCase(),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(n||(n=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,i.helper.isUndefined(r.gUrls[n]))return e;o=r.gUrls[n],i.helper.isUndefined(r.gTitles[n])||(c=r.gTitles[n])}var u='<a href="'+(o=o.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback))+'"';return""!==c&&null!==c&&(u+=' title="'+(c=(c=c.replace(/"/g,""")).replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback))+'"'),t.openLinksInNewWindow&&!/^#/.test(o)&&(u+=' target="¨E95Eblank"'),u+">"+a+"</a>"};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,a,n,o){if("\\"===a)return r+n;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'<a href="'+s+'"'+l+">"+n+"</a>"})),r.converter._dispatch("anchors.after",e,t,r)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,p=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,g=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,m=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,_=function(e){return function(t,r,a,n,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",h=r||"",f=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),h+'<a href="'+a+'"'+d+">"+c+"</a>"+u+f}},b=function(e,t){return function(r,a,n){var o="mailto:";return a=a||"",n=i.subParser("unescapeSpecialChars")(n,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+n),n=i.helper.encodeEmailAddress(n)):o+=n,a+'<a href="'+o+'">'+n+"</a>"}};i.subParser("autoLinks",function(e,t,r){return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(p,_(t))).replace(m,b(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),i.subParser("simplifiedAutoLinks",function(e,t,r){return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,_(t)):e.replace(h,_(t))).replace(g,b(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),i.subParser("blockGamut",function(e,t,r){return e=r.converter._dispatch("blockGamut.before",e,t,r),e=i.subParser("blockQuotes")(e,t,r),e=i.subParser("headers")(e,t,r),e=i.subParser("horizontalRule")(e,t,r),e=i.subParser("lists")(e,t,r),e=i.subParser("codeBlocks")(e,t,r),e=i.subParser("tables")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),i.subParser("blockQuotes",function(e,t,r){e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=i.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^ /gm,"¨0")).replace(/¨0/g,"")}),i.subParser("hashBlock")("<blockquote>\n"+e+"\n</blockquote>",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),i.subParser("codeBlocks",function(e,t,r){return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,a,n){var o=a,s=n,l="\n";return o=i.subParser("outdent")(o,t,r),o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="<pre><code>"+o+l+"</code></pre>",i.subParser("hashBlock")(o,t,r)+s})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),i.subParser("codeSpans",function(e,t,r){return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,a,n,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+"<code>"+(s=i.subParser("encodeCode")(s,t,r))+"</code>",i.subParser("hashHTMLSpans")(s,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),i.subParser("completeHTMLDocument",function(e,t,r){if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var a="html",n="<!DOCTYPE HTML>\n",i="",o='<meta charset="utf-8">\n',s="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(n="<!DOCTYPE "+r.metadata.parsed.doctype+">\n","html"!==(a=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='<meta charset="utf-8">')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i="<title>"+r.metadata.parsed.title+"\n";break;case"charset":o="html"===a||"html5"===a?'\n':'\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=n+"\n\n"+i+o+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),i.subParser("detab",function(e,t,r){return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,a=4-r.length%4,n=0;n/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),i.subParser("encodeBackslashEscapes",function(e,t,r){return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),i.subParser("encodeCode",function(e,t,r){return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),i.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),i.subParser("githubCodeBlocks",function(e,t,r){return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,a,n,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),o="
"+o+s+"
",o=i.subParser("hashBlock")(o,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),i.subParser("hashBlock",function(e,t,r){return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),i.subParser("hashCodeTags",function(e,t,r){return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=i.helper.replaceRecursiveRegExp(e,function(e,a,n,o){var s=n+i.subParser("encodeCode")(a,t,r)+o;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"},"]*>","","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),i.subParser("hashElement",function(e,t,r){return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"}}),i.subParser("hashHTMLBlocks",function(e,t,r){e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],n=function(e,t,a,n){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+r.converter.makeHtml(t)+n),"\n\n¨K"+(r.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var o=0;o]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),h=i.helper.replaceRecursiveRegExp(d[1],n,c,u,"im");if(h===d[1])break;e=d[0].concat(h)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),e=(e=i.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),i.subParser("hashHTMLSpans",function(e,t,r){function a(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return a(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<[^>]+?>/gi,function(e){return a(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),i.subParser("unhashHTMLSpans",function(e,t,r){e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var a=0;a]*>\\s*]*>","^ {0,3}\\s*","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),i.subParser("headers",function(e,t,r){function a(e){var a,n;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,n=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=n+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=n+a),r.hashLinkCounts[a]?a=a+"-"+r.hashLinkCounts[a]++:r.hashLinkCounts[a]=1,a}e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=""+s+"";return i.subParser("hashBlock")(c,t,r)})).replace(s,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=n+1,u=""+s+"";return i.subParser("hashBlock")(u,t,r)});var l=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return e=e.replace(l,function(e,o,s){var l=s;t.customizedHeaderId&&(l=s.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(l,t,r),u=t.noHeaderId?"":' id="'+a(s)+'"',d=n-1+o.length,h=""+c+"";return i.subParser("hashBlock")(h,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),i.subParser("horizontalRule",function(e,t,r){e=r.converter._dispatch("horizontalRule.before",e,t,r);var a=i.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),r.converter._dispatch("horizontalRule.after",e,t,r)}),i.subParser("images",function(e,t,r){function a(e,t,a,n,o,s,l,c){var u=r.gUrls,d=r.gTitles,h=r.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)n="";else if(""===n||null===n){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),n="#"+a,i.helper.isUndefined(u[a]))return e;n=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(h[a])||(o=h[a].width,s=h[a].height)}t=t.replace(/"/g,""").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var f=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,n,i,o,s,l){return a(e,t,r,n=n.replace(/\s/g,""),i,o,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),r.converter._dispatch("images.after",e,t,r)}),i.subParser("italicsAndBold",function(e,t,r){function a(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return a(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return a(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return a(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),i.subParser("lists",function(e,t,r){function a(e,a){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(n,function(e,a,n,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,r),h="";return c&&t.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,r),d=i.subParser("blockGamut")(d,t,r)):(d=(d=i.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,r):i.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function n(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function o(e,r,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),h=n(e,r);-1!==d?(c+="\n\n<"+r+h+">\n"+a(u.slice(0,d),!!i)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+r+h+">\n"+a(u,!!i)+"\n"}(e);else{var u=n(e,r);c="\n\n<"+r+u+">\n"+a(e,!!i)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return o(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,a){return o(r,a.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),i.subParser("metadata",function(e,t,r){function a(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,a){return r.metadata.parsed[t]=a,""})}return t.metadata?(e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return a(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,n){return t&&(r.metadata.format=t),a(n),"¨M"})).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)):e}),i.subParser("outdent",function(e,t,r){return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),i.subParser("paragraphs",function(e,t,r){for(var a=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),n=[],o=a.length,s=0;s=0?n.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",n.push(l))}for(o=n.length,s=0;s]*>\s*]*>/.test(u)&&(d=!0)}n[s]=u}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),i.subParser("runExtension",function(e,t,r,a){if(e.filter)t=e.filter(t,a.converter,r);else if(e.regex){var n=e.regex;n instanceof RegExp||(n=new RegExp(n,"g")),t=t.replace(n,e.replace)}return t}),i.subParser("spanGamut",function(e,t,r){return e=r.converter._dispatch("spanGamut.before",e,t,r),e=i.subParser("codeSpans")(e,t,r),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=i.subParser("encodeBackslashEscapes")(e,t,r),e=i.subParser("images")(e,t,r),e=i.subParser("anchors")(e,t,r),e=i.subParser("autoLinks")(e,t,r),e=i.subParser("simplifiedAutoLinks")(e,t,r),e=i.subParser("emoji")(e,t,r),e=i.subParser("underline")(e,t,r),e=i.subParser("italicsAndBold")(e,t,r),e=i.subParser("strikethrough")(e,t,r),e=i.subParser("ellipsis")(e,t,r),e=i.subParser("hashHTMLSpans")(e,t,r),e=i.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),i.subParser("strikethrough",function(e,t,r){return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(a)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),i.subParser("stripLinkDefinitions",function(e,t,r){var a=function(e,a,n,o,s,l,c){return a=a.toLowerCase(),n.match(/^data:.+?\/.+?;base64,/)?r.gUrls[a]=n.replace(/\s/g,""):r.gUrls[a]=i.subParser("encodeAmpsAndAngles")(n,t,r),l?l+c:(c&&(r.gTitles[a]=c.replace(/"|'/g,""")),t.parseImgDimensions&&o&&s&&(r.gDimensions[a]={width:o,height:s}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,a)).replace(/¨0/,"")}),i.subParser("tables",function(e,t,r){function a(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function n(e,a){var n="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(n=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),""+(e=i.subParser("spanGamut")(e,t,r))+"\n"}function o(e,a){return""+i.subParser("spanGamut")(e,t,r)+"\n"}function s(e){var s,l=e.split("\n");for(s=0;s\n\n\n",n=0;n\n";for(var i=0;i\n"}return r+"\n\n"}(h,p)}return t.tables?(e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,s),r.converter._dispatch("tables.after",e,t,r)):e}),i.subParser("underline",function(e,t,r){return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,i.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),i.subParser("unescapeSpecialChars",function(e,t,r){return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),i.subParser("makeMarkdown.blockquote",function(e,t){var r="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,o=0;o "+(r=r.trim()).split("\n").join("\n> ")}),i.subParser("makeMarkdown.codeBlock",function(e,t){var r=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[a]+"\n```"}),i.subParser("makeMarkdown.codeSpan",function(e){return"`"+e.innerHTML+"`"}),i.subParser("makeMarkdown.emphasis",function(e,t){var r="";if(e.hasChildNodes()){r+="*";for(var a=e.childNodes,n=a.length,o=0;o",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),i.subParser("makeMarkdown.links",function(e,t){var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,n=a.length;r="[";for(var o=0;o",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),i.subParser("makeMarkdown.list",function(e,t,r){var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,s=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),i.subParser("makeMarkdown.strikethrough",function(e,t){var r="";if(e.hasChildNodes()){r+="~~";for(var a=e.childNodes,n=a.length,o=0;otr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=g)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),e.exports?e.exports=i:this.showdown=i}).call(t)}),fe={pangu:n,minimatch:R,beautify:re,style:ce,rdability:de,markdown:Object.freeze({default:he,__moduleExports:he})};e.Plugin=function(e){return void 0==e?fe:fe[e]},Object.defineProperty(e,"__esModule",{value:!0})}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.puplugin={})}(this,function(e){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(e,t){return e(t={exports:{}},t.exports),t.exports}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=r(function(e,t){e.exports=function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n=function(){function e(e,t){for(var r=0;r=0||t.isContentEditable||"true"===t.getAttribute("g_editable"))return!0;t=t.parentNode}return!1}},{key:"isFirstTextChild",value:function(e,t){for(var r=e.childNodes,a=0;a-1;a--){var n=r[a];if(8!==n.nodeType&&n.textContent)return n===t}return!1}},{key:"spacingNodeByXPath",value:function(e,t){for(var r=document.evaluate(e,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),a=void 0,n=void 0,i=r.snapshotLength-1;i>-1;--i)if(a=r.snapshotItem(i),this.canIgnoreNode(a))n=a;else{var o=this.spacing(a.data);if(a.data!==o&&(a.data=o),n){if(a.nextSibling&&a.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}var s=a.data.toString().substr(-1)+n.data.toString().substr(0,1),l=this.spacing(s);if(l!==s){for(var c=n;c.parentNode&&-1===c.nodeName.search(this.spaceSensitiveTags)&&this.isFirstTextChild(c.parentNode,c);)c=c.parentNode;for(var u=a;u.parentNode&&-1===u.nodeName.search(this.spaceSensitiveTags)&&this.isLastTextChild(u.parentNode,u);)u=u.parentNode;if(u.nextSibling&&u.nextSibling.nodeName.search(this.spaceLikeTags)>=0){n=a;continue}if(-1===u.nodeName.search(this.blockTags))if(-1===c.nodeName.search(this.spaceSensitiveTags))-1===c.nodeName.search(this.ignoreTags)&&-1===c.nodeName.search(this.blockTags)&&(n.previousSibling?-1===n.previousSibling.nodeName.search(this.spaceLikeTags)&&(n.data=" "+n.data):this.canIgnoreNode(n)||(n.data=" "+n.data));else if(-1===u.nodeName.search(this.spaceSensitiveTags))a.data=a.data+" ";else{var d=document.createElement("pangu");d.innerHTML=" ",c.previousSibling?-1===c.previousSibling.nodeName.search(this.spaceLikeTags)&&c.parentNode.insertBefore(d,c):c.parentNode.insertBefore(d,c),d.previousElementSibling||d.parentNode&&d.parentNode.removeChild(d)}}}n=a}}},{key:"spacingNode",value:function(e){this.spacingNodeByXPath(".//*/text()[normalize-space(.)]",e)}},{key:"spacingElementById",value:function(e){var t='id("'+e+'")//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByClassName",value:function(e){var t='//*[contains(concat(" ", normalize-space(@class), " "), "'+e+'")]//text()';this.spacingNodeByXPath(t,document)}},{key:"spacingElementByTagName",value:function(e){var t="//"+e+"//text()";this.spacingNodeByXPath(t,document)}},{key:"spacingPageTitle",value:function(){this.spacingNodeByXPath("/html/head/title/text()",document)}},{key:"spacingPageBody",value:function(){for(var e="/html/body//*/text()[normalize-space(.)]",t=["script","style","textarea"],r=0;r])([A-Za-z0-9])/g,d=/([A-Za-z0-9])([\+\-\*\/=&\\|<>])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,h=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c]+(.*?)[\)\]\}>\u201d]+)([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,f=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([\(\[\{<\u201c>])/g,p=/([\)\]\}>\u201d<])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,g=/([\(\[\{<\u201c]+)(\s*)(.+?)(\s*)([\)\]\}>\u201d]+)/,m=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([~!;:,\.\?\u2026])([A-Za-z0-9])/g,_=/([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])([A-Za-z0-9`\$%\^&\*\-=\+\\\|\/@\u00a1-\u00ff\u2022\u2027\u2150-\u218f])/g,b=/([A-Za-z0-9`~\$%\^&\*\-=\+\\\|\/!;:,\.\?\u00a1-\u00ff\u2022\u2026\u2027\u2150-\u218f])([\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff])/g,v=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return r(e,[{key:"spacing",value:function(e){var t=e,r=t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(a,"$1 $2")).replace(n,"$1 $2")).replace(i,"$1$3$5")).replace(o,"$1$3$4")).replace(s,"$1 $2$3$4 $5")).replace(l,"$1 $2")).replace(c,"$1 $3")).replace(u,"$1 $2 $3")).replace(d,"$1 $2 $3"),v=t.replace(h,"$1 $2 $4");return t=v,r===v&&(t=(t=t.replace(f,"$1 $2")).replace(p,"$1 $2")),t=(t=(t=(t=t.replace(g,"$1$3$5")).replace(m,"$1$2 $3")).replace(_,"$1 $2")).replace(b,"$1 $2")}},{key:"spacingText",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];try{var r=this.spacing(e);t(null,r)}catch(e){t(e)}}}]),e}(),w=new v;(e.exports=w).Pangu=v}])});n.pangu;function i(e,t){for(var r=0,a=e.length-1;a>=0;a--){var n=e[a];"."===n?e.splice(a,1):".."===n?(e.splice(a,1),r++):r&&(e.splice(a,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(e){return o.exec(e).slice(1)};function l(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/";if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,t="/"===a.charAt(0))}return e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"),(t?"/":"")+e||"."}function c(e){var t=u(e),r="/"===b(e,-1);return(e=i(_(e.split("/"),function(e){return!!e}),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e}function u(e){return"/"===e.charAt(0)}function d(){return c(_(Array.prototype.slice.call(arguments,0),function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))}function h(e,t){function r(e){for(var t=0;t=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=l(e).substr(1),t=l(t).substr(1);for(var a=r(e.split("/")),n=r(t.split("/")),i=Math.min(a.length,n.length),o=i,s=0;s=0&&c>0){for(a=[],i=r.length;u>=0&&!s;)u==l?(a.push(u),l=r.indexOf(e,u+1)):1==a.length?s=[a.pop(),c]:((n=a.pop())=0?l:c;a.length&&(s=[i,o])}return s}E.range=x;var N=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(t,r){var a=[];var n=k("{","}",t);if(!n||/\$$/.test(n.pre))return[t];var i=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(n.body);var o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(n.body);var s=i||o;var l=n.body.indexOf(",")>=0;if(!s&&!l)return n.post.match(/,.*\}/)?(t=n.pre+"{"+n.body+S+n.post,e(t)):[t];var c;if(s)c=n.body.split(/\.\./);else if(1===(c=function e(t){if(!t)return[""];var r=[];var a=k("{","}",t);if(!a)return t.split(",");var n=a.pre;var i=a.body;var o=a.post;var s=n.split(",");s[s.length-1]+="{"+i+"}";var l=e(o);o.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l));r.push.apply(r,s);return r}(n.body)).length&&1===(c=e(c[0],!1).map(M)).length){var u=n.post.length?e(n.post,!1):[""];return u.map(function(e){return n.pre+c[0]+e})}var d=n.pre;var u=n.post.length?e(n.post,!1):[""];var h;if(s){var f=j(c[0]),p=j(c[1]),g=Math.max(c[0].length,c[1].length),m=3==c.length?Math.abs(j(c[2])):1,_=I,b=p0){var x=new Array(T+1).join("0");E=y<0?"-"+x+E.slice(1):x+E}}h.push(E)}}else h=w(c,function(t){return e(t,!1)});for(var N=0;N=t}var H=v&&m||v,R=Y;Y.Minimatch=Q;var D={sep:"/"};try{D=H}catch(e){}var G=Y.GLOBSTAR=Q.GLOBSTAR={},q={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},U="[^/]",F=U+"*?",V="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",W="(?:(?!(?:\\/|^)\\.).)*?",X="().*{}+?[]^$\\!".split("").reduce(function(e,t){return e[t]=!0,e},{});var Z=/\/+/;function K(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function Y(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new Q(t,r).match(e))}function Q(e,t){if(!(this instanceof Q))return new Q(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==D.sep&&(e=e.split(D.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function J(e,t){if(t||(t=this instanceof Q?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:N(e)}Y.filter=function(e,t){return t=t||{},function(r,a,n){return Y(r,e,t)}},Y.defaults=function(e){if(!e||!Object.keys(e).length)return Y;var t=Y,r=function(r,a,n){return t.minimatch(r,a,K(e,n))};return r.Minimatch=function(r,a){return new t.Minimatch(r,K(e,a))},r},Q.defaults=function(e){return e&&Object.keys(e).length?Y.defaults(e).Minimatch:Q},Q.prototype.debug=function(){},Q.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(Z)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r},Q.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(this.options.nonegate)return;for(var a=0,n=e.length;a65536)throw new TypeError("pattern is too long");var r=this.options;if(!r.noglobstar&&"**"===e)return G;if(""===e)return"";var a,n="",i=!!r.nocase,o=!1,s=[],l=[],c=!1,u=-1,d=-1,h="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=this;function p(){if(a){switch(a){case"*":n+=F,i=!0;break;case"?":n+=U,i=!0;break;default:n+="\\"+a}f.debug("clearStateChar %j %j",a,n),a=!1}}for(var g,m=0,_=e.length;m<_&&(g=e.charAt(m));m++)if(this.debug("%s\t%s %s %j",e,m,n,g),o&&X[g])n+="\\"+g,o=!1;else switch(g){case"/":return!1;case"\\":p(),o=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,m,n,g),c){this.debug(" in class"),"!"===g&&m===d+1&&(g="^"),n+=g;continue}f.debug("call clearStateChar %j",a),p(),a=g,r.noext&&p();continue;case"(":if(c){n+="(";continue}if(!a){n+="\\(";continue}s.push({type:a,start:m-1,reStart:n.length,open:q[a].open,close:q[a].close}),n+="!"===a?"(?:(?!(?:":"(?:",this.debug("plType %j %j",a,n),a=!1;continue;case")":if(c||!s.length){n+="\\)";continue}p(),i=!0;var b=s.pop();n+=b.close,"!"===b.type&&l.push(b),b.reEnd=n.length;continue;case"|":if(c||!s.length||o){n+="\\|",o=!1;continue}p(),n+="|";continue;case"[":if(p(),c){n+="\\"+g;continue}c=!0,d=m,u=n.length,n+=g;continue;case"]":if(m===d+1||!c){n+="\\"+g,o=!1;continue}if(c)var v,w=e.substring(d+1,m);i=!0,c=!1,n+=g;continue;default:p(),o?o=!1:!X[g]||"^"===g&&c||(n+="\\"),n+=g}c&&(w=e.substr(d+1),v=this.parse(w,ee),n=n.substr(0,u)+"\\["+v[0],i=i||v[1]);for(b=s.pop();b;b=s.pop()){var y=n.slice(b.reStart+b.open.length);this.debug("setting tail",n,b),y=y.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,t,r){return r||(r="\\"),t+t+r+"|"}),this.debug("tail=%j\n %s",y,y,b,n);var k="*"===b.type?F:"?"===b.type?U:"\\"+b.type;i=!0,n=n.slice(0,b.reStart)+k+"\\("+y}p(),o&&(n+="\\\\");var E=!1;switch(n.charAt(0)){case".":case"[":case"(":E=!0}for(var T=l.length-1;T>-1;T--){var x=l[T],N=n.slice(0,x.reStart),C=n.slice(x.reStart,x.reEnd-8),A=n.slice(x.reEnd-8,x.reEnd),S=n.slice(x.reEnd);A+=S;var P=N.split("(").length-1,L=S;for(m=0;m=0&&!(a=e[n]);n--);for(n=0;n>> no match, partial?",e,d,t,h),d!==o))}if("string"==typeof c?(l=a.nocase?u.toLowerCase()===c.toLowerCase():u===c,this.debug("string match",c,u,l)):(l=u.match(c),this.debug("pattern match",c,u,l)),!l)return!1}if(n===o&&i===s)return!0;if(n===o)return r;if(i===s)return n===o-1&&""===e[n];throw new Error("wtf?")};var te=[];var re=Object.freeze({before:function(e,t){te=[],"zhuanlan.zhihu.com"==e&&t.find("a[data-draft-type]").map(function(e,t){var r=$(t.outerHTML);r.find(".LinkCard-meta svg").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")}),"sspai.com"==e&&t.find(".ssApp").map(function(e,t){var r=$($("body").find(".ss-app-card")[e].outerHTML);r.find(".code_box").remove(),te[e]=r[0].outerHTML,$(t).replaceWith("")}),"question.zhihu.com"==e&&t.find(".RichText-MCNLinkCardContainer").map(function(e,t){var r=$($("body").find(".RichText-MCNLinkCardContainer")[e].outerHTML);te[e]=r[0].outerHTML,$(t).replaceWith("")}),"post.smzdm.com"==e&&t.find(".embed-card").map(function(e,t){var r=$($("body").find(".embed-card")[e].outerHTML);te[e]=r[0].outerHTML,$(t).parent().replaceWith("")})},specbeautify:function(e,t){switch(e){case"sspai.com":t.find(".relation-apps").remove(),t.find(".ss-app-card").remove();break;case"post.smzdm.com":t.find("img.face").addClass("sr-rd-content-nobeautify"),t.find(".insert-outer img").addClass("sr-rd-content-nobeautify");break;case"infoq.com":t.find("img").map(function(e,t){"left"==$(t).css("float")&&$(t).addClass("sr-rd-content-nobeautify")}),t.find("script").remove();break;case"appinn.com":case"hacpai.com":t.find(".emoji").addClass("sr-rd-content-nobeautify");break;case"douban.com":t.find(".review-content").children().unwrap(),t.find("table").addClass("sr-rd-content-center"),t.find("p").css({"white-space":"pre-wrap"}),t.find(".cc").removeClass();break;case"qdaily.com":t.find("img").map(function(e,t){var r=$(t);0==Number.parseInt(r.css("height"))&&r.remove()}),t.find(".com-insert-images").map(function(e,t){var r=$(t),a=r.find("img").map(function(e,t){return"
"+t.outerHTML+"
"}).get().join("");r.empty().removeAttr("class").append(a)}),t.find(".com-insert-embed").remove();break;case"news.mtime.com":t.find(".newspictool").map(function(e,t){var r=$(t),a=r.find("img"),n=r.find("p:last");r.removeAttr("class").addClass("sr-rd-content-center").empty().append(a).append(n)});break;case"blog.csdn.net":t.find(".save_code").remove(),t.find(".pre-numbering").remove(),t.find("pre").removeAttr("style").removeAttr("class"),t.find("code").removeAttr("style"),t.find(".dp-highlighter").map(function(e,t){$(t).find(".bar .tools").remove(),$(t).next().is("pre")&&$(t).next().remove()});break;case"news.sohu.com":t.find(".conserve-photo").remove(),t.find("table").addClass("sr-rd-content-center");break;case"qq.com":t.find(".rv-root-v2, #backqqcom").remove();break;case"azofreeware.com":t.find("iframe").remove();break;case"apprcn.com":t.find("img").map(function(e,t){var r=$(t),a=r.attr("src");a&&a.includes("Apprcn_Wechat_Small.jpeg")&&r.parent().remove()}),t.find("a").map(function(e,t){var r=$(t);"来自反斗软件"==r.text()&&r.parent().remove()});break;case"tieba.baidu.com":t.find(".BDE_Smiley").addClass("sr-rd-content-nobeautify"),t.find(".replace_div").removeAttr("class").removeAttr("style"),t.find(".replace_tip").remove(),t.find(".d_post_content, .j_d_post_content, .post_bubble_top, .post_bubble_middle, .post_bubble_bottom").map(function(e,t){$(t).removeAttr("class").removeAttr("style")}),$("body").find(".p_author_face").map(function(e,t){var r=$(t).find("img"),a=r.attr("data-tb-lazyload"),n=r.attr("username");a&&$("sr-rd-mult-avatar").find("span").map(function(e,t){var r=$(t);r.text()==n&&r.parent().find("img").attr("src",a)})});break;case"jingyan.baidu.com":t.find(".exp-image-wraper").removeAttr("class").removeAttr("href");break;case"question.zhihu.com":t.find(".zu-edit-button").remove(),t.find("a.external").map(function(e,t){$(t).removeAttr("class").attr("style","border: none;")}),t.find(".VagueImage").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('')});break;case"chiphell.com":t.find("img").map(function(e,t){var r=$(t),a=r.parent(),n=r.attr("src"),i=r.attr("smilieid");a.is("ignore_js_op")&&r.unwrap(),i&&n&&n.includes("static/image/smiley")&&r.addClass("sr-rd-content-nobeautify").attr("style","width: 50px;")}),t.find(".quote").remove();break;case"jiemian.com":t.find("script").remove();break;case"36kr.com":t.find(".load-html-img").removeAttr("class");break;case"cnblogs.com":t.find(".cnblogs_code").removeClass(),t.find(".cnblogs_code_hide").removeClass().removeAttr("style"),t.find(".cnblogs_code_toolbar").remove(),t.find(".code_img_opened").remove(),t.find(".code_img_closed").remove();break;case"news.cnblogs.com":t.find(".topic_img").remove();break;case"g-cores.com":t.find(".swiper-slide-active").find("img").map(function(e,t){var r=$(t);r.parent().parent().parent().parent().parent().parent().removeAttr("class").removeAttr("style").html(r)});break;case"feng.com":case"young.ifeng.com":t.find("span").removeAttr("style");break;case"ftchinese.com":t.find("script").remove();break;case"segmentfault.com":t.find(".widget-codetool").remove();break;case"mp.weixin.qq.com":t.find('section[powered-by="xiumi.us"]').find("img").map(function(e,t){var r=$(t),a=r.attr("data-src");r.addClass("sr-rd-content-nobeautify").attr("src",a)});break;case"ruby-china.org":t.find(".twemoji").remove();break;case"w3cplus.com":t.find("iframe").addClass("sr-rd-content-nobeautify");break;case"zuojj.com":t.find(".syntaxhighlighter .Brush").attr("style","font-size: .7em !important;");break;case"aotu.io":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre"),n=r.find("table");r.html(a[1]),n.unwrap()}),t.find("table").addClass("sr-rd-content-center");break;case"colobu.com":t.find(".highlight table").map(function(e,t){var r=$(t),a=r.find("pre");r.html(a[1]),r.unwrap()});break;case"hao.caibaojian.com":t.find(".tlink").map(function(e,t){$(t).html("")});break;case"wkee.net":t.find("script").remove();break;case"linux.cn":t.find("pre").attr("style","background-color: #161b20; background-image: none;"),t.find("code").attr("style","background-color: transparent; background-image: none;");break;case"zhuanlan.zhihu.com":t.find("div[data-src]").map(function(e,t){var r=$(t),a=r.attr("data-src");r.replaceWith('
')}),$("body img").each(function(e,t){var r=$(t),a=r.parent();if("column-gif"==r.attr("class")&&"GifPlayer"==a.attr("class")){var n=a.parent().prev();if(n.is("noscript")){var i=n.html(),o=$(i),s=o.attr("src"),l=o.attr("data-thumbnail");$('sr-read img[src="'+l+'"]').attr("src",s)}}}),setTimeout(function(){t.find("img").each(function(e,t){$(t).attr("src").endsWith(".gif")&&$(t).parent().next().is("svg")&&$(t).parent().next().remove()})},500);break;case"jianshu.com":t.find(".image-package").map(function(e,t){var r=$(t),a=r.find("img");r.html(a)});break;case"medium.com":t.find("figure").map(function(e,t){var r=$(t),a=r.find("img");r.replaceWith('
')});break;case"worldcup.fifa.com":t.find("iframe").css({width:"790px",height:"450px"}),t.find("div").removeClass()}},removeSpareTag:function(e,t){var r=!1,a="";["lib.csdn.net","huxiu.com","my.oschina.net","caixin.com","163.com","steachs.com","hacpai.com","apprcn.com","mp.weixin.qq.com"].includes(e)?(r=!0,a="p"):["nationalgeographic.com.cn","dgtle.com","news.mtime.com"].includes(e)?(r=!0,a="div"):["chiphell.com"].includes(e)&&(r=!0,a="font"),r&&t.find(a).map(function(e,t){var r=$(t).text().toLowerCase().trim();0==$(t).find("img").length&&""==r&&$(t).remove()})},htmlbeautify:function(e){try{e.html(function(e,t){return t.trim().replace(/<\/?blockquote/g,function(e){return"/"==e[1]?"\n?
(\n?
)*/g,"
").replace(/\/(div|p)>\n*(
\n)+/g,function(e){return e.replace("
","")})})}catch(t){return e.html()}},commbeautify:function(e,t){t.find("img:not(.sr-rd-content-nobeautify)").map(function(e,t){var r=$(t),a=(r.parent(),$("")),n=r.attr("src"),i=r.attr("data-src"),o=r.attr("data-original"),s=r.attr("original"),l=r.attr("data-original-src"),c=r.attr("data-lazy-src"),u=r.attr("real_src"),d=function(){a.removeClass("sr-rd-content-img-load"),a[0].clientWidth<300&&a[0].clientHeight<300?a.parent().removeClass("sr-rd-content-center").addClass("sr-rd-content-center-small"):a[0].clientWidth>1e3?a.css("zoom","0.6"):a[0].clientHeight>620&&/win|mac/i.test(navigator.platform)&&(a.attr("height",620),a[0].clientWidth<$("sr-rd-content").width()&&a.css({width:"auto"})),a[0].clientWidth>$("sr-rd-content").width()&&a.addClass("sr-rd-content-img")},h=function(){a.addClass("simpread-hidden"),a.parent().hasClass("sr-rd-content-center")&&a.parent().removeAttr("class").addClass("simpread-hidden")},f=void 0;r.parent()[0].tagName.toLowerCase(),f=s||n,f=i||f,f=o||f,f=l||f,f=u||f,!(f=c||f)||f.startsWith("http")||f.startsWith("data")||(f=function e(t,r){if("string"!=typeof t||!t)return null;if(t.match(/^[a-z]+\:\/\//i))return t;if(t.match(/^\/\//))return"http:"+t;if(t.match(/^[a-z]+\:/i))return t;var a;if("string"!=typeof r)return(a=document.createElement("a")).href=t,a.pathname?"http://"+t:null;if(null===(r=e(r)))return null;(a=document.createElement("a")).href=r,"/"===t[0]?r=[]:(r=a.pathname.split("/")).pop(),t=t.split("/");for(var n=0;n"),/win|mac/i.test(navigator.platform)?a.one("load",function(){return d()}).one("error",function(){return h()}):a.on("load",function(){return d()}).on("error",function(){return h()})}),t.find("sr-blockquote").map(function(t,r){var a=$(r),n=a.parent();a.removeAttr("style").removeAttr("class"),"dgtle.com"==e&&n.removeClass("quote")}),t.find("iframe:not(.sr-rd-content-nobeautify), embed:not(.sr-rd-content-nobeautify)").map(function(e,t){$(t).wrap("
")}),t.find("hr").map(function(e,t){$(t).addClass("simpread-hidden")}),t.find("pre").map(function(e,t){$(t).find("code").removeAttr("class")}),t.find("pre").removeAttr("class"),t.find("a").removeAttr("style"),t.find("sr-blocks").map(function(e,t){t.outerHTML=$(te[e]).addClass("simpread-blocks")[0].outerHTML})},cleanHTML:function(e,t,r){t&&e.find(".crayon-syntax .crayon-plain-wrap textarea").map(function(e,t){$(t).parent().parent().replaceWith('
'+t.innerHTML+"
")}),t&&e.find(".syntaxhighlighter").map(function(e,t){var r="";$(t).find(".container div").map(function(e,t){r+=t.innerText+"\n"}),$(t).replaceWith('
'+r+"
")}),t&&e.find("table pre").length>0&&e.find("table").map(function(e,t){var r=$(t);if(2==r.find("pre").length){var a=r.find("td pre")[1].outerText.replace(//gi,">").trim();r.replaceWith('
'+a+"
")}}),t&&e.find("pre:not(.sr-rd-content-nobeautify)").each(function(e,t){var r="",a=!1,n=!1;1==$(t).find("code").length&&$(t).find("li").length>0&&$(t).find("code").each(function(e,t){a=!0,n=!0,r+=t.outerText.replace(//gi,">")}),0==a&&0==n&&$(t).find("li").each(function(e,n){$(t).find("code").length>0&&(a=!0),""!=n.outerText.trim()&&(r+=n.outerText.replace(/\n/gi,"").replace(//gi,">")+"\n")}),0==a&&$(t).find("code").each(function(e,t){n=!0,""!=t.outerText.trim()&&(r+=t.outerText.replace(//gi,">")+"\n")}),a||n||(r=t.outerText.replace(//gi,">")+"\n"),$(t).removeAttr("style").removeAttr("class").removeAttr("id").html(r)});var a,n,i=e.html();"readability-page-1"==$(e.children()).attr("id")&&1==e.children().children().length?i=e.children().children().html():1==e.children().length&&(i=e.children().html()),i=i.replace(//gi,""),e.html((a=i,n="",$.parseHTML(a).forEach(function(e,a){var i=e.tagName,o=e.outerText,s=e.outerHTML;void 0==i?n+="

"+e.textContent.replace(//gi,">").replace(/^\n|\n$/gi,"").trim()+"

":"PRE"==i?n+=s:"sr-blocks"==i.toLowerCase()?n+=s:(""!=o||s.includes("0?t.join("").replace(/, $/,""):null}function se(e,t){var r=Object.keys(t).map(function(e){return t[e]&&e.replace(/[A-Z]/,function(e){return"-"+e.toLowerCase()})+": "+t[e]+";"}).join("");switch(e){case"title":r="sr-rd-title {"+r+"}";break;case"desc":r="sr-rd-desc {"+r+"}";break;case"art":r="sr-rd-content *, sr-rd-content p, sr-rd-content div {"+r+"}";break;case"pre":r="sr-rd-content pre {"+r+"}";break;case"code":r="sr-rd-content pre code, sr-rd-content pre code * {"+r+"}"}var a=$("head").find("style#simpread-custom-"+e);0==a.length?$("head").append('"):a.html(r)}function le(e,t){var r=$("head").find("style#simpread-custom-"+e);0==r.length?$("head").append('"):r.html(t)}var ce=Object.freeze({GetColor:oe,BgColor:function(e,t){var r="rgba("+oe(e)+", "+t/100+")";return $(ne).css(ae,r),r},Opacity:function(e){var t=oe($(ne).css(ae)),r="rgba("+t+", "+e/100+")";return t?($(ne).css(ae,r),r):null},FontFamily:function(e){$("sr-read").css("font-family","default"==e?"":e)},FontSize:function(e){"-1"==ie&&void 0==(ie=$("html").attr("style"))&&(ie=""),e?$("html").attr("style","font-size: "+e+"!important;"+ie):$("html").attr("style",ie)},Layout:function(e){$("sr-read").css("margin",e?"20px "+e:"")},SiteCSS:function(e){e?$("head").append('"):$("#simpread-site-css").remove()},Preview:function(e){Object.keys(e).forEach(function(t){"css"!=t&&se(t,e[t])}),le("css",e.css)},Custom:se,CSS:le,VerifyCustom:function(e,t){switch(e){case"layout":case"margin":case"fontfamily":case"custom":return""!=t.css;case"fontsize":return""!=t.title.fontSize||""!=t.desc.fontSize||""!=t.art.fontSize||""!=t.css;case"theme":return-1!=t.css.search("simpread-theme-root")}}});function ue(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");var r;t=t||{},this._doc=e,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._wrap=null,this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug?(r=function(e){var t=e.nodeName+" ";if(e.nodeType==e.TEXT_NODE)return t+'("'+e.textContent+'")';var r=e.className&&"."+e.className.replace(/ /g,"."),a="";return e.id?a="(#"+e.id+r+")":r&&(a="("+r+")"),t+a},this.log=function(){if("undefined"!=typeof dump){var e=Array.prototype.map.call(arguments,function(e){return e&&e.nodeName?r(e):e}).join(" ");dump("Reader: (Readability) "+e+"\n")}else if("undefined"!=typeof console)["Reader: (Readability) "].concat(arguments)}):this.log=function(){}}ue.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,whitespace:/^\s*$/,hasContent:/\S$/},DIV_TO_P_ELEMS:["A","BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL","SELECT"],ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],_postProcessContent:function(e){this._fixRelativeUris(e),this._cleanClasses(e)},_removeNodes:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r],n=a.parentNode;n&&(t&&!t.call(this,a,r,e)||n.removeChild(a))}},_replaceNodeTags:function(e,t){for(var r=e.length-1;r>=0;r--){var a=e[r];this._setNodeTag(a,t)}},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map(function(t){return e.call(t)});return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(t){var r=e.getElementsByTagName(t);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,r=(e.getAttribute("class")||"").split(/\s+/).filter(function(e){return-1!=t.indexOf(e)}).join(" ");for(r?e.setAttribute("class",r):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,r=this._doc.documentURI;function a(e){if(t==r&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var n=this._getAllNodesWithTag(e,["a"]);this._forEachNode(n,function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:")){var r=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",a(t))});var i=this._getAllNodesWithTag(e,["img"]);this._forEachNode(i,function(e){var t=e.getAttribute("src");t&&e.setAttribute("src",a(t))})},_getArticleTitle:function(){var e=this._doc,t="",r="";try{"string"!=typeof(t=r=e.title.trim())&&(t=r=this._getInnerText(e.getElementsByTagName("title")[0]))}catch(e){}var a=!1;function n(e){return e.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))a=/ [\\\/>»] /.test(t),n(t=r.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"))<3&&(t=r.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var i=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),o=t.trim();this._someNode(i,function(e){return e.textContent.trim()===o})||(n(t=r.substring(r.lastIndexOf(":")+1))<3?t=r.substring(r.indexOf(":")+1):n(r.substr(0,r.indexOf(":")))>5&&(t=r))}else if(t.length>150||t.length<15){var s=e.getElementsByTagName("h1");1===s.length&&(t=this._getInnerText(s[0]))}var l=n(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!a||l!=n(r.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=r),t},_prepDocument:function(){var e=this._doc;this._removeNodes(e.getElementsByTagName("style")),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(e.getElementsByTagName("font"),"SPAN")},_nextElement:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){for(var t=e.nextSibling,r=!1;(t=this._nextElement(t))&&"BR"==t.tagName;){r=!0;var a=t.nextSibling;t.parentNode.removeChild(t),t=a}if(r){var n=this._doc.createElement("p");for(e.parentNode.replaceChild(n,e),t=n.nextSibling;t;){if("BR"==t.tagName){var i=this._nextElement(t.nextSibling);if(i&&"BR"==i.tagName)break}if(!this._isPhrasingContent(t))break;var o=t.nextSibling;n.appendChild(t),t=o}for(;n.lastChild&&this._isWhitespace(n.lastChild);)n.removeChild(n.lastChild);"P"===n.parentNode.tagName&&this._setNodeTag(n.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),e.__JSDOMParser__)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var r=e.ownerDocument.createElement(t);e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e),e.readability&&(r.readability=e.readability);for(var a=0;a0?r[0].textContent.includes(this._articleTitle):this._articleTitle.includes(r[0].textContent))&&this._clean(e,"h2")}}this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._removeNodes(e.getElementsByTagName("p"),function(e){return 0===e.getElementsByTagName("img").length+e.getElementsByTagName("embed").length+e.getElementsByTagName("object").length+e.getElementsByTagName("iframe").length&&!this._getInnerText(e,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(e){var t=this._nextElement(e.nextSibling);t&&"P"==t.tagName&&e.parentNode.removeChild(e)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(e){var t=this._hasSingleTagInsideElement(e,"TBODY")?e.firstElementChild:e;if(this._hasSingleTagInsideElement(t,"TR")){var r=t.firstElementChild;if(this._hasSingleTagInsideElement(r,"TD")){var a=r.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),e.parentNode.replaceChild(a,e)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do{e=e.parentNode}while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var r=e.getAttribute("rel"),a=e.getAttribute("itemprop");return!(!("author"===r||a&&-1!==a.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var r=0,a=[];e.parentNode&&(a.push(e.parentNode),!t||++r!==t);)e=e.parentNode;return a},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,r=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var a=e.innerHTML;;){for(var n=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),i=[],o=this._doc.documentElement;o;){var s=o.className+" "+o.id;if(this._isProbablyVisible(o))if(this._checkByline(o,s))o=this._removeAndGetNext(o);else if(!n||!this.REGEXPS.unlikelyCandidates.test(s)||this.REGEXPS.okMaybeItsACandidate.test(s)||this._hasAncestorTag(o,"table")||"BODY"===o.tagName||"A"===o.tagName)if("DIV"!==o.tagName&&"SECTION"!==o.tagName&&"HEADER"!==o.tagName&&"H1"!==o.tagName&&"H2"!==o.tagName&&"H3"!==o.tagName&&"H4"!==o.tagName&&"H5"!==o.tagName&&"H6"!==o.tagName||!this._isElementWithoutContent(o)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(o.tagName)&&i.push(o),"DIV"===o.tagName){for(var l=null,c=o.firstChild;c;){var u=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),o.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=u}if(this._hasSingleTagInsideElement(o,"P")&&this._getLinkDensity(o)<.25){var d=o.children[0];o.parentNode.replaceChild(d,o),o=d,i.push(o)}else this._hasChildBlockElement(o)||(o=this._setNodeTag(o,"P"),i.push(o))}o=this._getNextNode(o)}else o=this._removeAndGetNext(o);else this.log("Removing unlikely candidate - "+s),o=this._removeAndGetNext(o);else this.log("Removing hidden node - "+s),o=this._removeAndGetNext(o)}var h=[];this._forEachNode(i,function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var r=this._getNodeAncestors(e,3);if(0!==r.length){var a=0;a+=1,a+=t.split(",").length,a+=Math.min(Math.floor(t.length/100),3),this._forEachNode(r,function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),h.push(e)),0===t)var r=1;else r=1===t?2:3*t;e.readability.contentScore+=a/r}})}}}});for(var f=[],p=0,g=h.length;pv.readability.contentScore){f.splice(b,0,m),f.length>this._nbTopCandidates&&f.pop();break}}}var w,y=f[0]||null,k=!1;if(null===y||"BODY"===y.tagName){y=t.createElement("DIV"),k=!0;for(var E=e.childNodes;E.length;)this.log("Moving child out:",E[0]),y.appendChild(E[0]);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],x=1;x=.75&&T.push(this._getNodeAncestors(f[x]));if(T.length>=3)for(w=y.parentNode;"BODY"!==w.tagName;){for(var N=0,C=0;C=3){y=w;break}w=w.parentNode}y.readability||this._initializeNode(y),w=y.parentNode;for(var A=y.readability.contentScore,S=A/3;"BODY"!==w.tagName;)if(w.readability){var P=w.readability.contentScore;if(PA){y=w;break}A=w.readability.contentScore,w=w.parentNode}else w=w.parentNode;for(w=y.parentNode;"BODY"!=w.tagName&&1==w.children.length;)w=(y=w).parentNode;y.readability||this._initializeNode(y)}var L=t.createElement("DIV");r&&(L.id="readability-content");for(var j=Math.max(10,.2*y.readability.contentScore),z=(w=y.parentNode).children,$=0,M=z.length;$=j)I=!0;else if("P"===B.nodeName){var H=this._getLinkDensity(B),R=this._getInnerText(B),D=R.length;D>80&&H<.25?I=!0:D<80&&D>0&&0===H&&-1!==R.search(/\.( |$)/)&&(I=!0)}}I&&(this.log("Appending node:",B),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(B.nodeName)&&(this.log("Altering sibling:",B,"to div."),B=this._setNodeTag(B,"DIV")),L.appendChild(B),$-=1,M-=1)}if(this._debug&&this.log("Article content pre-prep: "+L.innerHTML),this._prepArticle(L),this._debug&&this.log("Article content post-prep: "+L.innerHTML),k)y.id="readability-page-1",y.className="page";else{var G=t.createElement("DIV");G.id="readability-page-1",G.className="page";var q=L.childNodes;for(this._wrap=L.childNodes[0].outerHTML.replace(L.childNodes[0].innerHTML,"");q.length;)G.appendChild(q[0]);L.appendChild(G)}this._debug&&this.log("Article content after paging: "+L.innerHTML);var U=!0,F=this._getInnerText(L,!0).length;if(F0&&e.length<100)},_getArticleMetadata:function(){var e={},t={},r=this._doc.getElementsByTagName("meta"),a=/\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi,n=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(e){var r=e.getAttribute("name"),i=e.getAttribute("property"),o=e.getAttribute("content");if(o){var s=null,l=null;if(i&&(s=i.match(a)))for(var c=s.length-1;c>=0;c--)l=s[c].toLowerCase().replace(/\s/g,""),t[l]=o.trim();!s&&r&&n.test(r)&&(l=r,o&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),t[l]=o.trim()))}}),e.title=t["dc:title"]||t["dcterm:title"]||t["og:title"]||t["weibo:article:title"]||t["weibo:webpage:title"]||t.title||t["twitter:title"],e.title||(e.title=this._getArticleTitle()),e.byline=t["dc:creator"]||t["dcterm:creator"]||t.author,e.excerpt=t["dc:description"]||t["dcterm:description"]||t["og:description"]||t["weibo:article:description"]||t["weibo:webpage:description"]||t.description||t["twitter:description"],e.siteName=t["og:site_name"],e},_removeScripts:function(e){this._removeNodes(e.getElementsByTagName("script"),function(e){return e.nodeValue="",e.removeAttribute("src"),!0}),this._removeNodes(e.getElementsByTagName("noscript"))},_hasSingleTagInsideElement:function(e,t){return 1==e.children.length&&e.children[0].tagName===t&&!this._someNode(e.childNodes,function(e){return e.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(e.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&0==e.textContent.trim().length&&(0==e.children.length||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(e){return-1!==this.DIV_TO_P_ELEMS.indexOf(e.tagName)||this._hasChildBlockElement(e)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||-1!==this.PHRASING_ELEMS.indexOf(e.tagName)||("A"===e.tagName||"DEL"===e.tagName||"INS"===e.tagName)&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&0===e.textContent.trim().length||e.nodeType===this.ELEMENT_NODE&&"BR"===e.tagName},_getInnerText:function(e,t){t=void 0===t||t;var r=e.textContent.trim();return t?r.replace(this.REGEXPS.normalize," "):r},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(e&&"svg"!==e.tagName.toLowerCase()){for(var t=0;t0&&n>r)return!1;if(e.parentNode.tagName===t&&(!a||a(e.parentNode)))return!0;e=e.parentNode,n++}return!1},_getRowAndColumnCount:function(e){for(var t=0,r=0,a=e.getElementsByTagName("tr"),n=0;n0)a._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some(function(e){return!!a.getElementsByTagName(e)[0]}))this.log("Data table because found data-y descendant"),a._readabilityDataTable=!0;else if(a.getElementsByTagName("table")[0])a._readabilityDataTable=!1;else{var i=this._getRowAndColumnCount(a);i.rows>=10||i.columns>4?a._readabilityDataTable=!0:a._readabilityDataTable=i.rows*i.columns>10}}}else a._readabilityDataTable=!1;else a._readabilityDataTable=!1}},_cleanConditionally:function(e,t){if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)){var r="ul"===t||"ol"===t;this._removeNodes(e.getElementsByTagName(t),function(e){var a=function(e){return e._readabilityDataTable};if("table"===t&&a(e))return!1;if(this._hasAncestorTag(e,"table",-1,a))return!1;var n=this._getClassWeight(e);if(this.log("Cleaning Conditionally",e),n+0<0)return!0;if(this._getCharCount(e,",")<10){for(var i=e.getElementsByTagName("p").length,o=e.getElementsByTagName("img").length,s=e.getElementsByTagName("li").length-100,l=e.getElementsByTagName("input").length,c=0,u=this._concatNodeLists(e.getElementsByTagName("object"),e.getElementsByTagName("embed"),e.getElementsByTagName("iframe")),d=0;d1&&i/o<.5&&!this._hasAncestorTag(e,"figure")||!r&&s>i||l>Math.floor(i/3)||!r&&p<25&&(0===o||o>2)&&!this._hasAncestorTag(e,"figure")||!r&&n<25&&f>.2||n>=25&&f>.5||1===c&&p<75||c>1}return!1})}},_cleanMatchedNodes:function(e,t){for(var r=this._getNextNode(e,!0),a=this._getNextNode(e);a&&a!=r;)a=t(a,a.className+" "+a.id)?this._removeAndGetNext(a):this._getNextNode(a)},_cleanHeaders:function(e){for(var t=1;t<3;t+=1)this._removeNodes(e.getElementsByTagName("h"+t),function(e){return this._getClassWeight(e)<0})},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return!(e.style&&"none"==e.style.display||e.hasAttribute("hidden"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._removeScripts(this._doc),this._prepDocument();var t=this._getArticleMetadata();this._articleTitle=t.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!t.excerpt){var a=r.getElementsByTagName("p");a.length>0&&(t.excerpt=a[0].textContent.trim())}var n=r.textContent;return{title:this._articleTitle,byline:t.byline||this._articleByline,dir:this._articleDir,content:r.innerHTML,wrap:this._wrap,textContent:n,length:n.length,excerpt:t.excerpt,siteName:t.siteName||this._articleSiteName}}};var de=Object.freeze({Readability:ue}),he=r(function(e){(function(){function t(e){var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex:
foo
",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including ``, `` and `` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var a in t)t.hasOwnProperty(a)&&(r[a]=t[a].defaultValue);return r}function r(e,t){var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var o=0;o").replace(/&/g,"&")};var d=function(e,t,r,a){var n,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+c.replace(/g/g,"")),h=new RegExp(t,c.replace(/g/g,"")),f=[];do{for(n=0;o=d.exec(e);)if(h.test(o[0]))n++||(s=(i=d.lastIndex)-o[0].length);else if(n&&!--n){l=o.index+o[0].length;var p={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(f.push(p),!u)return f}}while(n&&(d.lastIndex=i));return f};i.helper.matchRecursiveRegExp=function(e,t,r,a){for(var n=d(e,t,r,a),i=[],o=0;o0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var h=0;h=0?a+(r||0):a},i.helper.splitAtIndex=function(e,t){if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},i.helper.padEnd=function(e,t,r){return t>>=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){alert(e)},log:function(e){alert(e)},error:function(e){throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️‍♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴‍♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱‍♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇‍♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷‍♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨‍❤️‍👨",couple_with_heart_woman_woman:"👩‍❤️‍👩",couplekiss_man_man:"👨‍❤️‍💋‍👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩‍❤️‍💋‍👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯‍♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁‍🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨‍👦",family_man_boy_boy:"👨‍👦‍👦",family_man_girl:"👨‍👧",family_man_girl_boy:"👨‍👧‍👦",family_man_girl_girl:"👨‍👧‍👧",family_man_man_boy:"👨‍👨‍👦",family_man_man_boy_boy:"👨‍👨‍👦‍👦",family_man_man_girl:"👨‍👨‍👧",family_man_man_girl_boy:"👨‍👨‍👧‍👦",family_man_man_girl_girl:"👨‍👨‍👧‍👧",family_man_woman_boy_boy:"👨‍👩‍👦‍👦",family_man_woman_girl:"👨‍👩‍👧",family_man_woman_girl_boy:"👨‍👩‍👧‍👦",family_man_woman_girl_girl:"👨‍👩‍👧‍👧",family_woman_boy:"👩‍👦",family_woman_boy_boy:"👩‍👦‍👦",family_woman_girl:"👩‍👧",family_woman_girl_boy:"👩‍👧‍👦",family_woman_girl_girl:"👩‍👧‍👧",family_woman_woman_boy:"👩‍👩‍👦",family_woman_woman_boy_boy:"👩‍👩‍👦‍👦",family_woman_woman_girl:"👩‍👩‍👧",family_woman_woman_girl_boy:"👩‍👩‍👧‍👦",family_woman_woman_girl_girl:"👩‍👩‍👧‍👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️‍♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍‍♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️‍♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂‍♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇‍♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨‍🎨",man_astronaut:"👨‍🚀",man_cartwheeling:"🤸‍♂️",man_cook:"👨‍🍳",man_dancing:"🕺",man_facepalming:"🤦‍♂️",man_factory_worker:"👨‍🏭",man_farmer:"👨‍🌾",man_firefighter:"👨‍🚒",man_health_worker:"👨‍⚕️",man_in_tuxedo:"🤵",man_judge:"👨‍⚖️",man_juggling:"🤹‍♂️",man_mechanic:"👨‍🔧",man_office_worker:"👨‍💼",man_pilot:"👨‍✈️",man_playing_handball:"🤾‍♂️",man_playing_water_polo:"🤽‍♂️",man_scientist:"👨‍🔬",man_shrugging:"🤷‍♂️",man_singer:"👨‍🎤",man_student:"👨‍🎓",man_teacher:"👨‍🏫",man_technologist:"👨‍💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆‍♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼‍♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵‍♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅‍♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆‍♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮‍♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎‍♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️‍🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋‍♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣‍♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃‍♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄‍♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊‍♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁‍♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶‍♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️‍♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩‍🎨",woman_astronaut:"👩‍🚀",woman_cartwheeling:"🤸‍♀️",woman_cook:"👩‍🍳",woman_facepalming:"🤦‍♀️",woman_factory_worker:"👩‍🏭",woman_farmer:"👩‍🌾",woman_firefighter:"👩‍🚒",woman_health_worker:"👩‍⚕️",woman_judge:"👩‍⚖️",woman_juggling:"🤹‍♀️",woman_mechanic:"👩‍🔧",woman_office_worker:"👩‍💼",woman_pilot:"👩‍✈️",woman_playing_handball:"🤾‍♀️",woman_playing_water_polo:"🤽‍♀️",woman_scientist:"👩‍🔬",woman_shrugging:"🤷‍♀️",woman_singer:"👩‍🎤",woman_student:"👩‍🎓",woman_teacher:"👩‍🏫",woman_technologist:"👩‍💻",woman_with_turban:"👳‍♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼‍♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:':octocat:',showdown:"S"},i.Converter=function(e){function t(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return void function(e,t){"function"==typeof e&&(e=e(new i.Converter)),i.helper.isArray(e)||(e=[e]);var a=r(e,t);if(!a.valid)throw Error(a.error);for(var n=0;n[ \t]+¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],a=0;a'}else r.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return r}(r)};!function e(t){for(var r=0;r? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(n||(n=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,i.helper.isUndefined(r.gUrls[n]))return e;o=r.gUrls[n],i.helper.isUndefined(r.gTitles[n])||(c=r.gTitles[n])}var u='"+a+""};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,a,n,o){if("\\"===a)return r+n;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' target="¨E95Eblank"'),r+'"+n+""})),r.converter._dispatch("anchors.after",e,t,r)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,p=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,g=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,m=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,_=function(e){return function(t,r,a,n,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",h=r||"",f=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' target="¨E95Eblank"'),h+'"+c+""+u+f}},b=function(e,t){return function(r,a,n){var o="mailto:";return a=a||"",n=i.subParser("unescapeSpecialChars")(n,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+n),n=i.helper.encodeEmailAddress(n)):o+=n,a+''+n+""}};i.subParser("autoLinks",function(e,t,r){return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(p,_(t))).replace(m,b(t,r)),r.converter._dispatch("autoLinks.after",e,t,r)}),i.subParser("simplifiedAutoLinks",function(e,t,r){return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,_(t)):e.replace(h,_(t))).replace(g,b(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),i.subParser("blockGamut",function(e,t,r){return e=r.converter._dispatch("blockGamut.before",e,t,r),e=i.subParser("blockQuotes")(e,t,r),e=i.subParser("headers")(e,t,r),e=i.subParser("horizontalRule")(e,t,r),e=i.subParser("lists")(e,t,r),e=i.subParser("codeBlocks")(e,t,r),e=i.subParser("tables")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("paragraphs")(e,t,r),r.converter._dispatch("blockGamut.after",e,t,r)}),i.subParser("blockQuotes",function(e,t,r){e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=i.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1 ")).replace(/(\s*
[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return(r=r.replace(/^  /gm,"¨0")).replace(/¨0/g,"")}),i.subParser("hashBlock")("
\n"+e+"\n
",t,r)}),r.converter._dispatch("blockQuotes.after",e,t,r)}),i.subParser("codeBlocks",function(e,t,r){return e=r.converter._dispatch("codeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,a,n){var o=a,s=n,l="\n";return o=i.subParser("outdent")(o,t,r),o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="
"+o+l+"
",i.subParser("hashBlock")(o,t,r)+s})).replace(/¨0/,""),r.converter._dispatch("codeBlocks.after",e,t,r)}),i.subParser("codeSpans",function(e,t,r){return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,a,n,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+""+(s=i.subParser("encodeCode")(s,t,r))+"",i.subParser("hashHTMLSpans")(s,t,r)}),r.converter._dispatch("codeSpans.after",e,t,r)}),i.subParser("completeHTMLDocument",function(e,t,r){if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var a="html",n="\n",i="",o='\n',s="",l="";for(var c in void 0!==r.metadata.parsed.doctype&&(n="\n","html"!==(a=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i=""+r.metadata.parsed.title+"\n";break;case"charset":o="html"===a||"html5"===a?'\n':'\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[c]+'"',l+='\n';break;default:l+='\n'}return e=n+"\n\n"+i+o+l+"\n\n"+e.trim()+"\n\n",r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),i.subParser("detab",function(e,t,r){return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g," ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,function(e,t){for(var r=t,a=4-r.length%4,n=0;n/g,">"),r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),i.subParser("encodeBackslashEscapes",function(e,t,r){return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),i.subParser("encodeCode",function(e,t,r){return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&").replace(//g,">").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),r.converter._dispatch("encodeCode.after",e,t,r)}),i.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})).replace(/-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}),r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),i.subParser("githubCodeBlocks",function(e,t,r){return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,a,n,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,r),o=(o=(o=i.subParser("detab")(o,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),o="
"+o+s+"
",o=i.subParser("hashBlock")(o,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"})).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),i.subParser("hashBlock",function(e,t,r){return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",r.converter._dispatch("hashBlock.after",e,t,r)}),i.subParser("hashCodeTags",function(e,t,r){return e=r.converter._dispatch("hashCodeTags.before",e,t,r),e=i.helper.replaceRecursiveRegExp(e,function(e,a,n,o){var s=n+i.subParser("encodeCode")(a,t,r)+o;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"},"]*>","","gim"),r.converter._dispatch("hashCodeTags.after",e,t,r)}),i.subParser("hashElement",function(e,t,r){return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"}}),i.subParser("hashHTMLBlocks",function(e,t,r){e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],n=function(e,t,a,n){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+r.converter.makeHtml(t)+n),"\n\n¨K"+(r.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"<"+t+">"}));for(var o=0;o]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),h=i.helper.replaceRecursiveRegExp(d[1],n,c,u,"im");if(h===d[1])break;e=d[0].concat(h)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),e=(e=i.helper.replaceRecursiveRegExp(e,function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,r)),r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),i.subParser("hashHTMLSpans",function(e,t,r){function a(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return a(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return a(e)})).replace(/<[^>]+?>/gi,function(e){return a(e)}),r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),i.subParser("unhashHTMLSpans",function(e,t,r){e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var a=0;a]*>\\s*]*>","^ {0,3}\\s*
","gim"),r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),i.subParser("headers",function(e,t,r){function a(e){var a,n;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,n=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=n+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=n+a),r.hashLinkCounts[a]?a=a+"-"+r.hashLinkCounts[a]++:r.hashLinkCounts[a]=1,a}e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=""+s+"";return i.subParser("hashBlock")(c,t,r)})).replace(s,function(e,o){var s=i.subParser("spanGamut")(o,t,r),l=t.noHeaderId?"":' id="'+a(o)+'"',c=n+1,u=""+s+"";return i.subParser("hashBlock")(u,t,r)});var l=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return e=e.replace(l,function(e,o,s){var l=s;t.customizedHeaderId&&(l=s.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(l,t,r),u=t.noHeaderId?"":' id="'+a(s)+'"',d=n-1+o.length,h=""+c+"";return i.subParser("hashBlock")(h,t,r)}),r.converter._dispatch("headers.after",e,t,r)}),i.subParser("horizontalRule",function(e,t,r){e=r.converter._dispatch("horizontalRule.before",e,t,r);var a=i.subParser("hashBlock")("
",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),r.converter._dispatch("horizontalRule.after",e,t,r)}),i.subParser("images",function(e,t,r){function a(e,t,a,n,o,s,l,c){var u=r.gUrls,d=r.gTitles,h=r.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(? ?(['"].*['"])?\)$/m)>-1)n="";else if(""===n||null===n){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),n="#"+a,i.helper.isUndefined(u[a]))return e;n=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(h[a])||(o=h[a].width,s=h[a].height)}t=t.replace(/"/g,""").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var f=''+t+'"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,n,i,o,s,l){return a(e,t,r,n=n.replace(/\s/g,""),i,o,0,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),r.converter._dispatch("images.after",e,t,r)}),i.subParser("italicsAndBold",function(e,t,r){function a(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return a(t,"","")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return a(t,"","")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return a(t,"","")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return a(r,t+"","")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?a(t,"",""):e}),r.converter._dispatch("italicsAndBold.after",e,t,r)}),i.subParser("lists",function(e,t,r){function a(e,a){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(n=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(n,function(e,a,n,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,r),h="";return c&&t.tasklists&&(h=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"¨A"+e}),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,r),d=i.subParser("blockGamut")(d,t,r)):(d=(d=i.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,r):i.subParser("spanGamut")(d,t,r)),""+(d=d.replace("¨A",""))+"\n"})).replace(/¨0/g,""),r.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function n(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function o(e,r,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===r?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),h=n(e,r);-1!==d?(c+="\n\n<"+r+h+">\n"+a(u.slice(0,d),!!i)+"\n",l="ul"==(r="ul"===r?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+r+h+">\n"+a(u,!!i)+"\n"}(e);else{var u=n(e,r);c="\n\n<"+r+u+">\n"+a(e,!!i)+"\n"}return c}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return o(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,a){return o(r,a.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/¨0/,""),r.converter._dispatch("lists.after",e,t,r)}),i.subParser("metadata",function(e,t,r){function a(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&").replace(/"/g,""")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,a){return r.metadata.parsed[t]=a,""})}return t.metadata?(e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,function(e,t,r){return a(r),"¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,n){return t&&(r.metadata.format=t),a(n),"¨M"})).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)):e}),i.subParser("outdent",function(e,t,r){return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),r.converter._dispatch("outdent.after",e,t,r)}),i.subParser("paragraphs",function(e,t,r){for(var a=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),n=[],o=a.length,s=0;s=0?n.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,r)).replace(/^([ \t]*)/g,"

"),l+="

",n.push(l))}for(o=n.length,s=0;s]*>\s*]*>/.test(u)&&(d=!0)}n[s]=u}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),i.subParser("runExtension",function(e,t,r,a){if(e.filter)t=e.filter(t,a.converter,r);else if(e.regex){var n=e.regex;n instanceof RegExp||(n=new RegExp(n,"g")),t=t.replace(n,e.replace)}return t}),i.subParser("spanGamut",function(e,t,r){return e=r.converter._dispatch("spanGamut.before",e,t,r),e=i.subParser("codeSpans")(e,t,r),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=i.subParser("encodeBackslashEscapes")(e,t,r),e=i.subParser("images")(e,t,r),e=i.subParser("anchors")(e,t,r),e=i.subParser("autoLinks")(e,t,r),e=i.subParser("simplifiedAutoLinks")(e,t,r),e=i.subParser("emoji")(e,t,r),e=i.subParser("underline")(e,t,r),e=i.subParser("italicsAndBold")(e,t,r),e=i.subParser("strikethrough")(e,t,r),e=i.subParser("ellipsis")(e,t,r),e=i.subParser("hashHTMLSpans")(e,t,r),e=i.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),r.converter._dispatch("spanGamut.after",e,t,r)}),i.subParser("strikethrough",function(e,t,r){return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,r)),""+e+""}(a)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),i.subParser("stripLinkDefinitions",function(e,t,r){var a=function(e,a,n,o,s,l,c){return a=a.toLowerCase(),n.match(/^data:.+?\/.+?;base64,/)?r.gUrls[a]=n.replace(/\s/g,""):r.gUrls[a]=i.subParser("encodeAmpsAndAngles")(n,t,r),l?l+c:(c&&(r.gTitles[a]=c.replace(/"|'/g,""")),t.parseImgDimensions&&o&&s&&(r.gDimensions[a]={width:o,height:s}),"")};return(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,a)).replace(/¨0/,"")}),i.subParser("tables",function(e,t,r){function a(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function n(e,a){var n="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(n=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),""+(e=i.subParser("spanGamut")(e,t,r))+"\n"}function o(e,a){return""+i.subParser("spanGamut")(e,t,r)+"\n"}function s(e){var s,l=e.split("\n");for(s=0;s\n\n\n",n=0;n\n";for(var i=0;i\n"}return r+"\n\n"}(h,p)}return t.tables?(e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,s),r.converter._dispatch("tables.after",e,t,r)):e}),i.subParser("underline",function(e,t,r){return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return""+t+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return""+t+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?""+t+"":e})).replace(/(_)/g,i.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),i.subParser("unescapeSpecialChars",function(e,t,r){return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),i.subParser("makeMarkdown.blockquote",function(e,t){var r="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,o=0;o "+(r=r.trim()).split("\n").join("\n> ")}),i.subParser("makeMarkdown.codeBlock",function(e,t){var r=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[a]+"\n```"}),i.subParser("makeMarkdown.codeSpan",function(e){return"`"+e.innerHTML+"`"}),i.subParser("makeMarkdown.emphasis",function(e,t){var r="";if(e.hasChildNodes()){r+="*";for(var a=e.childNodes,n=a.length,o=0;o",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),i.subParser("makeMarkdown.links",function(e,t){var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,n=a.length;r="[";for(var o=0;o",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),i.subParser("makeMarkdown.list",function(e,t,r){var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,s=e.getAttribute("start")||1,l=0;l"+t.preList[r]+""}),i.subParser("makeMarkdown.strikethrough",function(e,t){var r="";if(e.hasChildNodes()){r+="~~";for(var a=e.childNodes,n=a.length,o=0;otr>th"),l=e.querySelectorAll("tbody>tr");for(r=0;rp&&(p=g)}for(r=0;r/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}),e.exports?e.exports=i:this.showdown=i}).call(t)}),fe={pangu:n,minimatch:R,beautify:re,style:ce,rdability:de,markdown:Object.freeze({default:he,__moduleExports:he})};e.Plugin=function(e){return void 0==e?fe:fe[e]},Object.defineProperty(e,"__esModule",{value:!0})}); From 0d30ecaccd141aa44ee99cb3a6a90f0e54154f9a Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 15 Jan 2020 10:56:26 +0800 Subject: [PATCH 288/329] Add 'offline' plugin id to recent. --- src/service/version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/version.js b/src/service/version.js index a10fd155..e7a8eba9 100644 --- a/src/service/version.js +++ b/src/service/version.js @@ -534,7 +534,7 @@ function VerifyPlugins( ver, option ) { if ( option.plugins.length == 0 ) return false; const str = option.plugins.join( "," ); if ( ver == "1.1.3" ) { - const newStr = str.replace( /(E0j1nYBmDD,?|SumEaxStWE,?|UsayAKSuwe,?)/g, "" ); + const newStr = str.replace( /(E0j1nYBmDD,?|SumEaxStWE,?|EHLtCwBy6c,?|UsayAKSuwe,?)/g, "" ); if ( str != newStr ) { option.plugins = newStr.replace( /,$/, "" ).split( "," ); return true; From 41548e45f97a8f87fbc92cca9c6d048fce7c86f6 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 15 Jan 2020 14:20:17 +0800 Subject: [PATCH 289/329] Format source. --- src/assets/css/simpread.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/assets/css/simpread.css b/src/assets/css/simpread.css index 6c4c49de..f19397cb 100644 --- a/src/assets/css/simpread.css +++ b/src/assets/css/simpread.css @@ -794,13 +794,13 @@ simpread-urlscheme * { } simpread-urlscheme.active { - animation-name: fadeInUp; + animation-name: srFadeInUp; animation-duration: 450ms; animation-fill-mode: both; } simpread-urlscheme.hide { - animation-name: fadeInDown; + animation-name: srFadeInDown; animation-duration: 450ms; animation-fill-mode: both; } @@ -845,7 +845,7 @@ simpread-urlscheme switch { margin-top: 0!important; } -@keyframes fadeInUp { +@keyframes srFadeInUp { from { opacity: 0; transform: translateY(100px); @@ -857,7 +857,7 @@ simpread-urlscheme switch { } } -@keyframes fadeInDown { +@keyframes srFadeInDown { from { opacity: 1; transform: translateY(0); From 9476bebfcb63f910b54eccd5f4c3bccd9059dea7 Mon Sep 17 00:00:00 2001 From: Kenshin Date: Wed, 15 Jan 2020 17:52:26 +0800 Subject: [PATCH 290/329] Add feedback ui & logic. --- src/module/feedback.jsx | 174 ++++++++++++++++++++++++++++++++++++++++ webpack.config.js | 1 + 2 files changed, 175 insertions(+) create mode 100644 src/module/feedback.jsx diff --git a/src/module/feedback.jsx b/src/module/feedback.jsx new file mode 100644 index 00000000..afb69e55 --- /dev/null +++ b/src/module/feedback.jsx @@ -0,0 +1,174 @@ +console.log( "===== simpread feedback load =====" ) + +import Switch from 'switch'; +import TextField from 'textfield'; +import Button from 'button'; + +import {browser} from 'browser'; +import * as msg from 'message'; + +export class Feedback extends React.Component { + + static defaultProps = { + user : {}, + url : "", + version : "", + anonymous: false, + product : "https://support.qq.com/product/" + 117464, + } + + static propType = { + user : React.PropTypes.object, + url : React.PropTypes.string, + version : React.PropTypes.string, + anonymous: React.PropTypes.bool, + product : React.PropTypes.string, + } + + state = { + mode: "github", + }; + + onURLChange( event ) { + this.props.url = event.target.value.trim(); + } + + onAnonymousChange( value ) { + this.props.anonymous = value; + } + + onChangeMode( mode ) { + this.setState({ mode }); + } + + onClose() { + $( this.refs.target ) + .addClass( "hide" )[0] + .addEventListener( 'animationend', () => { + ReactDOM.unmountComponentAtNode( $( ".simpread-feedback" )[0] ); + $( ".simpread-feedback" ).remove(); + }, false ); + } + + onSubmitClick() { + this.state.mode == "github" ? this.onGithubClick() : this.onTucaoClick(); + } + + onGithubClick() { + const content = `**小提示** + +> 简悦已经服务 70K+ 的用户,所以你的很多问题,或许已经被前人解决了,所以试着看看以下几个列表中的内容: + +- [用好 Github issues 能解决你大部分的疑问](https://github.com/Kenshin/simpread/issues/533) + +- [常见问题汇总](https://github.com/Kenshin/simpread/issues/618) + +- [代码段的专项整治](https://github.com/Kenshin/simpread/issues/500) + +*** + +> 如上述内容无法解决你的问题,那么请将上述内容删除,并按照下方的提示书写~ 😀 + +**请说明发生问题的环境** + +> 简悦包含了很多平台的版本,所以为了方便定位,建议告诉我一些必要信息 + +- 操作系统 **${window.navigator.platform}** + +- 浏览器版本 **e.g. Chrome 78.0.3904.108** + +- 简悦版本 **${ this.props.version }** + +- 发生问题的地址 <${ this.props.url }> + +**请描述你的问题** + +> 请使用可以 **准确定位到错误** 的语句来告诉我。😀 + +**截图** + +> 一图胜千言,所以方便的话,可以试着贴图。 +`, url = encodeURI( `https://github.com/Kenshin/simpread/issues/new?title=<请描述你的问题>&labels=to do&body=${content}` ) + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url })); + } + + onTucaoClick() { + const data = { + "nickname" : this.props.anonymous ? "简悦用户" : this.props.user.name, + "avatar" : `https://api.adorable.io/avatars/285/${ this.props.user.name || this.props.user.uid.substr( 0,13 ) }.png`, + "openid" : this.props.user.uid, + "clientVersion": this.props.version, + "clientInfo" : window.navigator.userAgent, + "customInfo" : "https://github.com/erguotou520/tucao-dingtalk-webhook" + }; + $.ajax({ + url: this.props.product, + method: "POST", + data + }).done( ( result, textStatus, jqXHR ) => { + browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.new_tab, { url: this.props.product })); + }).fail( error => { + console.log( "count failed ", error ) + }); + } + + render() { + return ( + + + 有了你们的帮助简悦才会变得更好 🙏 + + + 提交的站点,默认为当前页面的地址,可为空 + this.onURLChange(e) } /> + + + 支持两种提交方式 + +