<commit_before>{% if site.leancloud.enable %}
  <script src="https://code.jquery.com/jquery-3.2.0.min.js"></script>
  <script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js"></script>
  <script>AV.initialize("{{site.leancloud.app_id}}", "{{site.leancloud.app_key}}");</script>
  <script>
    //定义一个全局当前IP访问记录对象，用于更新访问记录、更新点赞记录
    var curIpVisitRecord = null;
    //定义一个全局当前文章对象，用于
    var curPost = null;

    //调用API获取IP
    function getVisitorIpAndJudge() {
      //用xml格式获取
      var ip;
      var options = {
        type: 'GET',
        dataType: "xml",
        //async: false, //jquery3中可以直接使用回调函数，不用再指定async
        url: "https://freegeoip.net/xml/"
      };
      $.ajax(options)
      .done(function(data, textStatus, jqXHR) {
        if(textStatus == "success") {
          try {
            var $resp = $(data).children('response');
            ip = $resp.children('ip').text();
          } catch (e) {
            if(window.console){
              console.log(e.message);
            }
          }
        }
        saveOrUpdateIpRecord(ip)
      });

      //用json格式获取
      // var ip;
      // var options = {
      //   type: 'GET',
      //   dataType: "json",
      //   //async: false, //jquery3中可以直接使用回调函数，不用再指定async
      //   url: "https://freegeoip.net/json/?callback=?"
      // };
      // $.ajax(options)
      // .done(function(data, textStatus, jqXHR) {
      //   if(textStatus == "success") {
      //     try {
      //       ip = data.ip;
      //     } catch (e) {
      //       if(window.console){
      //         console.log(e.message);
      //       }
      //     }
      //   }
      //   saveOrUpdateIpRecord(ip)
      // });
    }

    //判断访客是否已访问过该文章，及访问时间，符合条件则增加一次访问次数
    function saveOrUpdateIpRecord(ip) {
      var Visitor = AV.Object.extend("visitors_record");

      var $postInfo = $(".leancloud_visitors");
      var post_url = $postInfo.attr('id').trim();

      var query = new AV.Query(Visitor);

      query.equalTo("visitor_ip", ip);
      query.equalTo("post_url", post_url);
      query.find({
        success: function(results) {
          if (results.length > 0) {
            if(window.console){
              console.log('该IP已访问过该文章');
            }

            curIpVisitRecord = results[0];
            updateIpRecord();
            refreshLikeBtn();
          } else {
            if(window.console){
              console.log('该IP第一次访问该文章，保存新的访问记录，并增加访问次数');
            }

            addPostVisitedTimes();
            addNewIpRecord(ip, post_url);
          }
        },
        error: function(error) {
          if(window.console){
            console.log('Error:' + error.code + " " + error.message);
          }
          addPostVisitedTimes();
        }
      });
    }

    //新增访问次数
    function addPostVisitedTimes() {
      var AV_Posts = AV.Object.extend("Posts");

      // 页面（博客文章）中的信息：leancloud_visitors
      // id为page.url， data-flag-title为page.title
      var $visitors = $(".leancloud_visitors");
      var url = $visitors.attr('id').trim();
      var title = $visitors.attr('data-flag-title').trim();
      var query = new AV.Query(AV_Posts);

      // 只根据文章的url查询LeanCloud服务器中的数据
      query.equalTo("post_url", url);
      query.find({
        success: function(results) {
          if (results.length > 0) {//说明LeanCloud中已经记录了这篇文章
            curPost = results[0];
            curPost.fetchWhenSave(true);
            curPost.increment("visited_times");// 将点击次数加1
            curPost.save(null, {
              success: function(curPost) {
                var $element = $(document.getElementById(url));
                var newTimes = curPost.get('visited_times');
                $element.find('.leancloud-visitors-count').text(newTimes);
              },
              error: function(curPost, error) {
                if(window.console){
                  console.log('Failed to save Visitor num, with error message: ' + error.message);
                }
              }
            });

            //加载点赞数
            loadLikeNums();
          } else {
            // 执行这里，说明LeanCloud中还没有记录此文章
            curPost = new AV_Posts();
            /* Set ACL */
            var acl = new AV.ACL();
            acl.setPublicReadAccess(true);
            acl.setPublicWriteAccess(true);
            curPost.setACL(acl);
            /* End Set ACL */
            curPost.set("post_title", title);// 把文章标题
            curPost.set("post_url", url); // 文章url
            curPost.set("visited_times", 1); // 初始点击次数：1次
            curPost.save(null, { // 上传到LeanCloud服务器中
              success: function(curPost) {
                var $element = $(document.getElementById(url));
                var newTimes = curPost.get('visited_times');
                $element.find('.leancloud-visitors-count').text(newTimes);
              },
              error: function(curPost, error) {
                if(window.console){
                  console.log('Failed to create');
                }
              }
            });
          }
        },
        error: function(error) {
          if(window.console){
            console.log('Error:' + error.code + " " + error.message);
          }
        }
      });
    }

    //仅根据url和title查出当前访问次数，不做+1操作
    function showPostVisitedTimes() {
      var AV_Posts = AV.Object.extend("Posts");

      var $visitors = $(".leancloud_visitors");
      var url = $visitors.attr('id').trim();
      var title = $visitors.attr('data-flag-title').trim();
      var query = new AV.Query(AV_Posts);

      // 只根据文章的url查询LeanCloud服务器中的数据
      query.equalTo("post_url", url);
      query.find({
        success: function(results) {
          if (results.length > 0) {//说明LeanCloud中已经记录了这篇文章
            curPost = results[0];
            var $element = $(document.getElementById(url));
            var newTimes = curPost.get('visited_times');
            $element.find('.leancloud-visitors-count').text(newTimes);

            loadLikeNums();
          } else {
            if(window.console){
              //如果表里没查到记录，那就是异常情况了
              console.log('异常情况，不应该没记录的');
            }
          }
        },
        error: function(error) {
          if(window.console){
            console.log('Error:' + error.code + " " + error.message);
          }
        }
      });
    }

    //更新IP访问记录(有规则限制)<commit_msg>更新错误日志打印及注释<commit_after>{% if site.leancloud.enable %}
  <script src="https://code.jquery.com/jquery-3.2.0.min.js"></script>
  <script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js"></script>
  <script>AV.initialize("{{site.leancloud.app_id}}", "{{site.leancloud.app_key}}");</script>
  <script>
    //定义一个全局当前IP访问记录对象，用于更新访问记录、更新点赞记录
    var curIpVisitRecord = null;
    //定义一个全局当前文章对象，用于
    var curPost = null;

    //调用API获取IP
    function getVisitorIpAndJudge() {
      //用xml格式获取
      var ip;
      var options = {
        type: 'GET',
        dataType: "xml",
        //async: false, //jquery3中可以直接使用回调函数，不用再指定async
        url: "https://freegeoip.net/xml/"
      };
      $.ajax(options)
      .done(function(data, textStatus, jqXHR) {
        if(textStatus == "success") {
          try {
            var $resp = $(data).children('response');
            ip = $resp.children('ip').text();
          } catch (e) {
            if(window.console){
              console.log(e.message);
            }
          }
        }
        saveOrUpdateIpRecord(ip)
      });

      //用json格式获取
      // var ip;
      // var options = {
      //   type: 'GET',
      //   dataType: "json",
      //   //async: false, //jquery3中可以直接使用回调函数，不用再指定async
      //   url: "https://freegeoip.net/json/?callback=?"
      // };
      // $.ajax(options)
      // .done(function(data, textStatus, jqXHR) {
      //   if(textStatus == "success") {
      //     try {
      //       ip = data.ip;
      //     } catch (e) {
      //       if(window.console){
      //         console.log(e.message);
      //       }
      //     }
      //   }
      //   saveOrUpdateIpRecord(ip)
      // });
    }

    //判断访客是否已访问过该文章，及访问时间，符合条件则增加一次访问次数
    function saveOrUpdateIpRecord(ip) {
      var Visitor = AV.Object.extend("visitors_record");

      var $postInfo = $(".leancloud_visitors");
      var post_url = $postInfo.attr('id').trim();

      var query = new AV.Query(Visitor);

      query.equalTo("visitor_ip", ip);
      query.equalTo("post_url", post_url);
      query.find({
        success: function(results) {
          if (results.length > 0) {
            if(window.console){
              console.log('该IP已访问过该文章');
            }

            curIpVisitRecord = results[0];
            updateIpRecord();
            refreshLikeBtn();
          } else {
            if(window.console){
              console.log('该IP第一次访问该文章，保存新的访问记录，并增加访问次数');
            }

            addPostVisitedTimes();
            addNewIpRecord(ip, post_url);
          }
        },
        error: function(error) {
          if(window.console){
            console.log('Error:' + error.code + " " + error.message);
          }
          addPostVisitedTimes();
        }
      });
    }

    //新增访问次数
    function addPostVisitedTimes() {
      var AV_Posts = AV.Object.extend("Posts");

      // 页面（博客文章）中的信息：leancloud_visitors
      // id为page.url， data-flag-title为page.title
      var $visitors = $(".leancloud_visitors");
      var url = $visitors.attr('id').trim();
      var title = $visitors.attr('data-flag-title').trim();
      var query = new AV.Query(AV_Posts);

      // 只根据文章的url查询LeanCloud服务器中的数据
      query.equalTo("post_url", url);
      query.find({
        success: function(results) {
          if (results.length > 0) {//说明LeanCloud中已经记录了这篇文章
            curPost = results[0];
            curPost.fetchWhenSave(true);
            curPost.increment("visited_times");// 将点击次数加1
            curPost.save(null, {
              success: function(curPost) {
                var $element = $(document.getElementById(url));
                var newTimes = curPost.get('visited_times');
                $element.find('.leancloud-visitors-count').text(newTimes);
              },
              error: function(curPost, error) {
                if(window.console){
                  console.log('Failed to save Visitor num, with error message: ' + error.message);
                }
              }
            });

            //加载点赞数
            loadLikeNums();
          } else {
            // 执行这里，说明LeanCloud中还没有记录此文章
            curPost = new AV_Posts();
            /* Set ACL */
            var acl = new AV.ACL();
            acl.setPublicReadAccess(true);
            acl.setPublicWriteAccess(true);
            curPost.setACL(acl);
            /* End Set ACL */
            curPost.set("post_title", title);// 把文章标题
            curPost.set("post_url", url); // 文章url
            curPost.set("visited_times", 1); // 初始点击次数：1次
            curPost.save(null, { // 上传到LeanCloud服务器中
              success: function(curPost) {
                var $element = $(document.getElementById(url));
                var newTimes = curPost.get('visited_times');
                $element.find('.leancloud-visitors-count').text(newTimes);
              },
              error: function(curPost, error) {
                if(window.console){
                  console.log('Failed to create');
                }
              }
            });
          }
        },
        error: function(error) {
          if(window.console){
            console.log('Error:' + error.code + " " + error.message);
          }
        }
      });
    }

    //仅根据url和title查出当前访问次数，不做+1操作
    function showPostVisitedTimes() {
      var AV_Posts = AV.Object.extend("Posts");

      var $visitors = $(".leancloud_visitors");
      var url = $visitors.attr('id').trim();
      var title = $visitors.attr('data-flag-title').trim();
      var query = new AV.Query(AV_Posts);

      // 只根据文章的url查询LeanCloud服务器中的数据
      query.equalTo("post_url", url);
      query.find({
        success: function(results) {
          if (results.length > 0) {//说明LeanCloud中已经记录了这篇文章
            curPost = results[0];
            var $element = $(document.getElementById(url));
            var newTimes = curPost.get('visited_times');
            $element.find('.leancloud-visitors-count').text(newTimes);

            loadLikeNums();
          } else {
            if(window.console){
              //新文章第一次打开时，会查不到记录，如果不是新文章第一次访问，那就是又有BUG了
              console.log('如果当前不是一篇新文章的第一次访问，那代表这是一种异常场景');
            }
          }
        },
        error: function(error) {
          if(window.console){
            console.log('Error:' + error.code + " " + error.message);
          }
        }
      });
    }

    //更新IP访问记录(有规则限制)
{'fraction_non_alphanumeric': 0.14737338785781692, 'fraction_numerical': 0.0029883611198490093, 'mean_word_length': 1.6323742496377562, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 23, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 6}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1418623', 'n_tokens_mistral': 4307, 'n_tokens_neox': 4425, 'n_words': 573}