From a0c0ea2f8b84adda5d02c04132027d48e7a411b9 Mon Sep 17 00:00:00 2001 From: "Jost, Beate" Date: Sat, 3 Oct 2015 17:21:45 +0300 Subject: [PATCH] add utils.js again --- .../staticResources/roberta/roberta.min.js | 4 +- .../staticResources/roberta/util.js | 228 ++++++++++++++++++ 2 files changed, 230 insertions(+), 2 deletions(-) create mode 100644 OpenRobertaServer/staticResources/roberta/util.js diff --git a/OpenRobertaServer/staticResources/roberta/roberta.min.js b/OpenRobertaServer/staticResources/roberta/roberta.min.js index acdc438ac..0020e9afe 100644 --- a/OpenRobertaServer/staticResources/roberta/roberta.min.js +++ b/OpenRobertaServer/staticResources/roberta/roberta.min.js @@ -1,2 +1,2 @@ -function initUserState(){USER.clear(function(e){response(e)}),userState.version="xx.xx.xx",userState.language="DE",userState.robot="ev3",userState.id=-1,userState.accountName="",userState.name="",userState.program="NEPOprog",userState.configuration="EV3basis",userState.programSaved=!1,userState.configurationSaved=!1,userState.programModified=!1,userState.programShared=!1,userState.programTimestamp="",userState.configurationModified=!1,userState.toolbox="beginner",userState.token="1A2B3C4D",userState.doPing=!0,userState.robotName="",userState.robotState="",userState.robotBattery="",userState.robotWait="",userState.robotVersion="",userState.serverVersion="",userState.programBlocks=null,userState.programBlocksSaved=null,userState.bricklyReady=!1,userState.blocklyReady=!1,userState.blocklyTranslated=!1,userState.bricklyTranslated=!1}function login(){USER.login($("#accountNameS").val(),$("#pass1S").val(),function(e){"ok"===e.rc&&(userState.accountName=e.userAccountName,userState.name=void 0===e.userName||""===e.userName?e.userAccountName:e.userName,userState.id=e.userId,setHeadNavigationMenuState("login"),setRobotState(e)),displayInformation(e,"MESSAGE_USER_LOGIN",e.message,userState.name)})}function logout(){USER.logout(function(e){response(e),"ok"===e.rc&&(initUserState(),setProgram(userState.program),setConfiguration(userState.configuration),$("#programNameSave :not(btn)").val(""),$("#configurationNameSave :not(btn)").val(""),$("#login-user :not(btn) :not(.backButton)").val(""),setHeadNavigationMenuState("logout"),Blockly.getMainWorkspace().saveButton.disable(),setRobotState(e),$("#tabProgram").click(),displayInformation(e,"MESSAGE_USER_LOGOUT",e.message))})}function saveUserToServer(){$("#pass1").val()!=$("#pass2").val()?displayMessage("MESSAGE_PASSWORD_ERROR","POPUP",""):USER.saveUserToServer($("#accountName").val(),$("#userName").val(),$("#userEmail").val(),$("#pass1").val(),function(e){"ok"===e.rc&&(setRobotState(e),$("#accountNameS").val($("#accountName").val()),$("#pass1S").val($("#pass1").val()),login()),displayInformation(e,"",e.message)})}function deleteUserOnServer(){USER.deleteUserOnServer(userState.accountName,$("#pass1D").val(),function(e){"ok"===e.rc&&logout(),displayInformation(e,"MESSAGE_USER_DELETED",e.message,userState.name)})}function handleFirmwareConflict(){var e="(.+..+)..+",o=userState.serverVersion.match(e)[1],a=userState.robotVersion.match(e)[1];return o>a?(LOG.info("The firmware version '"+userState.serverVersion+"' on the server is newer than the firmware version '"+userState.robotVersion+"' on the robot"),$("#confirmUpdateFirmware").modal("show"),!0):a>o?(LOG.info("The firmware version '"+userState.serverVersion+"' on the server is older than the firmware version '"+userState.robotVersion+"' on the robot"),displayMessage("MESSAGE_FIRMWARE_ERROR","POPUP",""),!0):!1}function updateFirmware(){ROBOT.updateFirmware(function(e){setRobotState(e),"ok"===e.rc?(displayMessage("MESSAGE_RESTART_ROBOT","POPUP",""),userState.robotState="disconnected"):displayInformation(e,"",e.message,userState.robotFirmware)})}function showUserInfo(){$("#loggedIn").text(userState.name),$("#popup_username").text(-1!=userState.id?Blockly.Msg.POPUP_USERNAME+": ":Blockly.Msg.POPUP_USERNAME_LOGOFF),$("#programName").text(userState.program),$("#configurationName").text(userState.configuration),$("#toolbox").text("beginner"===userState.toolbox?Blockly.Msg.MENU_BEGINNER:Blockly.Msg.MENU_EXPERT),$("#show-state-info").modal("show")}function showRobotInfo(){if(userState.robotName){$("#robotName").text("oraSim"===userState.robot?"ORSim":userState.robotName),"wait"===userState.robotState?($("#robotStateWait").css("display","inline"),$("#robotStateDisconnected").css("display","none"),$("#robotStateBusy").css("display","none")):"busy"===userState.robotState?($("#robotStateWait").css("display","none"),$("#robotStateDisconnected").css("display","none"),$("#robotStateBusy").css("display","inline")):($("#robotStateWait").css("display","none"),$("#robotStateDisconnected").css("display","inline"),$("#robotStateBusy").css("display","none")),$("#robotBattery").text("EN"==userState.language?userState.robotBattery+" V":userState.robotBattery.toString().replace(".",",")+" V");var e=parseInt(userState.robotWait,10);$("#robotWait").text(1e3>e?e+" ms":Math.round(e/1e3)+" s"),$("#show-robot-info").modal("show")}else displayMessage("ORA_ROBOT_NOT_CONNECTED","POPUP","")}function injectBlockly(e,o,a){response(e);var t=a|!1;"ok"===e.rc&&(t?($("#blocklyDiv").html(""),Blockly.inject(document.getElementById("blocklyDiv"),{path:"/blockly/",toolbox:e.data,readOnly:!0,trashcan:!1,code:!1,save:!1,check:!1,start:!1})):($("#blocklyDiv").html(""),Blockly.inject(document.getElementById("blocklyDiv"),{path:"/blockly/",toolbox:e.data,trashcan:!0,code:!0,save:!0,check:!0,start:!0})),$(window).width()<768&&t?Blockly.getMainWorkspace().clear():(initProgramEnvironment(o),setRobotState(e)),"ev3"===userState.robot?($("#menuShowCode").parent().removeClass("disabled"),Blockly.getMainWorkspace().codeButton.enable()):($("#menuShowCode").parent().addClass("disabled"),Blockly.getMainWorkspace().codeButton.disable()))}function initProgramEnvironment(e){Blockly.getMainWorkspace().clear();var o,a;$(window).width()<768?(o=25,a=25):(o=370,a=50);var t="",n=e||t,r=Blockly.Xml.textToDom(n);Blockly.Xml.domToWorkspace(Blockly.mainWorkspace,r),userState.blocklyReady=!0,Blockly.fireUiEvent(window,"resize")}function setProgram(e,o){e&&(userState.program=e,o&&(e+=' ('+o+")"),$("#tabProgramName").html(e))}function setConfiguration(e){e&&(userState.configuration=e,$("#tabConfigurationName").text(e))}function setToken(e){var o=e.toUpperCase();ROBOT.setToken(o,function(e){"ok"===e.rc&&(userState.token=o),displayInformation(e,"MESSAGE_ROBOT_CONNECTED",e.message,userState.robotName),setRobotState(e),handleFirmwareConflict()})}function response(e){LOG.info("result from server: "+UTIL.formatResultLog(e)),"ok"!=e.rc&&displayMessage(e.message,"POPUP","")}function saveAsProgramToServer(){var e=$("#programNameSave").val().trim();if(!e.match(/^[a-zA-Z][a-zA-Z0-9]*$/))return void displayMessage("MESSAGE_INVALID_NAME","POPUP","");var o=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),a=Blockly.Xml.domToText(o);LOG.info("saveAs program "+userState.program+" login: "+userState.id),PROGRAM.saveAsProgramToServer(e,userState.programTimestamp,a,function(o){response(o),"ok"===o.rc&&(setProgram(e),$("#menuSaveProg").parent().removeClass("disabled"),Blockly.getMainWorkspace().saveButton.enable(),userState.programSaved=!0,userState.programModified=!1,userState.programTimestamp=o.lastChanged,displayInformation(o,"MESSAGE_EDIT_SAVE_PROGRAM_AS",o.message,userState.program))})}function saveToServer(){if(userState.program){var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e);userState.programSaved=!0,LOG.info("save program "+userState.program+" login: "+userState.id),$(".modal").modal("hide"),PROGRAM.saveProgramToServer(userState.program,userState.programShared,userState.programTimestamp,o,function(e){"ok"===e.rc&&(userState.programModified=!1,userState.programTimestamp=e.lastChanged),displayInformation(e,"MESSAGE_EDIT_SAVE_PROGRAM",e.message,userState.program)})}}function saveAsConfigurationToServer(){var e=$("#configurationNameSave").val();if(!e.match(/^[a-zA-Z][a-zA-Z0-9]*$/))return void displayMessage("MESSAGE_INVALID_NAME","POPUP","");setConfiguration(e),$("#menuSaveConfig").parent().removeClass("login"),$("#menuSaveConfig").parent().removeClass("disabled"),UTIL.getBricklyFrame("#bricklyFrame").Blockly.getMainWorkspace().saveButton.enable(),userState.configurationSaved=!0,$(".modal").modal("hide");var o=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);LOG.info("save brick configuration "+userState.configuration),CONFIGURATION.saveAsConfigurationToServer(userState.configuration,o,function(e){"ok"===e.rc&&(userState.configurationModified=!1),displayInformation(e,"MESSAGE_EDIT_SAVE_CONFIGURATION_AS",e.message,userState.configuration)})}function saveConfigurationToServer(){if(userState.configuration){userState.configurationSaved=!0,$(".modal").modal("hide");var e=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);LOG.info("save brick configuration "+userState.configuration),CONFIGURATION.saveConfigurationToServer(userState.configuration,e,function(e){"ok"===e.rc&&(userState.configurationModified=!1),displayInformation(e,"MESSAGE_EDIT_SAVE_CONFIGURATION",e.message,userState.configuration)})}}function showJavaProgram(){LOG.info("show the generated Java program for "+userState.program);var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e),a=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);PROGRAM.showJavaProgram(userState.program,userState.configuration,o,a,function(e){setRobotState(e),"ok"==e.rc?displayPopupMessage("Ok-kO",e.javaSource):displayInformation(e,"",e.message,"")})}function runOnBrick(){"ev3"===userState.robot?""===userState.robotState||"disconnected"===userState.robotState?displayMessage("POPUP_ROBOT_NOT_CONNECTED","POPUP",""):"busy"===userState.robotState?displayMessage("POPUP_ROBOT_BUSY","POPUP",""):handleFirmwareConflict()?($("#buttonCancelFirmwareUpdate").css("display","none"),$("#buttonCancelFirmwareUpdateAndRun").css("display","inline")):startProgram():"oraSim"===userState.robot&&startProgram()}function showCode(){if("ev3"===userState.robot){LOG.info("show code "+userState.program+" signed in: "+userState.id);var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e),a=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);PROGRAM.showJavaProgram(userState.program,userState.configuration,o,a,function(e){setRobotState(e),$("#blocklyDiv").addClass("codeActive"),$("#blocklyDiv").parent().bind("transitionend",function(){Blockly.fireUiEvent(window,"resize")}),$("#codeDiv").addClass("codeActive"),$(".nav > li > ul > .robotType").addClass("disabled"),$("#head-navigation-program-edit").addClass("disabled"),$("#head-navigation-program-edit>ul").addClass("hidden"),UTIL.cacheBlocks(),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e,userState.programBlocks,!0)}),$(".code").removeClass("hide"),document.getElementById("codeDiv").innerHTML=""})}}function startProgram(){LOG.info("run "+userState.program+" signed in: "+userState.id);var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e),a=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);Blockly.hasStartButton&&Blockly.getMainWorkspace().startButton.disable(),PROGRAM.runOnBrick(userState.program,userState.configuration,o,a,function(e){setRobotState(e),"ok"==e.rc?"oraSim"===userState.robot?(SIM.init(e.javaScriptProgram),$("#blocklyDiv").addClass("simActive"),$("#blocklyDiv").parent().bind("transitionend",function(){Blockly.fireUiEvent(window,"resize"),setTimeout(function(){SIM.setPause(!1)},1e3)}),$("#simDiv").addClass("simActive"),$("#simButtonsCollapse").collapse({toggle:!1}),$(".nav > li > ul > .robotType").addClass("disabled"),$("#head-navigation-program-edit").addClass("disabled"),$("#head-navigation-program-edit>ul").addClass("hidden"),UTIL.cacheBlocks(),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e,userState.programBlocks,!0)}),$(".sim").removeClass("hide")):displayMessage("MESSAGE_EDIT_START","TOAST",userState.program):(Blockly.getMainWorkspace().startButton.enable(),displayInformation(e,"",e.message,""))})}function checkProgram(){LOG.info("check "+userState.program+" signed in: "+userState.id);var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e),a=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);displayMessage("MESSAGE_EDIT_CHECK","TOAST",userState.program),PROGRAM.checkProgramCompatibility(userState.program,userState.configuration,o,a,function(e){if("ok"==e.rc){var o=Blockly.Xml.textToDom(e.data);Blockly.mainWorkspace.clear(),Blockly.Xml.domToWorkspace(Blockly.mainWorkspace,o)}})}function showProgram(e,o,a,t){if(response(e),"ok"===e.rc){setProgram(a,t);var n=Blockly.Xml.textToDom(e.data);o&&Blockly.mainWorkspace.clear(),Blockly.Xml.domToWorkspace(Blockly.mainWorkspace,n),LOG.info("show program "+userState.program+" signed in: "+userState.id)}}function showConfiguration(e,o,a){response(e),"ok"===e.rc&&(switchToBrickly(),setConfiguration(a),UTIL.getBricklyFrame("#bricklyFrame").showConfiguration(e.data,o),LOG.info("show configuration "+userState.configuration+" signed in: "+userState.id))}function loadFromListing(){var e=$("#programNameTable .selected");if(e.length>0){var o=e[0].children[0].textContent,a=e[0].children[1].textContent,t=e[0].children[2].textContent;userState.programTimestamp=e[0].children[5].textContent,LOG.info("loadFromList "+o+" signed in: "+userState.id),PROGRAM.loadProgramFromListing(o,a,function(e){if("ok"===e.rc){userState.programShared=!1,$("#menuSaveProg").parent().removeClass("disabled"),Blockly.getMainWorkspace().saveButton.enable(),t===Blockly.Msg.POPUP_SHARE_READ?($("#menuSaveProg").parent().addClass("disabled"),Blockly.getMainWorkspace().saveButton.disable()):t===Blockly.Msg.POPUP_SHARE_WRITE&&(userState.programShared=!0),$("#tabs").tabs("option","active",0),userState.programSaved=!0;var n=a===userState.accountName?null:a;showProgram(e,!0,o,n)}displayInformation(e,"",e.message)})}}function loadConfigurationFromListing(){var e=$("#configurationNameTable .selected");if(e.length>0){var o=e[0].children[0].textContent;LOG.info("loadFromConfigurationList "+o+" signed in: "+userState.id),CONFIGURATION.loadConfigurationFromListing(o,function(e){"ok"===e.rc&&($("#tabs").tabs("option","active",0),userState.configurationSaved=!0,showConfiguration(e,!0,o),$("#menuSaveConfig").parent().removeClass("login"),$("#menuSaveConfig").parent().removeClass("disabled"),setRobotState(e)),displayInformation(e,"",e.message)})}}function shareProgramsFromListing(){var e=$("#programShareWith").val(),o=!1;if($("#relationsTable tbody tr").each(function(){var a=$(this),t=a.children("td"),n=t.eq(2).text();n===e&&(o=!0)}),e===userState.name||o)displayInformation({rc:"not ok"},"","ORA_USER_TO_SHARE_SAME_AS_LOGIN_USER");else if(""!==e){var a=$("#write:checked").val();if(a||(a=$("#read:checked").val()),a){var t=$("#programNameTable .selected"),n=t[0].children[0].textContent;LOG.info("share program "+n+" with '"+e+" having right '"+a+"'"),PROGRAM.shareProgram(n,e,a,function(e){displayInformation(e,"",e.message),"ok"===e.rc&&($("#show-relations").modal("hide"),PROGRAM.refreshList(showPrograms))})}}else $("#relationsTable tbody tr").each(function(){var e=$(this),o=e.children("td"),a=o.eq(0).text(),t=o.eq(2).text();if(""!==t){var n=o.eq(3).children("input:checked").val(),r=o.eq(4).children("input:checked").val(),i="NONE";"WRITE"===r?i=r:"READ"===n&&(i=n),LOG.info("share program "+a+" with '"+t+" having right '"+i+"'"),PROGRAM.shareProgram(a,t,i,function(e){"ok"===e.rc?(response(e),setRobotState(e),"NONE"===i&&displayInformation(e,"MESSAGE_RELATION_DELETED",e.message,a),$("#show-relations").modal("hide"),PROGRAM.refreshList(showPrograms)):displayInformation(e,"",e.message)})}});$("#programShareWith").val("")}function deleteFromListing(){for(var e=$("#programNameTable .selected"),o=[],a=0;a0&&o.fnAddData(e.programNames),setRobotState(e)}}function showConfigurations(e){if(response(e),"ok"===e.rc){var o=$("#configurationNameTable").dataTable();o.fnClearTable(),e.configurationNames.length>0&&o.fnAddData(e.configurationNames),setRobotState(e)}}function showRelations(e){if(response(e),"ok"===e.rc){var o=$("#relationsTable").dataTable();o.fnClearTable(),e.relations.length>0&&o.fnAddData(e.relations),setTimeout(function(){o.fnAdjustColumnSizing()},200),$("#show-relations").modal("show")}}function selectionFn(e){$(e.target.parentNode).toggleClass("selected");var o=e.currentTarget.rowIndex;if(start||(start=o),e.shiftKey){var a=o;for($("#programNameTable tbody tr").removeClass("selected"),i=Math.min(start,a);i<=Math.max(start,a);i++)$(e.target.parentNode.parentNode.childNodes).eq(i).hasClass("selected")||$(e.target.parentNode.parentNode.childNodes).eq(i).addClass("selected");window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty()}start=o}function beforeActivateTab(e,o){$("#tabs").tabs("refresh"),"#progListing"===o.newPanel.selector?PROGRAM.refreshList(showPrograms):"#confListing"===o.newPanel.selector&&CONFIGURATION.refreshList(showConfigurations)}function initProgramNameTable(){var e=[{sTitle:"Name des Programms",sClass:"programs"},{sTitle:"Erzeugt von",sClass:"programs"},{sTitle:"Geteilt",sClass:"programs"},{sTitle:"Erzeugt am",sClass:"programs"},{sTitle:"Letzte Aktualisierung",sClass:"programs"},{sTitle:"Letzte Aktualisierung mit Hundertstel Sekunden",sClass:"programs hidden"}],o=$("#programNameTable"),a=o.dataTable({sDom:"t",aaData:[],aoColumns:e,aoColumnDefs:[{aTargets:[3,4],sType:"date-de",mRender:function(e){return UTIL.formatDate(e)}},{aTargets:[5]},{aTargets:[2],mRender:function(e){if("WRITE"===e)var o=""+Blockly.Msg.POPUP_SHARE_WRITE+"";else if("READ"===e)var o=""+Blockly.Msg.POPUP_SHARE_READ+"";else if(e===!0)var o="X";else if(e===!1)var o="-";return o}}],bJQueryUI:!0,oLanguage:{sEmptyTable:""},fnDrawCallback:function(){},scrollY:UTIL.calcDataTableHeight(),scrollCollapse:!0,paging:!1,bInfo:!1});$(window).resize(function(){var e=a.fnSettings();e.oScroll.sY=UTIL.calcDataTableHeight(),a.fnDraw(!1)}),$("#programNameTable tbody").onWrap("click","tr",selectionFn),$("#programNameTable tbody").onWrap("dblclick","tr",function(e){selectionFn(e),$("#loadFromListing").click()})}function initConfigurationNameTable(){var e=[{sTitle:"Name der Konfiguration",sClass:"configurations"},{sTitle:"Erzeugt von",sClass:"configurations"},{sTitle:"Erzeugt am",sClass:"configurations"},{sTitle:"Letzte Aktualisierung",sClass:"configurations"}],o=$("#configurationNameTable"),a=o.dataTable({sDom:"t",aaData:[],aoColumns:e,aoColumnDefs:[{aTargets:[2,3],sType:"date-de",mRender:function(e){return UTIL.formatDate(e)}}],bJQueryUI:!0,oLanguage:{sEmptyTable:""},fnDrawCallback:function(){},scrollY:UTIL.calcDataTableHeight(),scrollCollapse:!0,paging:!1,bInfo:!1});$(window).resize(function(){var e=a.fnSettings();e.oScroll.sY=UTIL.calcDataTableHeight(),a.fnDraw(!1)}),$("#configurationNameTable tbody").onWrap("click","tr",selectionFn),$("#configurationNameTable tbody").onWrap("dblclick","tr",function(e){selectionFn(e),$("#loadConfigurationFromListing").click()})}function initRelationsTable(){var e=[{sTitle:"Name des Programms",sClass:"relations hidden"},{sTitle:"Erzeugt von",sClass:"relations hidden"},{sTitle:"Geteilt mit",sClass:"relations"},{sTitle:"Lesen",sClass:"relations"},{sTitle:"Schreiben",sClass:"relations"}],o=$("#relationsTable"),a=o.dataTable({sDom:"t",aaData:[],aoColumns:e,aoColumnDefs:[{aTargets:[3],mRender:function(e,o,a){var t="";("WRITE"===a[4]||"READ"===e)&&(t="checked");var n="";return n}},{aTargets:[4],mRender:function(e){var o="";"WRITE"===e&&(o="checked");var a="";return a}}],bJQueryUI:!0,oLanguage:{sEmptyTable:""},fnDrawCallback:function(){},scrollY:UTIL.calcDataTableHeight(),scrollCollapse:!0,paging:!1,bInfo:!1});$(window).resize(function(){var e=a.fnSettings();e.oScroll.sY=UTIL.calcDataTableHeight(),a.fnDraw(!1)}),$("#relationsTable tbody").onWrap("click","tr",selectionFn),$("#relationsTable_wrapper").css("margin",0)}function switchToBlockly(){$("#tabs").css("display","inline"),$("#bricklyFrame").css("display","none"),$("#simConfiguration").css("display","none"),$("#tabBlockly").click(),Blockly.getMainWorkspace().render(),Blockly.getMainWorkspace().render(),bricklyActive=!1}function switchToBrickly(){"oraSim"===userState.robot?$("#simConfiguration").css("display","block"):($("#bricklyFrame").css("display","inline"),$("#tabs").css("display","none"),UTIL.getBricklyFrame("#bricklyFrame").Blockly.getMainWorkspace().render(),UTIL.getBricklyFrame("#bricklyFrame").loadToolbox()),$("#tabBrickly").click(),bricklyActive=!0}function initRobot(){ROBOT.setRobot(userState.robot,function(e){response(e),"ok"===e.rc&&(setConfiguration("EV3basis"),loadToolbox(userState.toolbox),$("#blocklyDiv").removeClass("simBackground"),$("#menuEv3").parent().addClass("disabled"),$("#menuSim").parent().removeClass("disabled"),$("#menuConnect").parent().removeClass("disabled"),$("#iconDisplayRobotState").removeClass("typcn-Roberta"),$("#iconDisplayRobotState").addClass("typcn-ev3"),$("#menuShowCode").parent().removeClass("disabled"))})}function switchRobot(e){e!==userState.robot&&ROBOT.setRobot(e,function(o){"ok"===o.rc&&(userState.robot=e,setRobotState(o),"ev3"===e?(setConfiguration("EV3basis"),$("#blocklyDiv").removeClass("simBackground"),$("#menuEv3").parent().addClass("disabled"),$("#menuSim").parent().removeClass("disabled"),$("#menuConnect").parent().removeClass("disabled"),$("#iconDisplayRobotState").removeClass("typcn-Roberta"),$("#iconDisplayRobotState").addClass("typcn-ev3"),$("#menuShowCode").parent().removeClass("disabled"),Blockly.getMainWorkspace().codeButton.enable(),UTIL.getBricklyFrame("#bricklyFrame").loadToolboxAndConfiguration()):"oraSim"===e&&(setConfiguration("ORSim"),$("#blocklyDiv").addClass("simBackground"),$("#menuEv3").parent().removeClass("disabled"),$("#menuSim").parent().addClass("disabled"),$("#menuConnect").parent().addClass("disabled"),$("#iconDisplayRobotState").removeClass("typcn-ev3"),$("#iconDisplayRobotState").addClass("typcn-Roberta"),$("#menuShowCode").parent().addClass("disabled"),Blockly.getMainWorkspace().codeButton.disable(),PROGRAM.loadProgramFromListing("NEPOprog","Roberta",function(e){"ok"===e.rc&&showProgram(e,!0,"NEPOprog")})),loadToolbox(userState.toolbox))})}function setHeadNavigationMenuState(e){$(".nav > li > ul > .login, .logout").removeClass("disabled"),"login"===e?$(".nav > li > ul > .login").addClass("disabled"):"logout"===e&&$(".nav > li > ul > .logout").addClass("disabled")}function initHeadNavigation(){$(".navbar-fixed-top").onWrap("click",".dropdown-menu li:not(.disabled) a",function(e){Blockly.hideChaff(),$(".modal").modal("hide");var o=e.target.id;return"menuRunProg"===o?runOnBrick():"menuCheckProg"===o?checkProgram():"menuNewProg"===o?newProgram():"menuListProg"===o?(deactivateProgConfigMenu(),$("#tabListing").click()):"menuSaveProg"===o?saveToServer():"menuSaveAsProg"===o?$("#save-program").modal("show"):"menuShowCode"===o?showCode():"menuToolboxBeginner"===o?loadToolbox("beginner"):"menuToolboxExpert"===o?loadToolbox("expert"):"menuCheckConfig"===o?displayMessage("MESSAGE_NOT_AVAILABLE","POPUP",""):"menuNewConfig"===o?(setConfiguration("EV3basis"),UTIL.getBricklyFrame("#bricklyFrame").initConfigurationEnvironment(),$("#menuSaveConfig").parent().addClass("disabled"),UTIL.getBricklyFrame("#bricklyFrame").Blockly.getMainWorkspace().saveButton.disable()):"menuListConfig"===o?(deactivateProgConfigMenu(),$("#tabs").css("display","inline"),$("#bricklyFrame").css("display","none"),$("#simConfiguration").css("display","none"),$("#tabConfigurationListing").click()):"menuSaveConfig"===o?saveConfigurationToServer():"menuSaveAsConfig"===o?$("#save-configuration").modal("show"):"menuEv3"===o?newProgram()&&switchRobot("ev3"):"menuSim"===o?newProgram()&&switchRobot("oraSim"):"menuConnect"===o?($("#buttonCancelFirmwareUpdate").css("display","inline"),$("#buttonCancelFirmwareUpdateAndRun").css("display","none"),$("#set-token").modal("show")):"menuRobotInfo"===o?showRobotInfo():"menuGeneral"===o?window.open("https://mp-devel.iais.fraunhofer.de/wiki/x/BIAM"):"menuEV3conf"===o?window.open("https://mp-devel.iais.fraunhofer.de/wiki/x/RIAd"):"menuProgramming"===o?window.open("https://mp-devel.iais.fraunhofer.de/wiki/x/CwA-/"):"menuFaq"===o?window.open("https://mp-devel.iais.fraunhofer.de/wiki/x/BoAd"):"menuShowRelease"===o?$("#show-release").modal("show"):"menuStateInfo"===o?showUserInfo():"menuAbout"===o?($("#version").text(userState.version),$("#show-about").modal("show")):"menuLogging"===o?(deactivateProgConfigMenu(),$("#tabs").css("display","inline"),$("#bricklyFrame").css("display","none"),$("#simConfiguration").css("display","none"),$("#tabLogging").click()):"menuLogin"===o?$("#login-user").modal("show"):"menuLogout"===o?logout():"menuNewUser"===o?$("#register-user").modal("show"):"menuChangeUser"===o||"menuDeleteUser"===o&&$("#delete-user").modal("show"),!1},"head navigation menu item clicked"),$(".navbar-fixed-top .navbar-nav").onWrap("click","li:not(.disabled) a",function(e){var o=e.target.id;return"menuTabProgram"===o?($("#tabSimulation").hasClass("tabClicked")&&$(".scroller-left").click(),$(".scroller-left").click(),$("#tabProgram").click()):"menuTabConfiguration"===o&&($("#tabProgram").hasClass("tabClicked")?$(".scroller-right").click():$("#tabConfiguration").hasClass("tabClicked")&&$(".scroller-right").click(),$("#tabConfiguration").click()),!1}),$(".navbar-fixed-top").onWrap("mouseleave",function(){$(".navbar-fixed-top .dropdown").removeClass("open")}),$("#imgLogo, #imgBeta").onWrap("click",function(){window.open("http://open-roberta.org")},"logo was clicked"),$("#beta").onWrap("click",function(){window.open("http://open-roberta.org")},"beta logo was clicked"),$("#iconDisplayLogin").onWrap("click",function(){showUserInfo()},"icon user click"),$("#iconDisplayRobotState").onWrap("click",function(){showRobotInfo()},"icon robot click"),$("#tabProgram").onWrap("click",function(){activateProgConfigMenu(),$("#tabProgram").addClass("tabClicked"),$("#tabConfiguration").removeClass("tabClicked"),$("#tabSimulation").removeClass("tabClicked"),$("#head-navigation-program-edit").css("display","inline"),$("#head-navigation-configuration-edit").css("display","none"),$("#menuTabProgram").parent().addClass("disabled"),$("#menuTabConfiguration").parent().removeClass("disabled"),$("#menuTabSimulation").parent().removeClass("disabled"),switchToBlockly()},"tabProgram clicked"),$("#tabConfiguration").onWrap("click",function(){Blockly.hideChaff(),activateProgConfigMenu(),$("#tabProgram").removeClass("tabClicked"),$("#tabConfiguration").addClass("tabClicked"),$("#tabSimulation").removeClass("tabClicked"),$("#head-navigation-program-edit").css("display","none"),$("#head-navigation-configuration-edit").css("display","inline"),$("#menuTabProgram").parent().removeClass("disabled"),$("#menuTabConfiguration").parent().addClass("disabled"),$("#menuTabSimulation").parent().removeClass("disabled"),switchToBrickly()},"tabConfiguration clicked"),$(".simSimple").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simSimple").parent().addClass("disabled"),SIM.setBackground(1),$("#simButtonsCollapse").collapse("hide")},"simSimple clicked"),$(".simDraw").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simDraw").parent().addClass("disabled"),SIM.setBackground(2),$("#simButtonsCollapse").collapse("hide")},"simDraw clicked"),$(".simRoberta").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simRoberta").parent().addClass("disabled"),SIM.setBackground(3),$("#simButtonsCollapse").collapse("hide")},"simRoberta clicked"),$(".simRescue").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simRescue").parent().addClass("disabled"),SIM.setBackground(4),$("#simButtonsCollapse").collapse("hide")},"simRescue clicked"),$(".simMath").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simMath").parent().addClass("disabled"),SIM.setBackground(5),$("#simButtonsCollapse").collapse("hide")},"simRescue clicked"),$(".simBack").onWrap("click",function(){SIM.cancel(),$("#blocklyDiv").removeClass("simActive"),$("#simDiv").removeClass("simActive"),$(".sim").addClass("hide"),Blockly.fireUiEvent(window,"resize"),$(".nav > li > ul > .robotType").removeClass("disabled"),$("#menuSim").parent().addClass("disabled"),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e,userState.programBlocksSaved)}),$("#simButtonsCollapse").collapse("hide"),$("#head-navi-tooltip-program").removeClass("disabled"),$("#head-navigation-program-edit").removeClass("disabled"),$("#head-navigation-program-edit>ul").removeClass("hidden")},"simBack clicked"),$(".simStop").onWrap("click",function(){SIM.stopProgram(),$("#simButtonsCollapse").collapse("hide") -},"simStop clicked"),$(".simForward").onWrap("click",function(){SIM.setPause($(".simForward").hasClass("typcn-media-play")?!1:!0),$("#simButtonsCollapse").collapse("hide")},"simForward clicked"),$(".simStep").onWrap("click",function(){SIM.setStep(),$("#simButtonsCollapse").collapse("hide")},"simStep clicked"),$(".simInfo").onWrap("click",function(){SIM.setInfo(),$("#simButtonsCollapse").collapse("hide")},"simInfo clicked"),$(".simScene").onWrap("click",function(){SIM.setBackground(0);var e=$("#simButtonsCollapse").collapse("hide");$(".menuSim").parent().removeClass("disabled"),1==e?$(".simSimple").parent().addClass("disabled"):2==e?$(".simDraw").parent().addClass("disabled"):3==e?$(".simRoberta").parent().addClass("disabled"):4==e?$(".simRescue").parent().addClass("disabled"):5==e&&$(".simMath").parent().addClass("disabled")},"simScene clicked"),$("#startSim").onWrap("click",function(){switchRobot("oraSim")},"start with simulation clicked"),$("#startEV3").onWrap("click",function(){switchRobot("ev3")},"start with ev3 clicked"),$(".codeBack").onWrap("click",function(){$("#blocklyDiv").removeClass("codeActive"),$("#codeDiv").removeClass("codeActive"),"oraSim"===userState.robot?$("#menuEv3").parent().removeClass("disabled"):$("#menuSim").parent().removeClass("disabled"),Blockly.fireUiEvent(window,"resize"),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e,userState.programBlocksSaved)}),$("#head-navi-tooltip-program").removeClass("disabled"),$("#head-navigation-program-edit").removeClass("disabled"),$("#head-navigation-program-edit>ul").removeClass("hidden"),$(".code").addClass("hide")},"codeBack clicked"),$("#codeDownload").onWrap("click",function(){var e=new Blob([userState.programCode]),o=document.createElement("a"),a=window.URL||window.webkitURL;o.setAttribute("href",a.createObjectURL(e)),o.setAttribute("download",userState.program+".java"),o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o)},"codeDownload clicked"),$(".newRelease").onWrap("click",function(){$("#show-release").modal("show")},"show release clicked")}function initPopups(){$("#saveUser").onWrap("click",saveUserToServer),$("#deleteUser").onWrap("click",deleteUserOnServer),$("#doLogin").onWrap("click",login),$("#saveProgram").onWrap("click",saveAsProgramToServer),$("#saveConfiguration").onWrap("click",saveAsConfigurationToServer),$("#shareProgram").onWrap("click",function(){shareProgramsFromListing()},"share program"),$("#setToken").onWrap("click",function(){setToken($("#tokenValue").val())},"set token"),$(".cancelPopup").onWrap("click",function(){$(".ui-dialog-titlebar-close").click()}),$("#about-join").onWrap("click",function(){$("#show-about").modal("hide")}),$("#login-user").onWrap("hidden.bs.modal",function(){$("#login-user input :not(btn)").val("")}),$("#delete-user").onWrap("hidden.bs.modal",function(){$("#delete-user input :not(btn)").val("")}),$("#register-user").onWrap("hidden.bs.modal",function(){$("#register-user input :not(btn)").val(""),$("#login-user input :not(btn)").val("")}),$("#buttonCancelFirmwareUpdateAndRun").onWrap("click",function(){startProgram()}),$("#doUpdateFirmware").onWrap("click",function(){$("#set-token").modal("hide"),$("#confirmUpdateFirmware").modal("hide"),updateFirmware()},"update firmware of robot"),$(".modal").keyup(function(e){if(e.keyCode===$.ui.keyCode.BACKSPACE&&"password"===e.target.type&&$("#"+e.target.id).val().length>0){var o=$("#"+e.target.id).val().length-1,a=$("#"+e.target.id).val().substring(0,o);$("#"+e.target.id).val(a)}27==e.keyCode&&window.close(),13==e.keyCode&&$(this).find(".modal-footer button:first").click(),e.stopPropagation()})}function initTabs(){$("#tabs").tabs({heightStyle:"content",active:0,beforeActivate:beforeActivateTab}),$("#loadFromListing").onWrap("click",function(){activateProgConfigMenu(),loadFromListing()},"load blocks from program list"),$("#loadConfigurationFromListing").onWrap("click",function(){activateProgConfigMenu(),loadConfigurationFromListing()},"load configuration from configuration list"),$("#deleteFromListing").onWrap("click",function(){var e=$("#programNameTable .selected");if(e.length>0){for(var o="",a=0;a";$("#confirmDeleteProgramName").html(o),$("#confirmDeleteProgram").modal("show")}},"Ask for confirmation to delete programs"),$("#doDeleteProgram").onWrap("click",function(){deleteFromListing()},"delete program"),$("#deleteConfigurationFromListing").onWrap("click",function(){$("#configurationNameTable .selected").length>0&&$("#confirmDeleteConfiguration").modal("show")},"Ask for confirmation to delete a configuration"),$("#doDeleteConfiguration").onWrap("click",function(){deleteConfigurationFromListing(),$(".modal").modal("hide")},"delete configuration from configurations list"),$("#shareFromListing").onWrap("click",function(){var e=$("#programNameTable .selected");if(e.length>0){var o=e[0].children[2].textContent;if("X"===o||"-"===o){var a=e[0].children[0].textContent,t=Blockly.Msg.BUTTON_DO_SHARE+" ("+a+")";$("#headShare").text(t),$("#programShareWith :not(btn)").val(""),$("#read").prop("checked",!0),$("#write").prop("checked",!1),PROGRAM.refreshProgramRelationsList(a,showRelations)}}},"show relations of program"),$("#refreshListing").onWrap("click",function(){PROGRAM.refreshList(showPrograms)},"refresh list of programs"),$("#backConfiguration").onWrap("click",function(){activateProgConfigMenu(),switchToBrickly()}),$("#backProgram").onWrap("click",function(){activateProgConfigMenu(),switchToBlockly()}),$("#backLogging").onWrap("click",function(){activateProgConfigMenu(),bricklyActive?switchToBrickly():switchToBlockly()})}function initLogging(){$("#clearLog").onWrap("click",function(){$("#log li").remove()},"clear LOG list")}function setRobotState(e){e.version&&(userState.version=e.version),e["server.version"]&&(userState.serverVersion=e["server.version"]),e["robot.version"]&&(userState.robotVersion=e["robot.version"]),userState.robotWait=void 0!=e["robot.wait"]?e["robot.wait"]:"",userState.robotBattery=void 0!=e["robot.battery"]?e["robot.battery"]:"",userState.robotName=void 0!=e["robot.name"]?e["robot.name"]:"",userState.robotState=void 0!=e["robot.state"]?e["robot.state"]:"",userState.accountName?($("#iconDisplayLogin").removeClass("error"),$("#iconDisplayLogin").addClass("ok")):($("#iconDisplayLogin").removeClass("ok"),$("#iconDisplayLogin").addClass("error")),"wait"===userState.robotState?($("#iconDisplayRobotState").removeClass("error"),$("#iconDisplayRobotState").removeClass("busy"),$("#iconDisplayRobotState").addClass("wait"),Blockly.hasStartButton&&Blockly.getMainWorkspace().startButton.enable()):"busy"===userState.robotState?($("#iconDisplayRobotState").removeClass("wait"),$("#iconDisplayRobotState").removeClass("error"),$("#iconDisplayRobotState").addClass("busy")):($("#iconDisplayRobotState").removeClass("busy"),$("#iconDisplayRobotState").removeClass("wait"),$("#iconDisplayRobotState").addClass("error"))}function translate(){$("[lkey]").each(function(){var e=$(this).attr("lkey"),o=e.replace("Blockly.Msg.",""),a=Blockly.Msg[o];void 0==a&&console.log("UNDEFINED key : value = "+o+" : "+a),"Blockly.Msg.MENU_LOG_IN"===e?($("#login-user h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_NEW"===e?($("#register-user h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_DELETE_USER"===e?($("#delete-user h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_SAVE_AS"===e?($("#save-program h3").text(a),$("#save-configuration h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_CONNECT"===e?($("#set-token h3").text(a),$(this).html(a)):"Blockly.Msg.POPUP_HIDE_STARTUP_MESSAGE"===e?$("#hideStartupMessage").text(a):"Blockly.Msg.POPUP_TEXT_STARTUP_MESSAGE"===e?$("#popupTextStartupMessage").html(a):"Blockly.Msg.POPUP_ATTENTION"===e?($("#show-message h3").text(a),$("#show-startup-message h3").text(a)):"Blockly.Msg.POPUP_CANCEL"===e?($(".cancelPopup").attr("value",a),$(".backButton").attr("value",a)):"Blockly.Msg.POPUP_ABOUT_JOIN"===e?$("#about-join").html(a):"Blockly.Msg.BUTTON_LOAD"===e?$(".buttonLoad").attr("value",a):"Blockly.Msg.BUTTON_DO_DELETE"===e?$(".buttonDelete").attr("value",a):"Blockly.Msg.BUTTON_DO_SHARE"===e?($(".buttonShare").attr("value",a),$("#show-relations h2").text(a)):"Blockly.Msg.BUTTON_REFRESH"===e?$(".buttonRefresh").attr("value",a):"Blockly.Msg.BUTTON_EMPTY_LIST"===e?$("#clearLog").attr("value",a):"Blockly.Msg.MENU_ROBOT_STATE_INFO"===e?($("#show-robot-info h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_STATE_INFO"===e?($("#show-state-info h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_ABOUT"===e?($("#show-about h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_TITLE_EDIT"===e?($("#head-navi-tooltip-program").attr("data-original-title",a).tooltip("fixTitle"),$("#head-navi-tooltip-configuration").attr("data-original-title",a).tooltip("fixTitle")):"Blockly.Msg.MENU_TITLE_ROBOT"===e?$("#head-navi-tooltip-robot").attr("data-original-title",a).tooltip("fixTitle"):"Blockly.Msg.MENU_TITLE_HELP"===e?$("#head-navi-tooltip-help").attr("data-original-title",a).tooltip("fixTitle"):"Blockly.Msg.MENU_TITLE_USER"===e?$("#head-navi-tooltip-user").attr("data-original-title",a).tooltip("fixTitle"):"Blockly.Msg.MENU_TITLE_USER_STATE"===e?$("#iconDisplayLogin").attr("data-original-title",a).tooltip("fixTitle"):"Blockly.Msg.MENU_TITLE_ROBOT_STATE"===e?$("#iconDisplayRobotState").attr("data-original-title",a).tooltip("fixTitle"):$(this).html(a)})}function switchLanguage(e,o){if(o||userState.language!=e){var a=["DE","EN","FI","DA","ES"];for(a.indexOf(e)<0&&(e="EN"),i=0;i-1?(e="DE",$("#chosenLanguage").text("DE")):navigator.language.indexOf("fi")>-1?(e="FI",$("#chosenLanguage").text("FI")):navigator.language.indexOf("da")>-1?(e="DA",$("#chosenLanguage").text("DA")):navigator.language.indexOf("es")>-1?(e="ES",$("#chosenLanguage").text("ES")):(e="EN",$("#chosenLanguage").text("EN")),$("#language").on("click",".dropdown-menu li a",function(){var e=$(this).text();$("#chosenLanguage").text(e),switchLanguage(e,!1)}),e}function displayInformation(e,o,a,t){"ok"===e.rc?($(".modal").modal("hide"),displayMessage(o,"TOAST",t)):displayMessage(a,"POPUP",t)}function displayMessage(e,o,a){if(void 0!=e){(e.indexOf(".")>=0||e.toUpperCase()!=e)&&LOG.info("Invalid message-key received: "+e);var t="Blockly.Msg."+e,n=Blockly.Msg[e];(void 0===n||""===n)&&(n=e),n.indexOf("$")>=0&&(n=n.replace("$",a)),"POPUP"===o?displayPopupMessage(t,n):"TOAST"===o&&(toastMessages.unshift(n),1===toastMessages.length&&displayToastMessages())}}function displayPopupMessage(e,o){$("#message").attr("lkey",e),$("#message").html(o),$("#show-message").modal("show")}function displayToastMessages(){$("#toastText").text(toastMessages[toastMessages.length-1]),$("#toastContainer").delay(100).fadeIn("slow",function(){$(this).delay(1e3).fadeOut("slow",function(){toastMessages.pop(),toastMessages.length>0&&displayToastMessages()})})}function activateProgConfigMenu(){$("#head-navigation-program-edit > ul > li").removeClass("disabled"),$("#head-navigation-configuration-edit > ul > li").removeClass("disabled"),setHeadNavigationMenuState(-1===userState.id?"logout":"login"),userState.programSaved&&($("#menuSaveProg").parent().removeClass("login"),$("#menuSaveProg").parent().removeClass("disabled"),Blockly.getMainWorkspace().saveButton.enable()),userState.configurationSaved&&($("#menuSaveConfig").parent().removeClass("login"),$("#menuSaveConfig").parent().removeClass("disabled"),UTIL.getBricklyFrame("#bricklyFrame").Blockly.getMainWorkspace().saveButton.enable())}function deactivateProgConfigMenu(){$("#head-navigation-program-edit > ul > li").addClass("disabled"),$("#head-navigation-configuration-edit > ul > li").addClass("disabled")}function pingServer(){COMM.ping(function(e){setRobotState(e)})}function handleServerErrors(){LOG.info("network changed")}function setWorkspaceModified(e){userState.programModified=e}function initBlockly(){if(userState.bricklyReady&&userState.blocklyReady){var e=initializeLanguages();switchLanguage(e,!0)}else setTimeout(function(){initBlockly()},100)}function startPopup(){userState.blocklyTranslated&&userState.bricklyTranslated?$("#show-startup-message").modal("show"):setTimeout(function(){startPopup()},100)}function init(){COMM.setErrorFn(handleServerErrors),initLogging(),initUserState(),$("#tabProgramName").text(userState.program),$("#tabConfigurationName").text(userState.configuration),initTabs(),initPopups(),initHeadNavigation(),setHeadNavigationMenuState("logout"),UTIL.initDataTables(),initProgramNameTable(),initConfigurationNameTable(),initRelationsTable(),$("#menuTabProgram").parent().addClass("disabled"),$("#tabProgram").addClass("tabClicked"),$("#head-navigation-configuration-edit").css("display","none"),$(".modal").on("shown.bs.modal",function(){$(this).find("[autofocus]").focus()}),$(window).on("beforeunload",function(){return userState.programModified||userState.configurationModified?-1===userState.id?Blockly.Msg.POPUP_BEFOREUNLOAD:Blöockly.Msg.POPUP_BEFOREUNLOAD_LOGGEDIN:void 0}),$('[rel="tooltip"]').tooltip({placement:"right"}),UTIL.checkVisibility(function(){var e=UTIL.checkVisibility();LOG.info("this tab visible: "+e),e||SIM.setPause(!0)}),initRobot(),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e)}),initBlockly(),startPopup();setInterval(function(){pingServer()},5e3)}var USER={};!function(){USER.clear=function(e){COMM.json("/user",{cmd:"clear"},e,"clear user")},USER.login=function(e,o,a){COMM.json("/user",{cmd:"login",accountName:e,password:o},a,"login user '"+e+"'")},USER.logout=function(e){COMM.json("/user",{cmd:"logout"},e,"logout user")},USER.saveUserToServer=function(e,o,a,t,n){COMM.json("/user",{cmd:"createUser",accountName:e,userName:o,userEmail:a,password:t,role:"TEACHER"},n,"save user '"+e+"' to server")},USER.deleteUserOnServer=function(e,o,a){COMM.json("/user",{cmd:"deleteUser",accountName:e,password:o},a,"delete user '"+e+"' on server")}}($);var ROBOT={};!function(){ROBOT.updateFirmware=function(e){COMM.json("/admin",{cmd:"updateFirmware"},e,"update firmware")},ROBOT.setToken=function(e,o){COMM.json("/admin",{cmd:"setToken",token:e},o,"set token '"+e+"'")},ROBOT.setRobot=function(e,o){COMM.json("/admin",{cmd:"setRobot",robot:e},o,"set robot '"+e+"'")}}($);var CONFIGURATION={};!function(){CONFIGURATION.saveAsConfigurationToServer=function(e,o,a){COMM.json("/conf",{cmd:"saveAsC",name:e,configuration:o},a,"save configuration to server with new name "+e)},CONFIGURATION.saveConfigurationToServer=function(e,o,a){COMM.json("/conf",{cmd:"saveC",name:e,configuration:o},a,"save configuration "+e+" to server")},CONFIGURATION.deleteConfigurationFromListing=function(e,o){COMM.json("/conf",{cmd:"deleteC",name:e},o,"delete configuration "+e)},CONFIGURATION.loadConfigurationFromListing=function(e,o){COMM.json("/conf",{cmd:"loadC",name:e,owner:userState.accountName},o,"load configuration "+e)},CONFIGURATION.refreshList=function(e){COMM.json("/conf",{cmd:"loadCN"},e,"refresh configuration list")}}($);var PROGRAM={};!function(){PROGRAM.saveAsProgramToServer=function(e,o,a,t){COMM.json("/program",{cmd:"saveAsP",name:e,timestamp:o,program:a},t,"save program to server with new name '"+e+"'")},PROGRAM.saveProgramToServer=function(e,o,a,t,n){COMM.json("/program",{cmd:"saveP",name:e,shared:o,timestamp:a,program:t},n,"save program '"+e+"' to server")},PROGRAM.shareProgram=function(e,o,a,t){COMM.json("/program",{cmd:"shareP",programName:e,userToShare:o,right:a},t,"share program '"+e+"' with user '"+o+"' having right '"+a+"'")},PROGRAM.deleteShare=function(e,o,a){COMM.json("/program",{cmd:"shareDelete",programName:e,owner:o},function(o){a(o,e)},"delete share program '"+e+"' owner: "+o)},PROGRAM.deleteProgramFromListing=function(e,o){COMM.json("/program",{cmd:"deleteP",name:e},function(a){o(a,e)},"delete program '"+e+"'")},PROGRAM.loadProgramFromListing=function(e,o,a){COMM.json("/program",{cmd:"loadP",name:e,owner:o},a,"load program '"+e+"' owned by '"+o+"'")},PROGRAM.refreshList=function(e){COMM.json("/program",{cmd:"loadPN"},e,"refresh program list")},PROGRAM.showJavaProgram=function(e,o,a,t,n){COMM.json("/program",{cmd:"showJavaP",name:e,configuration:o,programText:a,configurationText:t},n,"show Java program '"+e)},PROGRAM.runOnBrick=function(e,o,a,t,n){COMM.json("/program",{cmd:"runP",name:e,configuration:o,programText:a,configurationText:t},n,"run program '"+e+"' with configuration '"+o+"'")},PROGRAM.refreshProgramRelationsList=function(e,o){COMM.json("/program",{cmd:"loadPR",name:e},o,"refresh program relations list")},PROGRAM.checkProgramCompatibility=function(e,o,a,t,n){COMM.json("/program",{cmd:"checkP",name:e,configuration:o,programText:a,configurationText:t},n,"check program '"+e+"' with configuration '"+o+"'")}}($);var UTIL={};!function(e){UTIL.setCookie=function(e,o){var a=new Date;a.setTime(a.getTime()+2592e6),document.cookie=e+"="+o+";expires="+a.toUTCString()},UTIL.getCookie=function(e){var o=document.cookie.match("(^|;) ?"+e+"=([^;]*)(;|$)");return o?o[2]:null},UTIL.formatDate=function(e){if(e){var o=new Date(e),a=("0"+o.getDate()).slice(-2)+"."+("0"+(o.getMonth()+1)).slice(-2)+"."+o.getFullYear()+", "+("0"+o.getHours()).slice(-2)+":"+("0"+o.getMinutes()).slice(-2);return a}return""},UTIL.formatDateComplete=function(e){return e?moment(e).format("DD.MM.YYYY, HH:mm:ss.SSS"):""},UTIL.parseDate=function(e){if(e){var o=e.split(", ")[0],a=e.split(", ")[1],t=o.split(".")[0],n=o.split(".")[1]-1,r=o.split(".")[2],i=a.split(":")[0],s=a.split(":")[1],l=a.split(":")[2],c=a.split(".")[1],d=new Date(r,n,t,i,s,l,c);return d.getTime()}return 0},UTIL.formatResultLog=function(e){var o="{",a=!1;for(key in e)a?o+=",":a=!0,o+='"'+key+'":',e.hasOwnProperty(key)&&(o+=e[key].length>100?'"'+JSON.stringify(e[key]).substring(1,100)+' ..."':JSON.stringify(e[key]));return o+="}"},UTIL.initDataTables=function(){jQuery.extend(jQuery.fn.dataTableExt.oSort["date-de-asc"]=function(e,o){return e=UTIL.parseDate(e),o=UTIL.parseDate(o),o>e?-1:e>o?1:0},jQuery.fn.dataTableExt.oSort["date-de-desc"]=function(e,o){return e=UTIL.parseDate(e),o=UTIL.parseDate(o),o>e?1:e>o?-1:0})},UTIL.calcDataTableHeight=function(){return Math.round(e(window).height()-260)},UTIL.cacheBlocks=function(){if(userState.programBlocksSaved=null,userState.programBlocks=null,null!==Blockly.mainWorkspace){var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace);userState.programBlocksSaved=Blockly.Xml.domToText(e);for(var o=Blockly.getMainWorkspace().getTopBlocks(),a=0;aa?(LOG.info("The firmware version '"+userState.serverVersion+"' on the server is newer than the firmware version '"+userState.robotVersion+"' on the robot"),$("#confirmUpdateFirmware").modal("show"),!0):a>o?(LOG.info("The firmware version '"+userState.serverVersion+"' on the server is older than the firmware version '"+userState.robotVersion+"' on the robot"),displayMessage("MESSAGE_FIRMWARE_ERROR","POPUP",""),!0):!1}function updateFirmware(){ROBOT.updateFirmware(function(e){setRobotState(e),"ok"===e.rc?(displayMessage("MESSAGE_RESTART_ROBOT","POPUP",""),userState.robotState="disconnected"):displayInformation(e,"",e.message,userState.robotFirmware)})}function showUserInfo(){$("#loggedIn").text(userState.name),$("#popup_username").text(-1!=userState.id?Blockly.Msg.POPUP_USERNAME+": ":Blockly.Msg.POPUP_USERNAME_LOGOFF),$("#programName").text(userState.program),$("#configurationName").text(userState.configuration),$("#toolbox").text("beginner"===userState.toolbox?Blockly.Msg.MENU_BEGINNER:Blockly.Msg.MENU_EXPERT),$("#show-state-info").modal("show")}function showRobotInfo(){if(userState.robotName){$("#robotName").text("oraSim"===userState.robot?"ORSim":userState.robotName),"wait"===userState.robotState?($("#robotStateWait").css("display","inline"),$("#robotStateDisconnected").css("display","none"),$("#robotStateBusy").css("display","none")):"busy"===userState.robotState?($("#robotStateWait").css("display","none"),$("#robotStateDisconnected").css("display","none"),$("#robotStateBusy").css("display","inline")):($("#robotStateWait").css("display","none"),$("#robotStateDisconnected").css("display","inline"),$("#robotStateBusy").css("display","none")),$("#robotBattery").text("EN"==userState.language?userState.robotBattery+" V":userState.robotBattery.toString().replace(".",",")+" V");var e=parseInt(userState.robotWait,10);$("#robotWait").text(1e3>e?e+" ms":Math.round(e/1e3)+" s"),$("#show-robot-info").modal("show")}else displayMessage("ORA_ROBOT_NOT_CONNECTED","POPUP","")}function injectBlockly(e,o,a){response(e);var t=a|!1;"ok"===e.rc&&(t?($("#blocklyDiv").html(""),Blockly.inject(document.getElementById("blocklyDiv"),{path:"/blockly/",toolbox:e.data,readOnly:!0,trashcan:!1,code:!1,save:!1,check:!1,start:!1})):($("#blocklyDiv").html(""),Blockly.inject(document.getElementById("blocklyDiv"),{path:"/blockly/",toolbox:e.data,trashcan:!0,code:!0,save:!0,check:!0,start:!0})),$(window).width()<768&&t?Blockly.getMainWorkspace().clear():(initProgramEnvironment(o),setRobotState(e)),"ev3"===userState.robot?($("#menuShowCode").parent().removeClass("disabled"),Blockly.getMainWorkspace().codeButton.enable()):($("#menuShowCode").parent().addClass("disabled"),Blockly.getMainWorkspace().codeButton.disable()))}function initProgramEnvironment(e){Blockly.getMainWorkspace().clear();var o,a;$(window).width()<768?(o=25,a=25):(o=370,a=50);var t="",n=e||t,r=Blockly.Xml.textToDom(n);Blockly.Xml.domToWorkspace(Blockly.mainWorkspace,r),userState.blocklyReady=!0,Blockly.fireUiEvent(window,"resize")}function setProgram(e,o){e&&(userState.program=e,o&&(e+=' ('+o+")"),$("#tabProgramName").html(e))}function setConfiguration(e){e&&(userState.configuration=e,$("#tabConfigurationName").text(e))}function setToken(e){var o=e.toUpperCase();ROBOT.setToken(o,function(e){"ok"===e.rc&&(userState.token=o),displayInformation(e,"MESSAGE_ROBOT_CONNECTED",e.message,userState.robotName),setRobotState(e),handleFirmwareConflict()})}function response(e){LOG.info("result from server: "+UTIL.formatResultLog(e)),"ok"!=e.rc&&displayMessage(e.message,"POPUP","")}function saveAsProgramToServer(){var e=$("#programNameSave").val().trim();if(!e.match(/^[a-zA-Z][a-zA-Z0-9]*$/))return void displayMessage("MESSAGE_INVALID_NAME","POPUP","");var o=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),a=Blockly.Xml.domToText(o);LOG.info("saveAs program "+userState.program+" login: "+userState.id);var t=UTIL.parseDate(userState.programTimestamp);PROGRAM.saveAsProgramToServer(e,t,a,function(o){response(o),"ok"===o.rc&&(setProgram(e),$("#menuSaveProg").parent().removeClass("disabled"),Blockly.getMainWorkspace().saveButton.enable(),userState.programSaved=!0,userState.programModified=!1,userState.programTimestamp=UTIL.formatDateComplete(o.lastChanged),displayInformation(o,"MESSAGE_EDIT_SAVE_PROGRAM_AS",o.message,userState.program))})}function saveToServer(){if(userState.program){var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e);userState.programSaved=!0,LOG.info("save program "+userState.program+" login: "+userState.id),$(".modal").modal("hide");var a=UTIL.parseDate(userState.programTimestamp);PROGRAM.saveProgramToServer(userState.program,userState.programShared,a,o,function(e){"ok"===e.rc&&(userState.programModified=!1,userState.programTimestamp=UTIL.formatDateComplete(e.lastChanged)),displayInformation(e,"MESSAGE_EDIT_SAVE_PROGRAM",e.message,userState.program)})}}function saveAsConfigurationToServer(){var e=$("#configurationNameSave").val();if(!e.match(/^[a-zA-Z][a-zA-Z0-9]*$/))return void displayMessage("MESSAGE_INVALID_NAME","POPUP","");setConfiguration(e),$("#menuSaveConfig").parent().removeClass("login"),$("#menuSaveConfig").parent().removeClass("disabled"),UTIL.getBricklyFrame("#bricklyFrame").Blockly.getMainWorkspace().saveButton.enable(),userState.configurationSaved=!0,$(".modal").modal("hide");var o=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);LOG.info("save brick configuration "+userState.configuration),CONFIGURATION.saveAsConfigurationToServer(userState.configuration,o,function(e){"ok"===e.rc&&(userState.configurationModified=!1),displayInformation(e,"MESSAGE_EDIT_SAVE_CONFIGURATION_AS",e.message,userState.configuration)})}function saveConfigurationToServer(){if(userState.configuration){userState.configurationSaved=!0,$(".modal").modal("hide");var e=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);LOG.info("save brick configuration "+userState.configuration),CONFIGURATION.saveConfigurationToServer(userState.configuration,e,function(e){"ok"===e.rc&&(userState.configurationModified=!1),displayInformation(e,"MESSAGE_EDIT_SAVE_CONFIGURATION",e.message,userState.configuration)})}}function showJavaProgram(){LOG.info("show the generated Java program for "+userState.program);var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e),a=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);PROGRAM.showJavaProgram(userState.program,userState.configuration,o,a,function(e){setRobotState(e),"ok"==e.rc?displayPopupMessage("Ok-kO",e.javaSource):displayInformation(e,"",e.message,"")})}function runOnBrick(){"ev3"===userState.robot?""===userState.robotState||"disconnected"===userState.robotState?displayMessage("POPUP_ROBOT_NOT_CONNECTED","POPUP",""):"busy"===userState.robotState?displayMessage("POPUP_ROBOT_BUSY","POPUP",""):handleFirmwareConflict()?($("#buttonCancelFirmwareUpdate").css("display","none"),$("#buttonCancelFirmwareUpdateAndRun").css("display","inline")):startProgram():"oraSim"===userState.robot&&startProgram()}function showCode(){if("ev3"===userState.robot){LOG.info("show code "+userState.program+" signed in: "+userState.id);var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e),a=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);PROGRAM.showJavaProgram(userState.program,userState.configuration,o,a,function(e){setRobotState(e),$("#blocklyDiv").addClass("codeActive"),$("#blocklyDiv").parent().bind("transitionend",function(){Blockly.fireUiEvent(window,"resize")}),$("#codeDiv").addClass("codeActive"),$(".nav > li > ul > .robotType").addClass("disabled"),$("#head-navigation-program-edit").addClass("disabled"),$("#head-navigation-program-edit>ul").addClass("hidden"),UTIL.cacheBlocks(),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e,userState.programBlocks,!0)}),$(".code").removeClass("hide"),document.getElementById("codeDiv").innerHTML=""})}}function startProgram(){LOG.info("run "+userState.program+" signed in: "+userState.id);var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e),a=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);Blockly.hasStartButton&&Blockly.getMainWorkspace().startButton.disable(),PROGRAM.runOnBrick(userState.program,userState.configuration,o,a,function(e){setRobotState(e),"ok"==e.rc?"oraSim"===userState.robot?(SIM.init(e.javaScriptProgram),$("#blocklyDiv").addClass("simActive"),$("#blocklyDiv").parent().bind("transitionend",function(){Blockly.fireUiEvent(window,"resize"),setTimeout(function(){SIM.setPause(!1)},1e3)}),$("#simDiv").addClass("simActive"),$("#simButtonsCollapse").collapse({toggle:!1}),$(".nav > li > ul > .robotType").addClass("disabled"),$("#head-navigation-program-edit").addClass("disabled"),$("#head-navigation-program-edit>ul").addClass("hidden"),UTIL.cacheBlocks(),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e,userState.programBlocks,!0)}),$(".sim").removeClass("hide")):displayMessage("MESSAGE_EDIT_START","TOAST",userState.program):(Blockly.getMainWorkspace().startButton.enable(),displayInformation(e,"",e.message,""))})}function checkProgram(){LOG.info("check "+userState.program+" signed in: "+userState.id);var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace),o=Blockly.Xml.domToText(e),a=UTIL.getBricklyFrame("#bricklyFrame").getXmlOfConfiguration(userState.configuration);displayMessage("MESSAGE_EDIT_CHECK","TOAST",userState.program),PROGRAM.checkProgramCompatibility(userState.program,userState.configuration,o,a,function(e){if("ok"==e.rc){var o=Blockly.Xml.textToDom(e.data);Blockly.mainWorkspace.clear(),Blockly.Xml.domToWorkspace(Blockly.mainWorkspace,o)}})}function showProgram(e,o,a,t){if(response(e),"ok"===e.rc){setProgram(a,t);var n=Blockly.Xml.textToDom(e.data);o&&Blockly.mainWorkspace.clear(),Blockly.Xml.domToWorkspace(Blockly.mainWorkspace,n),LOG.info("show program "+userState.program+" signed in: "+userState.id)}}function showConfiguration(e,o,a){response(e),"ok"===e.rc&&(switchToBrickly(),setConfiguration(a),UTIL.getBricklyFrame("#bricklyFrame").showConfiguration(e.data,o),LOG.info("show configuration "+userState.configuration+" signed in: "+userState.id))}function loadFromListing(){var e=$("#programNameTable .selected");if(e.length>0){var o=e[0].children[0].textContent,a=e[0].children[1].textContent,t=e[0].children[2].textContent;userState.programTimestamp=e[0].children[5].textContent,LOG.info("loadFromList "+o+" signed in: "+userState.id),PROGRAM.loadProgramFromListing(o,a,function(e){if("ok"===e.rc){userState.programShared=!1,$("#menuSaveProg").parent().removeClass("disabled"),Blockly.getMainWorkspace().saveButton.enable(),t===Blockly.Msg.POPUP_SHARE_READ?($("#menuSaveProg").parent().addClass("disabled"),Blockly.getMainWorkspace().saveButton.disable()):t===Blockly.Msg.POPUP_SHARE_WRITE&&(userState.programShared=!0),$("#tabs").tabs("option","active",0),userState.programSaved=!0;var n=a===userState.accountName?null:a;showProgram(e,!0,o,n)}displayInformation(e,"",e.message)})}}function loadConfigurationFromListing(){var e=$("#configurationNameTable .selected");if(e.length>0){var o=e[0].children[0].textContent;LOG.info("loadFromConfigurationList "+o+" signed in: "+userState.id),CONFIGURATION.loadConfigurationFromListing(o,function(e){"ok"===e.rc&&($("#tabs").tabs("option","active",0),userState.configurationSaved=!0,showConfiguration(e,!0,o),$("#menuSaveConfig").parent().removeClass("login"),$("#menuSaveConfig").parent().removeClass("disabled"),setRobotState(e)),displayInformation(e,"",e.message)})}}function shareProgramsFromListing(){var e=$("#programShareWith").val(),o=!1;if($("#relationsTable tbody tr").each(function(){var a=$(this),t=a.children("td"),n=t.eq(2).text();n===e&&(o=!0)}),e===userState.name||o)displayInformation({rc:"not ok"},"","ORA_USER_TO_SHARE_SAME_AS_LOGIN_USER");else if(""!==e){var a=$("#write:checked").val();if(a||(a=$("#read:checked").val()),a){var t=$("#programNameTable .selected"),n=t[0].children[0].textContent;LOG.info("share program "+n+" with '"+e+" having right '"+a+"'"),PROGRAM.shareProgram(n,e,a,function(e){displayInformation(e,"",e.message),"ok"===e.rc&&($("#show-relations").modal("hide"),PROGRAM.refreshList(showPrograms))})}}else $("#relationsTable tbody tr").each(function(){var e=$(this),o=e.children("td"),a=o.eq(0).text(),t=o.eq(2).text();if(""!==t){var n=o.eq(3).children("input:checked").val(),r=o.eq(4).children("input:checked").val(),i="NONE";"WRITE"===r?i=r:"READ"===n&&(i=n),LOG.info("share program "+a+" with '"+t+" having right '"+i+"'"),PROGRAM.shareProgram(a,t,i,function(e){"ok"===e.rc?(response(e),setRobotState(e),"NONE"===i&&displayInformation(e,"MESSAGE_RELATION_DELETED",e.message,a),$("#show-relations").modal("hide"),PROGRAM.refreshList(showPrograms)):displayInformation(e,"",e.message)})}});$("#programShareWith").val("")}function deleteFromListing(){for(var e=$("#programNameTable .selected"),o=[],a=0;a0&&o.fnAddData(e.programNames),setRobotState(e)}}function showConfigurations(e){if(response(e),"ok"===e.rc){var o=$("#configurationNameTable").dataTable();o.fnClearTable(),e.configurationNames.length>0&&o.fnAddData(e.configurationNames),setRobotState(e)}}function showRelations(e){if(response(e),"ok"===e.rc){var o=$("#relationsTable").dataTable();o.fnClearTable(),e.relations.length>0&&o.fnAddData(e.relations),setTimeout(function(){o.fnAdjustColumnSizing()},200),$("#show-relations").modal("show")}}function selectionFn(e){$(e.target.parentNode).toggleClass("selected");var o=e.currentTarget.rowIndex;if(start||(start=o),e.shiftKey){var a=o;for($("#programNameTable tbody tr").removeClass("selected"),i=Math.min(start,a);i<=Math.max(start,a);i++)$(e.target.parentNode.parentNode.childNodes).eq(i).hasClass("selected")||$(e.target.parentNode.parentNode.childNodes).eq(i).addClass("selected");window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty()}start=o}function beforeActivateTab(e,o){$("#tabs").tabs("refresh"),"#progListing"===o.newPanel.selector?PROGRAM.refreshList(showPrograms):"#confListing"===o.newPanel.selector&&CONFIGURATION.refreshList(showConfigurations)}function initProgramNameTable(){var e=[{sTitle:"Name des Programms",sClass:"programs"},{sTitle:"Erzeugt von",sClass:"programs"},{sTitle:"Geteilt",sClass:"programs"},{sTitle:"Erzeugt am",sClass:"programs"},{sTitle:"Letzte Aktualisierung",sClass:"programs"},{sTitle:"Letzte Aktualisierung mit Hundertstel Sekunden",sClass:"programs hidden"}],o=$("#programNameTable"),a=o.dataTable({sDom:"t",aaData:[],aoColumns:e,aoColumnDefs:[{aTargets:[3,4],sType:"date-de",mRender:function(e){return UTIL.formatDate(e)}},{aTargets:[5],sType:"date-de",mRender:function(e){return UTIL.formatDateComplete(e)}},{aTargets:[2],mRender:function(e){if("WRITE"===e)var o=""+Blockly.Msg.POPUP_SHARE_WRITE+"";else if("READ"===e)var o=""+Blockly.Msg.POPUP_SHARE_READ+"";else if(e===!0)var o="X";else if(e===!1)var o="-";return o}}],bJQueryUI:!0,oLanguage:{sEmptyTable:""},fnDrawCallback:function(){},scrollY:UTIL.calcDataTableHeight(),scrollCollapse:!0,paging:!1,bInfo:!1});$(window).resize(function(){var e=a.fnSettings();e.oScroll.sY=UTIL.calcDataTableHeight(),a.fnDraw(!1)}),$("#programNameTable tbody").onWrap("click","tr",selectionFn),$("#programNameTable tbody").onWrap("dblclick","tr",function(e){selectionFn(e),$("#loadFromListing").click()})}function initConfigurationNameTable(){var e=[{sTitle:"Name der Konfiguration",sClass:"configurations"},{sTitle:"Erzeugt von",sClass:"configurations"},{sTitle:"Erzeugt am",sClass:"configurations"},{sTitle:"Letzte Aktualisierung",sClass:"configurations"}],o=$("#configurationNameTable"),a=o.dataTable({sDom:"t",aaData:[],aoColumns:e,aoColumnDefs:[{aTargets:[2,3],sType:"date-de",mRender:function(e){return UTIL.formatDate(e)}}],bJQueryUI:!0,oLanguage:{sEmptyTable:""},fnDrawCallback:function(){},scrollY:UTIL.calcDataTableHeight(),scrollCollapse:!0,paging:!1,bInfo:!1});$(window).resize(function(){var e=a.fnSettings();e.oScroll.sY=UTIL.calcDataTableHeight(),a.fnDraw(!1)}),$("#configurationNameTable tbody").onWrap("click","tr",selectionFn),$("#configurationNameTable tbody").onWrap("dblclick","tr",function(e){selectionFn(e),$("#loadConfigurationFromListing").click()})}function initRelationsTable(){var e=[{sTitle:"Name des Programms",sClass:"relations hidden"},{sTitle:"Erzeugt von",sClass:"relations hidden"},{sTitle:"Geteilt mit",sClass:"relations"},{sTitle:"Lesen",sClass:"relations"},{sTitle:"Schreiben",sClass:"relations"}],o=$("#relationsTable"),a=o.dataTable({sDom:"t",aaData:[],aoColumns:e,aoColumnDefs:[{aTargets:[3],mRender:function(e,o,a){var t="";("WRITE"===a[4]||"READ"===e)&&(t="checked");var n="";return n}},{aTargets:[4],mRender:function(e){var o="";"WRITE"===e&&(o="checked");var a="";return a}}],bJQueryUI:!0,oLanguage:{sEmptyTable:""},fnDrawCallback:function(){},scrollY:UTIL.calcDataTableHeight(),scrollCollapse:!0,paging:!1,bInfo:!1});$(window).resize(function(){var e=a.fnSettings();e.oScroll.sY=UTIL.calcDataTableHeight(),a.fnDraw(!1)}),$("#relationsTable tbody").onWrap("click","tr",selectionFn),$("#relationsTable_wrapper").css("margin",0)}function switchToBlockly(){$("#tabs").css("display","inline"),$("#bricklyFrame").css("display","none"),$("#simConfiguration").css("display","none"),$("#tabBlockly").click(),Blockly.getMainWorkspace().render(),Blockly.getMainWorkspace().render(),bricklyActive=!1}function switchToBrickly(){"oraSim"===userState.robot?$("#simConfiguration").css("display","block"):($("#bricklyFrame").css("display","inline"),$("#tabs").css("display","none"),UTIL.getBricklyFrame("#bricklyFrame").Blockly.getMainWorkspace().render(),UTIL.getBricklyFrame("#bricklyFrame").loadToolbox()),$("#tabBrickly").click(),bricklyActive=!0}function initRobot(){ROBOT.setRobot(userState.robot,function(e){response(e),"ok"===e.rc&&(setConfiguration("EV3basis"),loadToolbox(userState.toolbox),$("#blocklyDiv").removeClass("simBackground"),$("#menuEv3").parent().addClass("disabled"),$("#menuSim").parent().removeClass("disabled"),$("#menuConnect").parent().removeClass("disabled"),$("#iconDisplayRobotState").removeClass("typcn-Roberta"),$("#iconDisplayRobotState").addClass("typcn-ev3"),$("#menuShowCode").parent().removeClass("disabled"))})}function switchRobot(e){e!==userState.robot&&ROBOT.setRobot(e,function(o){"ok"===o.rc&&(userState.robot=e,setRobotState(o),"ev3"===e?(setConfiguration("EV3basis"),$("#blocklyDiv").removeClass("simBackground"),$("#menuEv3").parent().addClass("disabled"),$("#menuSim").parent().removeClass("disabled"),$("#menuConnect").parent().removeClass("disabled"),$("#iconDisplayRobotState").removeClass("typcn-Roberta"),$("#iconDisplayRobotState").addClass("typcn-ev3"),$("#menuShowCode").parent().removeClass("disabled"),Blockly.getMainWorkspace().codeButton.enable(),UTIL.getBricklyFrame("#bricklyFrame").loadToolboxAndConfiguration()):"oraSim"===e&&(setConfiguration("ORSim"),$("#blocklyDiv").addClass("simBackground"),$("#menuEv3").parent().removeClass("disabled"),$("#menuSim").parent().addClass("disabled"),$("#menuConnect").parent().addClass("disabled"),$("#iconDisplayRobotState").removeClass("typcn-ev3"),$("#iconDisplayRobotState").addClass("typcn-Roberta"),$("#menuShowCode").parent().addClass("disabled"),Blockly.getMainWorkspace().codeButton.disable(),PROGRAM.loadProgramFromListing("NEPOprog","Roberta",function(e){"ok"===e.rc&&showProgram(e,!0,"NEPOprog")})),loadToolbox(userState.toolbox))})}function setHeadNavigationMenuState(e){$(".nav > li > ul > .login, .logout").removeClass("disabled"),"login"===e?$(".nav > li > ul > .login").addClass("disabled"):"logout"===e&&$(".nav > li > ul > .logout").addClass("disabled")}function initHeadNavigation(){$(".navbar-fixed-top").onWrap("click",".dropdown-menu li:not(.disabled) a",function(e){Blockly.hideChaff(),$(".modal").modal("hide");var o=e.target.id;return"menuRunProg"===o?runOnBrick():"menuCheckProg"===o?checkProgram():"menuNewProg"===o?newProgram():"menuListProg"===o?(deactivateProgConfigMenu(),$("#tabListing").click()):"menuSaveProg"===o?saveToServer():"menuSaveAsProg"===o?$("#save-program").modal("show"):"menuShowCode"===o?showCode():"menuToolboxBeginner"===o?loadToolbox("beginner"):"menuToolboxExpert"===o?loadToolbox("expert"):"menuCheckConfig"===o?displayMessage("MESSAGE_NOT_AVAILABLE","POPUP",""):"menuNewConfig"===o?(setConfiguration("EV3basis"),UTIL.getBricklyFrame("#bricklyFrame").initConfigurationEnvironment(),$("#menuSaveConfig").parent().addClass("disabled"),UTIL.getBricklyFrame("#bricklyFrame").Blockly.getMainWorkspace().saveButton.disable()):"menuListConfig"===o?(deactivateProgConfigMenu(),$("#tabs").css("display","inline"),$("#bricklyFrame").css("display","none"),$("#simConfiguration").css("display","none"),$("#tabConfigurationListing").click()):"menuSaveConfig"===o?saveConfigurationToServer():"menuSaveAsConfig"===o?$("#save-configuration").modal("show"):"menuEv3"===o?newProgram()&&switchRobot("ev3"):"menuSim"===o?newProgram()&&switchRobot("oraSim"):"menuConnect"===o?($("#buttonCancelFirmwareUpdate").css("display","inline"),$("#buttonCancelFirmwareUpdateAndRun").css("display","none"),$("#set-token").modal("show")):"menuRobotInfo"===o?showRobotInfo():"menuGeneral"===o?window.open("https://mp-devel.iais.fraunhofer.de/wiki/x/BIAM"):"menuEV3conf"===o?window.open("https://mp-devel.iais.fraunhofer.de/wiki/x/RIAd"):"menuProgramming"===o?window.open("https://mp-devel.iais.fraunhofer.de/wiki/x/CwA-/"):"menuFaq"===o?window.open("https://mp-devel.iais.fraunhofer.de/wiki/x/BoAd"):"menuShowRelease"===o?$("#show-release").modal("show"):"menuStateInfo"===o?showUserInfo():"menuAbout"===o?($("#version").text(userState.version),$("#show-about").modal("show")):"menuLogging"===o?(deactivateProgConfigMenu(),$("#tabs").css("display","inline"),$("#bricklyFrame").css("display","none"),$("#simConfiguration").css("display","none"),$("#tabLogging").click()):"menuLogin"===o?$("#login-user").modal("show"):"menuLogout"===o?logout():"menuNewUser"===o?$("#register-user").modal("show"):"menuChangeUser"===o||"menuDeleteUser"===o&&$("#delete-user").modal("show"),!1},"head navigation menu item clicked"),$(".navbar-fixed-top .navbar-nav").onWrap("click","li:not(.disabled) a",function(e){var o=e.target.id;return"menuTabProgram"===o?($("#tabSimulation").hasClass("tabClicked")&&$(".scroller-left").click(),$(".scroller-left").click(),$("#tabProgram").click()):"menuTabConfiguration"===o&&($("#tabProgram").hasClass("tabClicked")?$(".scroller-right").click():$("#tabConfiguration").hasClass("tabClicked")&&$(".scroller-right").click(),$("#tabConfiguration").click()),!1}),$(".navbar-fixed-top").onWrap("mouseleave",function(){$(".navbar-fixed-top .dropdown").removeClass("open")}),$("#imgLogo, #imgBeta").onWrap("click",function(){window.open("http://open-roberta.org")},"logo was clicked"),$("#beta").onWrap("click",function(){window.open("http://open-roberta.org")},"beta logo was clicked"),$("#iconDisplayLogin").onWrap("click",function(){showUserInfo()},"icon user click"),$("#iconDisplayRobotState").onWrap("click",function(){showRobotInfo()},"icon robot click"),$("#tabProgram").onWrap("click",function(){activateProgConfigMenu(),$("#tabProgram").addClass("tabClicked"),$("#tabConfiguration").removeClass("tabClicked"),$("#tabSimulation").removeClass("tabClicked"),$("#head-navigation-program-edit").css("display","inline"),$("#head-navigation-configuration-edit").css("display","none"),$("#menuTabProgram").parent().addClass("disabled"),$("#menuTabConfiguration").parent().removeClass("disabled"),$("#menuTabSimulation").parent().removeClass("disabled"),switchToBlockly()},"tabProgram clicked"),$("#tabConfiguration").onWrap("click",function(){Blockly.hideChaff(),activateProgConfigMenu(),$("#tabProgram").removeClass("tabClicked"),$("#tabConfiguration").addClass("tabClicked"),$("#tabSimulation").removeClass("tabClicked"),$("#head-navigation-program-edit").css("display","none"),$("#head-navigation-configuration-edit").css("display","inline"),$("#menuTabProgram").parent().removeClass("disabled"),$("#menuTabConfiguration").parent().addClass("disabled"),$("#menuTabSimulation").parent().removeClass("disabled"),switchToBrickly()},"tabConfiguration clicked"),$(".simSimple").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simSimple").parent().addClass("disabled"),SIM.setBackground(1),$("#simButtonsCollapse").collapse("hide")},"simSimple clicked"),$(".simDraw").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simDraw").parent().addClass("disabled"),SIM.setBackground(2),$("#simButtonsCollapse").collapse("hide")},"simDraw clicked"),$(".simRoberta").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simRoberta").parent().addClass("disabled"),SIM.setBackground(3),$("#simButtonsCollapse").collapse("hide")},"simRoberta clicked"),$(".simRescue").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simRescue").parent().addClass("disabled"),SIM.setBackground(4),$("#simButtonsCollapse").collapse("hide")},"simRescue clicked"),$(".simMath").onWrap("click",function(){$(".menuSim").parent().removeClass("disabled"),$(".simMath").parent().addClass("disabled"),SIM.setBackground(5),$("#simButtonsCollapse").collapse("hide")},"simRescue clicked"),$(".simBack").onWrap("click",function(){SIM.cancel(),$("#blocklyDiv").removeClass("simActive"),$("#simDiv").removeClass("simActive"),$(".sim").addClass("hide"),Blockly.fireUiEvent(window,"resize"),$(".nav > li > ul > .robotType").removeClass("disabled"),$("#menuSim").parent().addClass("disabled"),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e,userState.programBlocksSaved)}),$("#simButtonsCollapse").collapse("hide"),$("#head-navi-tooltip-program").removeClass("disabled"),$("#head-navigation-program-edit").removeClass("disabled"),$("#head-navigation-program-edit>ul").removeClass("hidden") +},"simBack clicked"),$(".simStop").onWrap("click",function(){SIM.stopProgram(),$("#simButtonsCollapse").collapse("hide")},"simStop clicked"),$(".simForward").onWrap("click",function(){SIM.setPause($(".simForward").hasClass("typcn-media-play")?!1:!0),$("#simButtonsCollapse").collapse("hide")},"simForward clicked"),$(".simStep").onWrap("click",function(){SIM.setStep(),$("#simButtonsCollapse").collapse("hide")},"simStep clicked"),$(".simInfo").onWrap("click",function(){SIM.setInfo(),$("#simButtonsCollapse").collapse("hide")},"simInfo clicked"),$(".simScene").onWrap("click",function(){SIM.setBackground(0);var e=$("#simButtonsCollapse").collapse("hide");$(".menuSim").parent().removeClass("disabled"),1==e?$(".simSimple").parent().addClass("disabled"):2==e?$(".simDraw").parent().addClass("disabled"):3==e?$(".simRoberta").parent().addClass("disabled"):4==e?$(".simRescue").parent().addClass("disabled"):5==e&&$(".simMath").parent().addClass("disabled")},"simScene clicked"),$("#startSim").onWrap("click",function(){switchRobot("oraSim")},"start with simulation clicked"),$("#startEV3").onWrap("click",function(){switchRobot("ev3")},"start with ev3 clicked"),$(".codeBack").onWrap("click",function(){$("#blocklyDiv").removeClass("codeActive"),$("#codeDiv").removeClass("codeActive"),"oraSim"===userState.robot?$("#menuEv3").parent().removeClass("disabled"):$("#menuSim").parent().removeClass("disabled"),Blockly.fireUiEvent(window,"resize"),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e,userState.programBlocksSaved)}),$("#head-navi-tooltip-program").removeClass("disabled"),$("#head-navigation-program-edit").removeClass("disabled"),$("#head-navigation-program-edit>ul").removeClass("hidden"),$(".code").addClass("hide")},"codeBack clicked"),$("#codeDownload").onWrap("click",function(){var e=new Blob([userState.programCode]),o=document.createElement("a"),a=window.URL||window.webkitURL;o.setAttribute("href",a.createObjectURL(e)),o.setAttribute("download",userState.program+".java"),o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o)},"codeDownload clicked"),$(".newRelease").onWrap("click",function(){$("#show-release").modal("show")},"show release clicked")}function initPopups(){$("#saveUser").onWrap("click",saveUserToServer),$("#deleteUser").onWrap("click",deleteUserOnServer),$("#doLogin").onWrap("click",login),$("#saveProgram").onWrap("click",saveAsProgramToServer),$("#saveConfiguration").onWrap("click",saveAsConfigurationToServer),$("#shareProgram").onWrap("click",function(){shareProgramsFromListing()},"share program"),$("#setToken").onWrap("click",function(){setToken($("#tokenValue").val())},"set token"),$(".cancelPopup").onWrap("click",function(){$(".ui-dialog-titlebar-close").click()}),$("#about-join").onWrap("click",function(){$("#show-about").modal("hide")}),$("#login-user").onWrap("hidden.bs.modal",function(){$("#login-user input :not(btn)").val("")}),$("#delete-user").onWrap("hidden.bs.modal",function(){$("#delete-user input :not(btn)").val("")}),$("#register-user").onWrap("hidden.bs.modal",function(){$("#register-user input :not(btn)").val(""),$("#login-user input :not(btn)").val("")}),$("#buttonCancelFirmwareUpdateAndRun").onWrap("click",function(){startProgram()}),$("#doUpdateFirmware").onWrap("click",function(){$("#set-token").modal("hide"),$("#confirmUpdateFirmware").modal("hide"),updateFirmware()},"update firmware of robot"),$(".modal").keyup(function(e){if(e.keyCode===$.ui.keyCode.BACKSPACE&&"password"===e.target.type&&$("#"+e.target.id).val().length>0){var o=$("#"+e.target.id).val().length-1,a=$("#"+e.target.id).val().substring(0,o);$("#"+e.target.id).val(a)}27==e.keyCode&&window.close(),13==e.keyCode&&$(this).find(".modal-footer button:first").click(),e.stopPropagation()})}function initTabs(){$("#tabs").tabs({heightStyle:"content",active:0,beforeActivate:beforeActivateTab}),$("#loadFromListing").onWrap("click",function(){activateProgConfigMenu(),loadFromListing()},"load blocks from program list"),$("#loadConfigurationFromListing").onWrap("click",function(){activateProgConfigMenu(),loadConfigurationFromListing()},"load configuration from configuration list"),$("#deleteFromListing").onWrap("click",function(){var e=$("#programNameTable .selected");if(e.length>0){for(var o="",a=0;a";$("#confirmDeleteProgramName").html(o),$("#confirmDeleteProgram").modal("show")}},"Ask for confirmation to delete programs"),$("#doDeleteProgram").onWrap("click",function(){deleteFromListing()},"delete program"),$("#deleteConfigurationFromListing").onWrap("click",function(){$("#configurationNameTable .selected").length>0&&$("#confirmDeleteConfiguration").modal("show")},"Ask for confirmation to delete a configuration"),$("#doDeleteConfiguration").onWrap("click",function(){deleteConfigurationFromListing(),$(".modal").modal("hide")},"delete configuration from configurations list"),$("#shareFromListing").onWrap("click",function(){var e=$("#programNameTable .selected");if(e.length>0){var o=e[0].children[2].textContent;if("X"===o||"-"===o){var a=e[0].children[0].textContent,t=Blockly.Msg.BUTTON_DO_SHARE+" ("+a+")";$("#headShare").text(t),$("#programShareWith :not(btn)").val(""),$("#read").prop("checked",!0),$("#write").prop("checked",!1),PROGRAM.refreshProgramRelationsList(a,showRelations)}}},"show relations of program"),$("#refreshListing").onWrap("click",function(){PROGRAM.refreshList(showPrograms)},"refresh list of programs"),$("#backConfiguration").onWrap("click",function(){activateProgConfigMenu(),switchToBrickly()}),$("#backProgram").onWrap("click",function(){activateProgConfigMenu(),switchToBlockly()}),$("#backLogging").onWrap("click",function(){activateProgConfigMenu(),bricklyActive?switchToBrickly():switchToBlockly()})}function initLogging(){$("#clearLog").onWrap("click",function(){$("#log li").remove()},"clear LOG list")}function setRobotState(e){e.version&&(userState.version=e.version),e["server.version"]&&(userState.serverVersion=e["server.version"]),e["robot.version"]&&(userState.robotVersion=e["robot.version"]),userState.robotWait=void 0!=e["robot.wait"]?e["robot.wait"]:"",userState.robotBattery=void 0!=e["robot.battery"]?e["robot.battery"]:"",userState.robotName=void 0!=e["robot.name"]?e["robot.name"]:"",userState.robotState=void 0!=e["robot.state"]?e["robot.state"]:"",userState.accountName?($("#iconDisplayLogin").removeClass("error"),$("#iconDisplayLogin").addClass("ok")):($("#iconDisplayLogin").removeClass("ok"),$("#iconDisplayLogin").addClass("error")),"wait"===userState.robotState?($("#iconDisplayRobotState").removeClass("error"),$("#iconDisplayRobotState").removeClass("busy"),$("#iconDisplayRobotState").addClass("wait"),Blockly.hasStartButton&&Blockly.getMainWorkspace().startButton.enable()):"busy"===userState.robotState?($("#iconDisplayRobotState").removeClass("wait"),$("#iconDisplayRobotState").removeClass("error"),$("#iconDisplayRobotState").addClass("busy")):($("#iconDisplayRobotState").removeClass("busy"),$("#iconDisplayRobotState").removeClass("wait"),$("#iconDisplayRobotState").addClass("error"))}function translate(){$("[lkey]").each(function(){var e=$(this).attr("lkey"),o=e.replace("Blockly.Msg.",""),a=Blockly.Msg[o];void 0==a&&console.log("UNDEFINED key : value = "+o+" : "+a),"Blockly.Msg.MENU_LOG_IN"===e?($("#login-user h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_NEW"===e?($("#register-user h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_DELETE_USER"===e?($("#delete-user h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_SAVE_AS"===e?($("#save-program h3").text(a),$("#save-configuration h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_CONNECT"===e?($("#set-token h3").text(a),$(this).html(a)):"Blockly.Msg.POPUP_HIDE_STARTUP_MESSAGE"===e?$("#hideStartupMessage").text(a):"Blockly.Msg.POPUP_TEXT_STARTUP_MESSAGE"===e?$("#popupTextStartupMessage").html(a):"Blockly.Msg.POPUP_ATTENTION"===e?($("#show-message h3").text(a),$("#show-startup-message h3").text(a)):"Blockly.Msg.POPUP_CANCEL"===e?($(".cancelPopup").attr("value",a),$(".backButton").attr("value",a)):"Blockly.Msg.POPUP_ABOUT_JOIN"===e?$("#about-join").html(a):"Blockly.Msg.BUTTON_LOAD"===e?$(".buttonLoad").attr("value",a):"Blockly.Msg.BUTTON_DO_DELETE"===e?$(".buttonDelete").attr("value",a):"Blockly.Msg.BUTTON_DO_SHARE"===e?($(".buttonShare").attr("value",a),$("#show-relations h2").text(a)):"Blockly.Msg.BUTTON_REFRESH"===e?$(".buttonRefresh").attr("value",a):"Blockly.Msg.BUTTON_EMPTY_LIST"===e?$("#clearLog").attr("value",a):"Blockly.Msg.MENU_ROBOT_STATE_INFO"===e?($("#show-robot-info h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_STATE_INFO"===e?($("#show-state-info h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_ABOUT"===e?($("#show-about h3").text(a),$(this).html(a)):"Blockly.Msg.MENU_TITLE_EDIT"===e?($("#head-navi-tooltip-program").attr("data-original-title",a).tooltip("fixTitle"),$("#head-navi-tooltip-configuration").attr("data-original-title",a).tooltip("fixTitle")):"Blockly.Msg.MENU_TITLE_ROBOT"===e?$("#head-navi-tooltip-robot").attr("data-original-title",a).tooltip("fixTitle"):"Blockly.Msg.MENU_TITLE_HELP"===e?$("#head-navi-tooltip-help").attr("data-original-title",a).tooltip("fixTitle"):"Blockly.Msg.MENU_TITLE_USER"===e?$("#head-navi-tooltip-user").attr("data-original-title",a).tooltip("fixTitle"):"Blockly.Msg.MENU_TITLE_USER_STATE"===e?$("#iconDisplayLogin").attr("data-original-title",a).tooltip("fixTitle"):"Blockly.Msg.MENU_TITLE_ROBOT_STATE"===e?$("#iconDisplayRobotState").attr("data-original-title",a).tooltip("fixTitle"):$(this).html(a)})}function switchLanguage(e,o){if(o||userState.language!=e){var a=["DE","EN","FI","DA","ES"];for(a.indexOf(e)<0&&(e="EN"),i=0;i-1?(e="DE",$("#chosenLanguage").text("DE")):navigator.language.indexOf("fi")>-1?(e="FI",$("#chosenLanguage").text("FI")):navigator.language.indexOf("da")>-1?(e="DA",$("#chosenLanguage").text("DA")):navigator.language.indexOf("es")>-1?(e="ES",$("#chosenLanguage").text("ES")):(e="EN",$("#chosenLanguage").text("EN")),$("#language").on("click",".dropdown-menu li a",function(){var e=$(this).text();$("#chosenLanguage").text(e),switchLanguage(e,!1)}),e}function displayInformation(e,o,a,t){"ok"===e.rc?($(".modal").modal("hide"),displayMessage(o,"TOAST",t)):displayMessage(a,"POPUP",t)}function displayMessage(e,o,a){if(void 0!=e){(e.indexOf(".")>=0||e.toUpperCase()!=e)&&LOG.info("Invalid message-key received: "+e);var t="Blockly.Msg."+e,n=Blockly.Msg[e];(void 0===n||""===n)&&(n=e),n.indexOf("$")>=0&&(n=n.replace("$",a)),"POPUP"===o?displayPopupMessage(t,n):"TOAST"===o&&(toastMessages.unshift(n),1===toastMessages.length&&displayToastMessages())}}function displayPopupMessage(e,o){$("#message").attr("lkey",e),$("#message").html(o),$("#show-message").modal("show")}function displayToastMessages(){$("#toastText").text(toastMessages[toastMessages.length-1]),$("#toastContainer").delay(100).fadeIn("slow",function(){$(this).delay(1e3).fadeOut("slow",function(){toastMessages.pop(),toastMessages.length>0&&displayToastMessages()})})}function activateProgConfigMenu(){$("#head-navigation-program-edit > ul > li").removeClass("disabled"),$("#head-navigation-configuration-edit > ul > li").removeClass("disabled"),setHeadNavigationMenuState(-1===userState.id?"logout":"login"),userState.programSaved&&($("#menuSaveProg").parent().removeClass("login"),$("#menuSaveProg").parent().removeClass("disabled"),Blockly.getMainWorkspace().saveButton.enable()),userState.configurationSaved&&($("#menuSaveConfig").parent().removeClass("login"),$("#menuSaveConfig").parent().removeClass("disabled"),UTIL.getBricklyFrame("#bricklyFrame").Blockly.getMainWorkspace().saveButton.enable())}function deactivateProgConfigMenu(){$("#head-navigation-program-edit > ul > li").addClass("disabled"),$("#head-navigation-configuration-edit > ul > li").addClass("disabled")}function pingServer(){COMM.ping(function(e){setRobotState(e)})}function handleServerErrors(){LOG.info("network changed")}function setWorkspaceModified(e){userState.programModified=e}function initBlockly(){if(userState.bricklyReady&&userState.blocklyReady){var e=initializeLanguages();switchLanguage(e,!0)}else setTimeout(function(){initBlockly()},100)}function startPopup(){userState.blocklyTranslated&&userState.bricklyTranslated?$("#show-startup-message").modal("show"):setTimeout(function(){startPopup()},100)}function init(){COMM.setErrorFn(handleServerErrors),initLogging(),initUserState(),$("#tabProgramName").text(userState.program),$("#tabConfigurationName").text(userState.configuration),initTabs(),initPopups(),initHeadNavigation(),setHeadNavigationMenuState("logout"),UTIL.initDataTables(),initProgramNameTable(),initConfigurationNameTable(),initRelationsTable(),$("#menuTabProgram").parent().addClass("disabled"),$("#tabProgram").addClass("tabClicked"),$("#head-navigation-configuration-edit").css("display","none"),$(".modal").on("shown.bs.modal",function(){$(this).find("[autofocus]").focus()}),$(window).on("beforeunload",function(){return userState.programModified||userState.configurationModified?-1===userState.id?Blockly.Msg.POPUP_BEFOREUNLOAD:Blöockly.Msg.POPUP_BEFOREUNLOAD_LOGGEDIN:void 0}),$('[rel="tooltip"]').tooltip({placement:"right"}),UTIL.checkVisibility(function(){var e=UTIL.checkVisibility();LOG.info("this tab visible: "+e),e||SIM.setPause(!0)}),initRobot(),COMM.json("/toolbox",{cmd:"loadT",name:userState.toolbox,owner:" "},function(e){injectBlockly(e)}),initBlockly(),startPopup();setInterval(function(){pingServer()},5e3)}var ROBOT={};!function(){ROBOT.updateFirmware=function(e){COMM.json("/admin",{cmd:"updateFirmware"},e,"update firmware")},ROBOT.setToken=function(e,o){COMM.json("/admin",{cmd:"setToken",token:e},o,"set token '"+e+"'")},ROBOT.setRobot=function(e,o){COMM.json("/admin",{cmd:"setRobot",robot:e},o,"set robot '"+e+"'")}}($);var USER={};!function(){USER.clear=function(e){COMM.json("/user",{cmd:"clear"},e,"clear user")},USER.login=function(e,o,a){COMM.json("/user",{cmd:"login",accountName:e,password:o},a,"login user '"+e+"'")},USER.logout=function(e){COMM.json("/user",{cmd:"logout"},e,"logout user")},USER.saveUserToServer=function(e,o,a,t,n){COMM.json("/user",{cmd:"createUser",accountName:e,userName:o,userEmail:a,password:t,role:"TEACHER"},n,"save user '"+e+"' to server")},USER.deleteUserOnServer=function(e,o,a){COMM.json("/user",{cmd:"deleteUser",accountName:e,password:o},a,"delete user '"+e+"' on server")}}($);var CONFIGURATION={};!function(){CONFIGURATION.saveAsConfigurationToServer=function(e,o,a){COMM.json("/conf",{cmd:"saveAsC",name:e,configuration:o},a,"save configuration to server with new name "+e)},CONFIGURATION.saveConfigurationToServer=function(e,o,a){COMM.json("/conf",{cmd:"saveC",name:e,configuration:o},a,"save configuration "+e+" to server")},CONFIGURATION.deleteConfigurationFromListing=function(e,o){COMM.json("/conf",{cmd:"deleteC",name:e},o,"delete configuration "+e)},CONFIGURATION.loadConfigurationFromListing=function(e,o){COMM.json("/conf",{cmd:"loadC",name:e,owner:userState.accountName},o,"load configuration "+e)},CONFIGURATION.refreshList=function(e){COMM.json("/conf",{cmd:"loadCN"},e,"refresh configuration list")}}($);var UTIL={};!function(e){UTIL.setCookie=function(e,o){var a=new Date;a.setTime(a.getTime()+2592e6),document.cookie=e+"="+o+";expires="+a.toUTCString()},UTIL.getCookie=function(e){var o=document.cookie.match("(^|;) ?"+e+"=([^;]*)(;|$)");return o?o[2]:null},UTIL.formatDate=function(e){if(e){var o=new Date(e),a=("0"+o.getDate()).slice(-2)+"."+("0"+(o.getMonth()+1)).slice(-2)+"."+o.getFullYear()+", "+("0"+o.getHours()).slice(-2)+":"+("0"+o.getMinutes()).slice(-2);return a}return""},UTIL.formatDateComplete=function(e){return e?moment(e).format("DD.MM.YYYY, HH:mm:ss.SSS"):""},UTIL.parseDate=function(e){if(e){var o=e.split(", ")[0],a=e.split(", ")[1],t=o.split(".")[0],n=o.split(".")[1]-1,r=o.split(".")[2],i=a.split(":")[0],s=a.split(":")[1],l=a.split(":")[2],c=a.split(".")[1],d=new Date(r,n,t,i,s,l,c);return d.getTime()}return 0},UTIL.formatResultLog=function(e){var o="{",a=!1;for(key in e)a?o+=",":a=!0,o+='"'+key+'":',e.hasOwnProperty(key)&&(o+=e[key].length>100?'"'+JSON.stringify(e[key]).substring(1,100)+' ..."':JSON.stringify(e[key]));return o+="}"},UTIL.initDataTables=function(){jQuery.extend(jQuery.fn.dataTableExt.oSort["date-de-asc"]=function(e,o){return e=UTIL.parseDate(e),o=UTIL.parseDate(o),o>e?-1:e>o?1:0},jQuery.fn.dataTableExt.oSort["date-de-desc"]=function(e,o){return e=UTIL.parseDate(e),o=UTIL.parseDate(o),o>e?1:e>o?-1:0})},UTIL.calcDataTableHeight=function(){return Math.round(e(window).height()-260)},UTIL.cacheBlocks=function(){if(userState.programBlocksSaved=null,userState.programBlocks=null,null!==Blockly.mainWorkspace){var e=Blockly.Xml.workspaceToDom(Blockly.mainWorkspace);userState.programBlocksSaved=Blockly.Xml.domToText(e);for(var o=Blockly.getMainWorkspace().getTopBlocks(),a=0;a 100) { + str += '"' + JSON.stringify(result[key]).substring(1, 100) + ' ..."'; + } else { + str += JSON.stringify(result[key]); + } + } + } + str += '}'; + return str; + }; + + /** + * Extension of Jquery-datatables for sorting German date fields + * + * @memberof UTIL + */ + UTIL.initDataTables = function() { + jQuery.extend(jQuery.fn.dataTableExt.oSort['date-de-asc'] = function(a, b) { + a = UTIL.parseDate(a); + b = UTIL.parseDate(b); + return ((a < b) ? -1 : ((a > b) ? 1 : 0)); + }, + + jQuery.fn.dataTableExt.oSort['date-de-desc'] = function(a, b) { + a = UTIL.parseDate(a); + b = UTIL.parseDate(b); + return ((a < b) ? 1 : ((a > b) ? -1 : 0)); + }); + }; + + /** + * Calculate height of data table + * + * @memberof UTIL + */ + UTIL.calcDataTableHeight = function() { + return Math.round($(window).height() - 260); + }; + + UTIL.cacheBlocks = function() { + userState.programBlocksSaved = null; + userState.programBlocks = null; + if (Blockly.mainWorkspace !== null) { + var xmlProgram = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); + userState.programBlocksSaved = Blockly.Xml.domToText(xmlProgram); + var blocks = Blockly.getMainWorkspace().getTopBlocks(); + for (var i = 0; i < blocks.length; i++) { + if (blocks[i].type == "robControls_start") { + var pos = blocks[i].getRelativeToSurfaceXY(); + blocks[i].moveBy(25 - pos.x, 25 - pos.y); + break; + } + } + xmlProgram = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); + userState.programBlocks = Blockly.Xml.domToText(xmlProgram); + var blocks = Blockly.getMainWorkspace().getTopBlocks(); + for (var i = 0; i < blocks.length; i++) { + if (blocks[i].type == "robControls_start") { + var pos = blocks[i].getRelativeToSurfaceXY(); + blocks[i].moveBy(25 - pos.x, 25 - pos.y); + break; + } + } + } + }; + + UTIL.checkVisibility = function() { + var stateKey, eventKey, keys = { + hidden : "visibilitychange", + webkitHidden : "webkitvisibilitychange", + mozHidden : "mozvisibilitychange", + msHidden : "msvisibilitychange" + }; + for (stateKey in keys) { + if (stateKey in document) { + eventKey = keys[stateKey]; + break; + } + } + return function(c) { + if (c) { + document.addEventListener(eventKey, c); + } + return !document[stateKey]; + }; + }; + + UTIL.getBricklyFrame = function(id) { + var iframe = $(id).get(0); + var doc; + + if (iframe.contentWindow) { + return iframe.contentWindow; + } + + if (iframe.window) { + return iframe.window; + } + + if (!doc && iframe.contentDocument) { + doc = iframe.contentDocument; + } + + if (!doc && iframe.document) { + doc = iframe.document; + } + + if (doc && doc.defaultView) { + return doc.defaultView; + } + + if (doc && doc.parentWindow) { + return doc.parentWindow; + } + + return undefined; + }; +})($); \ No newline at end of file