0.1.0 • Published 9 years ago

can-simple-window v0.1.0

Weekly downloads
177
License
MIT
Repository
github
Last release
9 years ago

can-simple-window

A very simple, light-weight execution context (eg. browser window) which wraps around can-simple-dom. This module allows for both jQuery, CanJS, ReactJS, and other scripts to be loaded in a NodeJS environment by creating a faux browser window in which the scripts are executed. A very basic implementation of the DOM API is provided by can-simple-dom.

The API was designed to be a drop in replacement for very simple jsdom implementations. Please note that this does not support the entire jsdom API and that can-simple-dom is a very limited implementation of the WHATWG DOM specification. If you are looking for an environment which more closely resembles a real browser, please use jsdom - it is a wonderful library.

##simpleWindow.env(html , scripts, callback); Replacement for jsdom.env

var simpleWindow = require('can-simple-window');

simpleWindow.env(
	'<h1>Hello World!</h1><span class="foo"><b>BAR!</b></span>',
	['http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js',
	'http://canjs.com/release/2.2.9/can.jquery.min.js'],
	function (err, window) {
	   if (err) throw new Error(err);
	   
		window.$('h1').text(); //-> Hello World!
		window.$('.foo').html(); //-> <b>BAR!</b>
		window.can; //-> Reference to CanJS object
	}
);

Differences from jsdom

  • You can only pass HTML in the first parameter (no URLs or file paths)
    • The html passed in is only attached to the <body> - no <head> code will be processed.
    • <script>, <img>, <link>, <frame>, and <iframe> sources will not be loaded or processed.
  • There is no config object - so the following are invalid:

    simpleWindow.env({ config_object });
    simpleWindow.env("<b>foo</b>", 'script.js', { config_object }, ...);
  • There are no lifecycle events for created or onLoad

##simpleWindow.document(html); Replacement for jsdom.jsdom

var simpleWindow = require('can-simple-window');

var document = simpleWindow.document('<h1>Hello World!</h1><span class="foo"><b>BAR!</b></span>');
document.getElementsByTagName('h1'); //-> [ H1 DOM Element ]
document.getElementsByClassName("foo"); //-> [ SPAN.foo DOM Element ]

Differences from jsdom

  • The html passed in is only attached to the <body> - no <head> code will be processed.
  • <script>, <img>, <link>, <frame>, and <iframe> sources will not be loaded.
  • There is no options parameter implemented.