From d36bcec3430171dc8ba32095bb2320683971a677 Mon Sep 17 00:00:00 2001 From: dongyuanxin Date: Wed, 15 May 2019 12:31:18 +0800 Subject: [PATCH 1/5] rewrite serverless codes with es6 class and interface pattern --- src/serverless/bomb.js | 76 ++++++++++++++++--------------- src/serverless/index.js | 20 ++++---- src/serverless/interface.js | 15 ++++++ src/serverless/leancloud.js | 91 +++++++++++++++++++------------------ 4 files changed, 113 insertions(+), 89 deletions(-) create mode 100644 src/serverless/interface.js diff --git a/src/serverless/bomb.js b/src/serverless/bomb.js index 52966fd..c069a05 100644 --- a/src/serverless/bomb.js +++ b/src/serverless/bomb.js @@ -1,52 +1,56 @@ import config from './../config' +import ServerLessInterface from './interface' -function Hydrogen() { - const { - Bomb, - bomb: { - appId, - restApi - } - } = config +const { + Bomb, + bomb: { + appId, + restApi + } +} = config - Bomb.initialize(appId, restApi) -} +class Hydrogen extends ServerLessInterface { + constructor () { + super() + Bomb.initialize(appId, restApi) + } -Hydrogen.prototype.ACL = function () { - return { - '*': { - read: true + ACL () { + return { + '*': { + read: true + } } } -} -Hydrogen.prototype.setData = async function(table, data) { - const query = Bmob.Query(table) + async setData (table, data) { + const query = Bmob.Query(table) - for (let key of Reflect.ownKeys(data)) { - query.set(key, data[key]) - } + for (let key of Reflect.ownKeys(data)) { + query.set(key, data[key]) + } - query.set('ACL', this.ACL()) + query.set('ACL', this.ACL()) - try { - await query.save() - return true - } catch (error) { - return false + try { + await query.save() + return true + } catch (error) { + return false + } } -} -Hydrogen.prototype.count = async function(table, url) { - const query = Bmob.Query(table) - if (typeof url === 'string' && url.length > 0) { - query.equalTo('URL', '==', url) - } + async count (table, url) { + const query = Bmob.Query(table) + if (typeof url === 'string' && url.length > 0) { + query.equalTo('URL', '==', url) + } - try { - return await query.count() - } catch (error) { - return 0 + try { + return await query.count() + } catch (error) { + return 0 + } } } diff --git a/src/serverless/index.js b/src/serverless/index.js index 3daf8ab..ca86f36 100644 --- a/src/serverless/index.js +++ b/src/serverless/index.js @@ -1,16 +1,18 @@ import LeanCloud from './leancloud' import Bomb from './bomb' -function ServerLessFactory(name) { - name = name.toLocaleLowerCase() +class ServerLessFactory { + constructor (name) { + name = name.toLocaleLowerCase() - switch (name) { - case 'leancloud': - return new LeanCloud() - case 'bomb': - return new Bomb() - default: - throw new Error('Serverless must be one of [leancloud]') + switch (name) { + case 'leancloud': + return new LeanCloud() + case 'bomb': + return new Bomb() + default: + throw new Error('Serverless must be one of [ leancloud, bomb ]') + } } } diff --git a/src/serverless/interface.js b/src/serverless/interface.js new file mode 100644 index 0000000..d2e2469 --- /dev/null +++ b/src/serverless/interface.js @@ -0,0 +1,15 @@ +export default class ServerLessInterface { + constructor () {} + + ACL () { + throw new Error('Interface method "ACL" must be rewritten') + } + + setData () { + throw new Error('Interface method "setData" must be rewritten') + } + + count () { + throw new Error('Interface method "count" must be rewritten') + } +} \ No newline at end of file diff --git a/src/serverless/leancloud.js b/src/serverless/leancloud.js index ba74656..e5f4a65 100644 --- a/src/serverless/leancloud.js +++ b/src/serverless/leancloud.js @@ -1,54 +1,57 @@ import config from './../config' - -function LeanCloud() { - const { - leancloud, - AV - } = config - - AV.init({ - appId: leancloud.appId, - appKey: leancloud.appKey - }) -} - -LeanCloud.prototype.ACL = function() { - const acl = new AV.ACL() - acl.setPublicReadAccess(true) - acl.setPublicWriteAccess(false) - return acl -} - -LeanCloud.prototype.setData = async function(table, data) { - const Obj = AV.Object.extend(table) - const obj = new Obj() - - for (let key of Reflect.ownKeys(data)) { - obj.set(key, data[key]) +import ServerLessInterface from './interface' + +const { + leancloud: { + appId, + appKey + }, + AV +} = config + +class LeanCloud extends ServerLessInterface { + constructor () { + super() + AV.init({appId, appKey}) } - - obj.setACL(this.ACL()) - try { - await obj.save() - return true - } catch (error) { - return false + ACL () { + const acl = new AV.ACL() + acl.setPublicReadAccess(true) + acl.setPublicWriteAccess(false) + return acl } -} -LeanCloud.prototype.count = async function(table, url) { - const query = new AV.Query(table) - if (typeof url === 'string' && url.length > 0) { - query.equalTo('URL', url) - } + async setData (table, data) { + const Obj = AV.Object.extend(table) + const obj = new Obj() + + for (let key of Reflect.ownKeys(data)) { + obj.set(key, data[key]) + } + + obj.setACL(this.ACL()) - try { - return await query.count() - } catch (error) { - return 0 + try { + await obj.save() + return true + } catch (error) { + return false + } } -} + async count (table, url) { + const query = new AV.Query(table) + if (typeof url === 'string' && url.length > 0) { + query.equalTo('URL', url) + } + + try { + return await query.count() + } catch (error) { + return 0 + } + } +} export default LeanCloud \ No newline at end of file From c9b41e55c7a5c21f00c8b7b587091fb9ba7bbac2 Mon Sep 17 00:00:00 2001 From: dongyuanxin Date: Wed, 15 May 2019 13:10:42 +0800 Subject: [PATCH 2/5] update examples --- examples/bomb.html | 35 ------------------------------ examples/index.html | 11 ++++++---- examples/leancloud.html | 35 ------------------------------ examples/static/style.css | 45 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 51 insertions(+), 75 deletions(-) delete mode 100644 examples/bomb.html delete mode 100644 examples/leancloud.html diff --git a/examples/bomb.html b/examples/bomb.html deleted file mode 100644 index f227450..0000000 --- a/examples/bomb.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - Bomb | 极简网页计数器 - - - - - - -
- 这是关于Bomb平台的demo -
-
- 网站总浏览量: -
-
- 当前页面浏览量: -
- - - - - \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index 21c9844..8e19dc1 100644 --- a/examples/index.html +++ b/examples/index.html @@ -15,6 +15,11 @@ --> +
+ LEANCLOUD + BOMB + NPM +
- - 全站访问人数: | - 当前页面访问人数: - + 全站访问人数: | + 当前页面访问人数:
- - - - \ No newline at end of file diff --git a/examples/static/style.css b/examples/static/style.css index 046126e..04e493f 100644 --- a/examples/static/style.css +++ b/examples/static/style.css @@ -24,6 +24,49 @@ body { min-height: 100vh; min-width: 100vw; background: #0C0C0C; + font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; +} + +header { + position: fixed; + width: 100vw; + left: 0; + padding: 20px; + text-align: center; +} + +header a { + position: relative; + text-decoration: none; + text-transform: uppercase; + font-size: 9px; + font-weight: bold; + margin: 0 15px; + user-select: none; + letter-spacing: 1px; + color: rgb(101, 103, 101); +} + +header a::before { + content: ""; + position: absolute; + width: 100%; + height: 1px; + bottom: -5px; + left: 0; + background-color: white; + visibility: hidden; + transform: scaleX(0); + transition: all .25s ease; +} + +header a:hover { + color: white; +} + +header a:hover::before { + visibility: visible; + transform: scaleX(1); } .logo { @@ -67,7 +110,7 @@ body { footer { text-align: center; position: fixed; - bottom: 10px; + bottom: 20px; left: 50%; transform: translateX(-50%); color: rgb(101, 103, 101); From f1365b7b162fa56d058e9c4b0fd8b17b830d66aa Mon Sep 17 00:00:00 2001 From: dongyuanxin Date: Wed, 15 May 2019 13:28:41 +0800 Subject: [PATCH 3/5] add copyright print --- src/index.js | 5 ++++- src/utils.js | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index f361ec2..3489ef9 100644 --- a/src/index.js +++ b/src/index.js @@ -2,9 +2,12 @@ import ServerLessFactory from './serverless' import config from './config' import { PowerDate, - formatURL + formatURL, + copyright } from './utils' +copyright() + const platform = config.serverless const serverless = new ServerLessFactory(platform) diff --git a/src/utils.js b/src/utils.js index 3f4808f..84a548a 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,3 +1,5 @@ +import pkg from './../package.json' + function addZeroStr(num) { if (num < 10) { return '0' + num @@ -69,4 +71,13 @@ export function validator(obj, options) { } return [true] +} + +export function copyright() { + console.log( + `\n%c ${pkg.name} v${pkg.version} %c` + + ` ${pkg.homepage} \n` , + 'color: #fadfa3; background: #030307; padding:3px 0;', + '' + ) } \ No newline at end of file From 88e913ae926086ce61c54db0602d40fc0b8b96a5 Mon Sep 17 00:00:00 2001 From: dongyuanxin Date: Wed, 15 May 2019 13:29:11 +0800 Subject: [PATCH 4/5] hotfix get Object method wrong --- src/serverless/bomb.js | 18 ++++++++++-------- src/serverless/leancloud.js | 22 +++++++++++----------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/serverless/bomb.js b/src/serverless/bomb.js index c069a05..27d4fcd 100644 --- a/src/serverless/bomb.js +++ b/src/serverless/bomb.js @@ -1,17 +1,16 @@ import config from './../config' import ServerLessInterface from './interface' -const { - Bomb, - bomb: { - appId, - restApi - } -} = config - class Hydrogen extends ServerLessInterface { constructor () { super() + const { + Bomb, + bomb: { + appId, + restApi + } + } = config Bomb.initialize(appId, restApi) } @@ -24,6 +23,7 @@ class Hydrogen extends ServerLessInterface { } async setData (table, data) { + const { Bomb } = config const query = Bmob.Query(table) for (let key of Reflect.ownKeys(data)) { @@ -41,7 +41,9 @@ class Hydrogen extends ServerLessInterface { } async count (table, url) { + const { Bomb } = config const query = Bmob.Query(table) + if (typeof url === 'string' && url.length > 0) { query.equalTo('URL', '==', url) } diff --git a/src/serverless/leancloud.js b/src/serverless/leancloud.js index e5f4a65..c2797ad 100644 --- a/src/serverless/leancloud.js +++ b/src/serverless/leancloud.js @@ -1,29 +1,29 @@ import config from './../config' import ServerLessInterface from './interface' -const { - leancloud: { - appId, - appKey - }, - AV -} = config - class LeanCloud extends ServerLessInterface { constructor () { super() + const { + leancloud: { + appId, + appKey + }, + AV + } = config AV.init({appId, appKey}) + this.AV = AV } ACL () { - const acl = new AV.ACL() + const acl = new this.AV.ACL() acl.setPublicReadAccess(true) acl.setPublicWriteAccess(false) return acl } async setData (table, data) { - const Obj = AV.Object.extend(table) + const Obj = this.AV.Object.extend(table) const obj = new Obj() for (let key of Reflect.ownKeys(data)) { @@ -41,7 +41,7 @@ class LeanCloud extends ServerLessInterface { } async count (table, url) { - const query = new AV.Query(table) + const query = new this.AV.Query(table) if (typeof url === 'string' && url.length > 0) { query.equalTo('URL', url) } From 41ca616ae14f6b1cc19fc4db1d33e5ea1dcbed5c Mon Sep 17 00:00:00 2001 From: dongyuanxin Date: Wed, 15 May 2019 13:29:33 +0800 Subject: [PATCH 5/5] update info and build codes --- dist/page-counter.min.js | 2 +- package.json | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dist/page-counter.min.js b/dist/page-counter.min.js index 1e06c44..19ca271 100644 --- a/dist/page-counter.min.js +++ b/dist/page-counter.min.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";function r(e){return e<10?"0"+e:e+""}function o(){const e=new Date;return e.now=e.getTime()+"",e.format=(()=>{return`${r(e.getFullYear())}/${r(e.getMonth()+1)}/${r(e.getDate())} ${r(e.getHours())}:${r(e.getMinutes())}:${r(e.getSeconds())}`}),e}function a(e){return(e=e.trim()).startsWith("/")||(e=`/${e}`),e.endsWith("/")||(e=`${e}/`),e}function i(e,t){if(!e||!t)return!1;for(let n of t){const{key:t,required:r,type:o,defaultValue:a,prompt:i}=n;if(r){if(!e.hasOwnProperty(t))return[!1,i||""];if(o&&typeof e[t]!==o)return[!1,i||""]}else!e[t]&&(e[t]=a)}return[!0]}n.r(t);const u=[{key:"table",type:"string",required:!0,prompt:"Please input leancloud table name"},{key:"appId",type:"string",required:!0,prompt:"Please input leancloud appId"},{key:"appKey",type:"string",required:!0,prompt:"Please input leancloud appKey"},{key:"history",type:"number",required:!1,defaultValue:0}],s=[{key:"table",type:"string",required:!0,prompt:"Please input bomb table name"},{key:"appId",type:"string",required:!0,prompt:"Please input bomb appId"},{key:"restApi",type:"string",required:!0,prompt:"Please input bomb restApi"},{key:"history",type:"number",required:!1,defaultValue:0}];var c=new class{constructor(){}get serverless(){if(!window.PAGE_COUNTER_CONFIG)throw new Error("Please init variable window.PAGE_COUNTER_CONFIG");return window.PAGE_COUNTER_CONFIG.serverless||"leancloud"}get AV(){if(!window.AV)throw new Error("Please import leancloud-storage sdk");return window.AV}get Bomb(){if(!window.Bmob)throw new Error("Please import hydrogen sdk");return window.Bomb}get leancloud(){if(!window.PAGE_COUNTER_CONFIG)throw new Error("Please init variable window.PAGE_COUNTER_CONFIG");const{leancloud:e}=window.PAGE_COUNTER_CONFIG,[t,n]=i(e,u);if(!t)throw new Error(n);return e}get bomb(){if(!window.PAGE_COUNTER_CONFIG)throw new Error("Please init variable window.PAGE_COUNTER_CONFIG");const{bomb:e}=window.PAGE_COUNTER_CONFIG,[t,n]=i(e,s);if(!t)throw new Error(n);return e}};function l(){const{leancloud:e,AV:t}=c;t.init({appId:e.appId,appKey:e.appKey})}l.prototype.ACL=function(){const e=new AV.ACL;return e.setPublicReadAccess(!0),e.setPublicWriteAccess(!1),e},l.prototype.setData=async function(e,t){const n=new(AV.Object.extend(e));for(let e of Reflect.ownKeys(t))n.set(e,t[e]);n.setACL(this.ACL());try{return await n.save(),!0}catch(e){return!1}},l.prototype.count=async function(e,t){const n=new AV.Query(e);"string"==typeof t&&t.length>0&&n.equalTo("URL",t);try{return await n.count()}catch(e){return 0}};var p=l;function f(){const{Bomb:e,bomb:{appId:t,restApi:n}}=c;e.initialize(t,n)}f.prototype.ACL=function(){return{"*":{read:!0}}},f.prototype.setData=async function(e,t){const n=Bmob.Query(e);for(let e of Reflect.ownKeys(t))n.set(e,t[e]);n.set("ACL",this.ACL());try{return await n.save(),!0}catch(e){return!1}},f.prototype.count=async function(e,t){const n=Bmob.Query(e);"string"==typeof t&&t.length>0&&n.equalTo("URL","==",t);try{return await n.count()}catch(e){return 0}};var d=f;var w=function(e){switch(e=e.toLocaleLowerCase()){case"leancloud":return new p;case"bomb":return new d;default:throw new Error("Serverless must be one of [leancloud]")}};const y=c.serverless,b=new w(y);var m={setData:async function(){const e=new o,t={URL:a(window.location.pathname||""),UserAgent:window.navigator.userAgent,CreateTime:e.format(),CreateTimeStamp:e.now};b.setData(c[y].table,t)},countTotal:async function(){const e=document.querySelector("#page-counter-total-times");if(!e)return;const t=await b.count(c[y].table);e.innerHTML=t+c[y].history},countSingle:async function(){const e=document.querySelector("#page-counter-single-times");if(!e)return;const t=await b.count(c[y].table,a(window.location.pathname||""));e.innerHTML=t}};m.setData(),m.countTotal(),m.countSingle()}]); \ No newline at end of file +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(e){e.exports={name:"page-counter",version:"1.3.4",description:"基于Serverless开发的的极简网页计数器,支持基于Hexo、Jekyll、Octopress、ReactJS、VueJS等框架开发的博客、网站、中后台等任何应用。",main:"index.js",scripts:{dev:"webpack-dev-server --env development --open --config build/webpack.base.conf.js",build:"webpack --env production --config build/webpack.base.conf.js",test:'echo "Error: no test specified" && exit 1'},repository:{type:"git",url:"git+ssh://git@github.com/dongyuanxin/page-counter.git"},keywords:["pv","counter","blog","serverless","analysis","es6"],author:"DongYuanxin",license:"MIT",bugs:{url:"https://github.com/dongyuanxin/page-counter/issues"},homepage:"https://godbmw.com/page-counter/",devDependencies:{"html-webpack-plugin":"^3.2.0",mysql:"^2.17.1",webpack:"^4.30.0","webpack-cli":"^3.3.2","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.1"},dependencies:{"hydrogen-js-sdk":"^1.6.7","leancloud-storage":"^3.13.1"}}},function(e,t,r){"use strict";r.r(t);var n=r(0);function o(e){return e<10?"0"+e:e+""}function a(){const e=new Date;return e.now=e.getTime()+"",e.format=(()=>{return`${o(e.getFullYear())}/${o(e.getMonth()+1)}/${o(e.getDate())} ${o(e.getHours())}:${o(e.getMinutes())}:${o(e.getSeconds())}`}),e}function s(e){return(e=e.trim()).startsWith("/")||(e=`/${e}`),e.endsWith("/")||(e=`${e}/`),e}function i(e,t){if(!e||!t)return!1;for(let r of t){const{key:t,required:n,type:o,defaultValue:a,prompt:s}=r;if(n){if(!e.hasOwnProperty(t))return[!1,s||""];if(o&&typeof e[t]!==o)return[!1,s||""]}else!e[t]&&(e[t]=a)}return[!0]}const u=[{key:"table",type:"string",required:!0,prompt:"Please input leancloud table name"},{key:"appId",type:"string",required:!0,prompt:"Please input leancloud appId"},{key:"appKey",type:"string",required:!0,prompt:"Please input leancloud appKey"},{key:"history",type:"number",required:!1,defaultValue:0}],c=[{key:"table",type:"string",required:!0,prompt:"Please input bomb table name"},{key:"appId",type:"string",required:!0,prompt:"Please input bomb appId"},{key:"restApi",type:"string",required:!0,prompt:"Please input bomb restApi"},{key:"history",type:"number",required:!1,defaultValue:0}];var l=new class{constructor(){}get serverless(){if(!window.PAGE_COUNTER_CONFIG)throw new Error("Please init variable window.PAGE_COUNTER_CONFIG");return window.PAGE_COUNTER_CONFIG.serverless||"leancloud"}get AV(){if(!window.AV)throw new Error("Please import leancloud-storage sdk");return window.AV}get Bomb(){if(!window.Bmob)throw new Error("Please import hydrogen sdk");return window.Bomb}get leancloud(){if(!window.PAGE_COUNTER_CONFIG)throw new Error("Please init variable window.PAGE_COUNTER_CONFIG");const{leancloud:e}=window.PAGE_COUNTER_CONFIG,[t,r]=i(e,u);if(!t)throw new Error(r);return e}get bomb(){if(!window.PAGE_COUNTER_CONFIG)throw new Error("Please init variable window.PAGE_COUNTER_CONFIG");const{bomb:e}=window.PAGE_COUNTER_CONFIG,[t,r]=i(e,c);if(!t)throw new Error(r);return e}};class p{constructor(){}ACL(){throw new Error('Interface method "ACL" must be rewritten')}setData(){throw new Error('Interface method "setData" must be rewritten')}count(){throw new Error('Interface method "count" must be rewritten')}}var d=class extends p{constructor(){super();const{leancloud:{appId:e,appKey:t},AV:r}=l;r.init({appId:e,appKey:t}),this.AV=r}ACL(){const e=new this.AV.ACL;return e.setPublicReadAccess(!0),e.setPublicWriteAccess(!1),e}async setData(e,t){const r=new(this.AV.Object.extend(e));for(let e of Reflect.ownKeys(t))r.set(e,t[e]);r.setACL(this.ACL());try{return await r.save(),!0}catch(e){return!1}}async count(e,t){const r=new this.AV.Query(e);"string"==typeof t&&t.length>0&&r.equalTo("URL",t);try{return await r.count()}catch(e){return 0}}};var w=class extends p{constructor(){super();const{Bomb:e,bomb:{appId:t,restApi:r}}=l;e.initialize(t,r)}ACL(){return{"*":{read:!0}}}async setData(e,t){const{Bomb:r}=l,n=Bmob.Query(e);for(let e of Reflect.ownKeys(t))n.set(e,t[e]);n.set("ACL",this.ACL());try{return await n.save(),!0}catch(e){return!1}}async count(e,t){const{Bomb:r}=l,n=Bmob.Query(e);"string"==typeof t&&t.length>0&&n.equalTo("URL","==",t);try{return await n.count()}catch(e){return 0}}};var b=class{constructor(e){switch(e=e.toLocaleLowerCase()){case"leancloud":return new d;case"bomb":return new w;default:throw new Error("Serverless must be one of [ leancloud, bomb ]")}}};console.log(`\n%c ${n.name} v${n.version} %c`+` ${n.homepage} \n`,"color: #fadfa3; background: #030307; padding:3px 0;","");const f=l.serverless,y=new b(f);var m={setData:async function(){const e=new a,t={URL:s(window.location.pathname||""),UserAgent:window.navigator.userAgent,CreateTime:e.format(),CreateTimeStamp:e.now};y.setData(l[f].table,t)},countTotal:async function(){const e=document.querySelector("#page-counter-total-times");if(!e)return;const t=await y.count(l[f].table);e.innerHTML=t+l[f].history},countSingle:async function(){const e=document.querySelector("#page-counter-single-times");if(!e)return;const t=await y.count(l[f].table,s(window.location.pathname||""));e.innerHTML=t}};m.setData(),m.countTotal(),m.countSingle()}]); \ No newline at end of file diff --git a/package.json b/package.json index 69ea28a..fb149c2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "page-counter", - "version": "1.3.4", + "version": "1.4.0", "description": "基于Serverless开发的的极简网页计数器,支持基于Hexo、Jekyll、Octopress、ReactJS、VueJS等框架开发的博客、网站、中后台等任何应用。", "main": "index.js", "scripts": { @@ -18,7 +18,9 @@ "blog", "serverless", "analysis", - "es6" + "es6", + "leancloud", + "bomb" ], "author": "DongYuanxin", "license": "MIT",