-
Notifications
You must be signed in to change notification settings - Fork 0
/
frame-storage.min.js
2 lines (2 loc) · 4.44 KB
/
frame-storage.min.js
1
2
/*! frame-storage - v1.0.2 - 2017-05-02; Copyright (c) 2017 Malte Dölker; Licensed MIT */
!function(a,b){"function"==typeof define&&define.amd?define([],b):"object"==typeof module&&module.exports?module.exports=b():a.FrameStorage=b()}(this,function(){"use strict";function a(a){var b=document.createElement("div");b.id="framestorage-"+k(),b.style.display="none",document.body.appendChild(b);var j,m,n,o,p,q,r,s=[],t=null,u=location.protocol+"//"+location.host,v=a.match(/^(https?:\/\/[a-z0-9-.:@]+)\/?/i)||[null,u],w=v[1];return l({root:b,url:a,width:1,height:1,onload:function(a){t=a.contentWindow,j=c.bind(null,t),m=d.bind(null,t,w),n=e.bind(null,t,w),o=f.bind(null,t,w),p=g.bind(null,t,w),q=h.bind(null,t,w),r=i.bind(null,t,w),window.addEventListener("message",j,!1),s.forEach(function(a){switch(a[0]){case"save":m.apply(null,a[1]);break;case"load":n.apply(null,a[1]);break;case"empty":p.apply(null,a[1]);break;case"count":q.apply(null,a[1]);break;case"key":r.apply(null,a[1])}}),s=[]}}),{getItem:function(){n?n.apply(null,arguments):s.push(["load",arguments])},setItem:function(){m?m.apply(null,arguments):s.push(["save",arguments])},removeItem:function(){o?o.apply(null,arguments):s.push(["remove",arguments])},clear:function(){p?p.apply(null,arguments):s.push(["empty",arguments])},length:function(){q?q.apply(null,arguments):s.push(["count",arguments])},key:function(){r?r.apply(null,arguments):s.push(["key",arguments])},destroy:function(){b&&(document.body.removeChild(b),b=null),t&&(window.removeEventListener("message",j,!1),t=null),j=null,m=null,n=null}}}function b(a){null==a&&(a="*"),window.addEventListener("message",function(b){if("*"!==a&&b.origin!==a)return void console.error("Origin mismatch");var c=JSON.parse(b.data),d=function(d){j(b.source,{action:"frameStorageSuccess",ref:c.ref,key:c.key,value:d},a)},e=function(d){j(b.source,{action:"frameStorageError",ref:c.ref,key:c.key,message:d.message},a)};switch(c.action){case"getItem":try{var f=localStorage.getItem(c.key);d(f)}catch(g){e(g)}break;case"setItem":try{localStorage.setItem(c.key,c.value),d(null)}catch(g){e(g)}break;case"removeItem":try{localStorage.removeItem(c.key),d(null)}catch(g){e(g)}break;case"clear":try{localStorage.clear(),d()}catch(g){e(g)}break;case"length":try{d(localStorage.length)}catch(g){e(g)}break;case"key":try{var h=localStorage.key(c.value);d(h)}catch(g){e(g)}break;default:return void console.error("Unknown action")}},!1)}function c(b,c){if(c.source===b){var d=JSON.parse(c.data),e=a._callbacks[d.ref]||function(){};switch(d.action){case"frameStorageSuccess":e(null,d.value);break;case"frameStorageError":e(d.message,null);break;default:console.error("Unknown action")}delete a._callbacks[d.ref]}}function d(b,c,d,e,f){var g=k();f&&(a._callbacks[g]=f),j(b,{action:"setItem",ref:g,key:d,value:e},c)}function e(b,c,d,e){var f=k();e?a._callbacks[f]=e:console.warn("FrameStorage.getItem: Missing callback function"),j(b,{action:"getItem",ref:f,key:d},c)}function f(b,c,d,e){var f=k();e&&(a._callbacks[f]=e),j(b,{action:"removeItem",ref:f,key:d},c)}function g(b,c,d){var e=k();d?a._callbacks[e]=d:console.warn("FrameStorage.clear: Missing callback function"),j(b,{action:"clear",ref:e},c)}function h(b,c,d){var e=k();d?a._callbacks[e]=d:console.warn("FrameStorage.length: Missing callback function"),j(b,{action:"length",ref:e},c)}function i(b,c,d,e){var f=k();e&&(a._callbacks[f]=e),j(b,{action:"key",ref:f,value:d},c)}function j(a,b,c){a.postMessage(JSON.stringify(b),c)}function k(){return"c"+(Math.random()*(1<<30)).toString(16).replace(".","")}function l(b){b.id=b.id||k(),b.name=b.name||k();var c=k(),d=!1,e=!1;if(a._callbacks[c]=function(){d&&!e&&(e=!0,b.onload&&b.onload(b.root.firstChild))},document.attachEvent){var f='<iframe id="'+b.id+'" name="'+b.name+'"'+(b.className?' class="'+b.className+'"':"")+' style="border:none;'+(b.width?"width:"+b.width+"px;":"")+(b.height?"height:"+b.height+"px;":"")+'" src="'+b.url+'" frameborder="0" scrolling="no" allowtransparency="true" onload="FrameStorage._callbacks.'+c+'()"></iframe>';b.root.innerHTML='<iframe src="javascript:false" frameborder="0" scrolling="no" style="height:1px"></iframe>',d=!0,window.setTimeout(function(){b.root.innerHTML=f},0)}else{var g=document.createElement("iframe");g.id=b.id,g.name=b.name,g.onload=a._callbacks[c],g.style.border="none",g.style.overflow="hidden",b.className&&(g.className=b.className),b.height&&(g.style.height=b.height+"px"),b.width&&(g.style.width=b.width+"px"),b.root.appendChild(g),d=!0,g.src=b.url}}return a.initChannel=b,a._callbacks={},a});