$(document).ready(function() { performTranslation(); var oldEffects = []; var cpcolor = '#B500FF'; var mappingList = window.serverSchema.properties.color.properties.imageToLedMappingType.enum; var duration = 0; var rgb = {r:255,g:0,b:0}; //create html createTable('ssthead', 'sstbody', 'sstcont'); $('.ssthead').html(createTableRow([$.i18n('remote_input_origin'), $.i18n('remote_input_owner'), $.i18n('remote_input_priority'), $.i18n('remote_input_status')], true, true)); createTable('crthead', 'crtbody', 'adjust_content', true); //create introduction if(window.showOptHelp) { createHint("intro", $.i18n('remote_color_intro', $.i18n('remote_losthint')), "color_intro"); createHint("intro", $.i18n('remote_input_intro', $.i18n('remote_losthint')), "sstcont"); createHint("intro", $.i18n('remote_adjustment_intro', $.i18n('remote_losthint')), "adjust_content"); createHint("intro", $.i18n('remote_components_intro', $.i18n('remote_losthint')), "comp_intro"); createHint("intro", $.i18n('remote_maptype_intro', $.i18n('remote_losthint')), "maptype_intro"); createHint("intro", $.i18n('remote_videoMode_intro', $.i18n('remote_losthint')), "videomode_intro"); } //color adjustment var sColor = sortProperties(window.serverSchema.properties.color.properties.channelAdjustment.items.properties); var values = window.serverInfo.adjustment[0]; for(var key in sColor) { if(sColor[key].key != "id" && sColor[key].key != "leds") { var title = '<label for="cr_'+sColor[key].key+'">'+$.i18n(sColor[key].title)+'</label>'; var property; var value = values[sColor[key].key]; if(sColor[key].type == "array") { property = '<div id="cr_'+sColor[key].key+'" class="input-group colorpicker-component" ><input type="text" class="form-control" /><span class="input-group-addon"><i></i></span></div>'; $('.crtbody').append(createTableRow([title, property], false, true)); createCP('cr_'+sColor[key].key, value, function(rgb,hex,e){ requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), '['+rgb.r+','+rgb.g+','+rgb.b+']'); }); } else if(sColor[key].type == "boolean") { property = '<div class="checkbox"><input id="cr_'+sColor[key].key+'" type="checkbox" value="'+value+'"/><label></label></div>'; $('.crtbody').append(createTableRow([title, property], false, true)); $('#cr_'+sColor[key].key).off().on('change', function(e){ requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.checked); }); } else { if(sColor[key].key == "brightness" || sColor[key].key == "brightnessCompensation" || sColor[key].key == "backlightThreshold") property = '<div class="input-group"><input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0" max="100" step="10" value="'+value+'"/><span class="input-group-addon">'+$.i18n("edt_append_percent")+'</span></div>'; else property = '<input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0.1" max="4.0" step="0.1" value="'+value+'"/>'; $('.crtbody').append(createTableRow([title, property], false, true)); $('#cr_'+sColor[key].key).off().on('change', function(e){ valValue(this.id,this.value,this.min,this.max); requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.value); }); } } } function sendEffect() { var efx = $("#effect_select").val(); if(efx != "__none__") { requestPriorityClear(); $(window.hyperion).one("cmd-clear", function(event) { setTimeout(function() {requestPlayEffect(efx,duration)}, 100); }); } } function sendColor() { requestSetColor(rgb.r, rgb.g, rgb.b,duration); } function updateInputSelect() { $('.sstbody').html(""); var prios = window.serverInfo.priorities; var i; var clearAll = false; for(i = 0; i < prios.length; i++) { var origin = prios[i].origin ? prios[i].origin : "System"; origin = origin.split("@"); var ip = origin[1]; origin = origin[0]; var owner = prios[i].owner; var active = prios[i].active; var visible = prios[i].visible; var priority = prios[i].priority; var compId = prios[i].componentId; var duration = prios[i].duration_ms/1000; var value = "0,0,0"; var btn_type = "default"; var btn_text = $.i18n('remote_input_setsource_btn'); var btn_state = "enabled"; if (active) btn_type = "primary"; if(priority > 254) continue; if(priority < 254 && (compId == "EFFECT" || compId == "COLOR") ) clearAll = true; if (visible) { btn_state = "disabled"; btn_type = "success"; btn_text = $.i18n('remote_input_sourceactiv_btn'); } if(ip) origin += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_ip')+' '+ip+'</span>'; if("value" in prios[i]) value = prios[i].value.RGB; switch (compId) { case "EFFECT": owner = $.i18n('remote_effects_label_effects')+' '+owner; break; case "COLOR": owner = $.i18n('remote_color_label_color')+' '+'<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb('+value+'); display:inline-block" title="RGB: ('+value+')"></div>'; break; case "GRABBER": owner = $.i18n('general_comp_GRABBER')+': ('+owner+')'; break; case "V4L": owner = $.i18n('general_comp_V4L')+': ('+owner+')'; break; case "BOBLIGHTSERVER": owner = $.i18n('general_comp_BOBLIGHTSERVER'); break; case "UDPLISTENER": owner = $.i18n('general_comp_UDPLISTENER'); break; case "FLATBUFSERVER": owner = $.i18n('general_comp_FLATBUFSERVER'); break; case "PROTOSERVER": owner = $.i18n('general_comp_PROTOSERVER'); break; } if(duration && compId != "GRABBER" && compId != "FLATBUFSERVER" && compId != "PROTOSERVER") owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>'; var btn = '<button id="srcBtn'+i+'" type="button" '+btn_state+' class="btn btn-'+btn_type+' btn_input_selection" onclick="requestSetSource('+priority+');">'+btn_text+'</button>'; if((compId == "EFFECT" || compId == "COLOR") && priority < 254) btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear('+priority+');"><i class="fa fa-close"></button>'; if(btn_type != 'default') $('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true)); } var btn_auto_color = (window.serverInfo.priorities_autoselect? "btn-success" : "btn-danger"); var btn_auto_state = (window.serverInfo.priorities_autoselect? "disabled" : "enabled"); var btn_auto_text = (window.serverInfo.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off')); var btn_call_state = (clearAll? "enabled" : "disabled"); $('#auto_btn').html('<button id="srcBtn'+i+'" type="button" '+btn_auto_state+' class="btn '+btn_auto_color+'" style="margin-right:5px;display:inline-block;" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+' ('+btn_auto_text+')</button>'); $('#auto_btn').append('<button type="button" '+btn_call_state+' class="btn btn-danger" style="display:inline-block;" onclick="requestClearAll();">'+$.i18n('remote_input_clearall')+'</button>'); var max_width=100; $('.btn_input_selection').each(function() { if ($(this).innerWidth() > max_width) max_width = $(this).innerWidth(); }); $('.btn_input_selection').css("min-width",max_width+"px"); } function updateLedMapping() { var mapping = window.serverInfo.imageToLedMappingType; $('#mappingsbutton').html(""); for(var ix = 0; ix < mappingList.length; ix++) { if(mapping == mappingList[ix]) var btn_style = 'btn-success'; else var btn_style = 'btn-primary'; $('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>'); } } function updateComponents() { var components = window.comps; var hyperionEnabled = true; components.forEach( function(obj) { if (obj.name == "ALL") { hyperionEnabled = obj.enabled } }); // create buttons $('#componentsbutton').html(""); for (var idx=0; idx<components.length;idx++) { if(components[idx].name == "ALL") continue; var enable_style = (components[idx].enabled? "btn-success" : "btn-danger"); var enable_icon = (components[idx].enabled? "fa-play" : "fa-stop"); var comp_name = components[idx].name; var comp_btn_id = "comp_btn_"+comp_name; var comp_goff = hyperionEnabled? "enabled" : "disabled"; // create btn if not there if ($("#"+comp_btn_id).length == 0) { var d='<span style="display:block;margin:3px"><button type="button" '+comp_goff+' id="'+comp_btn_id+'" class="btn '+enable_style +'" onclick="requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled) +')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> '+$.i18n('general_comp_'+components[idx].name)+'</span>'; $('#componentsbutton').append(d); } else // already create, update state { setClassByBool( $('#'+comp_btn_id) , components[idx].enabled, "btn-danger", "btn-success" ); setClassByBool( $('#'+comp_btn_id+"_icon"), components[idx].enabled, "fa-stop" , "fa-play" ); $('#'+comp_btn_id).attr("onclick",'requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)+')').attr(comp_goff); } } } function updateEffectlist() { var newEffects = window.serverInfo.effects; if (newEffects.length != oldEffects.length) { $('#effect_select').html('<option value="__none__"></option>'); var usrEffArr = []; var sysEffArr = []; for(var i = 0; i < newEffects.length; i++) { var effectName = newEffects[i].name; if(!/^\:/.test(newEffects[i].file)){ usrEffArr.push(effectName); } else{ sysEffArr.push(effectName); } } $('#effect_select').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets'))); $('#effect_select').append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets'))); oldEffects = newEffects; } } function updateVideoMode() { var videoModes = ["2D","3DSBS","3DTAB"]; var currVideoMode = window.serverInfo.videomode; $('#videomodebtns').html(""); for(var ix = 0; ix < videoModes.length; ix++) { if(currVideoMode == videoModes[ix]) var btn_style = 'btn-success'; else var btn_style = 'btn-primary'; $('#videomodebtns').append('<button type="button" id="vModeBtn_'+videoModes[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestVideoMode(\''+videoModes[ix]+'\');">'+$.i18n('remote_videoMode_'+videoModes[ix])+'</button><br/>'); } } // colorpicker and effect if (getStorage('rmcpcolor') != null) { cpcolor = getStorage('rmcpcolor'); rgb = hexToRgb(cpcolor); } if (getStorage('rmduration') != null) { $("#remote_duration").val(getStorage('rmduration')); duration = getStorage('rmduration'); } createCP('cp2', cpcolor, function(rgbT,hex){ rgb = rgbT; sendColor() setStorage('rmcpcolor', hex); }); $("#reset_color").off().on("click", function(){ requestPriorityClear(); $("#effect_select").val("__none__"); }); $("#remote_duration").off().on("change", function(){ duration = valValue(this.id,this.value,this.min,this.max); setStorage('rmduration', duration); }); $("#effect_select").off().on("change", function(event) { sendEffect(); }); $("#remote_input_reseff, #remote_input_rescol").off().on("click", function(){ if(this.id == "remote_input_rescol") sendColor(); else sendEffect(); }); $("#remote_input_img").change(function(){ readImg(this, function(src,width,height){ console.log(src,width,height) requestSetImage(src,width,height,duration) }); }); //force first update updateComponents(); updateInputSelect(); updateLedMapping(); updateVideoMode(); updateEffectlist(); // interval updates $(window.hyperion).on("components-updated",updateComponents); $(window.hyperion).on("cmd-priorities-update", function(event){ window.serverInfo.priorities = event.response.data.priorities window.serverInfo.priorities_autoselect = event.response.data.priorities_autoselect updateInputSelect() }); $(window.hyperion).on("cmd-imageToLedMapping-update", function(event){ window.serverInfo.imageToLedMappingType = event.response.data.imageToLedMappingType updateLedMapping() }); $(window.hyperion).on("cmd-videomode-update", function(event){ window.serverInfo.videomode = event.response.data.videomode updateVideoMode() }); $(window.hyperion).on("cmd-effects-update", function(event){ window.serverInfo.effects = event.response.data.effects updateEffectlist(); }); removeOverlay(); });