Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xianmin/hugo-theme-jane.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChen Xianmin <xianmin12@gmail.com>2018-08-20 10:44:15 +0300
committerChen Xianmin <xianmin12@gmail.com>2018-08-20 10:44:15 +0300
commit0f0cac37aba696a308c310d32d0aaa6f85ab5cb8 (patch)
treefc860ceccfc15c3c3930b3ea9cfc0c155576b565
parent1af02095e0f72916e1f4f54737215e36a6140c20 (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.toml5
-rw-r--r--layouts/partials/scripts.html114
-rw-r--r--layouts/post/single.html8
-rw-r--r--layouts/post/summary.html7
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 -->