/* * @Author: 陶秋峰 * @Date: 2016-01-08 08:37:10 * @Last Modified by: 陶秋峰 * @Last Modified time: 2016-01-08 08:50:09 * @CopyRight 蛮蛮工作室 */ import global from './global'; import * as dom from './dom'; let window: Window = global; export function empty(node: HTMLElement | string): void { let el = dom.by_id(node); if("innerHTML" in el){ try{ // fast path el.innerHTML = ""; return; }catch(e){ // innerHTML is readOnly (e.g. TABLE (sub)elements in quirks mode) // Fall through (saves bytes) } } // SVG/strict elements don't support innerHTML for(var c; c = el.lastChild;){ // intentional assignment el.removeChild(c); } } export function to_dom(frag: string): HTMLElement{ let doc = window.document; let master = doc.createElement("div"); frag += ""; master.innerHTML = frag; // one node shortcut => return the node itself if(master.childNodes.length == 1){ return master.removeChild(master.firstChild); // DOMNode } // return multiple nodes as a document fragment let df = doc.createDocumentFragment(); let fc: Node; while((fc = master.firstChild)){ // intentional assignment df.appendChild(fc); } return df; // DocumentFragment }; export enum enum_position { before, after,replace,only,first } function _insertBefore(/*DomNode*/ node, /*DomNode*/ ref){ var parent = ref.parentNode; if(parent){ parent.insertBefore(node, ref); } } function _insertAfter(/*DomNode*/ node, /*DomNode*/ ref){ // summary: // Try to insert node after ref var parent = ref.parentNode; if(parent){ if(parent.lastChild == ref){ parent.appendChild(node); }else{ parent.insertBefore(node, ref.nextSibling); } } } export function place(id: HTMLElement | string, ref: HTMLElement | string, position?: string | enum_position | number){ let refNode = dom.by_id(ref); let node: HTMLElement; if(typeof id == "string"){ // inline'd type check node = /^\s*