var globalVer = "MixIO ver 1.11.24" var isChanged = false; var globalBLE = {} function copy(obj) { return JSON.parse(JSON.stringify(obj)) } globalGottenScripts = []; (function () { $.getScript = function(url, callback, cache) { if(globalGottenScripts.indexOf(url) != -1) { callback(); return; } globalGottenScripts.push(url); $.ajax({ type: "GET", url: url, success: callback, dataType: "script", cache: cache }); }; })(); $(function() { if ('_cordovaNative' in window) { var scriptcordova = document.createElement('script'); scriptcordova.async = false; scriptcordova.src = "https://injection/www/cordova.js"; document.head.appendChild(scriptcordova); } $("#copypass").click(function(){ projectPass = $("#prjpass").text() var input = document.createElement('input'); document.body.appendChild(input); input.setAttribute('value', projectPass); input.select(); if (document.execCommand('copy')) { document.execCommand('copy'); } document.body.removeChild(input); showtext("密钥信息已复制到剪贴板") }) }) $(function() { get_width(); activeExit = false; currentPage = 0; pageCount = 1; get_projects(currentPage); window.onbeforeunload = function() { if (!activeExit) if ((typeof globalProjectName) != "undefined") { save_layout(); } }; /* if (Math.random() > 0.6) { var d = dialog({ title: '限时推广', content: '
尊敬的MixIO用户,您好!
现邀请您参与《MixIO平台技术接受度调查》,共计10题,预计用时5-8分钟。您的作答数据将被用于科学研究和平台改进设计,感谢您的参与! 点击此处进入调查
', cancelValue: '我知道了', cancel: function() {} }); d.showModal(); } */ }) const DATA_MODE = 0; const PROJ_MODE = 1; const LOGIC_MODE = 2; const SERVER_CONNECTED = 0; const SERVER_CONNECTING = 1; const SERVER_DISCONNECTED = 2; var isCode = true; var globalProjectType = DATA_MODE; var globalTableProjectInfo = { received: {}, toBeSent: "", toBeSentJSON: "", currentTp: '$', currentTp2: "" } var globalXML = ''; var isRunning = false; var connected_hardwares = []; var connected = SERVER_CONNECTING; var globalCode = '' var dataManage = function() { window.location.href = 'storage' } var hidePass = function() { $("#prjpass").attr("hidden", "hidden"); $("#prjpass_hidden").removeAttr("hidden"); } var showPass = function() { $("#prjpass_hidden").attr("hidden", "hidden"); $("#prjpass").removeAttr("hidden"); } function edit_project(prjName, prjType) { var projectName = prjName var content = $("
") content.append("
"); content.append($("

" + JSLang[lang].modify + "'" + projectName + "'

")) var form = $("
"); content.append(form) var change_project_button = $('' + JSLang[lang].rename + '') change_project_button.click(function() { var content = $("
") content.append("
"); content.append($("

" + JSLang[lang].renamePrj + "

")) var form = $(""); content.append(form) var formDiv = $("
") form.append(formDiv) var formGrp = $("
") formDiv.append(formGrp) var prjName = $(""); prjName.val(projectName) formGrp.append(prjName) var btDiv = $("
") var innerBtDiv = $("
") form.append(btDiv) btDiv.append(innerBtDiv) var submitBt = $("") var cancelBt = $("") innerBtDiv.append(submitBt) innerBtDiv.append(cancelBt) submitBt.click(function() { if (prjName.val().length < 3 || prjName.val().length > 10) { showtext(JSLang[lang].lengthRes) } else { submitBt.attr("disabled", "disabled") $.getJSON('renameProject', { 'oldProjectName': projectName, 'newProjectName': prjName.val() }, function(res) { if (res == 1) { window.location.href = "projects" } else { submitBt.removeAttr("disabled") showtext(JSLang[lang].prjExist) } }) } }); var d = dialog({ 'content': content[0] }) cancelBt.click(function() { d.close().remove() }) d.showModal(); }) var copy_project_button = $('' + JSLang[lang].copy + '') copy_project_button.click(function() { var content = $("
") content.append("
"); content.append($("

" + JSLang[lang].copyName + "

")) var form = $(""); content.append(form) var formDiv = $("
") form.append(formDiv) var formGrp = $("
") formDiv.append(formGrp) var prjName = $(""); prjName.val(projectName) formGrp.append(prjName) var btDiv = $("
") var innerBtDiv = $("
") form.append(btDiv) btDiv.append(innerBtDiv) var submitBt = $("") var cancelBt = $("") innerBtDiv.append(submitBt) innerBtDiv.append(cancelBt) submitBt.click(function() { if (prjName.val().length < 3 || prjName.val().length > 10) { showtext(JSLang[lang].lengthRes) } else { submitBt.attr("disabled", "disabled") $.getJSON('copyProject', { 'oldProjectName': projectName, 'newProjectName': prjName.val() }, function(res) { if (res == 1) { window.location.href = "projects" } else if (res == 2) { submitBt.removeAttr("disabled") showtext(JSLang[lang].prjExist) } else { submitBt.removeAttr("disabled") showtext(JSLang[lang].prjOverflow) } }) } }); var d = dialog({ 'content': content[0] }) cancelBt.click(function() { d.close().remove() }) d.showModal(); }) var share_project_button = $('' + JSLang[lang].share + '') share_project_button.click(function() { var content = $("
") content.append("
"); var ttl = $("

" + JSLang[lang].share + "

") content.append(ttl) var submitBt = $("") var cancelBt = $("") var ctt = $("

" + JSLang[lang].shareConfirm + "

") content.append(ctt) var resDiv = $("
") content.append(resDiv) var btDiv = $("
") var innerBtDiv = $("
") content.append(btDiv) btDiv.append(innerBtDiv) innerBtDiv.append(submitBt) innerBtDiv.append(cancelBt) submitBt.click(function() { var modald = showmodaltext("

" + JSLang[lang].loading + "

") $.get('share', { 'projectName': projectName }, function(res) { var link = window.location.href.split('/') link.pop() link.push("observe?sid=" + res) link = link.join('/') ttl.html(JSLang[lang].shareSuccess) ctt.remove() resDiv.append($("" + JSLang[lang].aucode + "")) resDiv.append($("" + res + "")) resDiv.append($("" + JSLang[lang].guestURL + "")) resDiv.append($("" + link + "")) var qrCode = $("
") resDiv.append(qrCode) new QRCode(qrCode[0], { text: link, width: 100, height: 100, colorDark: "#000000", colorLight: "#ffffff", correctLevel: QRCode.CorrectLevel.M }) modald.close().remove() submitBt.attr("hidden", "hidden") cancelBt.css("margin-right", "0") }) }); var d = dialog({ 'content': content[0] }) cancelBt.click(function() { d.close().remove() }) d.showModal(); }) var delete_project_button = $('' + JSLang[lang].delete + '') delete_project_button.click(function() { delete_project(projectName) }) form.append(change_project_button) form.append(copy_project_button) form.append(share_project_button) form.append(delete_project_button) var btDiv = $("
") var innerBtDiv = $("
") form.append(btDiv) btDiv.append(innerBtDiv) var cancelBt = $("") innerBtDiv.append(cancelBt) var d = dialog({ 'content': content[0] }) cancelBt.click(function() { d.close().remove() }) d.showModal(); } async function run_project() { if ((typeof Notification) != "undefined") Notification.requestPermission(); isRunning = true $(".facial").attr("hidden", "hidden") try { var logicFunction = Function(globalCode); if(globalCode!="") { await init_codemirror(); logicFunction() } } catch (e) { MixIO.log(e) showtext(JSLang[lang].logicError) isRunning = false; return false; } $("#grid").removeClass("gridbg") $("#grid").children(".item").addClass("itemrun") $("#grid").children(".item").draggable({ disabled: true }) $("#grid").children(".item").resizable({ disabled: true }) $("#grid").children(".item").removeClass("moveDiv") $("#top_right_button_1").attr("hidden", "hidden") $("#top_right_button_2_1").attr("hidden", "hidden") $("#top_right_button_2_2").removeAttr("hidden") } function stop_project() { isRunning = false $(".facial").removeAttr("hidden") $("#grid").addClass("gridbg") $("#grid").children(".item").removeClass("itemrun") $("#grid").children(".item").draggable({ disabled: false }) $("#grid").children(".item").resizable({ disabled: false }) $("#grid").children(".item").addClass("moveDiv") if (globalProjectType == PROJ_MODE) $("#top_right_button_1").removeAttr("hidden") $("#top_right_button_2_1").removeAttr("hidden") $("#top_right_button_2_2").attr("hidden", "hidden") MixIO.safe_pause() } function view_module() { showtext(JSLang[lang].blocklyDev) /* isCode = false; switch_mode() */ } function view_code() { isCode = true; switch_mode() } function prev_page() { if (currentPage >= 1) { currentPage = currentPage - 1 get_projects(currentPage) } } function next_page() { if (currentPage <= pageCount - 2) { currentPage = currentPage + 1 get_projects(currentPage) } } function get_projects(page) { var modald = showmodaltext("

" + JSLang[lang].loading + "

") $("#prjmr").empty() $.getJSON('getProjects', { page: page }, function(res) { console.log(res) if (res == -1) window.location.href = '/logout' var count = 0; $("#prj_num").html(res['count'] + " / " + MAX_PROJECT_NUM_PER_USER) $("#prj_num_bar").attr("aria-valuenow", res['count']) $("#prj_num_bar").css("width", (res['count'] * 100 / MAX_PROJECT_NUM_PER_USER) + "%") pageCount = Math.ceil(res['count'] / 8); $("#page_count").html(currentPage + 1 + " / " + pageCount); $("#prev_page").removeClass("disabled") $("#prev_page").removeAttr("disabled") $("#next_page").removeClass("disabled") $("#next_page").removeAttr("disabled") if (currentPage == 0) { $("#prev_page").addClass("disabled") $("#prev_page").attr("disabled", "disabled") } if (currentPage + 1 == pageCount) { $("#next_page").addClass("disabled") $("#next_page").attr("disabled", "disabled") } delete res['count'] res = res['rows'] for (item in res) { if (res[item]['userName'][0] == '@') { $("#top_right_button_0").attr("hidden", "hidden") $("#top_right_button_-1").attr("hidden", "hidden") $("#share_app").remove() view_project('default', 0) $("#sidebarToggleTop").remove() $("#top_back_button").remove() $("#title_phase1").parent().remove() $("#title_phase2").html(JSLang[lang].prjManage) $("#title_phase2").css("font-weight", 400) $("#title_phase2").css("margin-left", "10px") isMixly = true $("#top_exit_button").removeAttr("hidden") break } try { add_prjblock(res[item]['projectName'], res[item]['projectLayout'], res[item]['timestamp'], res[item]['projectType'], res[item]['isTask']) count = count + 1 } catch (e) { console.log(res[item]) console.log(e) } } modald.close().remove() if (count == 0 && !isMixly) add_project() }) } function sync_connect_status() { var contentDiv = $("
") var emqx_connection_div = $("
") if (connected == 0) { var emqx_connection_icon = $("") var emqx_connection_descrp = $("" + JSLang[lang].connected + "") $("#connect_span").css("color", "#1cc88a") $("#connect_span").html("" + connected_hardwares.length + JSLang[lang].connectCount) } else if (connected == 1) { var emqx_connection_icon = $("") var emqx_connection_descrp = $("" + JSLang[lang].connecting + "") $("#connect_span").css("color", "#858796") $("#connect_span").html("" + JSLang[lang].connecting) } else if (connected == 2) { var emqx_connection_icon = $("") var emqx_connection_descrp = $("" + JSLang[lang].disconnected + "") $("#connect_span").css("color", "#858796") $("#connect_span").html("" + JSLang[lang].disconnected) } if (connected == 0) { emqx_connection_div.append(emqx_connection_icon) emqx_connection_div.append(emqx_connection_descrp) var hardware_connection_div = $("
") var hardware_connection_icon = $("") var hardware_connection_descrp = $("" + connected_hardwares.length + JSLang[lang].connectCount + "") hardware_connection_div.append(hardware_connection_icon) hardware_connection_div.append(hardware_connection_descrp) for (hardware in connected_hardwares) { //Modified var iconName = "microchip" if(connected_hardwares[hardware].indexOf("wechat_")!=-1) iconName = "wechat" var hardName = $("

" + "" + connected_hardwares[hardware] + "

") contentDiv.append(hardName) } contentDiv.append("

私有凭证 Private Key

") contentDiv.append("

" + globalUserName + "

") contentDiv.append("

" + globalProjectPass + "

") contentDiv.append("
项目授权码 Share KeyOFF
") sharekey = $("") contentDiv.append(sharekey) contentDiv.append("

共享链接 Share Link

") sharelink = $("") // hover sharelink, show QR code sharelink.hover(function() { var qrCode = $("
") // let it show over the sharelink qrCode.css("position", "absolute") qrCode.css("left", "calc(50% - 25px)") qrCode.css("top", "100%") $(this).append(qrCode) // set width and height to 0 to avoid the QR code being too large new QRCode(qrCode[0], { text: $(this).attr("href") }) }, function() { $(this).children("div").remove() }) contentDiv.append(sharelink) } var cancelDiv = $("
") var cancelBt = $("") cancelBt.click(function() { connectStatusDia.close() }) cancelDiv.append(cancelBt) contentDiv.append(cancelDiv) connectStatusDia.content(contentDiv[0]) if (connectStatusDia.open) check_share_key() } function check_share_key() { if (typeof globalShareKey == 'undefined') { $("#shareKey").addClass('btn-secondary') $("#shareKey").removeClass('btn-success') $("#shareKey").html("OFF") sharekey.html("") sharelink.html("项目未共享授权") sharelink.removeAttr("href") sharelink.css("color","#858796") } else { $("#shareKey").removeClass('btn-secondary') $("#shareKey").addClass('btn-success') $("#shareKey").html("ON") sharekey.html(globalShareKey) sharelink.html(window.location.href.split("/")[0]+"//"+window.location.host + "/observe?sid=" + globalShareKey) sharelink.attr("href", window.location.href.split("/")[0]+"//"+window.location.host + "/observe?sid=" + globalShareKey) sharelink.css("color","#1cc88a") } } function shareKey() { if ($("#shareKey").html() == "OFF") { var modald = showmodaltext("

" + JSLang[lang].loading + "

") $.get('addShareKey', { 'projectName': globalProjectName, 'projectPass': globalProjectPass }, function(res) { if (res.length == 6) { $("#shareKey").removeClass('btn-secondary') $("#shareKey").addClass('btn-success') $("#shareKey").html("ON") sharekey.html(res) globalShareKey = res sharelink.html("http://"+window.location.host + "/observe?sid=" + globalShareKey) sharelink.attr("href", "http://"+window.location.host + "/observe?sid=" + globalShareKey) sharelink.css("color","#1cc88a") } else showtext(res) modald.close().remove() }) } else { var modald = showmodaltext("

" + JSLang[lang].loading + "

") $.get('removeShareKey', { 'shareid': globalShareKey }, function(res) { if (res == 1) { $("#shareKey").addClass('btn-secondary') $("#shareKey").removeClass('btn-success') $("#shareKey").html("OFF") sharekey.html("") globalShareKey = undefined sharelink.html("项目未共享授权") sharelink.removeAttr("href") sharelink.css("color","#858796") } else showtext(res) modald.close().remove() }) } } function switch_mode() { grid.on("contextmenu", function(e) { e.preventDefault() }) grid.removeAttr("hidden") grid2.removeAttr("hidden") grid3.removeAttr("hidden") if (globalProjectType == DATA_MODE) { $("#projMode").removeClass("btn-primary") $("#projMode").addClass("btn-light") $("#projMode").css("color", "#4e73df") $("#logicMode").removeClass("btn-primary") $("#logicMode").addClass("btn-light") $("#logicMode").css("color", "#4e73df") $("#dataMode").removeClass("btn-light") $("#dataMode").addClass("btn-primary") $("#dataMode").css("color", "#fff") grid.css("height", 0) grid2.css("height", "calc(100vh - 4.375rem)") grid3.css("height", 0) $("#top_right_button_1").attr("hidden", "hidden") $("#top_right_button_2_1").attr("hidden", "hidden") $("#top_right_button_2_2").attr("hidden", "hidden") $("#top_right_button_1_" + (isCode ? 2 : 3)).attr("hidden", "hidden") } else if (globalProjectType == PROJ_MODE) { $("#dataMode").removeClass("btn-primary") $("#dataMode").addClass("btn-light") $("#dataMode").css("color", "#4e73df") $("#logicMode").removeClass("btn-primary") $("#logicMode").addClass("btn-light") $("#logicMode").css("color", "#4e73df") $("#projMode").removeClass("btn-light") $("#projMode").addClass("btn-primary") $("#projMode").css("color", "#fff") grid2.css("height", 0) grid.css("height", "calc(100vh - 4.375rem)") grid3.css("height", 0) if (!isRunning) $("#top_right_button_1").removeAttr("hidden") if (isRunning) { $("#top_right_button_2_2").removeAttr("hidden") $("#top_right_button_2_1").attr("hidden", "hidden") } else { $("#top_right_button_2_1").removeAttr("hidden") $("#top_right_button_2_2").attr("hidden", "hidden") } $("#top_right_button_1_" + (isCode ? 2 : 3)).attr("hidden", "hidden") } else if (globalProjectType == LOGIC_MODE) { $("#dataMode").removeClass("btn-primary") $("#dataMode").addClass("btn-light") $("#dataMode").css("color", "#4e73df") $("#projMode").removeClass("btn-primary") $("#projMode").addClass("btn-light") $("#projMode").css("color", "#4e73df") $("#logicMode").removeClass("btn-light") $("#logicMode").addClass("btn-primary") $("#logicMode").css("color", "#fff") grid2.css("height", 0) grid3.css("height", "calc(100vh - 4.375rem)") grid.css("height", 0) $("#top_right_button_1").attr("hidden", "hidden") if (isRunning) { $("#top_right_button_2_2").removeAttr("hidden") $("#top_right_button_2_1").attr("hidden", "hidden") } else { $("#top_right_button_2_1").removeAttr("hidden") $("#top_right_button_2_2").attr("hidden", "hidden") } $("#top_right_button_1_" + (isCode ? 2 : 3)).removeAttr("hidden") $("#top_right_button_1_" + (isCode ? 3 : 2)).attr("hidden", "hidden") } } function workspaceToDom() { globalXML = stringendecoder.encodeHtml(Blockly.Xml.domToText(Blockly.Xml.workspaceToDom(workspace))) } function view_project(projectName, projectType) { init_codemirror = function() { return new Promise(function(resolve, reject) { var modald = showmodaltext("

加载逻辑引擎...

") $.getScript("js/codemirror.min.js", function(){ $.getScript("blockly/blockly_compressed.js", function() { $.getScript("blockly/blocks_compressed.js", function() { $.getScript("blockly/javascript_compressed.js", function() { $.getScript("blockly/iot/IOT_Blocks.js?v=1", function() { var currentProjectType = globalProjectType globalProjectType = LOGIC_MODE switch_mode() if (!grid3.children()[0]) { Blockly.registry.register( Blockly.registry.Type.TOOLBOX_ITEM, Blockly.ToolboxCategory.registrationName, CustomCategory, true); var mainDiv = $("
") grid3.append(mainDiv) var leftDiv = $("
") leftDiv.css("width", mainDiv.width() / 7 * 4 + "px") mainDiv.append(leftDiv) workspace = Blockly.inject('block', { toolbox: document.getElementById('toolbox'), media: 'blockly/media/', zoom: { controls: true, wheel: true, startScale: 0.75, maxScale: 4, minScale: 0.25, scaleSpeed: 1.1 }, }); var toJS = function() { MixIO.triggersToPreCode() MixIO.editor.setValue(MixIO.preCode + Blockly.JavaScript.workspaceToCode(workspace)) } function ast(event) { toJS() workspaceToDom() } workspace.addChangeListener(ast); var rightDiv = $("
") rightDiv.css("width", mainDiv.width() / 7 * 3 + "px") mainDiv.append(rightDiv) leftDiv.resizable({ handles: "w,e", onResize: function() { MixIO.editor.setSize((mainDiv.width() - leftDiv.width()) + "px", '50%') rightDiv.css("width", (mainDiv.width() - leftDiv.width()) + "px") Blockly.svgResize(workspace); }, onStopResize: function() { MixIO.editor.setSize((mainDiv.width() - leftDiv.width()) + "px", '50%') rightDiv.css("width", (mainDiv.width() - leftDiv.width()) + "px") } }) window.addEventListener('resize', function() { MixIO.editor.setSize((mainDiv.width() - leftDiv.width()) + "px", '50%') rightDiv.css("width", (mainDiv.width() - leftDiv.width()) + "px") Blockly.svgResize(workspace); }) var jTa = $("") rightDiv.append(jTa) if (globalXML != "") { Blockly.Xml.domToWorkspace(Blockly.Xml.textToDom(stringendecoder.decodeHtml(globalXML).replaceAll("&", "&")), workspace); } MixIO.editor = CodeMirror.fromTextArea(jTa[0], { mode: "text/javascript", lineNumbers: true, matchBrackets: true, hintOptions: { completeSingle: false } }); MixIO.editor.on("inputRead", function(instance, changeObj) { if (isRunning) { showtext(JSLang[lang].pauseBeforeModify) } if (/^[a-zA-Z]/.test(changeObj.text[0])) { var words = MixIO.editor.getValue() + ""; words = words.replace(/[a-z]+[\-|\']+[a-z]+/ig, '').match(/([a-z]+)/ig); CodeMirror.ukeys = words; MixIO.editor.showHint(); } }); MixIO.editor.on('change', function() { globalCode = MixIO.editor.getValue() }) MixIO.editor.setSize('100%', '50%') MixIO.editor.setValue(globalCode) MixIO.editor.setCursor(MixIO.editor.lineCount(), 0); var jTa2Div = $("
") jTa2Div.append($('

' + JSLang[lang].console + '

')) var jTa2 = $("
") jTa2Div.append(jTa2) rightDiv.append(jTa2Div) $("#console_icon").click(function() { if (typeof globalConsoleStyle == "undefined") { $("#console_icon").removeClass("fa-unlock") $("#console_icon").addClass("fa-lock") globalConsoleStyle = jTa2Div.attr("style") $("body").append(jTa2Div) jTa2Div.css("z-index", 999) jTa2Div.draggable({ disabled: false }) jTa2Div.resizable({ disabled: false }) jTa2Div.css("border", "solid black 1px") jTa2Div.css("position", "absolute") jTa2Div.css("left", "20px") jTa2Div.css("top", "20px") MixIO.editor.setSize((mainDiv.width() - leftDiv.width()) + "px", '100%') } else { jTa2Div.attr("style", globalConsoleStyle) $("#console_icon").addClass("fa-unlock") $("#console_icon").removeClass("fa-lock") rightDiv.append(jTa2Div) jTa2Div.draggable({ disabled: true }) jTa2Div.resizable({ disabled: true }) MixIO.editor.setSize((mainDiv.width() - leftDiv.width()) + "px", '50%') globalConsoleStyle = undefined } }) MixIO.log = function(text) { if(typeof text == "object") text = JSON.stringify(text) if (jTa2.html()) jTa2.html(jTa2.html() + '
' + '[' + timeStamp2String().substring(11) + '] ' + text) else jTa2.html(jTa2.html() + '[' + timeStamp2String().substring(11) + '] ' + text) jTa2.scrollTop(jTa2[0].scrollHeight) } MixIO.log("Version: " + globalVer) MixIO.log("入门指南:dev-api") } globalProjectType = currentProjectType switch_mode() modald.close().remove() resolve(); },true); }, true); }, true); }, true); }, true); }) } var modald = showmodaltext("

" + JSLang[lang].downloading + "

") $.post('getProject', { 'projectName': projectName }, function(res) { console.log(JSON.parse(res)) modald.close().remove() if (res == 0) { showtext(JSLang[lang].prj404) } else { $("#title_phase1").parent().remove() $("#accordionSidebar").remove() $("#sidebarToggleTop").remove() $("#connect_span").removeAttr("hidden") $("#storage_space").removeAttr("hidden") init_layout() $("#projMode").click(function() { if (globalProjectType != PROJ_MODE) { globalProjectType = PROJ_MODE switch_mode() } $(".blocklyHtmlInput").attr("hidden", "hidden") }) $("#dataMode").click(function() { $(".blocklyHtmlInput").attr("hidden", "hidden") if (globalProjectType != DATA_MODE) { $("#data_icon").removeClass("fa-table") $("#data_icon").addClass("fa-spin") $("#data_icon").addClass("fa-spinner") setTimeout(function() { var time1 = new Date() globalProjectType = DATA_MODE switch_mode() init_table() chart.resize() var time2 = new Date() $("#data_icon").addClass("fa-table") $("#data_icon").removeClass("fa-spin") $("#data_icon").removeClass("fa-spinner") if (time2 - time1 > 1000) showtext(JSLang[lang].slow + "(" + (time2 - time1) + "ms)" + JSLang[lang].remindClear) }, 50) } }) $("#logicMode").click(function() { if (globalProjectType != LOGIC_MODE) { globalProjectType = LOGIC_MODE switch_mode() init_codemirror().then(function() { MixIO.triggersToPreCode() MixIO.editor.setValue(MixIO.preCode + Blockly.JavaScript.workspaceToCode(workspace)) }) } $(".blocklySvg").attr("height", "100%") $(".blocklyHtmlInput").removeAttr("hidden") }) $("#bottom_2").removeAttr("hidden") var prevLogic = JSON.parse(res)['logicStorage'] if (prevLogic) { globalCode = stringendecoder.decodeHtml(JSON.parse(prevLogic)['code']) globalXML = stringendecoder.decodeHtml(JSON.parse(prevLogic)['module']) } globalProjectName = projectName globalProjectType = projectType switch_mode() connectStatusDia = dialog({ content: '' }); $("#project_list").css("display", "none") $("#project_list").remove() $("#project_detail").css("display", "") $("#top_right_button_0").attr("hidden", "hidden") $("#top_right_button_-1").attr("hidden", "hidden") $("#top_right_button_3").removeAttr("hidden") $("#top_back_button").removeAttr("hidden") $("#title_phase1").attr("class", "d-none d-sm-inline-block h3 mb-0 text-gray-800") if (!isMixly) $("#title_phase2").text(projectName) var resJSON = JSON.parse(JSON.parse(res)['projectLayout']) var userName = JSON.parse(res)['userName'] var history = JSON.parse(res).history var hisDiv = $("
") var hisP = $("

" + JSLang[lang].duringOff + history.length + JSLang[lang].messageRem + "

") hisDiv.append(hisP) var hisD = $("
") var hisT = $("
") hisD.append(hisT) hisT.append($('' + JSLang[lang].topic + '' + JSLang[lang].message + '' + JSLang[lang].time + '')) hisDiv.append(hisD) for (hisItem in history) { var topic = history[hisItem].topicName; var msg = history[hisItem].msg; var timeStamp = history[hisItem].timeStamp; hisT.append($('' + topic + '' + msg + '' + timeStamp + '')) } var hisButDiv = $('
') var hisBut = $('') hisButDiv.append(hisBut) hisDiv.append(hisButDiv) var d = dialog({ content: hisDiv[0] }) hisBut.click(function() { d.close().remove() }) if (history.length > 0) d.showModal() globalUserName = userName var projectPass = JSON.parse(res)['projectPass'] globalProjectPass = projectPass randomClientID = (IsPC() ? 'MixIO_' : "mixio_") + Math.random().toString(16).substr(2, 8) if (isMixly) { keyName = userName.slice(1) userName = 'MixIO_public' } client = mqtt.connect((location.protocol == 'https:' ? 'wss://' : 'ws://') + window.location.host.split(":")[0] + ":" + (location.protocol == 'https:' ? MIXIO_WSS_PORT : MIXIO_WS_PORT), { 'clientId': randomClientID, 'username': userName, 'password': projectPass, 'will': { 'topic': globalUserName + '/' + globalProjectName + '/' + '9d634e1a156dc0c1611eb4c3cff57276', 'payload': randomClientID, 'qos': 0 } }) client.on('connect', function() { publish('b640a0ce465fa2a4150c36b305c1c11b', randomClientID, true) connected = 0 var tempdevices = [] var tmpclients = [] if (!isMixly) $.getJSON('getDevices', { 'userName': userName }, function(res) { var devices = res console.log(devices) for (device in devices) { if (devices[device].clientid.indexOf("mixio_") == -1 && devices[device].clientid.indexOf("MixIO_") == -1 && devices[device].clientid.indexOf('OBGuest_') == -1) tempdevices.push(devices[device].clientid) else if (devices[device].clientid.indexOf("mixio_") != -1 || devices[device].clientid.indexOf("MixIO_") != -1) tmpclients.push(devices[device].clientid) } connected_hardwares = tempdevices connected_devices = tmpclients sync_connect_status() //check_link() }) else { $("#title_phase2").css("margin-left", "0") $("#connect_span").css("color", "#1cc88a") $("#connect_span").html("" + JSLang[lang].connected) } }) client.on('close', function() { publish('9d634e1a156dc0c1611eb4c3cff57276', randomClientID, true) }) setTimeout(function() { if (connected != SERVER_CONNECTED) { connected = SERVER_DISCONNECTED $("#title_phase2").css("margin-left", "0") $("#connect_span").css("color", "#e74a3b") $("#connect_span").html("" + JSLang[lang].disconnected) } }, 20000) client.on('message', function(topic1, message1) { isChanged = true var convertedMessage = Uint8ArrayToString(message1) if (topic1.split('/')[2] == 'b640a0ce465fa2a4150c36b305c1c11b' || (topic1.split('/').length == 4 && isMixly && topic1.split('/')[3] == 'b640a0ce465fa2a4150c36b305c1c11b')) { console.log(convertedMessage) if (convertedMessage.indexOf('MixIO_') == -1 && convertedMessage.indexOf('mixio_') == -1) { if (connected_hardwares.indexOf(convertedMessage) == -1) { connected_hardwares.push(convertedMessage) } sync_connect_status() } } else if (topic1.split('/')[2] == '9d634e1a156dc0c1611eb4c3cff57276' || (topic1.split('/').length == 4 && isMixly && topic1.split('/')[3] == '9d634e1a156dc0c1611eb4c3cff57276')) { if (convertedMessage.indexOf('MixIO_') == -1 && convertedMessage.indexOf('mixio_') == -1) { if (connected_hardwares.indexOf(convertedMessage) != -1) { connected_hardwares.splice(connected_hardwares.indexOf(convertedMessage), 1) } sync_connect_status() } } else if (topic1.split('/').length == 3 && !isMixly) { var tp = stringendecoder.encodeHtml(topic1.split('/')[2]) var ms = message1.toString() if(ms.length>500) ms = "[Too long to display]" if(isJSON(ms)) { var msJSON = JSON.parse(ms) if(("clientid" in msJSON)&&("long" in msJSON)&&("lat" in msJSON)&&("message" in msJSON)) { var newJSON = {} var clientid = String(msJSON["clientid"]).split('b\'').pop().split('\'')[0] newJSON["clientid"] = clientid newJSON["long"] = msJSON["long"] newJSON["lat"] = msJSON["lat"] var msg = msJSON["message"] if(typeof msg == "string") msg = JSON.parse(msg) for(item of msg) { newJSON[item["label"]] = item["value"] } ms = JSON.stringify(newJSON) } } if (globalTableProjectInfo.received[tp]) { globalTableProjectInfo.received[tp].unshift({ '时间': timeStamp2String(), '值': stringendecoder.encodeHtml(ms) }) } else { for(topicSelect of topicSelects) topicSelect.append($("")) globalTableProjectInfo.received[tp] = [] globalTableProjectInfo.received[tp].unshift({ '时间': timeStamp2String(), '值': stringendecoder.encodeHtml(ms) }) } if (globalTableProjectInfo.currentTp == '$') { globalTableProjectInfo.currentTp = tp topicSelect.val(stringendecoder.decodeHtml(tp)) } if (globalTableProjectInfo.currentTp == tp) { fresh(true) } else { for(topic = 0; topic<= globalTableProjectInfo.currentTp.split(',,').length; topic = topic + 1) { if(tp == globalTableProjectInfo.currentTp.split(',,')[topic]) { fresh(true) break } } } } else if (topic1.split('/').length == 4 && isMixly) { var tp = stringendecoder.encodeHtml(topic1.split('/')[3]) var ms = message1.toString() if(ms.length>500) ms = "[Too long to display]" if(isJSON(ms)) { var msJSON = JSON.parse(ms) if(("clientid" in msJSON)&&("long" in msJSON)&&("lat" in msJSON)&&("message" in msJSON)) { var newJSON = {} var clientid = msJSON["clientid"] newJSON[clientid+"-"+"long"] = msJSON["long"] newJSON[clientid+"-"+"lat"] = msJSON["lat"] var msg = msJSON["message"] if(typeof msg == "string") msg = JSON.parse(msg) for(item of msg) { newJSON[clientid+"-"+item["label"]] = item["value"] } ms = JSON.stringify(newJSON) } } if (globalTableProjectInfo.received[tp]) { globalTableProjectInfo.received[tp].unshift({ '时间': timeStamp2String(), '值': stringendecoder.encodeHtml(ms) }) } else { for(topicSelect of topicSelects) topicSelect.append($("")) globalTableProjectInfo.received[tp] = [] globalTableProjectInfo.received[tp].unshift({ '时间': timeStamp2String(), '值': stringendecoder.encodeHtml(ms) }) } if (globalTableProjectInfo.currentTp == '$') { globalTableProjectInfo.currentTp = tp topicSelect.val(stringendecoder.decodeHtml(tp)) } if (globalTableProjectInfo.currentTp == tp) { fresh(true) } else { for(topic = 0; topic<= globalTableProjectInfo.currentTp.split(',,').length; topic = topic + 1) { if(tp == globalTableProjectInfo.currentTp.split(',,')[topic]) { fresh(true) break } } } } }) if (!isMixly) { client.subscribe(globalUserName + '/' + globalProjectName + '/#') } else { client.subscribe('MixIO' + '/' + keyName + '/' + globalProjectName + '/#') } var prev_layout = stringendecoder.decodeHtml(resJSON.layout_info) var units_array = $(prev_layout) for (var ct = 0; ct <= units_array.length - 1; ct = ct + 1) { var un = $(units_array[ct]) var titleHidden = un.attr('title-hidden') // if no title-hidden attribute, set it to false if (titleHidden == undefined) titleHidden = false if (titleHidden == "true") titleHidden = true if (titleHidden == "false") titleHidden = false toolkits = { 'input_button': add_button, 'input_slider': add_slider, 'input_keyboard': add_keyboard, 'input_controller': add_controller, 'input_rgb': add_rgb, 'output_bulb': add_bulb, 'output_text': add_text, 'output_chart': add_chart, 'output_bar': add_bar, 'output_dashboard': add_dashboard, 'output_map': add_map, 'input_weather': add_weather, 'trigger': add_trigger, 'magic': add_magic, 'pixel': add_pixel, 'table': add_table, 'decorate_text': add_decorate_text, 'decorate_pic': add_decorate_pic, 'timer': add_timer, 'ble': add_ble, 'camera': add_camera, 'face': add_face, 'ocr': add_ocr, 'qr':add_qr, 'input_mic': add_mic, 'tinydb': add_tinydb, } toolkits[un.attr('user-type')](un.attr('user-title'), un.attr('user-topic'), un.attr('user-content'), un.attr('style'), titleHidden) } var topicOuterDiv = $("
") var topicDiv = $("
") var topicSelect = $("") var topicSelects = [] topicSelects.push(topicSelect) topicDiv.append($("" + JSLang[lang].listener + " ")) topicSelect.append($("")) fresh = function(clear){ if(!clear) chart.clear() var tmpArr = [] for(var i=0;i1) { var allTime = [] for(var i=0;i') topicDiv.append(addTopicButton) var addBind = function(){ var newtopicSelect = $("") newtopicSelect.append($("")) for (var tp in globalTableProjectInfo.received) { newtopicSelect.append($("")) } topicSelects.push(newtopicSelect) var tempTitle = $("" + JSLang[lang].listener + " ") var removeTopicButton = $('') addTopicButton.after(removeTopicButton) addTopicButton.after(newtopicSelect) addTopicButton.after(tempTitle) removeTopicButton.bind('click',function(){ newtopicSelect.remove() removeTopicButton.remove() tempTitle.remove() var index = topicSelects.indexOf(newtopicSelect) topicSelects.splice(index,1) fresh() }) newtopicSelect.bind('change', function() { fresh() }) } addTopicButton.bind('click', function() { addBind() }) topicOuterDiv.append(topicDiv) grid2.append(topicOuterDiv) var row = $("
") grid2.append(row) var leftDiv = $("
") var rightDiv = $("
") row.append(leftDiv) row.append(rightDiv) var leftCard = $('
') var rightCard = $('
') leftDiv.append(leftCard) rightDiv.append(rightCard) var leftCardTitle = $('
') var rightCardTitle = $('
') leftCard.append(leftCardTitle) rightCard.append(rightCardTitle) leftCardTitle.append($('
' + JSLang[lang].monitor + '
')) var httpAPIButton = $('' + "HTTP API" + '') var downloadButton = $('' + JSLang[lang].download + '') var clearButton = $('' + JSLang[lang].clear + '') var clearAllButton = $('' + JSLang[lang].clearAll + '') httpAPIButton.click(function() { var text = "URL: " + window.location.href.replace("projects-mixly", "").replace("projects", "") + "api/v1/getData?user=" + globalUserName + "&password=" + globalProjectPass + "&project=" + globalProjectName + "&topic=" + "[想要获取的主题]" + "&num=" + "[想要获取的最新消息数量]" var text = "Method: GET
" + text var text = text + "
" + "一般情况下,数据更新频率为30秒/次,手动保存项目会立即更新数据。" // dialog, 自动换行 var text = "
" + text + "
" var dia = dialog({ title: "通过HTTP API获取数据", content: text, okValue: JSLang[lang].close, ok: function() { dia.close().remove() } }) dia.showModal() }) clearAllButton.click(function() { isChanged = true if (globalTableProjectInfo.currentTp != "$") { if (globalTableProjectInfo.currentTp.split(",,").length == 1) delete globalTableProjectInfo.received[globalTableProjectInfo.currentTp] else { var temp = globalTableProjectInfo.currentTp.split(",,") for (var i in temp) { if(temp[i] != "$") delete globalTableProjectInfo.received[temp[i]] } } for(var i in topicSelects) { topicSelects[i].val('$') if (globalTableProjectInfo.currentTp.split(",,").length == 1) topicSelects[i].children("[value='" + globalTableProjectInfo.currentTp + "']").remove() else { var temp = globalTableProjectInfo.currentTp.split(",,") for (var j in temp) { if(temp[j] != "$") topicSelects[i].children("[value='" + temp[j] + "']").remove() } } } globalTableProjectInfo.currentTp = '$' dataset = [] init_table() } }) leftCardTitle.append(httpAPIButton) leftCardTitle.append(downloadButton) leftCardTitle.append(clearButton) leftCardTitle.append(clearAllButton) clearButton.click(function() { isChanged = true if (globalTableProjectInfo.currentTp.split(",,").length == 1) globalTableProjectInfo.received[globalTableProjectInfo.currentTp] = [] else { var temp = globalTableProjectInfo.currentTp.split(",,") for (var i in temp) { if(temp[i] != "$") globalTableProjectInfo.received[temp[i]] = [] } } fresh() }) var sync_export = function() { var fields = globalTable.data().JSGrid.fields var data = globalTable.data().JSGrid.data var names = [] for (field in fields) { names.push(fields[field].name) } var str = names.join(',') + "\n" for (row in data) { for (rname in names) { if (data[row][names[rname]]) str = str + stringendecoder.decodeHtml(data[row][names[rname]]) + "," else str = str + "," } str = str + "\n" } downloadButton.attr("href", "data:text/csv;charset=utf-8,\ufeff" + encodeURIComponent(str)) } rightCardTitle.append($('
' + JSLang[lang].rtchart + '
')) // 两个select, 分别是rightCardGroup和rightCardLabel,显示按rightCardGroup分组显示rightCardLabel的数据 rightCardGroup = $('') rightCardLabel = $('') // on change rightCardLabel.bind('change', function() { fresh() } ) rightCardGroup.bind('change', function() { // 如果值不为空 fresh() if (rightCardGroup.val()) { // 把rightCardLabel的options清空,改为rightCardGroup的options(除了选中的) rightCardLabel.removeAttr("disabled") rightCardLabel.empty() var rightCardGroupChildren = rightCardGroup.children() for (var i = 0; i < rightCardGroupChildren.length; i++) { if (rightCardGroupChildren[i].value != rightCardGroup.val()) { if(rightCardGroupChildren[i].value == '') rightCardLabel.append($("")) else rightCardLabel.append($("")) } } } else{ rightCardLabel.empty() rightCardLabel.attr("disabled", "disabled") } }) var rightGroupDiv = $('
') rightGroupDiv.append("  按 ") rightGroupDiv.append(rightCardGroup) rightGroupDiv.append(" 分组显示 ") rightGroupDiv.append(rightCardLabel) rightCardTitle.append(rightGroupDiv) var leftCardBody = $('
') var rightCardBody = $('
') leftCard.append(leftCardBody) rightCard.append(rightCardBody) var leftCardBodyDiv = $('
') leftCardBody.append(leftCardBodyDiv) var rightCardBodyDiv = $('
') rightCardBody.append(rightCardBodyDiv) var topicOuterDiv2 = $("
") var topicDiv2 = $("
") var topicSelect2 = $("") topicDiv2.append($("" + JSLang[lang].sender + " ")) topicSelect2.bind('input', function() { globalTableProjectInfo.currentTp2 = stringendecoder.encodeHtml(topicSelect2.val()) }) globalTableProjectInfo.currentTp2 = '' topicDiv2.append(topicSelect2) var removeTopicButton2 = $('') topicDiv2.append(removeTopicButton2) removeTopicButton2.click(function() { topicSelect2.val("") globalTableProjectInfo.currentTp2 = "" }) topicOuterDiv2.append(topicDiv2) grid2.append(topicOuterDiv2) var dataset = [] chart = echarts.init(rightCardBodyDiv[0]) chart.setOption({ tooltip:{ trigger: "axis", formatter: function(params){ let str = ''; params.forEach((item, idx) => { str += "
" + `${item.marker}${item.seriesName}:   
${chart.getOption().series[item.seriesIndex].oriData[item.dataIndex]}` + "
" }) return str } } }) init_table = function() { var fields = ["时间"] for (dataitem in dataset) { if (isJSON(stringendecoder.decodeHtml(dataset[dataitem].值))) { var json_parsed = JSON.parse(stringendecoder.decodeHtml(dataset[dataitem].值)) for (key in json_parsed) { var alreadyHave = false for (field in fields) { if (fields[field] == key) { alreadyHave = true break } } if (!alreadyHave) fields.push(key) } } else { var alreadyHave = false for (field in fields) { if (fields[field] == '值') { alreadyHave = true break } } if (!alreadyHave) fields.push("值") } } var tableFields = [] for (field in fields) { let cvtName = fields[field] if (cvtName == "时间") cvtName = JSLang[lang].time else if (cvtName == "值") cvtName = JSLang[lang].value tableFields.push({ name: cvtName, type: 'text', align: 'center', itemTemplate: function(value, item) { return item[cvtName] } }) } var parsedDataset = [] for (dataitem in dataset) { if (lang == 'en') { if (dataset[dataitem].时间) { dataset[dataitem].time = dataset[dataitem].时间 delete dataset[dataitem].时间 dataset[dataitem].value = dataset[dataitem].值 delete dataset[dataitem].值 } } else if (lang == 'tw') { if (dataset[dataitem].时间) { dataset[dataitem].時間 = dataset[dataitem].时间 delete dataset[dataitem].时间 } } } for (dataitem in dataset) { if (isJSON(stringendecoder.decodeHtml(dataset[dataitem][JSLang[lang].value]))) { var json_parsed = JSON.parse(stringendecoder.decodeHtml(dataset[dataitem][JSLang[lang].value])) json_parsed[JSLang[lang].time] = dataset[dataitem][JSLang[lang].time] parsedDataset.push(json_parsed) } else { parsedDataset.push(dataset[dataitem]) } } globalTable = leftCardBodyDiv.jsGrid({ width: "100%", height: "100%", noDataContent: JSLang[lang].noData, data: parsedDataset, confirmDeleting: false, fields: tableFields, onItemDeleted: function() { setContent() }, onItemUpdated: function() { setContent() } }) var xAxis = { type: 'category', data: [] } var yAxis = { type: 'value' } var series = [] var last_group_options = [] for(child in rightCardGroup.children()) { if(rightCardGroup.children()[child].value) last_group_options.push(rightCardGroup.children()[child].value) } var isUpdateGroup = false var new_group_options = [] for (tableField in tableFields) { if (tableFields[tableField].name != JSLang[lang].time) { new_group_options.push(tableFields[tableField].name) } } // 判断是否需要更新group if(last_group_options.length != new_group_options.length) isUpdateGroup = true else { for(var i=0;i无")) rightCardGroup.removeAttr("disabled") rightCardLabel.attr("disabled","disabled") for (tableField in tableFields) { if (tableFields[tableField].name != JSLang[lang].time) { rightCardGroup.append($("")) } } } var isGrouping = false if(rightCardGroup.val() && rightCardLabel.val()) isGrouping = true if(isGrouping) { var groupBy = rightCardGroup.val() var valueUse = rightCardLabel.val() var allGroups = [] for (dataitem in dataset){ xAxis.data.unshift(dataset[dataitem][JSLang[lang].time].slice(11)) if(isJSON(stringendecoder.decodeHtml(dataset[dataitem][JSLang[lang].value]))) { var json_parsed = JSON.parse(stringendecoder.decodeHtml(dataset[dataitem][JSLang[lang].value])) if(json_parsed[groupBy] || json_parsed[groupBy] === 0 || json_parsed[groupBy] === false || json_parsed[groupBy] === "") { if(allGroups.indexOf(json_parsed[groupBy])==-1) allGroups.push(json_parsed[groupBy]) } } } for (group in allGroups) { var seriesData = [] var seriesOriData = [] for (dataitem in dataset) { if(isJSON(stringendecoder.decodeHtml(dataset[dataitem][JSLang[lang].value]))) { var json_parsed = JSON.parse(stringendecoder.decodeHtml(dataset[dataitem][JSLang[lang].value])) if(json_parsed[groupBy] == allGroups[group]) { if(json_parsed[valueUse] || json_parsed[valueUse] === 0 || json_parsed[valueUse] === false || json_parsed[valueUse] === "") { seriesData.unshift(parseFloat(json_parsed[valueUse])) seriesOriData.unshift(json_parsed[valueUse]) } else { seriesData.unshift(NaN) seriesOriData.unshift("-") } } else { seriesData.unshift(NaN) seriesOriData.unshift("-") } } } series.push({ type: 'line', name: allGroups[group], data: seriesData, oriData: seriesOriData, connectNulls: true }) console.log(series) } } else{ for (tableField in tableFields) { series.push({ type: 'line', name: tableFields[tableField].name, data: [], oriData:[], connectNulls: true }) } for (dataitem in dataset) { xAxis.data.unshift(dataset[dataitem][JSLang[lang].time].slice(11)) if (isJSON(stringendecoder.decodeHtml(dataset[dataitem][JSLang[lang].value]))) { var json_parsed = JSON.parse(stringendecoder.decodeHtml(dataset[dataitem][JSLang[lang].value])) for (sery in series) { var seryName = series[sery].name if (seryName != JSLang[lang].time) if (json_parsed[seryName] || json_parsed[seryName] === 0) { series[sery].data.unshift(parseFloat(json_parsed[seryName])) series[sery].oriData.unshift(json_parsed[seryName]) } else { series[sery].data.unshift(NaN) series[sery].oriData.unshift("-") } } } else { for (sery in series) { var seryName = series[sery].name if (seryName != JSLang[lang].time) if (seryName == JSLang[lang].value){ series[sery].data.unshift(parseFloat(dataset[dataitem][JSLang[lang].value])) series[sery].oriData.unshift(dataset[dataitem][JSLang[lang].value]) } else { series[sery].data.unshift(NaN) series[sery].oriData.unshift("-") } } } } } chart.setOption({ dataZoom: [{ id: 'dataZoomX', type: 'slider', xAxisIndex: [0] }], xAxis: xAxis, yAxis: yAxis, series: series, tooltip:{ trigger: "axis", formatter: function(params){ let str = ''; params.forEach((item, idx) => { str += "
" + `${item.marker}${item.seriesName}:   
${chart.getOption().series[item.seriesIndex].oriData[item.dataIndex]}` + "
" }) return str } } }) sync_export() } var bottomDiv = $("
") var row2 = $("
") grid2.append(row2) row2.append(bottomDiv) var bottomCard = $('
') bottomDiv.append(bottomCard) var bottomCardTitle = $('
') bottomCard.append(bottomCardTitle) bottomCardTitle.append($('
' + JSLang[lang].sendString + '
')) bottomCardTitle.append($('')) var bottomCardBody = $('
') bottomCard.append(bottomCardBody) var bottomCardBodyDiv = $('
') bottomCardBody.append(bottomCardBodyDiv) var messageInput = $('') messageInput.bind('input', function() { globalTableProjectInfo['toBeSent'] = stringendecoder.encodeHtml(messageInput.val()) }) var messageSendButton = $('') var messageSendIcon = $('') messageSendButton.append(messageSendIcon) bottomCardBodyDiv.append(messageInput) bottomCardBodyDiv.append(messageSendButton) messageSendButton.click(function() { if (globalTableProjectInfo.currentTp2 && globalTableProjectInfo.currentTp2 != '') publish(stringendecoder.decodeHtml(globalTableProjectInfo.currentTp2), messageInput.val(), true) else showtext(JSLang[lang].topicUnset) messageSendButton.removeClass("btn-primary") messageSendButton.addClass("btn-success") setTimeout(function(){ messageSendButton.addClass("btn-primary") messageSendButton.removeClass("btn-success") },200) if($("#sendClear").prop("checked")) messageInput.val("") }) var bottomDiv2 = $("
") row2.append(bottomDiv2) var bottomCard2 = $('
') bottomDiv2.append(bottomCard2) var bottomCardTitle2 = $('
') bottomCard2.append(bottomCardTitle2) bottomCardTitle2.append($('
' + JSLang[lang].sendJSON + '
')) var bottomCardBody2 = $('
') bottomCard2.append(bottomCardBody2) var bottomCardBodyDiv2 = $('
') bottomCardBody2.append(bottomCardBodyDiv2) var messageInput2Div = $('
') var valueDiv = $('
') valueDiv.append($('' + JSLang[lang].key + '')) var keyInput = $('') valueDiv.append(keyInput) $(function() { keyInput.bind('input', syncGlobalJSONMemory) }); valueDiv.append($('' + JSLang[lang].value + '')) var valInput = $('') valueDiv.append(valInput) $(function() { valInput.bind('input', syncGlobalJSONMemory) }); var removeButton = $('') removeButton.click(function() { if (messageInput2Div.children().length > 2) valueDiv.remove() else showtext(JSLang[lang].JSONempty) syncGlobalJSONMemory() }) valueDiv.prepend(removeButton) messageInput2Div.append(valueDiv) var addButton = $('' + JSLang[lang].addKey + '') addButton.click(function() { var valueDiv = $('
') valueDiv.append($('' + JSLang[lang].key + '')) var keyInput = $('') valueDiv.append(keyInput) keyInput.bind('input', syncGlobalJSONMemory) valueDiv.append($('' + JSLang[lang].value + '')) var valInput = $('') valueDiv.append(valInput) valInput.bind('input', syncGlobalJSONMemory) var removeButton = $('') removeButton.click(function() { if (messageInput2Div.children().length > 2) valueDiv.remove() else showtext(JSLang[lang].JSONempty) syncGlobalJSONMemory() }) valueDiv.prepend(removeButton) valueDiv.insertBefore(addButton) }) var syncGlobalJSONMemory = function() { var toBeSaved = {} var inputDivs = messageInput2Div.children() for (inputDiv = 0; inputDiv < inputDivs.length - 1; inputDiv = inputDiv + 1) { if ($($(inputDivs[inputDiv]).children()[2]).val() != "") { toBeSaved[$($(inputDivs[inputDiv]).children()[2]).val()] = $($(inputDivs[inputDiv]).children()[4]).val() } } globalTableProjectInfo['toBeSentJSON'] = stringendecoder.encodeHtml(JSON.stringify(toBeSaved)) } messageInput2Div.append(addButton) var messageSendButton2 = $('') bottomCardBodyDiv2.append(messageInput2Div) bottomCardBodyDiv2.append(messageSendButton2) messageSendButton2.click(function() { if (globalTableProjectInfo.currentTp2 && globalTableProjectInfo.currentTp2 != '') { if (isJSON(stringendecoder.decodeHtml(globalTableProjectInfo.toBeSentJSON))) publish(stringendecoder.decodeHtml(globalTableProjectInfo.currentTp2), stringendecoder.decodeHtml(globalTableProjectInfo.toBeSentJSON), true) else showtext(JSLang[lang].invalidJSON) } else showtext(JSLang[lang].topicUnset) }) init_table() if (JSON.parse(JSON.parse(res)['projectLayout']).data_info || JSON.parse(res)['dataStorage']) { var resJSON = JSON.parse(JSON.parse(res)['projectLayout']).data_info || JSON.parse(JSON.parse(res)['dataStorage']) if (resJSON['currentTp']) { for (tp in resJSON['received']) topicSelect.append($("")) topicSelect.val(stringendecoder.decodeHtml(resJSON['currentTp'])) globalTableProjectInfo = resJSON if (isJSON(stringendecoder.decodeHtml(globalTableProjectInfo['toBeSentJSON']))) { var json_parsed = JSON.parse(stringendecoder.decodeHtml(globalTableProjectInfo['toBeSentJSON'])) for (key in json_parsed) { let valueDiv = $('
') valueDiv.append($('' + JSLang[lang].key + '')) let keyInput = $('') keyInput.val(key) valueDiv.append(keyInput) $(function() { keyInput.bind('input', syncGlobalJSONMemory) }); valueDiv.append($('' + JSLang[lang].value + '')) let valInput = $('') valueDiv.append(valInput) valInput.val(json_parsed[key]) $(function() { valInput.bind('input', syncGlobalJSONMemory) }); let removeButton = $('') removeButton.click(function() { if (messageInput2Div.children().length > 2) valueDiv.remove() else showtext(JSLang[lang].JSONempty) syncGlobalJSONMemory() }) valueDiv.prepend(removeButton) messageInput2Div.prepend(valueDiv) } } var history = JSON.parse(res).history for (hisItem in history) { var hisTopic = history[hisItem].topicName var hisMessage = history[hisItem].msg var hisTime = history[hisItem].timeStamp if (globalTableProjectInfo['received'][hisTopic]) globalTableProjectInfo['received'][hisTopic].unshift({ '时间': hisTime, '值': stringendecoder.encodeHtml(hisMessage) }) else { globalTableProjectInfo['received'][hisTopic] = [] topicSelect.append($("")) globalTableProjectInfo['received'][hisTopic].unshift({ '时间': hisTime, '值': stringendecoder.encodeHtml(hisMessage) }) } } if (globalTableProjectInfo['currentTp'] != '$') { globalTableProjectInfo['currentTp'] = globalTableProjectInfo['currentTp'].split(',,')[0] topicSelect.val(stringendecoder.decodeHtml(globalTableProjectInfo['currentTp'])) fresh() } messageInput.val(stringendecoder.decodeHtml(globalTableProjectInfo['toBeSent'])) if (globalTableProjectInfo['currentTp2']) topicSelect2.val(stringendecoder.decodeHtml(globalTableProjectInfo['currentTp2'])) init_table() } } var modaldd = showmodaltext("

" + JSLang[lang].loading + "

") $.get('queryShareKey', { 'projectName': globalProjectName, 'projectPass': globalProjectPass }, function(res) { if (res != -1) globalShareKey = JSON.parse(res)['share_key'] modaldd.close().remove() }) } window.addEventListener("resize", function() { chart.resize(); }); if (projectType == LOGIC_MODE && isCode) { init_codemirror() } }) } function isJSON(str) { if (typeof str == 'string') { try { var obj = JSON.parse(str); if (typeof obj == 'object' && obj) { return true; } else { return false; } } catch (e) { return false; } } } function add_widget() { var widget_list = $("
") var title = $("

" + JSLang[lang].widget + "

" + JSLang[lang].guide + "
") widget_list.append(title) //widget_list.append($("
" + JSLang[lang].control + "
")) var input_button_add = $("
" + JSLang[lang].switch+"
") widget_list.append(input_button_add) var input_button_add2 = $("
" + JSLang[lang].button + "
") widget_list.append(input_button_add2) var input_slider_add = $("
" + JSLang[lang].slider + "
") widget_list.append(input_slider_add) var input_controller_add = $("
" + JSLang[lang].joystick + "
") widget_list.append(input_controller_add) var input_rgb_add = $("
" + JSLang[lang].RGB + "
") widget_list.append(input_rgb_add) var output_bulb_add = $("
" + JSLang[lang].bulb + "
") widget_list.append(output_bulb_add) var timer_add = $("
" + JSLang[lang].timer + "
") widget_list.append(timer_add) var trigger_add = $("
" + JSLang[lang].trigger + "
") widget_list.append(trigger_add) var ble_add = $("
" + JSLang[lang].ble + "
") widget_list.append(ble_add) //widget_list.append($("
" + JSLang[lang].data + "
")) var output_chart_add = $("
" + JSLang[lang].lineChart + "
") widget_list.append(output_chart_add) var output_bar_add = $("
" + JSLang[lang].barChart + "
") widget_list.append(output_bar_add) var table_add = $("
" + JSLang[lang].dataTable + "
") widget_list.append(table_add) var output_map_add = $("
" + JSLang[lang].dataMap + "
") widget_list.append(output_map_add) var output_dashboard_add = $("
" + JSLang[lang].dashboard + "
") widget_list.append(output_dashboard_add) var input_weather_add = $("
" + JSLang[lang].weather + "
") widget_list.append(input_weather_add) var input_camera_add = $("
" + JSLang[lang].camera + "
") widget_list.append(input_camera_add) var input_mic_add = $("
" + JSLang[lang].mic + "
") widget_list.append(input_mic_add) var input_tinydb_add = $("
" + JSLang[lang].tinydb + "
") widget_list.append(input_tinydb_add) //widget_list.append($("
" + JSLang[lang].text + "
")) var input_keyboard_add = $("
" + JSLang[lang].keyboard + "
") widget_list.append(input_keyboard_add) var output_text_add = $("
" + JSLang[lang].screen + "
") widget_list.append(output_text_add) var output_pixel_add = $("
" + JSLang[lang].pixel + "
") widget_list.append(output_pixel_add) var decorate_text_add = $("
" + JSLang[lang].label + "
") widget_list.append(decorate_text_add) var decorate_pic_add = $("
" + JSLang[lang].picture + "
") widget_list.append(decorate_pic_add) var magic_add = $("
" + JSLang[lang].magic + "
") widget_list.append(magic_add) //widget_list.append($("
" + JSLang[lang].tensorAI + "
")) var blazeFace_add = $("
" + JSLang[lang].blazeFace + "
") widget_list.append(blazeFace_add) var ocr_add = $("
" + JSLang[lang].ocr + "
") widget_list.append(ocr_add) var qr_add = $("
" + JSLang[lang].qr + "
") widget_list.append(qr_add) //var bertQA_add = $("
" + JSLang[lang].Bert + "
") //widget_list.append(bertQA_add) ble_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].readMessTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("bleread") editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].writeMessTopic + '
')) var topic_input_div_2 = $('
') var topic_input_2 = $("") topic_input_div_2.append(topic_input_2) topic_input_2.val("blewrite") editForm.append(topic_input_div_2) editForm.append($('
' + JSLang[lang].bleTarget + '
')) var ble_target_div = $('
') var ble_target = $("") ble_target.val(JSLang[lang].select) ble_target_div.append(ble_target) ble_target.click(function() { // use web bluetooth to select device, no filter if (navigator.bluetooth) { navigator.bluetooth.requestDevice({ acceptAllDevices: true, // read and write to device characteristic (for example, to send data to a micro:bit) optionalServices: [0xfff0] }).then(function(device) { var old_ble_target = ble_target.val() if(old_ble_target != JSLang[lang].select) { globalBLE[old_ble_target].gatt.disconnect() delete globalBLE[old_ble_target] } ble_target.val(device.name + ' (' + device.id + ')') globalBLE[device.name + ' (' + device.id + ')'] = device }).catch(function(error) { // if user cancel the selection(NotFoundError) if(error.name == "NotFoundError") { var old_ble_target = ble_target.val() globalBLE[old_ble_target].gatt.disconnect() delete globalBLE[old_ble_target] ble_target.val(JSLang[lang].select) title.parent().parent().attr('user-content', JSLang[lang].select) } else showtext(error) }) } else { showtext(JSLang[lang].noWebBluetooth) } }) editForm.append(ble_target_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11 && getByteLen(topic_input_2.val()) > 0 && getByteLen(topic_input_2.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_ble(title_input.val(), topic_input.val()+","+topic_input_2.val(), ble_target.val()) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) blazeFace_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("face") editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].triggerInterval + '
')) var trigger_interval_div = $('
') var trigger_interval = $("") trigger_interval.val(1000) trigger_interval_div.append(trigger_interval) trigger_interval.change(function(){ if(trigger_interval.val()<1000) trigger_interval.val(1000) }) editForm.append(trigger_interval_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_face(title_input.val(), topic_input.val(), "[" + trigger_interval.val() + "]") modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) qr_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("qr") editForm.append(topic_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_qr(title_input.val(), topic_input.val(), "") modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) ocr_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input.val("beep") topic_input_div.append(topic_input) editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].beepAudio + '
')) var beep_select = $('") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("camera") editForm.append(topic_input_div) // resolution selection editForm.append($('
' + JSLang[lang].resolution + '
')) var resolution_input_div = $('
') var resolution_input = $("") fps_input_div.append(fps_input) fps_input.append($("")) fps_input.append($("")) editForm.append(fps_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_camera(title_input.val(), topic_input.val(), resolution_input.val() + "," + fps_input.val()) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) output_pixel_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("pixel") editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].xpixel + '
')) var xpixel_input_div = $('
') var xpixel_input = $("") xpixel_input_div.append(xpixel_input) editForm.append(xpixel_input_div) editForm.append($('
' + JSLang[lang].ypixel + '
')) var ypixel_input_div = $('
') var ypixel_input = $("") ypixel_input_div.append(ypixel_input) editForm.append(ypixel_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) xpixel_input.val(30) ypixel_input.val(20) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (xpixel_input.val() > 0 && xpixel_input.val() < 101 && ypixel_input.val() > 0 && ypixel_input.val() < 101) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_pixel(title_input.val(), topic_input.val(), xpixel_input.val() + "," + ypixel_input.val()) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext(JSLang[lang].invalidPixel) else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) input_button_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("button") editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].feedbackMode + '
')) var modeButton = $("") var modeCheckbox = $("") modeCheckbox.prop("checked", false) modeCheckbox.click(function() { if (modeCheckbox.prop("checked")) editForm.find("img").attr("src", "icons/input_button2.svg") else editForm.find("img").attr("src", "icons/input_button.svg") }) var modeCheckDiv = $("
") modeButton.append(modeCheckbox) modeButton.append(modeCheckDiv) var modeDiv = $("
") modeDiv.append($("" + JSLang[lang].switch+"")) modeDiv.append(modeButton) modeDiv.append($("" + JSLang[lang].button + "")) editForm.append(modeDiv) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_button(title_input.val(), topic_input.val(), modeCheckbox.prop('checked') ? 2 : 0) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) input_button_add2.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("button") editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].feedbackMode + '
')) var modeButton = $("") var modeCheckbox = $("") modeCheckbox.prop("checked", true) modeCheckbox.click(function() { if (modeCheckbox.prop("checked")) editForm.find("img").attr("src", "icons/input_button2.svg") else editForm.find("img").attr("src", "icons/input_button.svg") }) var modeCheckDiv = $("
") modeButton.append(modeCheckbox) modeButton.append(modeCheckDiv) var modeDiv = $("
") modeDiv.append($("" + JSLang[lang].switch+"")) modeDiv.append(modeButton) modeDiv.append($("" + JSLang[lang].button + "")) editForm.append(modeDiv) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_button(title_input.val(), topic_input.val(), modeCheckbox.prop('checked') ? 2 : 0) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) input_slider_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input.val("slider") topic_input_div.append(topic_input) editForm.append(topic_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { if (!isNaN(parseFloat(minInput.val())) && !isNaN(parseFloat(maxInput.val())) && !isNaN(parseFloat(paceInput.val())) && (parseFloat(paceInput.val()) > 0) && (parseFloat(maxInput.val()) > parseFloat(minInput.val())) && ((parseFloat(maxInput.val()) - parseFloat(minInput.val())) > parseFloat(paceInput.val()))) { add_slider(title_input.val(), topic_input.val(), minInput.val() + "," + maxInput.val() + "," + paceInput.val() + "," + minInput.val()) modifyDia.close().remove() } else { showtext(JSLang[lang].invalidSlideRange) } } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) editForm.append($('
' + JSLang[lang].slideRange + '
')) var rangeDiv = $("
") var minInput = $("") rangeDiv.append(minInput) rangeDiv.append("-") var maxInput = $("") rangeDiv.append(maxInput) rangeDiv.append($('' + JSLang[lang].step + '')) var paceInput = $("") rangeDiv.append(paceInput) editForm.append(rangeDiv) var cancelEdit = $('') minInput.val(0) maxInput.val(10) paceInput.val(1) cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) input_keyboard_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input.val("keyboard") topic_input_div.append(topic_input) editForm.append(topic_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_keyboard(title_input.val(), topic_input.val(), "") modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) input_tinydb_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input.val("select") topic_input_div.append(topic_input) editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].options + '
')) var options_input_div = $('
') var options_input = $("") options_input_div.append(options_input) editForm.append(options_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_tinydb(title_input.val(), topic_input.val(), options_input.val()) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) input_mic_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input.val("mic") topic_input_div.append(topic_input) editForm.append(topic_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_mic(title_input.val(), topic_input.val(), "") modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) input_controller_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input.val("controller") topic_input_div.append(topic_input) editForm.append(topic_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_controller(title_input.val(), topic_input.val()) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) input_rgb_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '(R)
')) var Rtopic_input_div = $('
') var Rtopic_input = $("") Rtopic_input.val("R") Rtopic_input_div.append(Rtopic_input) editForm.append(Rtopic_input_div) editForm.append($('
' + JSLang[lang].messTopic + '(G)
')) var Gtopic_input_div = $('
') var Gtopic_input = $("") Gtopic_input_div.append(Gtopic_input) Gtopic_input.val("G") editForm.append(Gtopic_input_div) editForm.append($('
' + JSLang[lang].messTopic + '(B)
')) var Btopic_input_div = $('
') var Btopic_input = $("") Btopic_input.val("B") Btopic_input_div.append(Btopic_input) editForm.append(Btopic_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(Rtopic_input.val()) > 0 && getByteLen(Rtopic_input.val()) < 11 && getByteLen(Gtopic_input.val()) > 0 && getByteLen(Gtopic_input.val()) < 11 && getByteLen(Btopic_input.val()) > 0 && getByteLen(Btopic_input.val()) < 11) if (re.test(Rtopic_input.val()) && re.test(Gtopic_input.val()) && re.test(Btopic_input.val())) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_rgb(title_input.val(), Rtopic_input.val() + "/" + Gtopic_input.val() + "/" + Btopic_input.val(), '0,0,0') modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) if (!OFFLINE_MODE) input_weather_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input.val("weather") topic_input_div.append(topic_input) editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].syncInterval + '
')) var sync_input_div = $('
') var sync_input = $("") sync_input.append($("")) sync_input.append($("")) sync_input.append($("")) sync_input.append($("")) sync_input_div.append(sync_input) editForm.append(sync_input_div) editForm.append($('
' + JSLang[lang].sendInterval + '
')) var send_input_div = $('
') var send_input = $("") send_input.append($("")) send_input.append($("")) send_input.append($("")) send_input.append($("")) send_input.append($("")) send_input_div.append(send_input) editForm.append(send_input_div) editForm.append($('
' + JSLang[lang].location + '
')) var province_input = $("") province_input.append($("")) for (district in districts) { province_input.append($("")) } editForm.append(province_input) var city_input = $("") city_input.append($("")) editForm.append(city_input) province_input.change(function() { city_input.empty() city_input.append($("")) district_input.empty() district_input.append($("")) district_input.attr('disabled', 'disabled') if (province_input.val() != "unselected") { console.log(province_input.val()) for (district in districts[province_input.val()].child) { city_input.append($("")) } city_input.removeAttr('disabled') } else city_input.attr('disabled', 'disabled') }) var district_input = $("") district_input.append($("")) editForm.append(district_input) city_input.change(function() { district_input.empty() district_input.append($("")) if (city_input.val() != "unselected") { console.log(province_input.val()) for (district in (districts[province_input.val()].child)[city_input.val()].child) { district_input.append($("")) } district_input.removeAttr('disabled') } else district_input.attr('disabled', 'disabled') }) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { var placecode = province_input.val() == "unselected" ? "unselected" : (city_input.val() == "unselected" ? province_input.val() : (district_input.val() == "unselected" ? city_input.val() : district_input.val())) if (placecode == "unselected") showtext(JSLang[lang].locationSet) else { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_weather(title_input.val(), topic_input.val(), placecode + "w" + sync_input.val() + "w" + send_input.val()) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) } }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) output_bulb_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("bulb") editForm.append(topic_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_bulb(title_input.val(), topic_input.val(), 0) modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) timer_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].triggerTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("timer") editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].triggerMessage + '
')) var moreButtonDiv = $('
') var currTimeBtn = $('实时时间') var ranNumBtn = $('随机整数(1-99)') moreButtonDiv.append(currTimeBtn) moreButtonDiv.append(ranNumBtn) editForm.append(moreButtonDiv) var message_input_div = $('
') var message_input = $("") message_input_div.append(message_input) editForm.append(message_input_div) currTimeBtn.click(function(){ message_input.val("$CURR_TIME$") }) ranNumBtn.click(function(){ message_input.val("$RAN_NUM$") }) editForm.append($('
' + JSLang[lang].triggerInterval + '
')) var trigger_interval_div = $('
') var trigger_interval = $("") trigger_interval.val(1000) trigger_interval_div.append(trigger_interval) editForm.append(trigger_interval_div) editForm.append($('
' + JSLang[lang].triggerTimes + '
')) var trigger_times_div = $('
') var trigger_times = $("") trigger_times.val(0) trigger_times_div.append(trigger_times) editForm.append(trigger_times_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (getByteLen(message_input.val()) > 0) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { if (parseInt(trigger_interval.val()) && parseInt(trigger_interval.val()) >= 500) { if (!isNaN(parseInt(trigger_times.val())) && parseInt(trigger_times.val()) >= 0) { add_timer(title_input.val(), topic_input.val() + "$$$" + message_input.val(), trigger_interval.val() + "," + trigger_times.val()) modifyDia.close().remove() } else showtext(JSLang[lang].illegalTimes) } else showtext(JSLang[lang].illegalInterval) } else showtext(JSLang[lang].sameUnit) } else showtext(JSLang[lang].messageLenIllegal) else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) trigger_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].srcTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) editForm.append(topic_input_div) topic_input.val("trigger") editForm.append($('
' + JSLang[lang].condition + '1
')) var condition1_input_div = $('
') var condition1_input1 = $("") condition1_input_div.append(condition1_input1) condition1_input_div.append(condition1_input2) editForm.append(condition1_input_div) editForm.append($('
' + JSLang[lang].condition + '2
')) var condition2_input_div = $('
') var condition2_input1 = $("") condition2_input_div.append(condition2_input1) condition2_input_div.append(condition2_input2) editForm.append(condition2_input_div) editForm.append($('
' + JSLang[lang].conditionRelation + '
')) var condition_relation_div = $('
') var condition_relation = $("") dstTopic_input_div.append(dstTopic_input) editForm.append(dstTopic_input_div) editForm.append($('
' + JSLang[lang].dstMessage + '
')) var dstMessage_input_div = $('
') var dstMessage_input = $("") dstMessage_input_div.append(dstMessage_input) editForm.append(dstMessage_input_div) condition2_input1.bind("change", function() { if (condition2_input1.val() == "--") condition2_input2.attr("disabled", "disabled") else condition2_input2.removeAttr("disabled") }) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (getByteLen(condition1_input2.val()) > 0 && (condition2_input1.val() == "--" || getByteLen(condition2_input2.val()) > 0)) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { if (getByteLen(dstTopic_input.val()) > 0) { if (getByteLen(dstMessage_input.val()) > 0) { var content = [condition1_input1.val(), condition1_input2.val(), condition2_input1.val(), condition2_input2.val(), condition_relation.val(), dstTopic_input.val(), dstMessage_input.val()].join("$$$") add_trigger(title_input.val(), topic_input.val(), content) modifyDia.close().remove() } else showtext(JSLang[lang].dstMessageLenIllegal) } else showtext(JSLang[lang].dstTopicLenIllegal) } else showtext(JSLang[lang].sameUnit) } else showtext(JSLang[lang].conditionLenIllegal) else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) magic_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].color + '
')) var color_input_div = $('
') var color_select = $('") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("text") editForm.append(topic_input_div) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { add_text(title_input.val(), topic_input.val(), '') modifyDia.close().remove() } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) table_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input_div.append(topic_input) topic_input.val("table") editForm.append(topic_input_div) editForm.append($('
' + JSLang[lang].columns + '
')) var count_input_div = $('
') var count_input = $("") count_input_div.append(count_input) editForm.append(count_input_div) count_input.val(JSLang[lang].time + "," + JSLang[lang].value) var bottomDiv = $('
') var confirmEdit = $('') bottomDiv.append(confirmEdit) confirmEdit.click(function() { if (getByteLen(title_input.val()) > 0 && getByteLen(title_input.val()) < 21) { var re = /^[a-z0-9]+$/i; if (getByteLen(topic_input.val()) > 0 && getByteLen(topic_input.val()) < 11) if (true) { if (countSubstr(grid.html(), 'user-title=\"' + title_input.val() + '\"', false) <= 0) { if (count_input.val() != "") { var tmpstr = count_input.val().split(',').length + ',' + count_input.val() add_table(title_input.val(), topic_input.val(), tmpstr) modifyDia.close().remove() } else showtext(JSLang[lang].columnsSet) } else showtext(JSLang[lang].sameUnit) } else showtext("") else showtext(JSLang[lang].topicLenIllegal) } else showtext(JSLang[lang].nameLenIllegal) }) var cancelEdit = $('') cancelEdit.click(function() { modifyDia.close().remove() add_widget() }) bottomDiv.append(cancelEdit) editForm.append(bottomDiv) var modifyDia = dialog({ content: editForm[0], cancel: false }) modifyDia.showModal() }) output_chart_add.children("a").click(function() { d.close().remove() var editForm = $('
') editForm.append($('
')) editForm.append($('
' + JSLang[lang].unitName + '
')) var title_input_div = $('
') var title_input = $("") title_input_div.append(title_input) editForm.append(title_input_div) editForm.append($('
' + JSLang[lang].messTopic + '
')) var topic_input_div = $('
') var topic_input = $("") topic_input.val("chart") topic_input_div.append(topic_input) editForm.append(topic_input_div) var modeButton = $("") var modeCheckbox = $("") var modeCheckDiv = $("
") modeButton.append(modeCheckbox) modeButton.append(modeCheckDiv) var modeDiv = $("