postal.js/example/node/client/js/lib/amplify.js

360 lines
No EOL
11 KiB
JavaScript

/*!
* AmplifyJS 1.0.0 - Core, Store, Request
*
* Copyright 2011 appendTo LLC. (http://appendto.com/team)
* Dual licensed under the MIT or GPL licenses.
* http://appendto.com/open-source-licenses
*
* http://amplifyjs.com
*/
(function ( a, b, c ) {
typeof define == "function" && define.amd ? define( ["jquery"], function ( d ) {
return c( d, a, b )
} ) : c( a.jQuery, a, b )
})( this, document, function ( a, b, c, d ) {
return function ( a, b ) {
var c = [].slice, d = {}, e = a.amplify = {publish : function ( a ) {
var b = c.call( arguments, 1 ), e, f, g, h = 0, i;
if ( !d[a] ) {
return!0;
}
e = d[a].slice();
for ( g = e.length; h < g; h++ ) {
f = e[h], i = f.callback.apply( f.context, b );
if ( i === !1 ) {
break
}
}
return i !== !1
}, subscribe : function ( a, b, c, e ) {
arguments.length === 3 && typeof c == "number" && (e = c, c = b, b = null), arguments.length === 2 && (c = b, b = null), e = e || 10;
var f = 0, g = a.split( /\s/ ), h = g.length, i;
for ( ; f < h; f++ ) {
a = g[f], i = !1, d[a] || (d[a] = []);
var j = d[a].length - 1, k = {callback : c, context : b, priority : e};
for ( ; j >= 0; j-- ) {
if ( d[a][j].priority <= e ) {
d[a].splice( j + 1, 0, k ), i = !0;
break
}
}
i || d[a].unshift( k )
}
return c
}, unsubscribe : function ( a, b ) {
if ( !d[a] ) {
return;
}
var c = d[a].length, e = 0;
for ( ; e < c; e++ ) {
if ( d[a][e].callback === b ) {
d[a].splice( e, 1 );
break
}
}
}}
}( this ), function ( a, b ) {
function f( a, c ) {
d.addType( a, function ( f, g, h ) {
var i, j, k, l, m = g, n = (new Date).getTime();
if ( !f ) {
m = {}, l = [], k = 0;
try {
f = c.length;
while ( f = c.key( k++ ) ) {
e.test( f ) && (j = JSON.parse( c.getItem( f ) ), j.expires && j.expires <= n ? l.push( f ) : m[f.replace( e, "" )] = j.data);
}
while ( f = l.pop() ) {
c.removeItem( f )
}
} catch ( o ) {
}
return m
}
f = "__amplify__" + f;
if ( g === b ) {
i = c.getItem( f ), j = i ? JSON.parse( i ) : {expires : -1};
if ( !(j.expires && j.expires <= n) ) {
return j.data;
}
c.removeItem( f )
} else if ( g === null ) {
c.removeItem( f );
} else {
j = JSON.stringify( {data : g, expires : h.expires ? n + h.expires : null} );
try {
c.setItem( f, j )
} catch ( o ) {
d[a]();
try {
c.setItem( f, j )
} catch ( o ) {
throw d.error()
}
}
}
return m
} )
}
var d = a.store = function ( a, b, c, e ) {
var e = d.type;
return c && c.type && c.type in d.types && (e = c.type), d.types[e]( a, b, c || {} )
};
d.types = {}, d.type = null, d.addType = function ( a, b ) {
d.type || (d.type = a), d.types[a] = b, d[a] = function ( b, c, e ) {
return e = e || {}, e.type = a, d( b, c, e )
}
}, d.error = function () {
return"amplify.store quota exceeded"
};
var e = /^__amplify__/;
for ( var g in{localStorage : 1, sessionStorage : 1} ) {
try {
window[g].getItem && f( g, window[g] )
} catch ( h ) {
}
}
if ( !d.types.localStorage && window.globalStorage ) {
try {
f( "globalStorage", window.globalStorage[window.location.hostname] ), d.type === "sessionStorage" && (d.type = "globalStorage")
} catch ( h ) {
}
}
(function () {
if ( d.types.localStorage ) {
return;
}
var a = c.createElement( "div" ), e = "amplify";
a.style.display = "none", c.getElementsByTagName( "head" )[0].appendChild( a );
try {
a.addBehavior( "#default#userdata" ), a.load( e )
} catch ( f ) {
a.parentNode.removeChild( a );
return
}
d.addType( "userData", function ( c, f, g ) {
a.load( e );
var h, i, j, k, l, m = f, n = (new Date).getTime();
if ( !c ) {
m = {}, l = [], k = 0;
while ( h = a.XMLDocument.documentElement.attributes[k++] ) {
i = JSON.parse( h.value ), i.expires && i.expires <= n ? l.push( h.name ) : m[h.name] = i.data;
}
while ( c = l.pop() ) {
a.removeAttribute( c );
}
return a.save( e ), m
}
c = c.replace( /[^-._0-9A-Za-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u37f-\u1fff\u200c-\u200d\u203f\u2040\u2070-\u218f]/g, "-" ), c = c.replace( /^-/, "_-" );
if ( f === b ) {
h = a.getAttribute( c ), i = h ? JSON.parse( h ) : {expires : -1};
if ( !(i.expires && i.expires <= n) ) {
return i.data;
}
a.removeAttribute( c )
} else {
f === null ? a.removeAttribute( c ) : (j = a.getAttribute( c ), i = JSON.stringify( {data : f, expires : g.expires ? n + g.expires : null} ), a.setAttribute( c, i ));
}
try {
a.save( e )
} catch ( o ) {
j === null ? a.removeAttribute( c ) : a.setAttribute( c, j ), d.userData();
try {
a.setAttribute( c, i ), a.save( e )
} catch ( o ) {
throw j === null ? a.removeAttribute( c ) : a.setAttribute( c, j ), d.error()
}
}
return m
} )
})(), function () {
function e( a ) {
return a === b ? b : JSON.parse( JSON.stringify( a ) )
}
var a = {}, c = {};
d.addType( "memory", function ( d, f, g ) {
return d ? f === b ? e( a[d] ) : (c[d] && (clearTimeout( c[d] ), delete c[d]), f === null ? (delete a[d], null) : (a[d] = f, g.expires && (c[d] = setTimeout( function () {
delete a[d], delete c[d]
}, g.expires )), f)) : e( a )
} )
}()
}( this.amplify = this.amplify || {} ), function ( a, b ) {
function c() {
}
function d( a ) {
return{}.toString.call( a ) === "[object Function]"
}
function e( a ) {
var b = !1;
return setTimeout( function () {
b = !0
}, 1 ), function () {
var c = this, d = arguments;
b ? a.apply( c, d ) : setTimeout( function () {
a.apply( c, d )
}, 1 )
}
}
a.request = function ( b, f, g ) {
var h = b || {};
typeof h == "string" && (d( f ) && (g = f, f = {}), h = {resourceId : b, data : f || {}, success : g});
var i = {abort : c}, j = a.request.resources[h.resourceId], k = h.success || c, l = h.error || c;
h.success = e( function ( b, c ) {
c = c || "success", a.publish( "request.success", h, b, c ), a.publish( "request.complete", h, b, c ), k( b, c )
} ), h.error = e( function ( b, c ) {
c = c || "error", a.publish( "request.error", h, b, c ), a.publish( "request.complete", h, b, c ), l( b, c )
} );
if ( !j ) {
throw h.resourceId ? "amplify.request: unknown resourceId: " + h.resourceId : "amplify.request: no resourceId provided";
}
if ( !a.publish( "request.before", h ) ) {
h.error( null, "abort" );
return
}
return a.request.resources[h.resourceId]( h, i ), i
}, a.request.types = {}, a.request.resources = {}, a.request.define = function ( b, c, d ) {
if ( typeof c == "string" ) {
if ( !(c in a.request.types) ) {
throw"amplify.request.define: unknown type: " + c;
}
d.resourceId = b, a.request.resources[b] = a.request.types[c]( d )
} else {
a.request.resources[b] = c
}
}
}( amplify ), function ( a, b, c ) {
var d = ["status", "statusText", "responseText", "responseXML", "readyState"], e = /\{([^\}]+)\}/g;
a.request.types.ajax = function ( e ) {
return e = b.extend( {type : "GET"}, e ), function ( f, g ) {
function n( a, e ) {
b.each( d, function ( a, b ) {
try {
m[b] = h[b]
} catch ( c ) {
}
} ), /OK$/.test( m.statusText ) && (m.statusText = "success"), a === c && (a = null), l && (e = "abort"), /timeout|error|abort/.test( e ) ? m.error( a, e ) : m.success( a, e ), n = b.noop
}
var h, i = e.url, j = g.abort, k = b.extend( !0, {}, e, {data : f.data} ), l = !1, m = {readyState : 0, setRequestHeader : function ( a, b ) {
return h.setRequestHeader( a, b )
}, getAllResponseHeaders : function () {
return h.getAllResponseHeaders()
}, getResponseHeader : function ( a ) {
return h.getResponseHeader( a )
}, overrideMimeType : function ( a ) {
return h.overrideMideType( a )
}, abort : function () {
l = !0;
try {
h.abort()
} catch ( a ) {
}
n( null, "abort" )
}, success : function ( a, b ) {
f.success( a, b )
}, error : function ( a, b ) {
f.error( a, b )
}};
a.publish( "request.ajax.preprocess", e, f, k, m ), b.extend( k, {success : function ( a, b ) {
n( a, b )
}, error : function ( a, b ) {
n( null, b )
}, beforeSend : function ( b, c ) {
h = b, k = c;
var d = e.beforeSend ? e.beforeSend.call( this, m, k ) : !0;
return d && a.publish( "request.before.ajax", e, f, k, m )
}} ), b.ajax( k ), g.abort = function () {
m.abort(), j.call( this )
}
}
}, a.subscribe( "request.ajax.preprocess", function ( a, c, d ) {
var f = [], g = d.data;
if ( typeof g == "string" ) {
return;
}
g = b.extend( !0, {}, a.data, g ), d.url = d.url.replace( e, function ( a, b ) {
if ( b in g ) {
return f.push( b ), g[b]
}
} ), b.each( f, function ( a, b ) {
delete g[b]
} ), d.data = g
} ), a.subscribe( "request.ajax.preprocess", function ( a, c, d ) {
var e = d.data, f = a.dataMap;
if ( !f || typeof e == "string" ) {
return;
}
b.isFunction( f ) ? d.data = f( e ) : (b.each( a.dataMap, function ( a, b ) {
a in e && (e[b] = e[a], delete e[a])
} ), d.data = e)
} );
var f = a.request.cache = {_key : function ( a, b, c ) {
function g() {
return c.charCodeAt( e++ ) << 24 | c.charCodeAt( e++ ) << 16 | c.charCodeAt( e++ ) << 8 | c.charCodeAt( e++ ) << 0
}
c = b + c;
var d = c.length, e = 0, f = g();
while ( e < d ) {
f ^= g();
}
return"request-" + a + "-" + f
}, _default : function () {
var a = {};
return function ( b, c, d, e ) {
var g = f._key( c.resourceId, d.url, d.data ), h = b.cache;
if ( g in a ) {
return e.success( a[g] ), !1;
}
var i = e.success;
e.success = function ( b ) {
a[g] = b, typeof h == "number" && setTimeout( function () {
delete a[g]
}, h ), i.apply( this, arguments )
}
}
}()};
a.store && (b.each( a.store.types, function ( b ) {
f[b] = function ( c, d, e, g ) {
var h = f._key( d.resourceId, e.url, e.data ), i = a.store[b]( h );
if ( i ) {
return e.success( i ), !1;
}
var j = g.success;
g.success = function ( d ) {
a.store[b]( h, d, {expires : c.cache.expires} ), j.apply( this, arguments )
}
}
} ), f.persist = f[a.store.type]), a.subscribe( "request.before.ajax", function ( a ) {
var b = a.cache;
if ( b ) {
return b = b.type || b, f[b in f ? b : "_default"].apply( this, arguments )
}
} ), a.request.decoders = {jsend : function ( a, b, c, d, e ) {
a.status === "success" ? d( a.data ) : a.status === "fail" ? e( a.data, "fail" ) : a.status === "error" && (delete a.status, e( a, "error" ))
}}, a.subscribe( "request.before.ajax", function ( c, d, e, f ) {
function j( a, b ) {
g( a, b )
}
function k( a, b ) {
h( a, b )
}
var g = f.success, h = f.error, i = b.isFunction( c.decoder ) ? c.decoder : c.decoder in a.request.decoders ? a.request.decoders[c.decoder] : a.request.decoders._default;
if ( !i ) {
return;
}
f.success = function ( a, b ) {
i( a, b, f, j, k )
}, f.error = function ( a, b ) {
i( a, b, f, j, k )
}
} )
}( amplify, jQuery ), amplify
} )