")
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("
")
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;i
1)
{
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 = $('