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. Ubuntu 14.04 python3.6 安装

    参考 how-do-i-install-python-3-6-using-apt-get Ubuntu 14.04 python3.6 安装 sudo add-apt-repository ppa:j ...

  2. Java中关于Arrays.asList()的操作

    我们可以通过Arrays.asList() 产生一个List,但是要记住,我们通过Arrays.asList产生的list是基于一个固定大小的数组的, 仅支持那些不会改变数组大小的操作.所以我们在使用 ...

  3. WPF基础学习笔记整理 (二) XAML

    基础知识: XAML:Extensible Application Markup Language, zammel: 用于实例化.NET对象的标记语言: XMAL使用树形逻辑结构描述UI: BAML: ...

  4. 遇到Io阻塞时会切换任务之【爬虫版】

    #! /usr/bin/env python3 # -*- coding:utf- -*- from urllib import request import gevent,time from gev ...

  5. DB中字段为null,为空,为空字符串,为空格要怎么过滤取出有效值

      比如要求取出微信绑定的,没有解绑的 未绑定,指定字段为null 绑定的,指定字段为某个字符串 解绑的,有的客户用的是更新指定字段为1,有的客户更新指定字段为‘1’ 脏数据的存在,比如该字段为空字符 ...

  6. Qt_2D_画图教程

    1. ZC: 看点:相同的API,QPainter.QPainterDevice和QPainterEngine这3个类 Qt学习之2D绘图(画刷和画笔) http://blog.csdn.net/lp ...

  7. 02_DllZZ.def

    ZC: 在VC6里面,只要有这个文件就可以了.但是到了 VS2010,需要手动的指定使用这个文件才行:VS2010-->项目-->属性--> 来到窗口"??? 属性页&qu ...

  8. js 转码思维

    <body> <script type="text/javascript"> // var el = document.createElement('scr ...

  9. 解决Resource doesn't have a corresponding Go package.问题

    首先上图 这个报错主要是程序要启动没有入口的原因,package main下边的mian方法才是一个程序的入口.这就要 修改目录结构如下图修改并运行就可以了

  10. RabbitMQ入门_06_深入了解ack

    A. Delivery Tag 参考资料:https://www.rabbitmq.com/confirms.html 仔细查看一下 Consumer 的回调方法: public void handl ...