import { oneObject, recyclables, typeNumber } from "./util";

//用于后端的元素节点
export function DOMElement(type) {
this.nodeName = type;
this.style = {};
this.children = [];
}

//如果仅仅通过引用 SVG 的命名空间,就能够把 SVG 元素之间添加到 HTML 代码中,那就太棒了
export var NAMESPACE = {
svg: "http://www.w3.org/2000/svg",
xmlns: "http://www.w3.org/2000/xmlns/",
xlink: "http://www.w3.org/1999/xlink",
math: "http://www.w3.org/1998/Math/MathML"
}; var fn = (DOMElement.prototype = {
contains: Boolean
});
String(
"replaceChild,appendChild,removeAttributeNS,setAttributeNS,removeAttribute,setAttribute" +
",getAttribute,insertBefore,removeChild,addEventListener,removeEventListener,attachEvent" +
",detachEvent"
).replace(/\w+/g, function (name) {
fn[name] = function () {
console.log("fire " + name); // eslint-disable-line
};
}); //用于后端的document
export var fakeDoc = new DOMElement();
fakeDoc.createElement = fakeDoc.createElementNS = fakeDoc.createDocumentFragment = function (
type
) {
return new DOMElement(type);
};
fakeDoc.createTextNode = fakeDoc.createComment = Boolean;
fakeDoc.documentElement = new DOMElement("html");
fakeDoc.nodeName = "#document";
fakeDoc.textContent = "";
try {
var w = window;
var b = !!w.alert;
} catch (e) {
b = false;
w = {
document: fakeDoc
};
} export var inBrowser = b;
export var win = w; export var document = w.document || fakeDoc;
var isStandard = "textContent" in document;
var fragment = document.createDocumentFragment();
function emptyElement(node) {
var child;
while ((child = node.firstChild)) {
if (child.nodeType === 1) {
emptyElement(child);
}
node.removeChild(child);
}
} export function removeDOMElement(node) {
if (node.nodeType === 1) {
if (isStandard) {
node.textContent = "";
} else {
emptyElement(node);
}
node.__events = null;
} else if (node.nodeType === 3) {
//只回收文本节点
recyclables["#text"].push(node);
}    //经典
fragment.appendChild(node);
fragment.removeChild(node);
} var versions = {
88: 7, //IE7-8 objectobject
80: 6, //IE6 objectundefined
"00": NaN, // other modern browsers
"08": NaN
};
/* istanbul ignore next */ //判断是ie 6,7,8.9,10,11
export var msie =
document.documentMode ||
versions[typeNumber(document.all) + "" + typeNumber(XMLHttpRequest)];

//ie9 才是现代浏览器
export var modern = /NaN|undefined/.test(msie) || msie > 8;

export function createDOMElement(vnode) {
var type = vnode.type;
if (type === "#text") {
//只重复利用文本节点
var node = recyclables[type].pop();
if (node) {
node.nodeValue = vnode.text;
return node;
}
return document.createTextNode(vnode.text);
} if (type === "#comment") {
return document.createComment(vnode.text);
} try {
if (vnode.ns) {
return document.createElementNS(vnode.ns, type);
}
//eslint-disable-next-line
} catch (e) { }
return document.createElement(type);
}
// https://developer.mozilla.org/en-US/docs/Web/MathML/Element/math
var rmathTags = /^m/; var namespaceMap = oneObject("svg", NAMESPACE.svg);
namespaceMap.semantics = NAMESPACE.math;
// http://demo.yanue.net/HTML5element/ "meter,menu,map,meta,mark".replace(/\w+/g, function (tag) {
namespaceMap[tag] = null;
});
export function getNs(type) {
if (namespaceMap[type] !== void 666) {
return namespaceMap[type];
} else {
return namespaceMap[type] = rmathTags.test(type) ? NAMESPACE.math : null;
}
}

anu - browser的更多相关文章

  1. HTML BOM Browser对象

    BOM:Browser Object Model,即浏览器对象模型,提供了独立于内容的.可以与浏览器窗口进行互动的对象结构. Browser对象:指BOM提供的多个对象,包括:Window.Navig ...

  2. 模型浏览器【Model Browser】【EF基础系列6】

    We have created our first Entity Data Model for School database in the previous section. The visual ...

  3. SQLite文件查看工具DB Browser for SQLite

    有时候,我们用Python创建了一个test.sqlite文件,想查看里面的数据,除了用Python连上数据库,SELECT出来,还有什么好办法呢?这里推荐使用一个小工具DB Browser for ...

  4. Selenium通过WebDriver控制IE浏览器出错 Browser zoom level was set to 109%. It should be set to 100%

    错误信息: WebDriverException: Message: Unexpected error launching Internet Explorer. Browser zoom level ...

  5. js get browser vertion (js获取浏览器信息版本)

    1问题:js get browser vertion (js获取浏览器信息版本) 2解决方案 Copy this script into your JavaScript files. It works ...

  6. linux(debian) arm-linux-g++ v4.5.1交叉编译 embedded arm 版本的QtWebkit (browser) 使用qt 4.8.6 版本

    最近需要做一个项目 在arm 架构的linux下 没有桌面环境的情况下拉起 有界面的浏览器使用. 考虑用qt 的界面和 qtwebikt 的库去实现这一系列操作. 本文参考: Qt移植到ARM Lin ...

  7. SQL Server : Browser服务

    SQL Server : Browser服务是SQL Server 2005新增的,简单的说,如果一个物理服务器上面有多个SQL Server实例,那么为了确保客户端能访问到正确的实例,所以SQL S ...

  8. VS2013的 Browser Link 引起的问题

    环境:vs2013 问题:在调用一个WebApi的时候出现了错误: 于是我用Fiddler 4直接调用这个WebApi,状态码是200(正常的),JSon里却提示在位置9409处文本非法, 以Text ...

  9. Visual Studio 2013中因SignalR的Browser Link引起的Javascript错误一则

    众所周知Visual Studio 2013中有一个由SignalR机制实现的Browser Link功能,意思是开发人员可以同时使用多个浏览器进行调试,当按下IDE中的Browser Link按钮后 ...

随机推荐

  1. Hive创建内部表、外部表

    使用hive需要hive环境 启动Hive 进入HIVE_HOME/bin,启动hive ./hive 内部表 建表 hive> create table fz > (id int,nam ...

  2. 03_Kafka集群操作

    1.集群配置思路 1)每台节点上要启动一个broker进程,因此要配置每台的server.properties broker id, log.dirs, zookeeper.connect 2) 每台 ...

  3. Jmeter Connect to Cassandra

    https://github.com/Netflix/CassJMeter/wiki https://stackoverflow.com/questions/40974407/connecting-c ...

  4. HTML表单格式化

    HTML表单格式化 一.说明 用table布局 二.效果 三.代码 <!DOCTYPE html> <html> <head> <title>Form. ...

  5. HTML表单组件

    HTML表单组件 一.说明 form标签里面的东西 二.效果图 三.代码 <!DOCTYPE html> <html> <head> <title>Fo ...

  6. python模块——socket (实现简单的C/S架构端通信操作CMD)

    # 服务端代码#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" import socket impo ...

  7. python-day21--random模块

    >>> import random #随机整数 >>> random.randint(1,5) # 大于等于1且小于等于5之间的整数 >>> ra ...

  8. h5 plus/h5+规范使用,模块索引,教你如何去看h5+的手册

    最近看了下h5+规范的官网,开始觉得晦涩难懂,确实很乱,不过这也是基于我不理解的情况,终于艰难读完了,现在来分享下心得吧,基本看完文章,按我的方法,应该可以直接上手项目. 我准备的工具 hbuilde ...

  9. c++中的const函数

    const变量的基础:(这里给出一个小例子) const *p://*p不可以改 int *const p://p不可以改 const int *const p//二者都不可以改 正文: 在C++中, ...

  10. UVA-10273 Cyborg Genes (DP)

    题目大意:给两个字符串a.b,找出一个最短的字符串c,使得这两个字符串都是c的子序列.只需找出p的最小长度和最小长度时的个数. 题目分析:与LCS问题类似.最小长度的状态转移方程,dp(i,j)=mi ...