diff --git a/blissfuljs/blissfuljs-tests.ts b/blissfuljs/blissfuljs-tests.ts
new file mode 100644
index 000000000..ea55c63a9
--- /dev/null
+++ b/blissfuljs/blissfuljs-tests.ts
@@ -0,0 +1,445 @@
+///
+
+function test_overview() {
+ /*Bliss includes several static methods (on the Bliss or $ object). For example, to copy all properties of an object onto another object, you would
+ call $.extend():*/
+ var yolo = $.extend({ foo: 1 }, { bar: 2 });
+
+ var element = $.create();
+
+ /*Many of Bliss’ methods take an element or an array of elements as their first argument. For example, to set both the width and padding of an element to 0,
+ you could use the $.style() method:*/
+ $.style(element, { width: 0, padding: 0 });
+
+ /*These types of methods are also available on elements and arrays, for convenience. However, since adding convenience methods to elements and arrays directly
+ would be a JS Mortal Sin™, Bliss only adds a _ property on elements & arrays, on which it hangs all its methods, to avoid conflicts. The previous example would
+ be written as: */
+ element._.style({
+ "width": 0,
+ "padding": 0
+ });
+
+
+ var myArray = $$("div");
+ /*The ._. sequence of characters that appears all too often when coding with Bliss is where Bliss gets its logo from. However, the property can be
+ customized to anything you want.
+
+ Methods that are available on elements like this will have an ELEMENT tag in these docs.
+
+ If you wanted to set the width and padding of multiple elements to 0, you could use an array:*/
+ myArray._.style({
+ "width": 0,
+ "padding": 0
+ });
+
+ /*Methods that are available on arrays like this will have an ARRAY tag in these docs.
+
+ /*For example, assume that in addition to these CSS changes you also wanted to add a hidden attribute to this element. Bliss methods that don’t return a value
+ return the element or array they are called on, so you could call more element methods on them, including native ones:*/
+ element._.style({
+ "width": 0,
+ "padding": 0
+ }).setAttribute("hidden", "");
+
+ /*Now assume you also wanted to set a second attribute: The "class" attribute to "foo". The native setAttribute() method is not chainable, it returns undefined.
+ However, all native element methods are also available on the almighty _ property, and there they are also chainable:*/
+ element._.style({
+ "width": 0,
+ "padding": 0
+ })._.setAttribute("hidden", "").setAttribute("class", "foo");
+
+ //This works, but it’s a bit unwieldy. Thankfully, Bliss offers an $.attributes() method for setting multiple attributes at once:
+ element._.style({
+ "width": 0,
+ "padding": 0
+ })._.attributes({
+ "hidden": "",
+ "class": "foo"
+ });
+
+ //This is better and more readable, but still a bit awkward. Turns out there is a special $.set() method to do both at once:
+ element._.set({
+ attributes: {
+ "hidden": "",
+ "class": "foo"
+ },
+ style: {
+ "width": 0,
+ "padding": 0
+ }
+ });
+
+ /*Because $.attributes() and $.style() are also available for $.set() parameters, they will have the special $.SET() tag in these docs.
+ Note that you don’t actually need attributes: {…} in $.set() at all: if there are any unrecognized properties in the parameter object,
+ Bliss will first check if there is a property with that name on the element and if not,
+ set an attribute. So you could rewrite the example above as:*/
+ element._.set({
+ "hidden": "",
+ "class": "foo", // or "className": "foo" to use the property
+ style: {
+ "width": 0,
+ "padding": 0
+ }
+ });
+
+}
+
+
+function vanilla_test() {
+ var element = $.create();
+
+ element.classList.add("my-class");
+ element.classList.remove("my-class");
+ element.classList.toggle("my-class");
+ element.classList.contains("my-class")
+ element.remove();
+ //element.contains(otherElement) // Not working
+ //element.matches(selector) // Not working
+ //element.closest(selector) // Not working
+ element.nextElementSibling
+ //element.children // Not working
+
+ $$("div")._.remove();
+}
+
+function $_test() {
+ // return the first element with a class of .foo
+ // that is inside the first element with a class of .bar
+ var ret = $(".foo", $(".bar"));
+ // Return the first element with a class of .foo
+ // that is inside any element with a class of .bar
+ var ret = $(".bar .foo");
+ // Get the first element with a class of .foo
+ // and set its title attribute to "yolo"
+ // If there is no such element, this will throw an exception!
+ $(".foo").setAttribute("title", "yolo");
+
+ // Check if the .foo element exists
+ // and set an attribute by using a variable "foo"
+ // as a reference of the element
+ var foo = $(".foo");
+ if (foo) {
+ foo.setAttribute("title", "yolo");
+ }
+}
+
+function $$_test() {
+ // Add an id to all
headings that don’t already have one
+ $$("h1:not([id])").forEach(function(h1){
+ h1.id = h1.textContent.replace(/\W/g, "");
+ });
+ // Get an array with all ids on the page
+ var ids = $$("[id]").map(function(element){
+ return element.id;
+ });
+ // Get all of an element’s attributes starting with data-bliss-
+ var element = $.create("div");
+
+ $$(element.attributes).filter(function(attribute){
+ return attribute.name.indexOf("data-bliss-") === 0;
+ }).map(function(attribute){
+ return attribute.name;
+ });
+}
+
+function $_create_test() {
+ $.create("ul", {
+ className: "nav",
+ contents: [
+ "Navigation: ",
+ {tag: "li",
+ contents: {tag: "a",
+ href: "index.html",
+ textContent: "Home"
+ }
+ },
+ {tag: "li",
+ contents: {tag: "a",
+ href: "contact.html",
+ textContent: "Contact",
+ target: "_blank"
+ }}
+ ]
+ });
+
+ var paragraph = $.create("p");
+ var div = $.create();
+}
+
+function $_set_test() {
+ $.set(document.createElement("nav"), {
+ style: {
+ color: "red"
+ },
+ events: {
+ click: function(evt:Event) {
+ console.log("YOLO");
+ }
+ },
+ contents: ["Navigation: ", {tag: "ul",
+ className: "buttons",
+ delegate: {
+ click: {
+ li: function() {
+ console.log("A list item was clicked");
+ }
+ }
+ },
+ contents: [{tag: "li",
+ contents: {tag: "a",
+ href: "index.html",
+ textContent: "Home"
+ }
+ }, {tag: "li",
+ contents: {tag: "a",
+ href: "docs.html",
+ textContent: "Docs"
+ }
+ }
+ ]
+ }],
+ inside: $("body > header")
+ });
+}
+
+function $_contents_test() {
+ var nav = $.create();
+
+ nav._.contents(["Navigation: ", {tag: "ul",
+ className: "buttons",
+ delegate: {
+ click: {
+ li: function() {
+ console.log("A list item was clicked")
+ }
+ }
+ },
+ contents: [{tag: "li",
+ contents: {tag: "a",
+ href: "index.html",
+ textContent: "Home"
+ }
+ }, {tag: "li",
+ contents: {tag: "a",
+ href: "docs.html",
+ textContent: "Docs"
+ }
+ }
+ ]
+ }])
+}
+
+function $_clone_test() {
+ var button = $("button");
+ button.addEventListener("click", function() { console.log("Click from listener!"); });
+ button.onclick = function() { console.log("Click from inline event!"); };
+ var button2 = button._.clone();
+ // If clicked, button2 will print both messages
+}
+
+function $_after_test() {
+ var button = $("button");
+ $.after(button, $(".selector"));
+}
+
+function $_around_test() {
+ var button = $("button");
+ $.around(button, $(".selector"));
+
+ // Wrap headings with a link to their section
+ $$("section[id] > h1, article[id] > h1").forEach(function(h1){
+ $.create("a", {
+ href: "#" + (h1.parentNode).id,
+ around: h1
+ });
+ });
+}
+
+function $_attributes_test() {
+ var button = $("button");
+ $.attributes(button, { backgroundColor: "#FFFFFF" });
+
+ button._.attributes({color: "#000000"});
+}
+
+function $_before_test() {
+ var button = $("button");
+ $.before(button, $(".selector"));
+
+ button._.before($(".selector"));
+}
+
+function $_inside_test() {
+ var button = $("button");
+ $.inside(button, $(".selector"));
+
+ button._.inside($(".selector"));
+}
+
+function $_properties_test() {
+ document.createElement("button")._.properties({
+ className: "continue",
+ textContent: "Next Step",
+ onclick: function() { /*MyApp.next()*/ }
+ });
+}
+
+function $_start_test() {
+ var button = $("button");
+ $.start(button, $(".selector"));
+
+ button._.start($(".selector"));
+}
+
+function $_style_test() {
+ document.body._.style({
+ color: "white",
+ backgroundColor: "red",
+ cssFloat: "left"
+ });
+}
+
+function $_transition_test() {
+ var element = $(".selector");
+
+ // Fade out an element then remove it from the DOM
+ $.transition(element, {opacity: 0}).then($.remove);
+
+ // Fade out and shrink all s on a page,
+ // then remove them from the DOM
+ Promise.all($$
("div")._.transition({
+ opacity: 0,
+ transform: "scale(0)"
+ })).then( (elts) => {
+ elts.forEach(elt => {
+ $.remove(elt);
+ });
+ });
+}
+
+function $_delegate_test() {
+ var element = $(".selector");
+
+ $.delegate(element, "locationchange", ".selected", () => {});
+ $.delegate(element, "locationchange", {
+ "callback1" : () => {}
+ });
+ $.delegate(element, {
+ "locationchange" : {
+ "callback1" : () => {}
+ }
+ });
+
+ element._.delegate("locationchange", ".selected", () => {});
+ element._.delegate( "locationchange", {
+ "callback1" : () => {}
+ });
+ element._.delegate({
+ "locationchange" : {
+ "callback1" : () => {}
+ }
+ });
+}
+
+function $_events_test() {
+ $$('input[type="range"]')._.events({
+ "input change": function(evt) { this.title = this.value}
+ });
+
+ $$("input")._.addEventListener("input", function(){ /* ... */});
+}
+
+function $_fire_test() {
+
+ var myMap = $(".myMap");
+ var myInput = $(".myInput");
+
+ // Fire a custom event on a map widget
+ myMap._.fire("locationchange", {
+ location: [42.361667, -71.092751]
+ });
+ // Fire a fake input event
+ myInput._.fire("input");
+}
+
+function $_once_test() {
+ $$('input[type="range"]')._.once({
+ "input change": function(evt) { this.title = this.value}
+ });
+}
+
+function $_ready_test() {
+ // Add a red border to all divs on a page
+ $.ready().then(function(){
+ $$("div")._.style({ border: "1px solid red" });
+ });
+}
+
+function $_all_test() {
+ // Uppercase all strings in an array
+ ["Foo", "bar"]._.all("toUpperCase"); // Returns ["FOO", "BAR"]
+}
+
+function $_class_test() {
+ var cls = $.Class({
+ constructor: function() {/* ... */}
+ });
+}
+
+function $_each_test() {
+ var elt = {a:"a", b:"b"};
+
+ $.each(elt, function (name:string, value:any) {
+ /* ... */
+ }, elt);
+}
+
+function $_extend_test() {
+ var o1 = {foo: 1, bar:2}
+ var o2 = $.extend(o1, {foo: 3, baz: 4});
+ // o2 is {foo: 3, bar: 2, baz: 4}
+ // Get typography-related computed style on
+ var type = $.extend({},
+ getComputedStyle(document.body),
+ /^font|^lineHeight$/);
+}
+
+function $_lazy_test() {
+ var x = {a:""};
+ $.lazy(x, "foo", () => {return "bar";});
+
+ $.lazy(x, {
+ "foo" : function() {
+ return "bar"
+ }
+ });
+}
+
+function $_live_test() {
+ var x = {a:""};
+ $.live(x, "foo", () => {return "bar";});
+}
+
+function $_type_test(...args: any[]) {
+ // Check if the second argument of a function is a regexp
+ if ($.type(args[1]) === "regexp") {
+ // ...
+ }
+}
+
+function $_value_test() {
+ $.value(document, "body", "nodeType"); // 1
+ $.value(document, "body", "foo", "bar", "baz"); // undefined, no errors
+ $.value("document", "body", "nodeType"); // 1, no root, starting from self
+}
+
+function $_fetch_test() {
+ $.fetch("/api/create", {
+ method: "POST",
+ responseType: "json"
+ }).then(function(){
+ alert("success!");
+ }).catch(function(error){
+ console.error(error);
+ });
+}
\ No newline at end of file
diff --git a/blissfuljs/blissfuljs.d.ts b/blissfuljs/blissfuljs.d.ts
new file mode 100644
index 000000000..99ef63e7e
--- /dev/null
+++ b/blissfuljs/blissfuljs.d.ts
@@ -0,0 +1,670 @@
+// Type definitions for bliss
+// Project: http://blissfuljs.com/
+// Definitions by: François Skorzec
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+interface Element {
+ _: BlissNS.BlissBindedElement;
+}
+
+interface Array {
+ _: BlissNS.BlissBindedArray & BlissNS.BlissCollectionArray;
+}
+
+declare module BlissNS {
+ export type BlissDecoratedElement = Element & T;
+ export type BlissDecoratedArrayElement = Array & BlissNS.BlissCollectionArray;
+
+ interface BlissStatic {
+ (selector: string, context?: Element): BlissDecoratedElement;
+
+ classProps: Object;
+
+ create(tag: "a"): HTMLAnchorElement;
+ create(tag: "applet"): HTMLAppletElement;
+ create(tag: "area"):HTMLAreaElement;
+ create(tag: "audio"): HTMLAudioElement;
+ create(tag: "base"): HTMLBaseElement;
+ create(tag: "basefont"): HTMLBaseFontElement;
+ create(tag: "blockquote"): HTMLBlockElement;
+ create(tag: "body"): HTMLBodyElement;
+ create(tag: "br"): HTMLBRElement;
+ create(tag: "button"): HTMLButtonElement;
+ create(tag: "canvas"): HTMLCanvasElement;
+ create(tag: "datalist"): HTMLDataListElement;
+ create(tag: "dd"): HTMLDDElement;
+ create(tag: "directory"): HTMLDirectoryElement;
+ create(tag: "div"): HTMLDivElement;
+ create(tag: "embeded"): HTMLEmbedElement;
+ create(tag: "fieldset"): HTMLFieldSetElement;
+ create(tag: "form"): HTMLFormElement;
+ create(tag: "frame"): HTMLFrameElement;
+ create(tag: "frameset"): HTMLFrameSetElement;
+ create(tag: "iframe"): HTMLDListElement;
+ create(tag: "image"): HTMLImageElement;
+ create(tag: "input"): HTMLInputElement;
+ create(tag: "i"): HTMLLIElement;
+ create(tag: "label"): HTMLLabelElement;
+ create(tag: "legend"): HTMLLegendElement;
+ create(tag: "li"): HTMLLIElement;
+ create(tag: "link"): HTMLLinkElement;
+ create(tag: "map"): HTMLMapElement;
+ create(tag: "mark"): HTMLMarqueeElement;
+ create(tag: "menu"): HTMLMenuElement;
+ create(tag: "meta"): HTMLMetaElement;
+ create(tag: "object"): HTMLObjectElement;
+ create(tag: "ol"): HTMLOListElement;
+ create(tag: "optgroup"): HTMLOptGroupElement;
+ create(tag: "option"): HTMLOptionElement;
+ create(tag: "p"): HTMLParagraphElement;
+ create(tag: "param"): HTMLParamElement;
+ create(tag: "pre"): HTMLPreElement;
+ create(tag: "progress"): HTMLProgressElement;
+ create(tag: "q"): HTMLQuoteElement;
+ create(tag: "script"): HTMLScriptElement;
+ create(tag: "select"): HTMLSelectElement;
+ create(tag: "source"): HTMLSourceElement;
+ create(tag: "span"): HTMLSpanElement;
+ create(tag: "style"): HTMLStyleElement;
+ create(tag: "table"): HTMLTableElement;
+ create(tag: "thead"): HTMLTableHeaderCellElement;
+ create(tag: "ul"): HTMLUListElement;
+ create(tag: "video"): HTMLVideoElement;
+ create(tag: string): BlissDecoratedElement;
+
+ create(options: Object): BlissDecoratedElement;
+
+ create(tag: "a", options: Object): HTMLAnchorElement;
+ create(tag: "applet", options: Object): HTMLAppletElement;
+ create(tag: "area", options: Object): HTMLAreaElement;
+ create(tag: "audio", options: Object): HTMLAudioElement;
+ create(tag: "base", options: Object): HTMLBaseElement;
+ create(tag: "basefont", options: Object): HTMLBaseFontElement;
+ create(tag: "blockquote", options: Object): HTMLBlockElement;
+ create(tag: "body", options: Object): HTMLBodyElement;
+ create(tag: "br", options: Object): HTMLBRElement;
+ create(tag: "button", options: Object): HTMLButtonElement;
+ create(tag: "canvas", options: Object): HTMLCanvasElement;
+ create(tag: "datalist", options: Object): HTMLDataListElement;
+ create(tag: "dd", options: Object): HTMLDDElement;
+ create(tag: "directory", options: Object): HTMLDirectoryElement;
+ create(tag: "div", options: Object): HTMLDivElement;
+ create(tag: "embeded", options: Object): HTMLEmbedElement;
+ create(tag: "fieldset", options: Object): HTMLFieldSetElement;
+ create(tag: "form", options: Object): HTMLFormElement;
+ create(tag: "frame", options: Object): HTMLFrameElement;
+ create(tag: "frameset", options: Object): HTMLFrameSetElement;
+ create(tag: "iframe", options: Object): HTMLDListElement;
+ create(tag: "image", options: Object): HTMLImageElement;
+ create(tag: "input", options: Object): HTMLInputElement;
+ create(tag: "i", options: Object): HTMLLIElement;
+ create(tag: "label", options: Object): HTMLLabelElement;
+ create(tag: "legend", options: Object): HTMLLegendElement;
+ create(tag: "li", options: Object): HTMLLIElement;
+ create(tag: "link", options: Object): HTMLLinkElement;
+ create(tag: "map", options: Object): HTMLMapElement;
+ create(tag: "mark", options: Object): HTMLMarqueeElement;
+ create(tag: "menu", options: Object): HTMLMenuElement;
+ create(tag: "meta", options: Object): HTMLMetaElement;
+ create(tag: "object", options: Object): HTMLObjectElement;
+ create(tag: "ol", options: Object): HTMLOListElement;
+ create(tag: "optgroup", options: Object): HTMLOptGroupElement;
+ create(tag: "option", options: Object): HTMLOptionElement;
+ create(tag: "p", options: Object): HTMLParagraphElement;
+ create(tag: "param", options: Object): HTMLParamElement;
+ create(tag: "pre", options: Object): HTMLPreElement;
+ create(tag: "progress", options: Object): HTMLProgressElement;
+ create(tag: "q", options: Object): HTMLQuoteElement;
+ create(tag: "script", options: Object): HTMLScriptElement;
+ create(tag: "select", options: Object): HTMLSelectElement;
+ create(tag: "source", options: Object): HTMLSourceElement;
+ create(tag: "span", options: Object): HTMLSpanElement;
+ create(tag: "style", options: Object): HTMLStyleElement;
+ create(tag: "table", options: Object): HTMLTableElement;
+ create(tag: "thead", options: Object): HTMLTableHeaderCellElement;
+ create(tag: "ul", options: Object): HTMLUListElement;
+ create(tag: "video", options: Object): HTMLVideoElement;
+ create(tag: string, options: Object): BlissDecoratedElement;
+
+ create(...args:any[]): BlissDecoratedElement;
+
+ set(subject: BlissDecoratedElement, options: Object): BlissDecoratedElement;
+ contents(subject: BlissDecoratedElement , elements: Object | Array | string | Number | Node): BlissDecoratedElement;
+ contents(subject: BlissDecoratedElement[], elements: Object | Array | string | Number | Node): BlissDecoratedElement[];
+ clone(subject:BlissDecoratedElement) : BlissDecoratedElement;
+ after(subject:BlissDecoratedElement, element: Element) : BlissDecoratedElement;
+ around(subject:BlissDecoratedElement, element: Element) : BlissDecoratedElement;
+ attributes(subject:BlissDecoratedElement, attrs: Object) : BlissDecoratedElement;
+ attributes(subject:BlissDecoratedElement[], attrs: Object) : BlissDecoratedElement[];
+ before(subject:BlissDecoratedElement, element: Element) : BlissDecoratedElement;
+ inside(subject:BlissDecoratedElement, element: Element) : BlissDecoratedElement;
+ properties(subject:BlissDecoratedElement, props: Object) : BlissDecoratedElement;
+ properties(subject:BlissDecoratedElement[], props: Object) : BlissDecoratedElement[];
+ start(subject:BlissDecoratedElement, element: Element) : BlissDecoratedElement;
+ style(subject:BlissDecoratedElement, properties: Object) : BlissDecoratedElement;
+ style(subject:BlissDecoratedElement[], properties: Object) : BlissDecoratedElement[];
+ transition(subject:BlissDecoratedElement | BlissDecoratedElement[], properties: Object, duration?: number) : Promise;
+ delegate(subject:BlissDecoratedElement , type: string, selector: string, callback: (event: Event) => void): BlissDecoratedElement;
+ delegate(subject: BlissDecoratedElement[], type: string, selector: string, callback: (event: Event) => void): BlissDecoratedElement[];
+ delegate(subject:BlissDecoratedElement , type: string, selectorsToCallbacks: {[selector: string] : (event: Event) => void}): BlissDecoratedElement;
+ delegate(subject:BlissDecoratedElement[], type: string, selectorsToCallbacks: {[selector: string] : (event: Event) => void}): BlissDecoratedElement[];
+ delegate(subject:BlissDecoratedElement , typesToSelectorsToCallbacks: {[type: string] : {[selector: string] : (event: Event) => void}}): BlissDecoratedElement;
+ delegate(subject:BlissDecoratedElement[], typesToSelectorsToCallbacks: {[type: string] : {[selector: string] : (event: Event) => void}}): BlissDecoratedElement[];
+ events(subject:BlissDecoratedElement , handlers: {[eventName:string] : (event: Event) => void} | Element): BlissDecoratedElement;
+ events(subject: BlissDecoratedElement[], handlers: {[eventName:string] : (event: Event) => void} | Element): BlissDecoratedElement[];
+ fire(subject:BlissDecoratedElement, type: string, properties?: {[propertyName: string] : any}): BlissDecoratedElement;
+ fire(subject:BlissDecoratedElement[], type: string, properties?: {[propertyName: string] : any}): BlissDecoratedElement[];
+ once(subject:BlissDecoratedElement, handlers: {[eventName:string] : (event: Event) => void} | Element): BlissDecoratedElement;
+ once(subject:BlissDecoratedElement[], handlers: {[eventName:string] : (event: Event) => void} | Element): BlissDecoratedElement[];
+ ready(context?: Document): Promise;
+
+ remove(subject:Element | BlissStatic): void;
+
+ all(array: Array, method: string, ...args: Array): Array;
+ all(array: Array, method: string, ...args: Array): Array;
+
+ Class(options: {
+ constructor?: Function;
+ extends?: Function;
+ abstract?: boolean;
+ lazy?: Object;
+ live?: Object;
+ static?: Object;
+ [propertyName: string]:any;
+ }): T;
+
+ Class(options: {
+ constructor?: Function;
+ extends?: Function;
+ abstract?: boolean;
+ lazy?: Object;
+ live?: Object;
+ static?: Object;
+ [propertyName: string]:any;
+ }): Object;
+
+ each(obj: {[propertyName: string] : any}, callback: Function, ret?: Object): T;
+ each(obj: {[propertyName: string] : any}, callback: Function, ret?: Object): Object;
+
+ extend(target: Object, source: any, whitelist? : string[] | string | Function | RegExp): Object;
+ extend(target: Object, source: any, whitelist? : string[] | string | Function | RegExp): T;
+
+ lazy(object: Object, property: string, getter: () => any): Object;
+ lazy(object:Object, property: string, getter:() => any): T;
+
+ lazy(object: Object, properties: {[propertyName:string]: () => any}): Object;
+ lazy(object: Object, properties: {[propertyName:string]: () => any}): T;
+
+ live(object: Object, property: string, descriptor: Object | Function): Object;
+ live(object: Object, property: string, descriptor: Object | Function): T;
+
+ live(object: Object, properties: {[propertyName: string]: Object | Function}): Object;
+ live(object: Object, properties: {[propertyName: string]: Object | Function}): T;
+
+ type(object: Object): string;
+
+ value(obj: Object, ...properties: string[]): any;
+ value(obj: Object, ...properties: string[]): T;
+
+ value(property: string, ...properties: string[]): any;
+ value(property: string , ...properties: string[]): T;
+
+ fetch(url: string, options?: {
+ method?: string;
+ data?: string;
+ headers?:{[key:string]:string};
+
+ onreadystatechange?: (ev: ProgressEvent) => any;
+ readyState?: number;
+ response?: any;
+ responseBody?: any;
+ responseText?: string;
+ responseType?: string;
+ responseXML?: any;
+ status?: number;
+ statusText?: string;
+ timeout?: number;
+ upload?: XMLHttpRequestUpload;
+ withCredentials?: boolean;
+
+ [propertyName: string]: any;
+ }): Promise;
+
+ include(condition: any, url: string ): Promise;
+ include(url: string ): Promise;
+
+ add(name: string, callback: Function, on?: BlissStatic | BlissStaticCollection | Element | Array): void;
+ add(callbacks:{[callbackName: string]: Function}, on?: BlissStatic | BlissStaticCollection | Element | Array): void;
+
+ hooks: {
+ add(name: string, callback: Function): void;
+ run(name: string, env: Object): void;
+ };
+ }
+
+ interface BlissStaticCollection extends BlissStatic {
+ (selector: string, context?: Element): BlissDecoratedArrayElement;
+ (expr: Object, context?: Element): Array;
+ (expr: Window, context?: Element): [Window];
+ (expr: Node, context?: Element): [Node];
+ }
+
+ // Native methods added into "_" property, but methods that return "void" now return thi stype in order to be chainables
+ // Methods are All HTMLElement a ELement methods
+ interface BlissNativeExtentions {
+ blur(): T;
+ click(): T;
+ contains(child: HTMLElement): boolean;
+ dragDrop(): boolean;
+ focus(): T;
+ insertAdjacentElement(position: string, insertedElement: Element): Element;
+ insertAdjacentHTML(where: string, html: string): T;
+ insertAdjacentText(where: string, text: string): T;
+ msGetInputContext(): MSInputMethodContext;
+ scrollIntoView(top?: boolean): T;
+ setActive(): T;
+ addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): T;
+ addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): T;
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): T;
+ getAttribute(name?: string): string;
+ getAttributeNS(namespaceURI: string, localName: string): string;
+ getAttributeNode(name: string): Attr;
+ getAttributeNodeNS(namespaceURI: string, localName: string): Attr;
+ getBoundingClientRect(): ClientRect;
+ getClientRects(): ClientRectList;
+ getElementsByTagName(name: "a"): NodeListOf;
+ getElementsByTagName(name: "abbr"): NodeListOf;
+ getElementsByTagName(name: "acronym"): NodeListOf;
+ getElementsByTagName(name: "address"): NodeListOf;
+ getElementsByTagName(name: "applet"): NodeListOf;
+ getElementsByTagName(name: "area"): NodeListOf;
+ getElementsByTagName(name: "article"): NodeListOf;
+ getElementsByTagName(name: "aside"): NodeListOf;
+ getElementsByTagName(name: "audio"): NodeListOf;
+ getElementsByTagName(name: "b"): NodeListOf;
+ getElementsByTagName(name: "base"): NodeListOf;
+ getElementsByTagName(name: "basefont"): NodeListOf;
+ getElementsByTagName(name: "bdo"): NodeListOf;
+ getElementsByTagName(name: "big"): NodeListOf;
+ getElementsByTagName(name: "blockquote"): NodeListOf;
+ getElementsByTagName(name: "body"): NodeListOf;
+ getElementsByTagName(name: "br"): NodeListOf;
+ getElementsByTagName(name: "button"): NodeListOf;
+ getElementsByTagName(name: "canvas"): NodeListOf;
+ getElementsByTagName(name: "caption"): NodeListOf;
+ getElementsByTagName(name: "center"): NodeListOf;
+ getElementsByTagName(name: "circle"): NodeListOf;
+ getElementsByTagName(name: "cite"): NodeListOf;
+ getElementsByTagName(name: "clippath"): NodeListOf;
+ getElementsByTagName(name: "code"): NodeListOf;
+ getElementsByTagName(name: "col"): NodeListOf;
+ getElementsByTagName(name: "colgroup"): NodeListOf;
+ getElementsByTagName(name: "datalist"): NodeListOf;
+ getElementsByTagName(name: "dd"): NodeListOf;
+ getElementsByTagName(name: "defs"): NodeListOf;
+ getElementsByTagName(name: "del"): NodeListOf;
+ getElementsByTagName(name: "desc"): NodeListOf;
+ getElementsByTagName(name: "dfn"): NodeListOf;
+ getElementsByTagName(name: "dir"): NodeListOf;
+ getElementsByTagName(name: "div"): NodeListOf;
+ getElementsByTagName(name: "dl"): NodeListOf;
+ getElementsByTagName(name: "dt"): NodeListOf;
+ getElementsByTagName(name: "ellipse"): NodeListOf;
+ getElementsByTagName(name: "em"): NodeListOf;
+ getElementsByTagName(name: "embed"): NodeListOf;
+ getElementsByTagName(name: "feblend"): NodeListOf;
+ getElementsByTagName(name: "fecolormatrix"): NodeListOf;
+ getElementsByTagName(name: "fecomponenttransfer"): NodeListOf;
+ getElementsByTagName(name: "fecomposite"): NodeListOf;
+ getElementsByTagName(name: "feconvolvematrix"): NodeListOf;
+ getElementsByTagName(name: "fediffuselighting"): NodeListOf;
+ getElementsByTagName(name: "fedisplacementmap"): NodeListOf;
+ getElementsByTagName(name: "fedistantlight"): NodeListOf;
+ getElementsByTagName(name: "feflood"): NodeListOf;
+ getElementsByTagName(name: "fefunca"): NodeListOf;
+ getElementsByTagName(name: "fefuncb"): NodeListOf;
+ getElementsByTagName(name: "fefuncg"): NodeListOf;
+ getElementsByTagName(name: "fefuncr"): NodeListOf;
+ getElementsByTagName(name: "fegaussianblur"): NodeListOf;
+ getElementsByTagName(name: "feimage"): NodeListOf;
+ getElementsByTagName(name: "femerge"): NodeListOf;
+ getElementsByTagName(name: "femergenode"): NodeListOf;
+ getElementsByTagName(name: "femorphology"): NodeListOf;
+ getElementsByTagName(name: "feoffset"): NodeListOf;
+ getElementsByTagName(name: "fepointlight"): NodeListOf;
+ getElementsByTagName(name: "fespecularlighting"): NodeListOf;
+ getElementsByTagName(name: "fespotlight"): NodeListOf;
+ getElementsByTagName(name: "fetile"): NodeListOf;
+ getElementsByTagName(name: "feturbulence"): NodeListOf;
+ getElementsByTagName(name: "fieldset"): NodeListOf;
+ getElementsByTagName(name: "figcaption"): NodeListOf;
+ getElementsByTagName(name: "figure"): NodeListOf;
+ getElementsByTagName(name: "filter"): NodeListOf;
+ getElementsByTagName(name: "font"): NodeListOf;
+ getElementsByTagName(name: "footer"): NodeListOf;
+ getElementsByTagName(name: "foreignobject"): NodeListOf;
+ getElementsByTagName(name: "form"): NodeListOf;
+ getElementsByTagName(name: "frame"): NodeListOf;
+ getElementsByTagName(name: "frameset"): NodeListOf;
+ getElementsByTagName(name: "g"): NodeListOf;
+ getElementsByTagName(name: "h1"): NodeListOf;
+ getElementsByTagName(name: "h2"): NodeListOf;
+ getElementsByTagName(name: "h3"): NodeListOf;
+ getElementsByTagName(name: "h4"): NodeListOf;
+ getElementsByTagName(name: "h5"): NodeListOf;
+ getElementsByTagName(name: "h6"): NodeListOf;
+ getElementsByTagName(name: "head"): NodeListOf;
+ getElementsByTagName(name: "header"): NodeListOf;
+ getElementsByTagName(name: "hgroup"): NodeListOf;
+ getElementsByTagName(name: "hr"): NodeListOf;
+ getElementsByTagName(name: "html"): NodeListOf;
+ getElementsByTagName(name: "i"): NodeListOf;
+ getElementsByTagName(name: "iframe"): NodeListOf;
+ getElementsByTagName(name: "image"): NodeListOf;
+ getElementsByTagName(name: "img"): NodeListOf;
+ getElementsByTagName(name: "input"): NodeListOf;
+ getElementsByTagName(name: "ins"): NodeListOf;
+ getElementsByTagName(name: "isindex"): NodeListOf;
+ getElementsByTagName(name: "kbd"): NodeListOf;
+ getElementsByTagName(name: "keygen"): NodeListOf;
+ getElementsByTagName(name: "label"): NodeListOf;
+ getElementsByTagName(name: "legend"): NodeListOf;
+ getElementsByTagName(name: "li"): NodeListOf;
+ getElementsByTagName(name: "line"): NodeListOf;
+ getElementsByTagName(name: "lineargradient"): NodeListOf;
+ getElementsByTagName(name: "link"): NodeListOf;
+ getElementsByTagName(name: "listing"): NodeListOf;
+ getElementsByTagName(name: "map"): NodeListOf