diff options
author | Chen Xianmin <xianmin12@gmail.com> | 2018-08-20 10:44:15 +0300 |
---|---|---|
committer | Chen Xianmin <xianmin12@gmail.com> | 2018-08-20 10:44:15 +0300 |
commit | 0f0cac37aba696a308c310d32d0aaa6f85ab5cb8 (patch) | |
tree | fc860ceccfc15c3c3930b3ea9cfc0c155576b565 | |
parent | 1af02095e0f72916e1f4f54737215e36a6140c20 (diff) |
feat: add leancloud counter. #95 #104
This is a visitor counter for chinese user.
怎样使用? https://blog.csdn.net/u013553529/article/details/63357382
-rw-r--r-- | exampleSite/config.toml | 5 | ||||
-rw-r--r-- | layouts/partials/scripts.html | 114 | ||||
-rw-r--r-- | layouts/post/single.html | 8 | ||||
-rw-r--r-- | layouts/post/summary.html | 7 |
4 files changed, 133 insertions, 1 deletions
diff --git a/exampleSite/config.toml b/exampleSite/config.toml index e6042af..0285893 100644 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -134,6 +134,11 @@ defaultContentLanguage = "en" # Default language to use [params.counter.busuanzi] # a Chinese visitor counter # 不蒜子计数器 enable = false + [params.counter.leancloud] # Chinese leancloud visitor counter # leancloud 计数器 + enable = false + appId = "" + appKey = "" + [params.social] # 社交链接 a-email = "mailto:your@email.com" b-stack-overflow = "http://localhost:1313" diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html index f005fca..5d451a5 100644 --- a/layouts/partials/scripts.html +++ b/layouts/partials/scripts.html @@ -86,7 +86,119 @@ <script async src="//dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script> {{ end }} +<!-- Counter leancloud --> +{{ if .Site.Params.counter.leancloud.enable }} + <script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.4.js"></script> + <script type="text/javascript"> + AV.initialize({{ .Site.Params.counter.leancloud.appID }}, {{ .Site.Params.counter.leancloud.appKey }}); + </script> + + <script> + function showHitCount(Counter) { + var query = new AV.Query(Counter); + var entries = []; + var $visitors = $(".leancloud_visitors"); + + $visitors.each(function () { + entries.push($(this).attr("id").trim()); + }); + + query.containedIn('url', entries); + query.find() + .done(function (results) { + var COUNT_CONTAINER_REF = '.leancloud-visitors-count'; + + if (results.length === 0) { + $visitors.find(COUNT_CONTAINER_REF).text(0); + return; + } + + for (var i = 0; i < results.length; i++) { + var item = results[i]; + var url = item.get('url'); + var hits = item.get('hits'); + var element = document.getElementById(url); + + $(element).find(COUNT_CONTAINER_REF).text(hits); + } + for (var i = 0; i < entries.length; i++) { + var url = entries[i]; + var element = document.getElementById(url); + var countSpan = $(element).find(COUNT_CONTAINER_REF); + if (countSpan.text() == '') { + countSpan.text(0); + } + } + }) + .fail(function (object, error) { + console.log("Error: " + error.code + " " + error.message); + }); + } + + function addCount(Counter) { + var $visitors = $(".leancloud_visitors"); + var url = $visitors.attr('id').trim(); + var title = $visitors.attr('data-flag-title').trim(); + var query = new AV.Query(Counter); + + query.equalTo("url", url); + query.find({ + success: function (results) { + if (results.length > 0) { + var counter = results[0]; + counter.fetchWhenSave(true); + counter.increment("hits"); + counter.save(null, { + success: function (counter) { + var $element = $(document.getElementById(url)); + $element.find('.leancloud-visitors-count').text(counter.get('hits')); + }, + error: function (counter, error) { + console.log('Failed to save Visitor num, with error message: ' + error.message); + } + }); + } else { + var newcounter = new Counter(); + /* Set ACL */ + var acl = new AV.ACL(); + acl.setPublicReadAccess(true); + acl.setPublicWriteAccess(true); + newcounter.setACL(acl); + /* End Set ACL */ + newcounter.set("title", title); + newcounter.set("url", url); + newcounter.set("hits", 1); + newcounter.save(null, { + success: function (newcounter) { + var $element = $(document.getElementById(url)); + $element.find('.leancloud-visitors-count').text(newcounter.get('hits')); + }, + error: function (newcounter, error) { + console.log('Failed to create'); + } + }); + } + }, + error: function (error) { + console.log('Error:' + error.code + " " + error.message); + } + }); + } + + $(function () { + var Counter = AV.Object.extend("Counter"); + if ($('.leancloud_visitors').length == 1) { + // in post.html, so add 1 to hit counts + addCount(Counter); + } else if ($('.post-link').length > 1) { + // in index.html, there are many 'leancloud_visitors' and 'post-link', so just show hit counts. + showHitCount(Counter); + } + }); + </script> +{{ end }} + <!-- custom js --> {{ range .Site.Params.customJS }} -<script src="{{ "/js/" | relURL }}{{ . }}"></script> + <script src="{{ "/js/" | relURL }}{{ . }}"></script> {{ end }} diff --git a/layouts/post/single.html b/layouts/post/single.html index 328b180..1e5c6c9 100644 --- a/layouts/post/single.html +++ b/layouts/post/single.html @@ -28,6 +28,14 @@ | 阅读 <span id="busuanzi_value_page_pv"></span> </span> {{ end }} + + <!-- Counter leancloud --> + {{ if .Site.Params.counter.leancloud.enable }} + <span id="{{ .URL }}" class="leancloud_visitors" data-flag-title="{{ .Title }}"> + <span class="post-meta-item-text"> | 阅读 </span> + <span class="leancloud-visitors-count"></span> + </span> + {{ end }} </div> </header> diff --git a/layouts/post/summary.html b/layouts/post/summary.html index 1a56f4f..bf64af5 100644 --- a/layouts/post/summary.html +++ b/layouts/post/summary.html @@ -18,6 +18,13 @@ <span class="more-meta"> {{ i18n "wordCount" .WordCount }} </span> <span class="more-meta"> {{ i18n "readingTime" .ReadingTime }} </span> {{- end }} + <!-- Counter leancloud --> + {{ if .Site.Params.counter.leancloud.enable }} + <span id="{{ .URL }}" class="leancloud_visitors" data-flag-title="{{ .Title }}"> + <span class="post-meta-item-text"> | 阅读 </span> + <span class="leancloud-visitors-count"></span> + </span> + {{ end }} </div> </header> <!-- Content --> |