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. C指针 的一些练习

    注:此篇是我使用指针敲的一些题目的集成,有一些代码是重复的(挠头).这样做的目的是进行前后的一些比较和收获一些心得(?). 关于上一次我上台的题目: 题目:输入十个整数,进行排序. 做法1:(传递指针 ...

  2. jerichotab 初始化页面显示tab页中的第一个

    tab初始化默认显示第一个内容,但是tab标签显示最后一个. 源代码: $.fn.initJerichoTab({ renderTo: '#consumable', uniqueId: 'jerich ...

  3. FAILED Selenium2Library

    FAILED Selenium2Library Importing test library 'Selenium2Library' failed: ImportError: cannot import ...

  4. ASCII 可打印字符与控制字符

    2017-08-16 21:29:30 基本的 ASCII 字符集共有 128 个字符,其中有 95 个可打印字符,包括常用的字母.数字.标点符号等,另外还有 33 个控制字符.标准 ASCII 码使 ...

  5. spring boot: @Entity @Repository一个简单的数据读存储读取

    spring boot: @Entity @Repository一个简单的数据读存储读取 创建了一个实体类. 如何持久化呢?1.使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中 ...

  6. vsftpd配置手册(实用)

    作者: 木頭    来源: PHPChina 开源社区门户1.vsftpd配置参数详细整理 #接受匿名用户 anonymous_enable=YES #匿名用户login时不询问口令 no_anon_ ...

  7. 雷林鹏分享:C# 运算符重载

    C# 运算符重载 您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的.与其 ...

  8. Ngnix location匹配规则

    Ngnix 站点:http://www.nginx.cn Location 匹配命令 ~ 波浪线表示执行一个正则匹配,区分大小写. ~* 表示执行一个正则匹配,不区分大小写. ^~ ^~表示普通字符匹 ...

  9. CF 711B - Chris and Magic Square

    挺简单的一道题,但是做的时候没想好就开始写代码了,导致迷之WA,还是要多练习啊. #include <iostream> #include <cstdio> #include ...

  10. 数据库,ADO.NET(ADO),Oledb(Odbc)和编程语言关系框架图

    ---恢复内容开始--- ---恢复内容结束---