diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/load-script | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/load-script')
| -rw-r--r-- | node_modules/load-script/.npmignore | 3 | ||||
| -rw-r--r-- | node_modules/load-script/.zuul.yml | 12 | ||||
| -rw-r--r-- | node_modules/load-script/Makefile | 7 | ||||
| -rw-r--r-- | node_modules/load-script/Readme.md | 58 | ||||
| -rw-r--r-- | node_modules/load-script/component.json | 11 | ||||
| -rw-r--r-- | node_modules/load-script/index.js | 65 | ||||
| -rw-r--r-- | node_modules/load-script/package.json | 22 | ||||
| -rw-r--r-- | node_modules/load-script/test/hello.js | 1 | ||||
| -rw-r--r-- | node_modules/load-script/test/index.js | 90 | ||||
| -rw-r--r-- | node_modules/load-script/test/throw.js | 1 |
10 files changed, 270 insertions, 0 deletions
diff --git a/node_modules/load-script/.npmignore b/node_modules/load-script/.npmignore new file mode 100644 index 00000000..665aa219 --- /dev/null +++ b/node_modules/load-script/.npmignore @@ -0,0 +1,3 @@ +components +build +node_modules diff --git a/node_modules/load-script/.zuul.yml b/node_modules/load-script/.zuul.yml new file mode 100644 index 00000000..46c25540 --- /dev/null +++ b/node_modules/load-script/.zuul.yml @@ -0,0 +1,12 @@ +ui: mocha-qunit +browsers: + - name: chrome + version: [oldest, latest] + - name: firefox + version: [oldest, latest] + - name: opera + version: latest + - name: safari + version: oldest..latest + - name: ie + version: oldest..latest diff --git a/node_modules/load-script/Makefile b/node_modules/load-script/Makefile new file mode 100644 index 00000000..154bf785 --- /dev/null +++ b/node_modules/load-script/Makefile @@ -0,0 +1,7 @@ +build: index.js + @component build --dev + +clean: + rm -fr build + +.PHONY: clean diff --git a/node_modules/load-script/Readme.md b/node_modules/load-script/Readme.md new file mode 100644 index 00000000..86411052 --- /dev/null +++ b/node_modules/load-script/Readme.md @@ -0,0 +1,58 @@ +# load-script + +Dynamic script loading. + +## Installation + +via component + +``` +$ component install eldargab/load-script +``` + +via npm + +``` +$ npm install load-script +``` + +## API +`load-script` appends a `script` node to the `<head>` element in the dom. + +`require('load-script')` returns a function of the following interface: `function(url[, opts][, cb]) {}` + +### url +Any url that you would like to load. May be absolute or relative. + +### [, opts] +A map of options. Here are the currently supported options: + +* `async` - A boolean value used for `script.async`. By default this is `true`. +* `attrs` - A map of attributes to set on the `script` node before appending it to the DOM. By default this is empty. +* `charset` - A string value used for `script.charset`. By default this is `utf8`. +* `text` - A string of text to append to the `script` node before it is appended to the DOM. By default this is empty. +* `type` - A string used for `script.type`. By default this is `text/javascript`. + +### [, cb] +A callback function of the following interface: `function(err, script) {}` where `err` is an error if any occurred and `script` is the `script` node that was appended to the DOM. + +## Example Usage + +```javascript +var load = require('load-script') + +load('foo.js', function (err, script) { + if (err) { + // print useful message + } + else { + console.log(script.src);// Prints 'foo'.js' + // use script + // note that in IE8 and below loading error wouldn't be reported + } +}) +``` + +## License + +MIT diff --git a/node_modules/load-script/component.json b/node_modules/load-script/component.json new file mode 100644 index 00000000..ee7f5612 --- /dev/null +++ b/node_modules/load-script/component.json @@ -0,0 +1,11 @@ +{ + "name": "load-script", + "repo": "eldargab/load-script", + "description": "Dynamic script loading", + "version": "0.0.5", + "keywords": ["script", "load"], + "license": "MIT", + "scripts": [ + "index.js" + ] +} diff --git a/node_modules/load-script/index.js b/node_modules/load-script/index.js new file mode 100644 index 00000000..667b9193 --- /dev/null +++ b/node_modules/load-script/index.js @@ -0,0 +1,65 @@ + +module.exports = function load (src, opts, cb) { + var head = document.head || document.getElementsByTagName('head')[0] + var script = document.createElement('script') + + if (typeof opts === 'function') { + cb = opts + opts = {} + } + + opts = opts || {} + cb = cb || function() {} + + script.type = opts.type || 'text/javascript' + script.charset = opts.charset || 'utf8'; + script.async = 'async' in opts ? !!opts.async : true + script.src = src + + if (opts.attrs) { + setAttributes(script, opts.attrs) + } + + if (opts.text) { + script.text = '' + opts.text + } + + var onend = 'onload' in script ? stdOnEnd : ieOnEnd + onend(script, cb) + + // some good legacy browsers (firefox) fail the 'in' detection above + // so as a fallback we always set onload + // old IE will ignore this and new IE will set onload + if (!script.onload) { + stdOnEnd(script, cb); + } + + head.appendChild(script) +} + +function setAttributes(script, attrs) { + for (var attr in attrs) { + script.setAttribute(attr, attrs[attr]); + } +} + +function stdOnEnd (script, cb) { + script.onload = function () { + this.onerror = this.onload = null + cb(null, script) + } + script.onerror = function () { + // this.onload = null here is necessary + // because even IE9 works not like others + this.onerror = this.onload = null + cb(new Error('Failed to load ' + this.src), script) + } +} + +function ieOnEnd (script, cb) { + script.onreadystatechange = function () { + if (this.readyState != 'complete' && this.readyState != 'loaded') return + this.onreadystatechange = null + cb(null, script) // there is no way to catch loading errors in IE8 + } +} diff --git a/node_modules/load-script/package.json b/node_modules/load-script/package.json new file mode 100644 index 00000000..fccaf3b4 --- /dev/null +++ b/node_modules/load-script/package.json @@ -0,0 +1,22 @@ +{ + "name": "load-script", + "description": "Dynamic script loading for browser", + "version": "1.0.0", + "keywords": [ + "browser", + "script", + "load" + ], + "repository": { + "type": "git", + "url": "git://github.com/eldargab/load-script" + }, + "scripts": { + "test": "zuul -- test/index.js", + "test-local": "zuul --local 9005 -- test/index.js" + }, + "devDependencies": { + "zuul": "~2.1.0" + }, + "license": "MIT" +} diff --git a/node_modules/load-script/test/hello.js b/node_modules/load-script/test/hello.js new file mode 100644 index 00000000..77a64c6b --- /dev/null +++ b/node_modules/load-script/test/hello.js @@ -0,0 +1 @@ +log('Hello world') diff --git a/node_modules/load-script/test/index.js b/node_modules/load-script/test/index.js new file mode 100644 index 00000000..a620764b --- /dev/null +++ b/node_modules/load-script/test/index.js @@ -0,0 +1,90 @@ +var assert = require('assert'); +var load = require('../') + +var last_msg = undefined; +log = function(msg) { + last_msg = msg; +} + +test('success', function(done) { + load('test/hello.js', function (err) { + assert.ifError(err); + assert.equal(last_msg, 'Hello world'); + last_msg = undefined; + done(); + }) +}); + +test('opts.async', function(done) { + load('test/hello.js', {async: false}, function(err, script) { + assert.ifError(err); + assert.equal(script.async, false); + done(); + }) +}); + +test('opts.attrs', function(done) { + load('test/hello.js', {attrs: {foo: 'boo'}}, function(err, script) { + assert.ifError(err); + assert.equal(script.getAttribute('foo'), 'boo'); + done(); + }) +}); + +test('opts.charset', function(done) { + load('test/hello.js', {charset: 'iso-8859-1'}, function(err, script) { + assert.ifError(err); + assert.equal(script.charset, 'iso-8859-1'); + done(); + }) +}); + +test('opts.text', function(done) { + load('test/hello.js', {text: 'foo=5;'}, function(err, script) { + assert.ifError(err); + done(); + }) +}); + +test('opts.type', function(done) { + load('test/hello.js', {type: 'text/ecmascript'}, function(err, script) { + assert.ifError(err); + assert.equal(script.type, 'text/ecmascript'); + done(); + }) +}); + +test('no exist', function(done) { + load('unexistent.js', function (err, legacy) { + if (!legacy) { + assert.ok(err); + } + + var tid = setTimeout(function() { + done(); + }, 200); + + // some browsers will also throw as well as report erro + var old = window.onerror; + window.onerror = function(msg, file, line) { + if (msg !== 'Error loading script') { + assert(false); + } + window.onerror = old; + clearTimeout(tid); + done(); + }; + }) +}); + +test('throw', function(done) { + var old = window.onerror; + // silence the script error + window.onerror = function() {}; + load('test/throw.js', function (err) { + assert.ifError(err); + window.onerror = old; + done(); + }) +}); + diff --git a/node_modules/load-script/test/throw.js b/node_modules/load-script/test/throw.js new file mode 100644 index 00000000..a42d606f --- /dev/null +++ b/node_modules/load-script/test/throw.js @@ -0,0 +1 @@ +throw new Error('Hello error') |
