text: /**
   * jQuery.ScrollTo - Easy element scrolling using jQuery.
   * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
   * Dual licensed under MIT and GPL.
   * Date: 5/25/2009
   * @author Ariel Flesler
   * @version 1.4.2
   *
   * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
   */
  ;(function (d) {
      var k = d.scrollTo = function (a, i, e) {
          d(window).scrollTo(a, i, e)
      };
      k.defaults = {axis: 'xy', duration: parseFloat(d.fn.jquery) >= 1.3 ? 0 : 1};
      k.window = function (a) {
          return d(window)._scrollable()
      };
      d.fn._scrollable = function () {
          return this.map(function () {
              var a = this,
                  i = !a.nodeName || d.inArray(a.nodeName.toLowerCase(), ['iframe', '#document', 'html', 'body']) != -1;
              if (!i) return a;
              var e = (a.contentWindow || a).document || a.ownerDocument || a;
              return d.browser.safari || e.compatMode == 'BackCompat' ? e.body : e.documentElement
          })
      };
      d.fn.scrollTo = function (n, j, b) {
          if (typeof j == 'object') {
              b = j;
              j = 0
          }
          if (typeof b == 'function') b = {onAfter: b};
          if (n == 'max') n = 9e9;
          b = d.extend({}, k.defaults, b);
          j = j || b.speed || b.duration;
          b.queue = b.queue && b.axis.length > 1;
          if (b.queue) j /= 2;
          b.offset = p(b.offset);
          b.over = p(b.over);
          return this._scrollable().each(function () {
              var q = this, r = d(q), f = n, s, g = {}, u = r.is('html,body');
              switch (typeof f) {
                  case'number':
                  case'string':
                      if (/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)) {
                          f = p(f);
                          break
                      }
                      f = d(f, this);
                  case'object':
                      if (f.is || f.style) s = (f = d(f)).offset()
              }
              d.each(b.axis.split(''), function (a, i) {
                  var e = i == 'x' ? 'Left' : 'Top', h = e.toLowerCase(), c = 'scroll' + e, l = q[c], m = k.max(q, i);
                  if (s) {
                      g[c] = s[h] + (u ? 0 : l - r.offset()[h]);
                      if (b.margin) {
                          g[c] -= parseInt(f.css('margin' + e)) || 0;
                          g[c] -= parseInt(f.css('border' + e + 'Width')) || 0
                      }
                      g[c] += b.offset[h] || 0;
                      if (b.over[h]) g[c] += f[i == 'x' ? 'width' : 'height']() * b.over[h]
                  } else {
                      var o = f[h];
                      g[c] = o.slice && o.slice(-1) == '%' ? parseFloat(o) / 100 * m : o
                  }
                  if (/^\d+$/.test(g[c])) g[c] = g[c] <= 0 ? 0 : Math.min(g[c], m);
                  if (!a && b.queue) {
                      if (l != g[c]) t(b.onAfterFirst);
                      delete g[c]
                  }
              });
              t(b.onAfter);
  
              function t(a) {
                  r.animate(g, j, b.easing, a && function () {
                      a.call(this, n, b)
                  })
              }
          }).end()
      };
      k.max = function (a, i) {
          var e = i == 'x' ? 'Width' : 'Height', h = 'scroll' + e;
          if (!d(a).is('html,body')) return a[h] - d(a)[e.toLowerCase()]();
          var c = 'client' + e, l = a.ownerDocument.documentElement, m = a.ownerDocument.body;
          return Math.max(l[h], m[h]) - Math.min(l[c], m[c])
      };
  
      function p(a) {
          return typeof a == 'object' ? a : {top: a, left: a}
      }
  })(jQuery);
  
  
  (function ($) {
  
      $(function () {
  
          /* toggle links */
          $('.toggle-link').click(function (e) {
  
              var target = $($(this).attr('href')).toggleClass('hidden');
  
              $.scrollTo(target);
  
              e.preventDefault();
  
          });
  
      });
  
  })(this.jQuery);
  
  let websocket = null;
  
  //判断当前浏览器是否支持WebSocket
  if ('WebSocket' in window) {
      //连接WebSocket节点
      websocket = new WebSocket("ws://localhost:8080/");
  } else {
      alert('Not support websocket')
  }
  
  
  //连接发生错误的回调方法
  websocket.onerror = function () {
      setMessageInnerHTML("爬虫通道连接失败");
  };
  
  
  //连接成功建立的回调方法
  websocket.onopen = function (event) {
      setMessageInnerHTML("爬虫通道链接成功");
  }
  
  
  //接收到消息的回调方法
  websocket.onmessage = function (event) {
      setMessageInnerHTML(event.data);
  }
  
  
  //连接关闭的回调方法
  websocket.onclose = function () {
      setMessageInnerHTML("爬虫通道已关闭");
  }
  
  
  //监听窗口关闭事件，当窗口关闭时，主动去关闭websocket连接，防止连接还没断开就关闭窗口，server端会抛异常。
  window.onbeforeunload = function () {
      websocket.close();
      setMessageInnerHTML("爬虫通道已关闭");
  }
  
  
  //将消息显示在网页上
  function setMessageInnerHTML(innerHTML) {
      if (innerHTML.toString() === "爬虫采集已结束,请在数据库中进行查看,或导出为Excel格式进行查看！") {
          alert(innerHTML)
          document.getElementById('message').innerHTML = "<td class='dashed'>" + innerHTML + "</td>"
      } else {
          document.getElementById('message').innerHTML += "<td class='dashed'>" + innerHTML + "</td>";
      }
  }
  
  
  //开启爬虫
  
  function tmall() {
      $.ajax({
          url: '/tmall/run',
          type: 'post',
          contentType: 'application/json;charset=utf-8',
          success: function () {
              console.log("爬取成功")
          },
          error: function (error) {
              console.log('接口不通' + error)
          },
      })
  }
  
  function crawler() {
      $.ajax({
          url: '/crawler/run',
          type: 'post',
          contentType: 'application/json;charset=utf-8',
          success: function () {
              console.log("爬取成功！")
          },
          error: function (error) {
              console.log('接口不通' + error);
          },
      })
  }
  
  
  function exportExcelInfo() {
      $.ajax({
          url: '/exportExcelInfo',
          type: 'post',
          contentType: 'application/json;charset=utf-8',
          success: function () {
              console.log("导出数据成功")
          },
          error: function (error) {
              console.log('接口不通' + error);
          },
      })
  }
  
  function exportExcelDomain() {
      $.ajax({
          url: '/exportExcelDomain',
          type: 'post',
          contentType: 'application/json;charset=utf-8',
          success: function () {
              console.log("导出数据成功")
          },
          error: function (error) {
              console.log('接口不通' + error);
          },
      })
  }
  
  function exportExcelTest() {
      $.ajax({
          url: '/exportExcelTest',
          type: 'post',
          contentType: 'application/json;charset=utf-8',
          success: function () {
              console.log("导出数据成功")
          },
          error: function (error) {
              console.log('接口不通' + error);
          },
      })
  }