亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? microformats.js

?? this is Microformats.js for linux
?? JS
?? 第 1 頁 / 共 5 頁
字號:
var EXPORTED_SYMBOLS = ["Microformats", "adr", "tag", "hCard", "hCalendar", "geo"];var Microformats = {  /* When a microformat is added, the name is placed in this list */  list: [],  /* Custom iterator so that microformats can be enumerated as */  /* for (i in Microformats) */  __iterator__: function () {    for (let i=0; i < this.list.length; i++) {      yield this.list[i];    }  },  /**   * Retrieves microformats objects of the given type from a document   *    * @param  name          The name of the microformat (required)   * @param  rootElement   The DOM element at which to start searching (required)   * @param  options       Literal object with the following options:   *                       recurseExternalFrames - Whether or not to search child frames   *                       that reference external pages (with a src attribute)   *                       for microformats (optional - defaults to true)   *                       showHidden -  Whether or not to add hidden microformat   *                       (optional - defaults to false)   *                       debug - Whether or not we are in debug mode (optional   *                       - defaults to false)   * @param  targetArray  An array of microformat objects to which is added the results (optional)   * @return A new array of microformat objects or the passed in microformat    *         object array with the new objects added   */  get: function(name, rootElement, options, targetArray) {    function isAncestor(haystack, needle) {      var parent = needle;      while (parent = parent.parentNode) {        /* We need to check parentNode because defaultView.frames[i].frameElement */        /* isn't a real DOM node */        if (parent == needle.parentNode) {          return true;        }      }      return false;    }    if (!Microformats[name] || !rootElement) {      return;    }    targetArray = targetArray || [];    /* Root element might not be the document - we need the document's default view */    /* to get frames and to check their ancestry */    var defaultView = rootElement.defaultView || rootElement.ownerDocument.defaultView;    var rootDocument = rootElement.ownerDocument || rootElement;    /* If recurseExternalFrames is undefined or true, look through all child frames for microformats */    if (!options || !options.hasOwnProperty("recurseExternalFrames") || options.recurseExternalFrames) {      if (defaultView && defaultView.frames.length > 0) {        for (let i=0; i < defaultView.frames.length; i++) {          if (isAncestor(rootDocument, defaultView.frames[i].frameElement)) {            Microformats.get(name, defaultView.frames[i].document, options, targetArray);          }        }      }    }    /* Get the microformat nodes for the document */    var microformatNodes = [];    if (Microformats[name].className) {      microformatNodes = Microformats.getElementsByClassName(rootElement,                                        Microformats[name].className);      /* alternateClassName is for cases where a parent microformat is inferred by the children */      /* If we find alternateClassName, the entire document becomes the microformat */      if ((microformatNodes.length == 0) && Microformats[name].alternateClassName) {        var altClass = Microformats.getElementsByClassName(rootElement, Microformats[name].alternateClassName);        if (altClass.length > 0) {          microformatNodes.push(rootElement);         }      }    } else if (Microformats[name].attributeValues) {      microformatNodes =        Microformats.getElementsByAttribute(rootElement,                                            Microformats[name].attributeName,                                            Microformats[name].attributeValues);          }    /* Create objects for the microformat nodes and put them into the microformats */    /* array */    for (let i = 0; i < microformatNodes.length; i++) {      /* If showHidden undefined or false, don't add microformats to the list that aren't visible */      if (!options || !options.hasOwnProperty("showHidden") || !options.showHidden) {        if (microformatNodes[i].ownerDocument) {          if (microformatNodes[i].getBoundingClientRect) {            var box = microformatNodes[i].getBoundingClientRect();            box.width = box.right - box.left;            box.height = box.bottom - box.top;          } else {            var box = microformatNodes[i].ownerDocument.getBoxObjectFor(microformatNodes[i]);          }          if ((box.height == 0) || (box.width == 0)) {            continue;          }        }      }      try {        if (options && options.debug) {          /* Don't validate in the debug case so that we don't get errors thrown */          /* in the debug case, we want all microformats, even if they are invalid */          targetArray.push(new Microformats[name].mfObject(microformatNodes[i], false));        } else {          targetArray.push(new Microformats[name].mfObject(microformatNodes[i], true));        }      } catch (ex) {        /* Creation of individual object probably failed because it is invalid. */        /* This isn't a problem, because the page might have invalid microformats */      }    }    return targetArray;  },  /**   * Counts microformats objects of the given type from a document   *    * @param  name          The name of the microformat (required)   * @param  rootElement   The DOM element at which to start searching (required)   * @param  options       Literal object with the following options:   *                       recurseExternalFrames - Whether or not to search child frames   *                       that reference external pages (with a src attribute)   *                       for microformats (optional - defaults to true)   *                       showHidden -  Whether or not to add hidden microformat   *                       (optional - defaults to false)   *                       debug - Whether or not we are in debug mode (optional   *                       - defaults to false)   * @return The new count   */  count: function(name, rootElement, options) {    var mfArray = Microformats.get(name, rootElement, options);    if (mfArray) {      return mfArray.length;    }    return 0;  },  /**   * Returns true if the passed in node is a microformat. Does NOT return true   * if the passed in node is a child of a microformat.   *   * @param  node          DOM node to check   * @return true if the node is a microformat, false if it is not   */  isMicroformat: function(node) {    for (let i in Microformats)    {      if (Microformats[i].className) {        if (Microformats.matchClass(node, Microformats[i].className)) {            return true;        }      } else {        var attribute;        if (attribute = node.getAttribute(Microformats[i].attributeName)) {          var attributeList = Microformats[i].attributeValues.split(" ");          for (let j=0; j < attributeList.length; j++) {            if (attribute.match("(^|\\s)" + attributeList[j] + "(\\s|$)")) {              return true;            }          }        }      }    }    return false;  },  /**   * This function searches a given nodes ancestors looking for a microformat   * and if it finds it, returns it. It does NOT include self, so if the passed   * in node is a microformat, it will still search ancestors for a microformat.   *   * @param  node          DOM node to check   * @return If the node is contained in a microformat, it returns the parent   *         DOM node, otherwise returns null   */  getParent: function(node) {    var xpathExpression;    var xpathResult;    xpathExpression = "ancestor::*[";    for (let i=0; i < Microformats.list.length; i++) {      var mfname = Microformats.list[i];      if (i != 0) {        xpathExpression += " or ";      }      if (Microformats[mfname].className) {        xpathExpression += "contains(concat(' ', @class, ' '), ' " + Microformats[mfname].className + " ')";      } else {        var attributeList = Microformats[mfname].attributeValues.split(" ");        for (let j=0; j < attributeList.length; j++) {          if (j != 0) {            xpathExpression += " or ";          }          xpathExpression += "contains(concat(' ', @" + Microformats[mfname].attributeName + ", ' '), ' " + attributeList[j] + " ')";        }      }    }    xpathExpression += "][1]";    xpathResult = (node.ownerDocument || node).evaluate(xpathExpression, node, null,  Components.interfaces.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE, null);    if (xpathResult.singleNodeValue) {      xpathResult.singleNodeValue.microformat = mfname;      return xpathResult.singleNodeValue;    }    return null;  },  /**   * If the passed in node is a microformat, this function returns a space    * separated list of the microformat names that correspond to this node   *   * @param  node          DOM node to check   * @return If the node is a microformat, a space separated list of microformat   *         names, otherwise returns nothing   */  getNamesFromNode: function(node) {    var microformatNames = [];    var xpathExpression;    var xpathResult;    for (let i in Microformats)    {      if (Microformats[i]) {        if (Microformats[i].className) {          if (Microformats.matchClass(node, Microformats[i].className)) {            microformatNames.push(i);            continue;          }        } else if (Microformats[i].attributeValues) {          var attribute;          if (attribute = node.getAttribute(Microformats[i].attributeName)) {            var attributeList = Microformats[i].attributeValues.split(" ");            for (let j=0; j < attributeList.length; j++) {              /* If we match any attribute, we've got a microformat */              if (attribute.match("(^|\\s)" + attributeList[j] + "(\\s|$)")) {                microformatNames.push(i);                break;              }            }          }        }      }    }    return microformatNames.join(" ");  },  /**   * Outputs the contents of a microformat object for debug purposes.   *   * @param  microformatObject JavaScript object that represents a microformat   * @return string containing a visual representation of the contents of the microformat   */  debug: function debug(microformatObject) {    function dumpObject(item, indent)    {      if (!indent) {        indent = "";      }      var toreturn = "";      var testArray = [];            for (let i in item)      {        if (testArray[i]) {          continue;        }        if (typeof item[i] == "object") {          if ((i != "node") && (i != "resolvedNode")) {            if (item[i] && item[i].semanticType) {              toreturn += indent + item[i].semanticType + " [" + i + "] { \n";            } else {              toreturn += indent + "object " + i + " { \n";            }            toreturn += dumpObject(item[i], indent + "\t");            toreturn += indent + "}\n";          }        } else if ((typeof item[i] != "function") && (i != "semanticType")) {          if (item[i]) {            toreturn += indent + i + "=" + item[i] + "\n";          }        }      }      if (!toreturn && item) {        toreturn = item.toString();      }      return toreturn;    }    return dumpObject(microformatObject);  },  add: function add(microformat, microformatDefinition) {    /* We always replace an existing definition with the new one */    if (!Microformats[microformat]) {      Microformats.list.push(microformat);    }    Microformats[microformat] = microformatDefinition;    microformatDefinition.mfObject.prototype.debug =      function(microformatObject) {        return Microformats.debug(microformatObject)      };  },  /* All parser specific functions are contained in this object */  parser: {    /**     * Uses the microformat patterns to decide what the correct text for a     * given microformat property is. This includes looking at things like     * abbr, img/alt, area/alt and value excerpting.     *     * @param  propnode   The DOMNode to check     * @param  parentnode The parent node of the property. If it is a subproperty,     *                    this is the parent property node. If it is not, this is the     *                    microformat node.     & @param  datatype   HTML/text - whether to use innerHTML or innerText - defaults to text     * @return A string with the value of the property     */    defaultGetter: function(propnode, parentnode, datatype) {      if (((((propnode.localName.toLowerCase() == "abbr") || (propnode.localName.toLowerCase() == "html:abbr")) && !propnode.namespaceURI) ||          ((propnode.localName.toLowerCase() == "abbr") && (propnode.namespaceURI == "http://www.w3.org/1999/xhtml"))) && (propnode.getAttribute("title"))) {        return propnode.getAttribute("title");      } else if ((propnode.nodeName.toLowerCase() == "img") && (propnode.getAttribute("alt"))) {        return propnode.getAttribute("alt");      } else if ((propnode.nodeName.toLowerCase() == "area") && (propnode.getAttribute("alt"))) {        return propnode.getAttribute("alt");      } else if ((propnode.nodeName.toLowerCase() == "textarea") ||                 (propnode.nodeName.toLowerCase() == "select") ||                 (propnode.nodeName.toLowerCase() == "input")) {        return propnode.value;      } else {        var values = Microformats.getElementsByClassName(propnode, "value");        /* Verify that values are children of the propnode */        for (let i = values.length-1; i >= 0; i--) {          if (values[i].parentNode != propnode) {            values.splice(i,1);          }        }        if (values.length > 0) {          var value = "";          for (let j=0;j<values.length;j++) {            value += Microformats.parser.defaultGetter(values[j], propnode, datatype);          }          return value;        }        var s;        if (datatype == "HTML") {          s = propnode.innerHTML;        } else {          if (propnode.innerText) {            s = propnode.innerText;          } else {            s = propnode.textContent;          }        }        /* If we are processing a value node, don't remove whitespace */        if (!Microformats.matchClass(propnode, "value")) {          /* Remove new lines, carriage returns and tabs */          s	= s.replace(/[\n\r\t]/gi, ' ');          /* Replace any double spaces with single spaces */          s	= s.replace(/\s{2,}/gi, ' ');          /* Remove any double spaces that are left */          s	= s.replace(/\s{2,}/gi, '');          /* Remove any spaces at the beginning */          s	= s.replace(/^\s+/, '');          /* Remove any spaces at the end */          s	= s.replace(/\s+$/, '');        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美不卡视频一区| 欧美日韩视频专区在线播放| 亚洲色图制服诱惑 | 69久久99精品久久久久婷婷| 国产综合一区二区| 夜色激情一区二区| 久久综合色之久久综合| 欧美色视频在线| 国产成人日日夜夜| 麻豆精品在线播放| 一区二区三区 在线观看视频| 久久麻豆一区二区| 欧美一级久久久久久久大片| 91福利视频网站| 成人激情视频网站| 精品一区二区三区免费| 性做久久久久久久免费看| 国产精品青草综合久久久久99| 日韩精品一区二区三区视频| 欧美性猛交xxxx乱大交退制版| 北岛玲一区二区三区四区| 久国产精品韩国三级视频| 亚洲成a人v欧美综合天堂| 亚洲欧美电影一区二区| 欧美激情一区二区三区不卡| 日韩精品中文字幕一区| 51精品视频一区二区三区| 欧美视频你懂的| 色欧美乱欧美15图片| 91亚洲精品一区二区乱码| 国产成人av电影免费在线观看| 蜜桃视频一区二区三区| 日本中文在线一区| 日韩电影在线免费看| 午夜欧美在线一二页| 亚洲成av人在线观看| 亚洲一区二区三区激情| 亚洲精品乱码久久久久| 国产精品的网站| 国产精品对白交换视频 | 亚洲一区二区三区自拍| 亚洲精品日韩一| 亚洲精品国产成人久久av盗摄| 专区另类欧美日韩| 亚洲三级电影网站| 一区二区三区四区在线免费观看| 亚洲欧美国产高清| 亚洲综合视频网| 亚洲国产乱码最新视频| 亚洲成在人线免费| 天天综合天天综合色| 蜜桃av一区二区| 精品一区二区三区在线视频| 国产在线日韩欧美| 国产91综合网| 91蜜桃传媒精品久久久一区二区| 91免费观看视频| 欧美日韩精品欧美日韩精品 | 亚洲欧洲另类国产综合| 亚洲欧洲综合另类在线| 亚洲在线观看免费| 日韩电影免费一区| 国内精品免费**视频| 成人精品在线视频观看| 91偷拍与自偷拍精品| 欧美三级三级三级| 日韩欧美国产高清| 中文字幕欧美区| 一区二区在线观看免费| 日韩和欧美的一区| 国产一区二区h| 一本色道久久综合狠狠躁的推荐| 精品视频123区在线观看| 精品日韩欧美在线| 国产精品久久久久影院老司| 亚洲国产精品久久一线不卡| 久久丁香综合五月国产三级网站| 成人午夜av电影| 欧美日韩精品福利| 国产日韩欧美精品综合| 亚洲一级片在线观看| 国产一区二区网址| 色噜噜狠狠成人网p站| 精品日韩在线一区| 亚洲精品老司机| 精品一区二区三区的国产在线播放| 不卡的av在线| 日韩午夜中文字幕| 亚洲免费观看在线视频| 久久成人18免费观看| 色综合天天综合网天天看片| 日韩视频免费直播| 亚洲视频在线一区| 麻豆国产精品一区二区三区 | 国产成人一级电影| 欧美日韩在线播| 国产欧美日韩另类一区| 亚洲成人在线免费| www.日本不卡| 精品欧美乱码久久久久久| 亚洲另类色综合网站| 狠狠色狠狠色合久久伊人| 欧美午夜免费电影| 国产精品久久久久影院亚瑟| 人禽交欧美网站| 91成人在线免费观看| 欧美国产成人在线| 蜜桃精品在线观看| 欧美色图激情小说| 中文字幕欧美一区| 国产精品影音先锋| 欧美大黄免费观看| 午夜精品久久久久久久| 91欧美激情一区二区三区成人| 亚洲日本va午夜在线电影| 美女被吸乳得到大胸91| 成人av一区二区三区| 2023国产精品| 男女激情视频一区| 色综合久久久久久久| 国产欧美日韩综合| 九九国产精品视频| 日韩免费性生活视频播放| 日日夜夜精品视频天天综合网| 在线观看免费一区| 亚洲精品福利视频网站| av一二三不卡影片| 国产精品日韩成人| 极品美女销魂一区二区三区免费| 91 com成人网| 丝袜国产日韩另类美女| 欧美女孩性生活视频| 亚洲国产精品久久不卡毛片| 色噜噜狠狠一区二区三区果冻| 亚洲啪啪综合av一区二区三区| 不卡视频免费播放| 国产精品人妖ts系列视频| 成人亚洲精品久久久久软件| 国产校园另类小说区| 国产福利精品一区| 欧美激情一区二区三区全黄| 风间由美性色一区二区三区| 中文一区一区三区高中清不卡| 国产99久久久久| 国产精品久久久久9999吃药| av不卡免费电影| 亚洲精品伦理在线| 欧美情侣在线播放| 久久精品国产一区二区| 久久久午夜精品| 不卡av电影在线播放| 亚洲男人天堂一区| 欧美日韩一区二区三区四区| 免费在线观看一区| 久久精品人人做人人爽97| 成人app网站| 一区二区激情视频| 欧美精品丝袜中出| 精品一区二区三区免费播放| 国产调教视频一区| 一本大道久久a久久精品综合| 亚洲电影中文字幕在线观看| 欧美精品一卡两卡| 国产乱码一区二区三区| 亚洲欧洲色图综合| 欧美精品123区| 国产在线不卡一区| 中文字幕一区免费在线观看| 日本高清无吗v一区| 男女男精品视频| 国产精品第一页第二页第三页| 欧美午夜免费电影| 国产在线看一区| 亚洲精品写真福利| 欧美精品一区二区三区蜜桃视频 | 日韩精品高清不卡| 久久精品人人做人人综合| 色94色欧美sute亚洲线路二| 日韩av中文字幕一区二区| 欧美激情自拍偷拍| 欧美日本韩国一区| 成人av在线资源网| 日本欧美大码aⅴ在线播放| 国产欧美一区二区精品性| 欧美日韩一区国产| 成人污污视频在线观看| 日本一区中文字幕 | 免费久久精品视频| 国产精品麻豆网站| 欧美一级在线视频| 91亚洲国产成人精品一区二三 | 久久婷婷综合激情| 91黄色免费网站| 国产在线精品一区在线观看麻豆| 一区二区三区四区在线| 精品久久国产字幕高潮| 欧美三级资源在线| 91网站在线播放| 国产精品一二三四| 天天影视色香欲综合网老头|