File: application/webfan/node_modules/webfan/bootcache.js

Recommend this page to a friend!
  Classes of Till Wehowski   µ.Flow   application/webfan/node_modules/webfan/bootcache.js   Download  
File: application/webfan/node_modules/webfan/bootcache.js
Role: Example script
Content type: text/plain
Description: Example script
Class: µ.Flow
General purpose library of objects
Author: By
Last change:
Date: 6 years ago
Size: 3,568 bytes
 

Contents

Class file image Download
/** * AMD-cache, a loader plugin for AMD loaders. * * Available via the MIT or new BSD license. * * Copyright (c) 2011 Jens Arps * * The xhr code is taken from the RequireJS text plugin: * * @license RequireJS text 0.26.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. * see: http://github.com/jrburke/requirejs for details */ (function () { function str_replace(search, replace, subject) { if ('string' !== typeof subject) return ''; try { return subject.split(search).join(replace); } catch (err) { console.warn(err); return ''; } } var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], hasLocalStorage = (function(){ var supported = false; try{ supported = window && ("localStorage" in window) && ("getItem" in localStorage); }catch(e){} return supported; })(); define( 'webfan/bootcache', function () { var cache = { createXhr: function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else { for (i = 0; i < 3; i++) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } if (!xhr) { throw new Error("createXhr(): XMLHttpRequest not available"); } return xhr; }, get: function (url, callback) { var xhr = cache.createXhr(); xhr.open('GET', url, true); xhr.onreadystatechange = function (evt) { //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { callback(xhr.responseText); } }; xhr.send(null); }, load: function (name, req, load, config) { if(!!require.defined('frdlcjs')){ return require.s.contexts._.defined.frdlcjs.load(str_replace('webfan\/bootcache!', '',name), req, require.s.contexts._.defined.frdlcjs.load, config); } // var cached, url = req.toUrl(name); // TODO: prepend location.pathname? var cached, url = req.toUrl(name) + '.js'; if (hasLocalStorage) { // in build context, this will be false, too cached = localStorage.getItem(url); if (cached !== null) { load.fromText(name, cached); } else { cache.get(url, function (content) { content += '\n //@ sourceURL='+name; load.fromText(name, content); // can't just fall through here, as we // will already have returned at this time. req([name], function (content) { load(content); }); try { // need to wrap this to catch potential QUOTA_EXCEEDED localStorage.setItem(url, content); } catch(e) {} }); // need to return here to prevent a second // request being sent over the network. return; } } req([name], function (content) { load(content); }); } }; return cache; }); }());