summaryrefslogtreecommitdiff
path: root/_includes/pageview-providers/leancloud/leancloud.js
diff options
context:
space:
mode:
Diffstat (limited to '_includes/pageview-providers/leancloud/leancloud.js')
-rw-r--r--_includes/pageview-providers/leancloud/leancloud.js72
1 files changed, 72 insertions, 0 deletions
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;
+})();