-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathweb-histrion.min.js
61 lines (61 loc) · 28.6 KB
/
web-histrion.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var DB_KEYS={UUID_LIST:"PERSONA_UUIDS",PERSONA_DICTIONARY:"PERSONA_DICTIONARY",ACTIVE_PERSONA_UUID:"ACTIVE_PERSONA_UUID",SAVED_ACTS:"SAVED_ACTS"},DEFAULT_PERSONA_BRAND_IMAGE_URI="https://orig04.deviantart.net/4a12/f/2016/195/9/a/theloudhouse_and_the_mask___lisa_masked_by_lueduartvartworks-da9z6d1.png http://cliparts.co/cliparts/pio/A7M/pioA7MMaT.jpg https://img13.deviantart.net/261e/i/2016/177/f/9/lisa_loud_is_the_mask__by_cartoonmaster01-da7sk2c.png http://www.clker.com/cliparts/W/9/n/j/B/L/mask-tornado-hi.png http://worldartsme.com/images/cartoon-masks-clipart-1.jpg http://worldartsme.com/images/theatre-summer-camp-clipart-1.jpg http://worldartsme.com/images/brazilian-carnival-mask-clipart-1.jpg http://worldartsme.com/images/face-mask-clipart-1.jpg http://cliparts.co/cliparts/6Ty/ooR/6TyooRyac.jpg".split(" ");
function success(a,c){$("#status").attr({"class":"alert alert-success"}).html(a);c&&alert(a)}function warning(a,c){$("#status").attr({"class":"alert alert-warning"}).html(a);c&&alert(a)}function info(a,c){$("#status").attr({"class":"alert alert-info"}).html(a);c&&alert(a)}function error(a,c){$("#status").attr({"class":"alert alert-danger"}).html(a);c&&alert(a)}
function Persona(a){this.persona=a;this.getAppName=function(){return this.persona.app.name};this.getThemeColor=function(a){return tinycolor(this.persona.app.color||a)};this.getFields=function(){return this.persona.fields};this.getAppTheatreAddress=function(){return this.persona.app.theatre_address};this.getAppTransportMode=function(){return this.persona.app.transport_mode};this.KEYS={CACHE_THEATRE_ADDRESS:"CACHE_THEATRE_ADDRESS",CACHE_TRANSPORT_MODE:"CACHE_TRANSPORT_MODE",CACHE_APP_NAME:"CACHE_APP_NAME",
CACHE_PERSONA:"PERSONA",CACHE_UUID:"UUID",CACHE_TIMESTAMP:"CACHE_TIMESTAMP"};this.FieldTypes={TEXT:"text",PARAGRAPH:"paragraph",EMAIL:"email",WEBSITE:"website",FILE:"file",RADIO:"radio",SHOW_IMAGE:"show_image",SHOW_INFO:"show_info",TIME:"time",DATE:"date",DROPDOWN:"dropdown",CAMERA:"camera",CHECK_BOXES:"checkboxes",NUMBER:"number",BARCODE:"barcode"};this.TRANSPORT_MODES={POST:"POST",GET:"GET",SMS:"SMS",EMAIL:"EMAIL"};this.isInputField=function(a){switch(a.field_type){case this.FieldTypes.PARAGRAPH:case this.FieldTypes.EMAIL:case this.FieldTypes.WEBSITE:case this.FieldTypes.RADIO:case this.FieldTypes.FILE:case this.FieldTypes.DROPDOWN:case this.FieldTypes.TIME:case this.FieldTypes.DATE:case this.FieldTypes.CAMERA:case this.FieldTypes.CHECK_BOXES:case this.FieldTypes.NUMBER:case this.FieldTypes.BARCODE:case this.FieldTypes.TEXT:return!0}return!1};
this.canTransportActs=function(){if(void 0==this.persona.app.theatre_address||0==this.persona.app.theatre_address.trim().length)return!1;switch(this.persona.app.transport_mode){case this.TRANSPORT_MODES.POST:case this.TRANSPORT_MODES.GET:return!0;default:return!1}}}
function loadNewPersona(a){if(null==a)error("The loaded persona is invalid (NULL). Can't proceed...",!0);else{var c=new Persona(a);$("#app-title").text(c.getAppName()).fitText();$(document).prop("title",c.getAppName());var d=tinycolor("#490A3D"),d=c.getThemeColor(d),b=d.monochromatic(7),d={color1:d,color2:b[1],color3:b[2],color4:b[3],color5:b[4],color6:b[5],color7:b[6]},b=$("#app-base");b.css({"background-color":d.color2.toHexString()});b.find(".panel").css({"background-color":d.color3.toHexString()});
b.find(".panel-heading").css({"background-color":"#f5f5f5",color:"#333","text-shadow":"gray 3px 3px 3px"});$("body").css({"background-color":"#f5f5f5"});b.find(".panel").css({"border-color":d.color5.toHexString()});b=$("#app-body");b.css({color:d.color6.toHexString()});renderPersona(c,b,d);d=$("#btnSave");b=$("#btnSubmit");if(c.canTransportActs()){b.show();d.show();var f=!1;b.unbind().click(function(){if(!f){f=!0;var b=parseAct(c);null!=b?submitActToTheatre(b,c,function(){f=!1;init()},function(){f=
!1}):f=!1}});d.unbind().click(function(){if(!f){f=!0;var b=parseAct(c);null!=b?saveAct(b,c,function(){f=!1;init()},function(){f=!1}):f=!1}})}else b.hide(),d.hide();cacheActivePersona(a,!0)}}
function cacheActivePersona(a,c){var d=a.app.uuid;if(null==d)error("<b>Persona Caching Failed</b><br/>Unfortunately, this person lacks a UUID, and so it can't be cached for later reuse.");else{var b=localStorage.getItem(DB_KEYS.PERSONA_DICTIONARY),b=null!=b?JSON.parse(b):{};b[d]=a;localStorage.setItem(DB_KEYS.PERSONA_DICTIONARY,JSON.stringify(b));c&&setActivePersonaUUID(d)}}function setActivePersonaUUID(a){localStorage.setItem(DB_KEYS.ACTIVE_PERSONA_UUID,a)}
function submitActToTheatre(a,c,d,b){info("Wait as the act is being submitted...",!0);c=void 0==c.KEYS?new Persona(c):c;delete a[c.KEYS.CACHE_UUID];delete a[c.KEYS.CACHE_THEATRE_ADDRESS];delete a[c.KEYS.CACHE_TRANSPORT_MODE];delete a[c.KEYS.CACHE_APP_NAME];switch(c.persona.app.transport_mode){case c.TRANSPORT_MODES.POST:case c.TRANSPORT_MODES.GET:$.ajax({url:c.persona.app.theatre_address,method:c.persona.app.transport_mode,data:JSON.stringify(a)}).done(function(b){d();success("<b>ACT SUBMITTED, via HTTP"+
c.persona.app.transport_mode+"</b><br/> STATUS: "+b,!0)}).fail(function(){b();error("ACT NOT SENT. HTTP ERROR",!0)})}}
function saveAct(a,c,d,b){a[c.KEYS.CACHE_UUID]=c.persona.app.uuid;a[c.KEYS.CACHE_THEATRE_ADDRESS]=c.persona.app.theatre_address;a[c.KEYS.CACHE_TRANSPORT_MODE]=c.persona.app.appTransportMode;a[c.KEYS.CACHE_APP_NAME]=c.persona.app.name;var f=localStorage.getItem(DB_KEYS.SAVED_ACTS),f=null!=f?JSON.parse(f):{};c=a[c.KEYS.CACHE_UUID];null==c?(error("<b>CAN'T SAVE ACT!</b><br/> The Persona this act is based on, has no UUID or setting the UUID has failed. Contact the designers of this current persona for help.",!0),
b()):(b=f[c],void 0==b&&(b=[]),b.push(a),f[c]=b,localStorage.setItem(DB_KEYS.SAVED_ACTS,JSON.stringify(f)),success("Act has been successfully saved. You may continue to capture a new one...",!0),d(),init())}
function parseAct(a){var c={},d=!1;$.each(a.getFields(),function(b,f){if(!d&&a.isInputField(f)){var e=readFieldValue(a.FieldTypes,f);null==e&&f.required&&(error("<b>Validation Error!</b> <br/>"+f.label+" is required!",!0),d=!0);c[f.cid]=e}});if(d)return null;c[a.KEYS.CACHE_TIMESTAMP]=(new Date).toISOString();c[a.KEYS.CACHE_PERSONA]=JSON.stringify(a.persona);return c}
function readFieldValue(a,c){switch(c.field_type){case a.TEXT:case a.PARAGRAPH:case a.EMAIL:case a.WEBSITE:case a.DROPDOWN:case a.TIME:case a.DATE:case a.NUMBER:var d=$("#"+c.cid).val();if(void 0==d)break;d=d.trim();if(c.required&&0==d.length)break;return d;case a.RADIO:d=$("input:radio[name ='"+c.cid+"']:checked").val();if(void 0==d)break;if(c.required&&0==d.length)break;return d;case a.CHECK_BOXES:d=$("input:checkbox[name='"+c.cid+"']:checked").map(function(b){return $(this).val()});d=d.toArray().join(",");
if(c.required&&0==d.length)break;return d;case a.CAMERA:d=$("#cam-data-uri-"+c.cid).val();if(void 0==d)break;if(c.required&&0==d.length)break;return d;case a.BARCODE:d=$("#barcode-data-uri-"+c.cid).val();if(void 0==d)break;if(c.required&&0==d.length)break;return d;case a.FILE:if(d=$("#file-data-uri-"+c.cid).val(),void 0!=d&&(!c.required||0!=d.length))return d}return null}
function renderPersona(a,c,d){c.empty();$.each(a.getFields(),function(b,f){renderField(a.FieldTypes,c,b,f,d)});info("The persona has been fully rendered. You may now proceed...")}
function renderField(a,c,d,b,f){switch(b.field_type){case a.CAMERA:info("Loading field: "+b.label);var e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);e.append(a);a=$("<div/>",{"class":"row"});d=$("<div/>",{"class":"col-sm-5"});var g=$("<button/>",{"class":"btn",type:"text",id:b.cid}).prepend($("<div/>",{id:"cam-"+b.cid,"class":"cam-preview",title:"Click to take a photo"})).css({"background-color":f.color4.toHexString()});d.append(g);
a.append(d);d=$("<div/>",{"class":"col-sm-5 col-sm-offset-2"});f=$("<div/>",{id:"cam-snap-"+b.cid,"class":"cam-preview snap",style:"border:2px dashed "+f.color4.toHexString()});d.append(f);a.append(d);e.append(a);var l=$("<input/>",{type:"hidden",id:"cam-data-uri-"+b.cid});c.append(l);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);Webcam.attach("#cam-"+b.cid);g.click(function(){Webcam.snap(function(a){l.val(a);
$("#cam-snap-"+b.cid).html('<img class="img img-responsive" src="'+a+'"/>')})});break;case a.TEXT:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<input/>",{"class":"form-control",type:"text",id:b.cid}).css({color:f.color4});e.append(a);e.append(g);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;case a.WEBSITE:info("Loading field: "+
b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<div/>",{"class":"input-group"}).append($("<span/>",{"class":"input-group-addon"}).append($("<i/>",{"class":"fa fa-globe"})),$("<input/>",{id:b.cid,type:"url",placeholder:"URL","class":"form-control"}).css({color:f.color4}));e.append(a);e.append(g);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));
c.append(e);break;case a.EMAIL:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<div/>",{"class":"input-group"}).append($("<span/>",{"class":"input-group-addon"}).append($("<i/>",{"class":"fa fa-envelope"})),$("<input/>",{id:b.cid,type:"email",placeholder:"EMAIL Address","class":"form-control"}).css({color:f.color4}));e.append(a);e.append(g);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));
c.append(e);break;case a.NUMBER:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<input/>",{"class":"form-control",type:"number",id:b.cid}).css({color:f.color4});e.append(a);e.append(g);b.field_options.min&&g.attr({min:b.field_options.min});b.field_options.max&&g.attr({max:b.field_options.max});b.field_options.units&&g.attr({placeholder:b.field_options.units});b.field_options.description&&e.append($("<small/>",
{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;case a.DATE:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<input/>",{"class":"form-control",type:"date",id:b.cid}).css({color:f.color4});e.append(a);e.append(g);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;
case a.FILE:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);var g=$("<input/>",{"class":"form-control",type:"file",id:b.cid}),n=$("<input/>",{type:"hidden",id:"file-data-uri-"+b.cid});c.append(n);g.on("change",function(b){b=b.target.files[0];var a=new FileReader;a.onload=function(){console.log(this.result);n.val(this.result)};b&&a.readAsDataURL(b)});e.append(a);e.append(g);b.field_options.description&&e.append($("<small/>",
{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;case a.BARCODE:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<input/>",{"class":"form-control",type:"file",accept:"image/*",id:b.cid}).css({display:"none"});n=$("<input/>",{type:"hidden",id:"barcode-data-uri-"+b.cid});c.append(n);e.append(a);e.append(g);a=$("<div/>",{"class":"row"});d=$("<div/>",{"class":"col-sm-5"});
var t=$("<button/>",{"class":"btn",type:"text",id:b.cid,title:"Click to Read a QRCODE Image"}).append($("<i/>",{"class":"fa fa-4x fa-qrcode"})).css({"font-size":"large","background-color":f.color4.toHexString(),color:f.color2.toHexString()}).click(function(){g.click()}),h=$("<small/>",{"class":"text-success"});d.append(t);a.append(d);d=$("<div/>",{"class":"col-sm-5 col-sm-offset-2"});f=$("<div/>",{id:"qr-snap-"+b.cid,"class":"cam-preview snap",style:"border:2px dashed "+f.color4.toHexString()});g.on("change onpropertychange",
function(a){a=a.target.files[0];var c=new FileReader;c.onload=function(){console.log(this.result);var a=$('<img class="img img-responsive" src="'+this.result+'"/>');$("#qr-snap-"+b.cid).empty();$("#qr-snap-"+b.cid).append(a);QCodeDecoder().decodeFromImage(a[0],function(b,a){b?(error("There was an error while trying to parse the code<br/>"+b),h.text(b).attr({"class":"text-danger"}),n.val("")):(console.log(a),n.val(a),h.text(a).attr({"class":"text-success"}))})};a&&c.readAsDataURL(a)});d.append(f);
a.append(d);e.append(a);e.append(h);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;case a.TIME:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<div/>",{"class":"input-group"}).append($("<span/>",{"class":"input-group-addon"}).append($("<i/>",{"class":"fa fa-clock-o"})),$("<input/>",{id:b.cid,type:"time",
placeholder:"TIME","class":"form-control"}).css({color:f.color4}));e.append(a);e.append(g);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;case a.DROPDOWN:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<select/>",{"class":"form-control",id:b.cid}).css({color:f.color4});$.each(b.field_options.options,function(b,
a){g.append($("<option/>").text(a.label).attr({selected:a.checked?"selected":"false"}))});e.append(a);e.append(g);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;case a.CHECK_BOXES:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);e.append(a);$.each(b.field_options.options,function(a,c){var d=$("<div/>",{"class":"checkbox"}).append($("<label/>").text(c.label).prepend($("<input/>",
{name:b.cid,id:b.cid+""+a,type:"checkbox",value:c.label}).prop("checked",c.checked)));e.append(d)});b.field_options.include_other_option&&(g=$("<div/>",{"class":"input-group"}).append($("<span/>",{"class":"input-group-addon"}).append($("<input/>",{name:b.cid,id:"other_"+b.cid,type:"checkbox"})),$("<input/>",{name:"other_val_"+b.cid,id:"other_val_"+b.cid+"",type:"text",placeholder:"Other...","class":"form-control"}).on("change",function(){$("#other_"+b.cid).val($(this).val().trim())})),e.append(g));
b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;case a.RADIO:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);e.append(a);$.each(b.field_options.options,function(a,c){var d=$("<div/>",{"class":"radio"}).append($("<label/>").text(c.label).prepend($("<input/>",{name:b.cid,id:b.cid+""+a,type:"radio",value:c.label}).prop("checked",
c.checked)));e.append(d)});b.field_options.include_other_option&&(g=$("<div/>",{"class":"input-group"}).append($("<span/>",{"class":"input-group-addon"}).append($("<input/>",{name:b.cid,id:"other_"+b.cid,type:"radio"})),$("<input/>",{name:"other_val_"+b.cid,id:"other_val_"+b.cid+"",type:"text",placeholder:"Other...","class":"form-control"}).on("change",function(){$("#other_"+b.cid).val($(this).val().trim())})),e.append(g));b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));
c.append(e);break;case a.PARAGRAPH:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<textarea/>",{"class":"form-control",id:b.cid}).css({color:f.color4});e.append(a);e.append(g);b.field_options.description&&e.append($("<small/>",{"class":"text-muted"}).text(b.field_options.description).prepend("<hr/>"));c.append(e);break;case a.SHOW_IMAGE:info("Loading field: "+b.label);e=$("<div/>",{"class":"panel form-group field-panel"});
a=$("<label/>",{"class":"control-label"}).text(b.label);g=$("<img/>",{"class":"img img-responsive img-rounded",src:b.field_options.description});e.append(a);e.append(g);c.append(e);break;case a.SHOW_INFO:info("Loading field: "+b.label),e=$("<div/>",{"class":"panel form-group field-panel"}),a=$("<label/>",{"class":"control-label"}).css({"font-weight":"bold"}).text(b.label),g=$("<p/>").text(b.field_options.description),e.append(a),e.append(g),c.append(e)}}
function bootstrapHistrionFromURL(a){$.ajax({url:a,method:"get"}).done(function(a){success("A persona has been loaded successfully. Wait as it gets rendered...");"string"===typeof a||a instanceof String?loadNewPersona(JSON.parse(a)):loadNewPersona(a)}).fail(function(){error("Fetching the persona from the URL has failed! Can't bootstrap this Histrion. Try Reseting...")})}
function getActivePersona(){var a=localStorage.getItem(DB_KEYS.ACTIVE_PERSONA_UUID),c=localStorage.getItem(DB_KEYS.PERSONA_DICTIONARY);if(null==a||null==c)return error("Failed to load the active persona from the local cache..."),null;c=JSON.parse(c);return c[a]}function init(){var a=localStorage.getItem(DB_KEYS.ACTIVE_PERSONA_UUID);null!=a&&"null"!=a?loadNewPersona(getActivePersona()):showGettingStarted()}
function showGettingStarted(){$("#app-title").text("The (Web) Histrion").fitText();$(document).prop("title","The (Web) Histrion");var a=$("#app-base"),c=$("#app-body");a.css({"background-color":"#fff"});a.find(".panel").css({"background-color":"#fff"});a.find(".panel-heading").css({"background-color":"#f5f5f5",color:"#333","text-shadow":"gray 3px 3px 3px"});$("body").css({"background-color":"#f5f5f5"});a.find(".panel").css({"border-color":"#f5f5f5"});c.css({color:"inherit"});c.empty();$("#btnSave,#btnSubmit").hide();
info("It's too lonely here ;-) <br/>Perhaps, go to the <b>PERSONAS</b> section and import an app...<hr/>Alternatively, read more about the Histrion, and all of <b><a href='https://nuscribes.com/scribes_app/book/40/read/?#chapter-500' target='_blank'>Project-Okot, on NuScribes.</a></b>")}function acts(){var a=localStorage.getItem(DB_KEYS.SAVED_ACTS);null==a?info("There are no acts (saved data) in the local cache."):a=JSON.parse(a);renderActsManagement(a)}
function renderActsManagement(a){$("#app-title").text("Saved Acts").fitText();$(document).prop("title","Saved Acts");var c=tinycolor("#490A3D"),d=c.monochromatic(8),c={color1:c,color2:d[1],color3:d[2],color4:d[3],color5:d[4],color6:d[5],color7:d[6],color8:d[7]},b=$("#app-base"),d=$("#app-body");b.css({"background-color":c.color2.toHexString()});b.find(".panel").css({"background-color":c.color3.toHexString()});b.find(".panel-heading").css({"background-color":"#f5f5f5",color:"#333","text-shadow":"gray 3px 3px 3px"});
$("body").css({"background-color":"#f5f5f5"});b.find(".panel").css({"border-color":c.color5.toHexString()});d.css({color:c.color6.toHexString()});d.empty();$("#btnSave,#btnSubmit").hide();if(null!=a){b=0;for(personaUUID in a){var f=a[personaUUID];renderPersonaActsPanel(d,f,c);b+=f.length}0<b?success(b+" acts have been loaded for management. You may now proceed to preview, submit or delete them."):info("Yippie!! There were no acts available in the cache.")}else info("Yippie!! There were no acts available in the cache.")}
function renderPersonaActsPanel(a,c,d){if(null!=c&&0!=c.length){var b=$("<div/>",{"class":"panel-heading"}).css({color:d.color1.toHexString()}),f=$("<div/>",{"class":"panel panel-default persona-panel"}).append(b),e=$("<div/>",{"class":"panel-body"}).css({color:d.color1.toHexString()});f.append(e);a.append(f);$.each(c,function(a,c){console.log(c);var d=JSON.parse(c.PERSONA),f=null;if(null!=d){void 0!=d.persona&&(d=d.persona);b.text(d.app.name);f={};for(a=0;a<d.fields.length;a++){var h=d.fields[a];
f[h.cid]=h}null!=d&&d.app.color&&(h=tinycolor(d.app.color),e.css({"background-color":h.toHexString()}))}else b.text(c.CACHE_APP_NAME||c.UUID||"Unknown Persona");var h=$("<ul/>",{"class":"list-group"}),r=["PERSONA","UUID","CACHE_THEATRE_ADDRESS","CACHE_APP_NAME","CACHE_TIMESTAMP"],k;for(k in c)if(!(0<=r.indexOf(k))){console.log(k);var p=c[k],q=null!=f?f[k].label:k;p.startsWith("data:")?h.append($("<li/>",{"class":"list-group-item"}).append($("<b>"+q+"</b>"),$("<iframe/>",{frameborder:0,src:p}).css({width:"100%",
height:"200px"}))):h.append($("<li/>",{"class":"list-group-item"}).html("<b>"+q+"</b><br/><i>"+p+"</i>"))}f=$("<div/>",{"class":"btn-group",role:"group"});if(null!=d){k=$("<button/>",{"class":"btn btn-success"}).text("SUBMIT");f.append(k);var m=!1;k.click(function(){m||(m=!0,submitActToTheatre(c,d,function(){m=!1;success("Posted the Act successfully...");deleteAct(c,d.app.uuid,function(){success("Act has been deleted.");m=!1;acts()},function(){success("Act has been deleted.");m=!1;acts()})},function(){m=
!1;error("Failed to post the Act!")}))})}k=$("<button/>",{"class":"btn btn-danger"}).text("DELETE");k.click(function(){deleteAct(c,d.app.uuid,function(){success("Act has been deleted.");m=!1},function(){success("Act has been deleted.");m=!1});acts()});f.append(k);h.append($("<li/>",{"class":"list-group-item"}).append(f));e.append(h)})}}function deleteFromArray(a,c,d){return c.filter(function(b){return d(a)!=d(b)})}
function deleteAct(a,c,d,b){var f=localStorage.getItem(DB_KEYS.SAVED_ACTS);if(null!=f)if(f=JSON.parse(f),null==c)error("UUID for this act wasn't set. Can't proceed."),b();else{var e=f[c];void 0==e?(error("The persona referenced has no acts in the cache! Can't proceed."),b()):(e=deleteFromArray(a,e,function(a){return a.CACHE_TIMESTAMP}),f[c]=e,localStorage.setItem(DB_KEYS.SAVED_ACTS,JSON.stringify(f)),success("Act has been successfully deleted. You may continue to manage...",!0),d(),acts())}else error("Failed to delete this Act! The cache is null."),
b()}function manage(){var a=localStorage.getItem(DB_KEYS.PERSONA_DICTIONARY);null==a?error("There are no personas in the local cache. You might want to first import a persona from a theatre, persona repository or design and import one from a persona studio."):a=JSON.parse(a);renderPersonaManagement(a)}
function renderPersonaManagement(a){$("#app-title").text("Manage Personas").fitText();$(document).prop("title","Manage Personas");var c=tinycolor("#490A3D"),d=c.monochromatic(8),c={color1:c,color2:d[1],color3:d[2],color4:d[3],color5:d[4],color6:d[5],color7:d[6],color8:d[7]},d=$("#app-body"),b=$("#app-base");b.css({"background-color":c.color2.toHexString()});b.find(".panel").css({"background-color":c.color3.toHexString()});b.find(".panel-heading").css({"background-color":"#f5f5f5",color:"#333","text-shadow":"gray 3px 3px 3px"});
$("body").css({"background-color":"#f5f5f5"});b.find(".panel").css({"border-color":c.color5.toHexString()});d.css({color:c.color6.toHexString()});d.empty();$("#btnSave,#btnSubmit").hide();renderPersonaImportPanel(d,c);if(null!=a){b=0;for(personaUUID in a)renderPersonaManagementPanel(d,a[personaUUID],c),b++;0<b?info(b+" personas have been loaded for management. You may now proceed to activate, delete or import new personas..."):warning("There were no personas available in the cache. You may want to import some, to get started.<hr/><b>EXAMPLE</b> Try loading the official demo persona by importing from this URL:<br/><br/> <cite>https://theatre.nuchwezi.com/api/persona/49d1463a-d977-4ceb-9dac-e5c70b521444/</cite>")}else warning("There were no personas available in the cache. You may want to import some, to get started.<hr/><b>EXAMPLE</b> Try loading the official demo persona by importing from this URL:<br/><br/> <cite>https://theatre.nuchwezi.com/api/persona/49d1463a-d977-4ceb-9dac-e5c70b521444/</cite>")}
function renderPersonaImportPanel(a,c){var d=$("<div/>",{"class":"row"}),b=$("<div/>",{"class":"panel panel-warning"}).append($("<div/>",{"class":"panel-heading"}).append($('<h1 class="panel-title">IMPORT New Personas</h1>')),$("<div/>",{"class":"panel-body"}).append(d)),f=$("<div/>",{"class":"col-md-6"}),e=$("<div/>",{"class":"col-md-6"});d.append(f);d.append(e);a.append(b);var d=$("<button/>",{"class":"btn btn-default"}).text("From URL"),g=$("<input/>",{"class":"form-control",type:"url",placeholder:"Paste/Enter URL pointing to a persona to import"}),
b=$("<div/>",{"class":"input-group"}).append(g,$("<span/>",{"class":"input-group-btn"}).append(d));f.append(b);d.click(function(){var a=g.val().trim();0==a.length?error("Can't import from a blank URL!",!0):(info("Please wait as I try to fetch a persona from the specified URL..."),bootstrapHistrionFromURL(a))});d=$("<input/>",{"class":"form-control input-lg",type:"file",title:"Pick a *.persona file or other, from which to import from"});b=$("<div/>",{"class":"form-group"}).append(d);f.append(b);d.on("change",
function(a){a=a.target.files[0];var b=new FileReader;b.onload=function(){console.log(this.result);loadNewPersona(JSON.parse(this.result))};b.readAsText(a)});var l=$("<textarea/>",{"class":"form-control",type:"file",rows:5,placeholder:"You can either paste or type valid Persona JSON here, and then attempt to import from that. But, the best recommendation is to use JSON generated from a supported Persona Studio."}),f=$("<button/>",{"class":"btn btn-default"}).text("From JSON"),d=$("<div/>",{"class":"form-group"}).append(l,
f);e.append(d);f.click(function(){var a=l.val().trim();0==a.length?error("Please enter valid Persona JSON!",!0):loadNewPersona(JSON.parse(a))})}
function renderPersonaManagementPanel(a,c,d){info("Found persona: "+c.app.name);var b=$("<div/>",{"class":"panel panel-default persona-panel"}).append($("<div/>",{"class":"panel-heading"}).text(c.app.name).css({color:d.color1}));d=$("<div/>",{"class":"panel-body"}).css({color:d.color1});var f=$("<div/>",{"class":"row"}),e=$("<img/>",{"class":"img img-responsive img-rounded",src:c.app.brand_image||DEFAULT_PERSONA_BRAND_IMAGE_URI[Math.floor(Math.random()*DEFAULT_PERSONA_BRAND_IMAGE_URI.length)]});f.append($("<div/>",
{"class":"col-md-6"}).append(e));e=$("<ul/>",{"class":"list-group"});e.append($("<li/>",{"class":"list-group-item"}).text(c.app.description));e.append($("<li/>",{"class":"list-group-item"}).html("<b>"+c.app.transport_mode+" </b>: <i>"+c.app.theatre_address+"</i>"));e.append($("<li/>",{"class":"list-group-item"}).html("<b>UUID</b>: <i>"+c.app.uuid+"</i>"));var g=$("<button/>",{id:"btn-activate-"+c.app.uuid,"class":"btn btn-success"}).text("ACTIVATE"),l=$("<button/>",{id:"btn-deletee-"+c.app.uuid,"class":"btn btn-danger"}).text("DELETE");
g.click(function(){cacheActivePersona(c,!0);info(c.app.name+" has been saved as the active persona.",!0)});l.click(function(){deletePersona(c);info(c.app.name+" has been deleted from the cache.");manage()});g=$("<div/>",{"class":"btn-group",role:"group"}).append(g,l);e.append($("<li/>",{"class":"list-group-item"}).append(g));f.append($("<div/>",{"class":"col-md-6"}).append(e));d.append(f);b.append(d);a.append(b)}
function deletePersona(a){var c=a.app.uuid;if(null==c)error("<b>Persona Deletion Failed</b><br/>Unfortunately, this person lacks a UUID, and so it can't be located in the cache.");else{var d=localStorage.getItem(DB_KEYS.PERSONA_DICTIONARY);null!=d&&(d=JSON.parse(d),delete d[c],localStorage.setItem(DB_KEYS.PERSONA_DICTIONARY,JSON.stringify(d)));localStorage.getItem(DB_KEYS.ACTIVE_PERSONA_UUID)==a.app.uuid&&(localStorage.setItem(DB_KEYS.ACTIVE_PERSONA_UUID,null),warning("The active persona has been deactivated.",
!0))}}$(function(){$("#refresh").click(function(){warning("You have requested that I reload the Histrion. Please wait as I load the active persona... ");init()});$("#cache").click(function(){info("Wait as I load the saved acts interface...");acts()});$("#manage").click(function(){info("Wait as I load the persona management interface...");manage()});init()});String.prototype.replaceAll=function(a,c){return this.replace(new RegExp(a,"g"),c)};
$(document).ready(function(){window._alert=window.alert;window.alertStack=[];window.alert=function(a,c,d){if(!(0<=window.alertStack.indexOf(a))){window.alertStack.push(a);var b=$("#modalTemplate").html(),b=b.replaceAll("{message}",a),b=b.replaceAll("{title}",c||"Attention"),f="alertModal_"+(new Date).getTime(),b=b.replaceAll("{id}",f);$("#modalContainer").empty();$("#modalContainer").append($(b));$("#"+f).modal({show:!1});$("#"+f).modal("show");d&&setTimeout(function(){$("#"+f).modal("hide")},d);
$("#"+f).on("hidden.bs.modal",function(){delete window.alertStack[window.alertStack.indexOf(a)]})}}});function closeModal(a){$("#"+a).trigger("hidden.bs.modal");$("#"+a).modal("toggle");$("#"+a).detach();$("body").removeClass("modal-open");$(".modal-backdrop:first").remove()};