diff options
Diffstat (limited to '_includes/pageview-providers/leancloud')
-rw-r--r-- | _includes/pageview-providers/leancloud/home.html | 35 | ||||
-rw-r--r-- | _includes/pageview-providers/leancloud/leancloud.js | 72 | ||||
-rw-r--r-- | _includes/pageview-providers/leancloud/post.html | 31 |
3 files changed, 138 insertions, 0 deletions
diff --git a/_includes/pageview-providers/leancloud/home.html b/_includes/pageview-providers/leancloud/home.html new file mode 100644 index 0000000..5dc99b7 --- /dev/null +++ b/_includes/pageview-providers/leancloud/home.html @@ -0,0 +1,35 @@ +{%- include snippets/get-sources.html -%} +{%- assign _sources = __return -%} + +{%- assign _LEANCLOUD_APP_ID = site.pageview.leancloud.app_id -%} +{%- assign _LEANCLOUD_APP_KEY = site.pageview.leancloud.app_key -%} +{%- assign _LEANCLOUD_APP_CLASS = site.pageview.leancloud.app_class -%} + +{%- if _LEANCLOUD_APP_ID and + _LEANCLOUD_APP_KEY and + _LEANCLOUD_APP_CLASS -%} + + <script> + {%- include pageview-providers/leancloud/leancloud.js -%} + </script> + <script> + window.Lazyload.js(['{{ _sources.jquery }}', '{{ _sources.leancloud_js_sdk}}'], function() { + var pageview = window.pageview(AV, { + appId: '{{ _LEANCLOUD_APP_ID }}', + appKey: '{{ _LEANCLOUD_APP_KEY }}', + appClass: '{{ _LEANCLOUD_APP_CLASS }}' + }); + $('.js-pageview').each(function() { + var $this = $(this); + var key = $this.attr('data-page-key'); + pageview.get(key, function(view) { + $this.attr('itemprop', 'userInteractionCount').attr('content', view).text(view); + }); + }); + }); + </script> + +{%- endif -%} + + + diff --git a/_includes/pageview-providers/leancloud/leancloud.js b/_includes/pageview-providers/leancloud/leancloud.js new file mode 100644 index 0000000..32e3ba8 --- /dev/null +++ b/_includes/pageview-providers/leancloud/leancloud.js @@ -0,0 +1,72 @@ +(function() { + function errorHandler(error, callback) { + if (error) { + callback && callback(error); + throw error; + } + } + + function pageview(_AV, options) { + var AV = _AV; + var appId, appKey, appClass; + appId = options.appId; + appKey = options.appKey; + appClass = options.appClass; + AV.init({ + serverURLs: 'https://avoscloud.com', + appId: appId, + appKey: appKey + }); + return { + get: get, + increase: increase + }; + + function searchKey(key) { + var query = new AV.Query(appClass); + query.equalTo('key', key); + return query.first(); + } + + function insert(key, title) { + var Blog = AV.Object.extend(appClass); + var blog = new Blog(); + blog.set('title', title); + blog.set('key', key); + blog.set('views', 0); + return blog.save(); + } + + function increment(result) { + result.increment('views', 1); + return result.save(null, { + fetchWhenSave: true + }); + } + + function get(key, callback) { + searchKey(key).then(function(result) { + if (result) { + callback && callback(result.attributes.views); + } + }, errorHandler); + } + + function increase(key, title, callback) { + searchKey(key).then(function(result) { + if (result) { + increment(result).then(function(result) { + callback && callback(result.attributes.views); + }); + } else { + insert(key, title).then(function(result) { + increment(result).then(function(result) { + callback && callback(result.attributes.views); + }); + }, errorHandler); + } + }, errorHandler); + } + } + window.pageview = pageview; +})(); diff --git a/_includes/pageview-providers/leancloud/post.html b/_includes/pageview-providers/leancloud/post.html new file mode 100644 index 0000000..ebd7510 --- /dev/null +++ b/_includes/pageview-providers/leancloud/post.html @@ -0,0 +1,31 @@ +{%- include snippets/get-sources.html -%} +{%- assign _sources = __return -%} + +{%- assign _LEANCLOUD_APP_ID = site.pageview.leancloud.app_id -%} +{%- assign _LEANCLOUD_APP_KEY = site.pageview.leancloud.app_key -%} +{%- assign _LEANCLOUD_APP_CLASS = site.pageview.leancloud.app_class -%} + +{%- if page.key and + _LEANCLOUD_APP_ID and + _LEANCLOUD_APP_KEY and + _LEANCLOUD_APP_CLASS -%} + + <script> + {%- include pageview-providers/leancloud/leancloud.js -%} + </script> + <script> + window.Lazyload.js(['{{ _sources.jquery }}', '{{ _sources.leancloud_js_sdk}}'], function() { + var pageview = window.pageview(AV, { + appId: '{{ _LEANCLOUD_APP_ID }}', + appKey: '{{ _LEANCLOUD_APP_KEY }}', + appClass: '{{ _LEANCLOUD_APP_CLASS }}' + }); + var key = '{{ page.key }}'; + var title = {{ page.title | jsonify }}; + pageview.increase(key, title, function(view) { + $("[data-page-key='{{ page.key }}']").text(view); + }); + }); + </script> + +{%- endif -%}
\ No newline at end of file |