Skip to content

Commit

Permalink
chore(): updated devDependencies and added MIT license to package.json
Browse files Browse the repository at this point in the history
  • Loading branch information
Larry Osborn committed Sep 4, 2015
2 parents 0d338ba + 13d85c8 commit 52454af
Show file tree
Hide file tree
Showing 10 changed files with 159 additions and 151 deletions.
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
JSONP [![Build Status](https://travis-ci.org/larryosborn/JSONP.png)](https://travis-ci.org/larryosborn/JSONP)
JSONP
=====

[![NPM version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]

A slim JSONP request library for Javascript.

Usage
Expand All @@ -25,4 +28,11 @@ Options
* data: (object) (optional) Object used to generate GET query parameters for the JSONP resource.
* success: (function) (optional) Callback function executed upon a successful request.
* error: (function) (optional) Callback function executed for a failed request.
* complete: (function) (optional) Callback function exected when the request is completed regardless of success or error.
* beforeSend: (function) (optional) Callback function executed before request is created. If it returns false, the request is aborted.
* callbackName: (string) (optional) Name of callback function name. Default is 'callback'.

[npm-url]: https://npmjs.org/package/browser-jsonp
[npm-image]: http://img.shields.io/npm/v/browser-jsonp.svg
[travis-url]: https://travis-ci.org/larryosborn/JSONP
[travis-image]: http://img.shields.io/travis/larryosborn/JSONP.svg
27 changes: 27 additions & 0 deletions bower.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"name": "browser-jsonp",
"version": "1.0.7",
"homepage": "https://github.com/larryosborn/JSONP",
"authors": [
"Larry Osborn <[email protected]>"
],
"description": "A slim JSONP request library for Javascript.",
"main": "lib/jsonp.min.js",
"moduleType": [
"amd",
"globals",
"node"
],
"keywords": [
"jsonp",
"javascript"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
]
}
92 changes: 0 additions & 92 deletions dist/jsonp.js

This file was deleted.

1 change: 0 additions & 1 deletion dist/jsonp.min.js

This file was deleted.

83 changes: 50 additions & 33 deletions lib/jsonp.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(function() {
var JSONP, createElement, encode, noop, objectToURI, random, randomString;
var JSONP, computedUrl, createElement, encode, noop, objectToURI, random, randomString;

createElement = function(tag) {
return window.document.createElement(tag);
Expand All @@ -16,51 +16,68 @@
data: options.data || {},
error: options.error || noop,
success: options.success || noop,
beforeSend: options.beforeSend || noop,
complete: options.complete || noop,
url: options.url || ''
};
params.computedUrl = computedUrl(params);
if (params.url.length === 0) {
throw new Error('MissingUrl');
}
done = false;
callback = params.data[options.callbackName || 'callback'] = 'jsonp_' + randomString(15);
window[callback] = function(data) {
var error;
params.success(data);
try {
return delete window[callback];
} catch (error) {
window[callback] = void 0;
return void 0;
}
};
script = createElement('script');
script.src = params.url;
script.src += params.url.indexOf('?' === -1) ? '?' : '&';
script.src += objectToURI(params.data);
script.async = true;
script.onerror = function(evt) {
return params.error({
url: script.src,
event: evt
});
};
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete')) {
done = true;
script.onload = script.onreadystatechange = null;
if (script && script.parentNode) {
return script.parentNode.removeChild(script);
if (params.beforeSend({}, params) !== false) {
callback = params.data[options.callbackName || 'callback'] = 'jsonp_' + randomString(15);
window[callback] = function(data) {
var error;
params.success(data, params);
params.complete(data, params);
try {
return delete window[callback];
} catch (error) {
window[callback] = void 0;
return void 0;
}
}
};
head = head || window.document.getElementsByTagName('head')[0];
return head.appendChild(script);
};
script = createElement('script');
script.src = computedUrl(params);
script.async = true;
script.onerror = function(evt) {
params.error({
url: script.src,
event: evt
});
return params.complete({
url: script.src,
event: evt
}, params);
};
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete')) {
done = true;
script.onload = script.onreadystatechange = null;
if (script && script.parentNode) {
script.parentNode.removeChild(script);
}
return script = null;
}
};
head = head || window.document.getElementsByTagName('head')[0] || window.document.documentElement;
return head.insertBefore(script, head.firstChild);
}
};

noop = function() {
return void 0;
};

computedUrl = function(params) {
var url;
url = params.url;
url += params.url.indexOf('?') < 0 ? '?' : '&';
url += objectToURI(params.data);
return url;
};

randomString = function(length) {
var str;
str = '';
Expand Down
2 changes: 1 addition & 1 deletion lib/jsonp.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "browser-jsonp",
"description": "A slim JSONP request library for Javascript.",
"version": "1.0.1",
"version": "1.0.8",
"keywords": [
"jsonp",
"javascript"
Expand Down
14 changes: 14 additions & 0 deletions spec/jsonp.spec.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,17 @@ describe 'JSONP: Missing url parameter', ->
expect(value).to.equal('success')
done()

describe 'JSONP: beforeSend computedUrl', ->

it 'execute beforeSend and have a computedUrl', (done) ->

value = 'fail'

JSONP
url: 'http://api.openweathermap.org/data/2.5/weather'
data: q: 'London,UK'
beforeSend: ({}, settings) ->
expect(settings.computedUrl).to.equal('http://api.openweathermap.org/data/2.5/weather?q=London%2CUK')
complete: ->
done()

57 changes: 35 additions & 22 deletions src/jsonp.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,55 @@ JSONP = (options) ->
data: options.data or {}
error: options.error or noop
success: options.success or noop
beforeSend: options.beforeSend or noop
complete: options.complete or noop
url: options.url or ''

params.computedUrl = computedUrl params

throw new Error('MissingUrl') if params.url.length is 0

done = false

callback = params.data[options.callbackName or 'callback'] = 'jsonp_' + randomString 15
if params.beforeSend({}, params) isnt false

window[callback] = (data) ->
params.success data
try
delete window[callback]
catch
window[callback] = undefined
return undefined
callback = params.data[options.callbackName or 'callback'] = 'jsonp_' + randomString 15

script = createElement 'script'
script.src = params.url
script.src += if params.url.indexOf '?' is -1 then '?' else '&'
script.src += objectToURI params.data
script.async = true
window[callback] = (data) ->
params.success data, params
params.complete data, params
try
delete window[callback]
catch
window[callback] = undefined
return undefined

script.onerror = (evt) ->
params.error { url: script.src, event: evt }
script = createElement 'script'
script.src = computedUrl params
script.async = true

script.onload = script.onreadystatechange = ->
if not done and (not this.readyState or this.readyState is 'loaded' or this.readyState is 'complete')
done = true
script.onload = script.onreadystatechange = null
script.parentNode.removeChild script if script and script.parentNode
script.onerror = (evt) ->
params.error { url: script.src, event: evt }
params.complete { url: script.src, event: evt }, params

head = head or window.document.getElementsByTagName('head')[0]
head.appendChild script
script.onload = script.onreadystatechange = ->
if not done and (not this.readyState or this.readyState is 'loaded' or this.readyState is 'complete')
done = true
script.onload = script.onreadystatechange = null
script.parentNode.removeChild script if script and script.parentNode
script = null
head = head or window.document.getElementsByTagName('head')[0] or window.document.documentElement
# (see jQuery bugs #2709 and #4378)
head.insertBefore script, head.firstChild

noop = -> undefined

computedUrl = (params) ->
url = params.url
url += if params.url.indexOf('?') < 0 then '?' else '&'
url += objectToURI params.data
return url

randomString = (length) ->
str = ''
str += random().toString(36)[2] while str.length < length
Expand Down
20 changes: 20 additions & 0 deletions test/jsonp.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,23 @@ describe('JSONP: Missing url parameter', function() {
return done();
});
});

describe('JSONP: beforeSend computedUrl', function() {
return it('execute beforeSend and have a computedUrl', function(done) {
var value;
value = 'fail';
return JSONP({
url: 'http://api.openweathermap.org/data/2.5/weather',
data: {
q: 'London,UK'
},
beforeSend: function(arg, settings) {
arg;
return expect(settings.computedUrl).to.equal('http://api.openweathermap.org/data/2.5/weather?q=London%2CUK');
},
complete: function() {
return done();
}
});
});
});

0 comments on commit 52454af

Please sign in to comment.