找回密码
 注册
【阿里云】2核2G云新老同享 99元/年,续费同价华为云精选云产品特惠做网站就用糖果主机Jtti,新加坡服务器,美国服务器,香港服务器
查看: 117|回复: 2

哪位大神帮忙看一下这个JS是什么意思

[复制链接]
发表于 2013 年 7 月 7 日 19:22:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
  1. /*jslint browser: true, continue: true, eqeq: true, plusplus: true, vars: true, white: true */
  2. var FlattrLoader = function() {
  3.     "use strict";
  4.     var a = {
  5.         instance: !1,
  6.         queryString: !1,
  7.         validParams: ["mode", "https", "uid", "category", "button", "language", "html5-key-prefix", "popout", "revsharekey"],
  8.         validButtonParams: ["uid", "owner", "category", "button", "language", "hidden", "tags", "title", "url", "description", "revsharekey", "popout"],
  9.         options: {},
  10.         POPOUT_WIDTH: 401,
  11.         POPOUT_HEIGHT: 230,
  12.         TIMEOUT: 1500,
  13.         createIframe: function(b) {
  14.             var c = b.button == "compact",
  15.             d = document.createElement("iframe");
  16.             return d.setAttribute("src", (this.getParam("https") == 1 ? "https": "http") + "://" + this.getParam("domain", "api.flattr.com") + "/button/view/?" + this.encodeData(b)),
  17.             d.setAttribute("class", "FlattrButton"),
  18.             d.setAttribute("width", c == 1 ? 110 : 55),
  19.             d.setAttribute("height", c == 1 ? 20 : 62),
  20.             d.setAttribute("frameBorder", 0),
  21.             d.setAttribute("scrolling", "no"),
  22.             d.setAttribute("title", "Flattr"),
  23.             d.setAttribute("border", 0),
  24.             d.setAttribute("marginHeight", 0),
  25.             d.setAttribute("marginWidth", 0),
  26.             d.setAttribute("allowTransparency", "true"),
  27.             d.data = b,
  28.             b.popout != 0 && (d.onmouseover = function() {
  29.                 this.popoutIframe === undefined && (a.removeAllOpenPopoutIframes(), a.showPopoutForButton(this), this.popoutIframe.onmouseover = function() {
  30.                     this.timeout && (clearTimeout(this.timeout), this.timeout = undefined)
  31.                 },
  32.                 this.popoutIframe.onmouseout = function() {
  33.                     this.parentNode && (this.timeout = setTimeout(function() {
  34.                         d.popoutIframe && a.removePopoutForButton(d)
  35.                     },
  36.                     a.TIMEOUT))
  37.                 })
  38.             },
  39.             d.onmouseout = function() {
  40.                 this.popoutIframe && (this.popoutIframe.timeout = setTimeout(function() {
  41.                     d.popoutIframe && a.removePopoutForButton(d)
  42.                 },
  43.                 a.TIMEOUT))
  44.             }),
  45.             d
  46.         },
  47.         getAbsolutePositionForElement: function(a) {
  48.             var b = {
  49.                 x: 0,
  50.                 y: 0
  51.             };
  52.             if (a.offsetParent) do b.x += a.offsetLeft,
  53.             b.y += a.offsetTop,
  54.             a = a.offsetParent;
  55.             while (a);
  56.             return b
  57.         },
  58.         showPopoutForButton: function(a) {
  59.             var b, c = "s",
  60.             d = "e",
  61.             e = window.innerWidth !== undefined ? window.innerWidth: document.documentElement.clientWidth,
  62.             f = window.innerHeight !== undefined ? window.innerHeight: document.documentElement.clientHeight,
  63.             g = this.getAbsolutePositionForElement(a);
  64.             g.x > e / 2 && (d = "w"),
  65.             g.y + Number(a.height) + this.POPOUT_HEIGHT > f && (c = "n"),
  66.             b = c + d,
  67.             a.data.dir = b,
  68.             a.popoutIframe = this.createPopoutIframe(a.data),
  69.             d === "w" ? a.popoutIframe.style.left = Number(g.x) - Number(this.POPOUT_WIDTH) + Number(a.width) + "px": d === "e" && (a.popoutIframe.style.left = g.x + "px"),
  70.             c === "n" ? a.popoutIframe.style.top = Number(g.y) - Number(this.POPOUT_HEIGHT) + "px": c === "s" && (a.popoutIframe.style.top = Number(g.y) + Number(a.height) + "px"),
  71.             document.querySelector("body").appendChild(a.popoutIframe)
  72.         },
  73.         createPopoutIframe: function(a) {
  74.             var b = document.createElement("iframe");
  75.             return b.setAttribute("src", (this.getParam("https") == 1 ? "https": "http") + "://" + this.getParam("domain", "api.flattr.com") + "/button/popout/?" + this.encodeData(a)),
  76.             b.setAttribute("frameBorder", 0),
  77.             b.setAttribute("allowTransparency", "true"),
  78.             b.setAttribute("style", "position: absolute; display:block; z-index: 9999;"),
  79.             b.setAttribute("width", this.POPOUT_WIDTH),
  80.             b.setAttribute("height", this.POPOUT_HEIGHT),
  81.             b
  82.         },
  83.         removePopoutForButton: function(a) {
  84.             a.popoutIframe.timeout && clearTimeout(a.popoutIframe.timeout),
  85.             a.popoutIframe.parentNode.removeChild(a.popoutIframe),
  86.             a.popoutIframe = undefined
  87.         },
  88.         removeAllOpenPopoutIframes: function() {
  89.             var a = document.querySelectorAll("iframe.FlattrButton"),
  90.             b,
  91.             c;
  92.             for (b = 0; b < a.length; b += 1) c = a[b],
  93.             c.popoutIframe && this.removePopoutForButton(c)
  94.         },
  95.         reshowAllOpenPopoutIframes: function() {
  96.             var a = document.querySelectorAll("iframe.FlattrButton"),
  97.             b,
  98.             c;
  99.             for (b = 0; b < a.length; b += 1) c = a[b],
  100.             c.popoutIframe && (this.removePopoutForButton(c), this.showPopoutForButton(c))
  101.         },
  102.         encodeData: function(a) {
  103.             var b, c, d = "";
  104.             for (b in a) a.hasOwnProperty(b) && (c = a[b], b == "description" && (c = this.stripTags(c, "<br>"), c.length > 1e3 && (c = c.substring(0, 1e3))), c = c.replace(/^\s+|\s+$/g, "").replace(/\s{2,}|\t+/g, " "), d += b + "=" + encodeURIComponent(c) + "&");
  105.             return d
  106.         },
  107.         getParam: function(a, b) {
  108.             return typeof this.options[a] != "undefined" ? this.options[a] : b
  109.         },
  110.         init: function() {
  111.             var b, c, d, e, f, g, h, i, j, k, l, m, n = document.getElementsByTagName("script");
  112.             try {
  113.                 for (b = n.length - 1; b >= 0; b--) {
  114.                     c = n[b];
  115.                     if (!c.hasAttribute("src")) continue;
  116.                     d = c.src,
  117.                     e = new RegExp("^(http(?:s?))://(api\\.(?:.*\\.?)flattr\\.(?:com|dev))", "i"),
  118.                     f = d.match(e);
  119.                     if (f) {
  120.                         this.options.domain = f[2].toString(),
  121.                         this.options.https = f[1].toString() == "https" ? 1 : 0,
  122.                         g = d.indexOf("?");
  123.                         if (g) {
  124.                             h = d.substring(++g),
  125.                             i = h.split("&");
  126.                             for (k = 0; k < i.length; k++) j = i[k].split("="),
  127.                             this.validParam(j[0], this.validParams) && (this.options[j[0]] = j[1])
  128.                         }
  129.                         this.instance = c;
  130.                         break
  131.                     }
  132.                 }
  133.             } catch(o) {}
  134.             window.addEventListener !== undefined ? (l = window.addEventListener, m = "message") : (l = window.attachEvent, m = "onmessage"),
  135.             l(m,
  136.             function(b) {
  137.                 var c;
  138.                 try {
  139.                     c = JSON.parse(b.data)
  140.                 } catch(d) {
  141.                     c = {}
  142.                 }
  143.                 c.flattr_button_event === "popout_close_button_clicked" ? a.removeAllOpenPopoutIframes() : c.flattr_button_event === "click_successful" && a.reshowAllOpenPopoutIframes()
  144.             },
  145.             !1);
  146.             switch (this.getParam("mode", "manual")) {
  147.             case "direct":
  148.                 this.render();
  149.                 break;
  150.             case "auto":
  151.             case "automatic":
  152.                 var p = this;
  153.                 this.domReady(function() {
  154.                     p.setup()
  155.                 });
  156.                 break;
  157.             case "manual":
  158.             default:
  159.             }
  160.             return this
  161.         },
  162.         loadButton: function(a) {
  163.             var b, c, d, e, f, g = {},
  164.             h = null;
  165.             for (b in this.options) this.options.hasOwnProperty(b) && this.validParam(b, this.validButtonParams) && (g[b] = this.options[b]);
  166.             a.href && (g.url = a.href),
  167.             a.getAttribute("title") && (g.title = a.getAttribute("title")),
  168.             a.getAttribute("lang") && (g.language = a.getAttribute("lang")),
  169.             a.innerHTML && (g.description = a.innerHTML);
  170.             if ((h = a.getAttribute("rev")) !== null && h.substring(0, 6) == "flattr" || (h = a.getAttribute("rel")) !== null && h.substring(0, 6) == "flattr") {
  171.                 h = h.substring(7).split(";");
  172.                 for (c = 0; c < h.length; c++) d = h[c].split(":"),
  173.                 e = d.shift(),
  174.                 this.validParam(e, this.validButtonParams) && (g[e] = d.join(":"))
  175.             } else for (f in this.validButtonParams) this.validButtonParams.hasOwnProperty(f) && (h = a.getAttribute(this.getParam("html5-key-prefix", "data-flattr") + "-" + this.validButtonParams[f])) !== null && (g[this.validButtonParams[f]] = h);
  176.             this.replaceWith(a, this.createIframe(g))
  177.         },
  178.         render: function(a, b, c) {
  179.             var d, e = {};
复制代码
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
 楼主| 发表于 2013 年 7 月 7 日 19:22:34 | 显示全部楼层
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价
  1.             for (d in this.options) this.options.hasOwnProperty(d) && this.validParam(d, this.validButtonParams) && (e[d] = this.options[d]);
  2.             try {
  3.                 if (a) for (d in a) a.hasOwnProperty(d) && this.validParam(d, this.validButtonParams) && (e[d] = a[d]);
  4.                 else window.flattr_uid && (e.uid = window.flattr_uid),
  5.                 window.flattr_url && (e.url = window.flattr_url),
  6.                 window.flattr_btn && (e.button = window.flattr_btn),
  7.                 window.flattr_hide && (e.hidden = window.flattr_hide == 1 ? 1 : 0),
  8.                 window.flattr_cat && (e.category = window.flattr_cat),
  9.                 window.flattr_tag && (e.tags = window.flattr_tag),
  10.                 window.flattr_lng && (e.language = window.flattr_lng),
  11.                 window.flattr_tle && (e.title = window.flattr_tle),
  12.                 window.flattr_dsc && (e.description = window.flattr_dsc);
  13.                 var f = this.createIframe(e);
  14.                 if (b) {
  15.                     typeof b == "string" && (b = document.getElementById(b));
  16.                     switch (c) {
  17.                     case "before":
  18.                         b.parentNode.insertBefore(f, b);
  19.                         break;
  20.                     case "replace":
  21.                         this.replaceWith(b, f);
  22.                         break;
  23.                     case "append":
  24.                     default:
  25.                         b.appendChild(f)
  26.                     }
  27.                 } else this.getParam("mode", "manual") == "direct" && this.replaceWith(this.instance, this.createIframe(e))
  28.             } catch(g) {}
  29.         },
  30.         replaceWith: function(a, b) {
  31.             if (typeof b == "string") if (typeof document.documentElement.outerHTML != "undefined") a.outerHTML = b;
  32.             else {
  33.                 var c = document.createRange();
  34.                 c.selectNode(a),
  35.                 b = c.createContextualFragment(b),
  36.                 a.parentNode.replaceChild(b, a)
  37.             }
  38.             var d = a.parentNode;
  39.             d.replaceChild(b, a)
  40.         },
  41.         setup: function() {
  42.             var a, b, c;
  43.             if (document.querySelectorAll) try {
  44.                 c = document.querySelectorAll("a.FlattrButton")
  45.             } catch(d) {}
  46.             if (c == undefined) {
  47.                 c = [],
  48.                 a = document.getElementsByTagName("a");
  49.                 for (b = a.length - 1; b >= 0; b--) / FlattrButton / .test(a[b].className) && (c[c.length] = a[b])
  50.             }
  51.             for (b = c.length - 1; b >= 0; b--) this.loadButton(c[b])
  52.         },
  53.         stripTags: function(a, b) {
  54.             var c = "",
  55.             d = !1,
  56.             e = [],
  57.             f = [],
  58.             g = "",
  59.             h = 0,
  60.             i = "",
  61.             j = "",
  62.             k = function(a, b, c) {
  63.                 return c.split(a).join(b)
  64.             };
  65.             b && (f = b.match(/([a-zA-Z0-9]+)/gi)),
  66.             a += "",
  67.             e = a.match(/(<\/?[\S][^>]*>)/gi);
  68.             for (c in e) if (e.hasOwnProperty(c)) {
  69.                 if (isNaN(c)) continue;
  70.                 j = e[c].toString(),
  71.                 d = !1;
  72.                 for (i in f) if (f.hasOwnProperty(i)) {
  73.                     g = f[i],
  74.                     h = -1,
  75.                     h != 0 && (h = j.toLowerCase().indexOf("<" + g + ">")),
  76.                     h != 0 && (h = j.toLowerCase().indexOf("<" + g + " ")),
  77.                     h != 0 && (h = j.toLowerCase().indexOf("</" + g));
  78.                     if (h == 0) {
  79.                         d = !0;
  80.                         break
  81.                     }
  82.                 }
  83.                 d || (a = k(j, "", a))
  84.             }
  85.             return a
  86.         },
  87.         validParam: function(a, b) {
  88.             var c;
  89.             for (c = 0; c < b.length; c++) if (b[c] == a) return ! 0;
  90.             return ! 1
  91.         }
  92.     };
  93.     return a
  94. } (); !
  95. function(a, b) {
  96.     function c(a) {
  97.         m = 1;
  98.         while (a = d.shift()) a()
  99.     }
  100.     var d = [],
  101.     e,
  102.     f,
  103.     g = !1,
  104.     h = b.documentElement,
  105.     i = h.doScroll,
  106.     j = "DOMContentLoaded",
  107.     k = "addEventListener",
  108.     l = "onreadystatechange",
  109.     m = /^loade|c/.test(b.readyState);
  110.     b[k] && b[k](j, f = function() {
  111.         b.removeEventListener(j, f, g),
  112.         c()
  113.     },
  114.     g),
  115.     i && b.attachEvent(l, e = function() { / ^c / .test(b.readyState) && (b.detachEvent(l, e), c())
  116.     }),
  117.     a.domReady = i ?
  118.     function(b) {
  119.         self != top ? m ? b() : d.push(b) : function() {
  120.             try {
  121.                 h.doScroll("left")
  122.             } catch(c) {
  123.                 return setTimeout(function() {
  124.                     a.domReady(b)
  125.                 },
  126.                 50)
  127.             }
  128.             b()
  129.         } ()
  130.     }: function(a) {
  131.         m ? a() : d.push(a)
  132.     }
  133. } (FlattrLoader, document),
  134. FlattrLoader.init()
复制代码
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2013 年 7 月 8 日 21:38:55 | 显示全部楼层
不知道。
不过估计没人愿意去看一长串代码
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|金光论坛

GMT+8, 2024 年 11 月 16 日 21:55 , Processed in 0.140865 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表