(function(ext) { var ws; var when_received = false; var when_received_arr = Array(10).fill(false); var class_index; var label; var conn_id; var wss_url = "wss://ml2scratch-helper.glitch.me"; var r = document.cookie.split(';'); r.forEach(function(value) { var content = value.split('='); if (content[0] == ' wss_url' && content[1] != "") { wss_url = content[1]; } }); ext._shutdown = function() {}; ext._getStatus = function() { return {status: 2, msg: 'Ready'}; }; ext.connect = function(_conn_id) { if (_conn_id.length == 0) { alert('Blank ID is invalid.'); return; } conn_id = _conn_id; ws = new WebSocket(wss_url + '/scratchx'); ws.onmessage = function(evt) { data = JSON.parse(evt.data); if (data.action == 'predict') { class_index = data.value; label = data.label; when_received = true; when_received_arr[class_index] = true } } ws.onopen = function(evt) { ws.send(JSON.stringify({action: 'connect', conn_id: conn_id})); } } ext.set_wss_url = function(_wss_url) { wss_url = _wss_url; document.cookie = "wss_url=" + wss_url + "; max-age=7776000"; } ext.when_received = function() { if (when_received) { when_received = false; return true; } return false; } ext.when_received_0 = function() { if (when_received_arr[0]) { when_received_arr[0] = false; return true; } return false; } ext.when_received_1 = function() { if (when_received_arr[1]) { when_received_arr[1] = false; return true; } return false; } ext.when_received_2 = function() { if (when_received_arr[2]) { when_received_arr[2] = false; return true; } return false; } ext.when_received_3 = function() { if (when_received_arr[3]) { when_received_arr[3] = false; return true; } return false; } ext.when_received_4 = function() { if (when_received_arr[4]) { when_received_arr[4] = false; return true; } return false; } ext.when_received_5 = function() { if (when_received_arr[5]) { when_received_arr[5] = false; return true; } return false; } ext.when_received_6 = function() { if (when_received_arr[6]) { when_received_arr[6] = false; return true; } return false; } ext.when_received_7 = function() { if (when_received_arr[7]) { when_received_arr[7] = false; return true; } return false; } ext.when_received_8 = function() { if (when_received_arr[8]) { when_received_arr[8] = false; return true; } return false; } ext.when_received_9 = function() { if (when_received_arr[9]) { when_received_arr[9] = false; return true; } return false; } ext.class_index = function() { return class_index; } ext.label = function() { return label; } var lang = ((navigator.language || navigator.userLanguage) == 'ja') ? 'ja' : (((navigator.language || navigator.userLanguage) == 'zh-CN') ? 'zh_cn' : 'en'); var locale = { ja: { connect: 'ID: %s で接続する', set_wss_url: '%s をWebSocketサーバーのURLに設定する', when_received: '分類を受け取ったとき', when_received_0: '「分類0」を受け取ったとき', when_received_1: '「分類1」を受け取ったとき', when_received_2: '「分類2」を受け取ったとき', when_received_3: '「分類3」を受け取ったとき', when_received_4: '「分類4」を受け取ったとき', when_received_5: '「分類5」を受け取ったとき', when_received_6: '「分類6」を受け取ったとき', when_received_7: '「分類7」を受け取ったとき', when_received_8: '「分類8」を受け取ったとき', when_received_9: '「分類9」を受け取ったとき', class_index: '分類', label: 'ラベル' }, en: { connect: 'Connect with ID: %s', set_wss_url: 'Set %s as WebSocket Server URL', when_received: 'when received', when_received_0: 'when received label 0', when_received_1: 'when received label 1', when_received_2: 'when received label 2', when_received_3: 'when received label 3', when_received_4: 'when received label 4', when_received_5: 'when received label 5', when_received_6: 'when received label 6', when_received_7: 'when received label 7', when_received_8: 'when received label 8', when_received_9: 'when received label 9', class_index: 'class index', label: 'label' }, zh_cn: { connect: '用ID: [ %s ]连接', set_wss_url: 'Set %s as WebSocket Server URL', when_received: '接收到类别', when_received_0: '接收到类别0时', when_received_1: '接收到类别1时', when_received_2: '接收到类别2时', when_received_3: '接收到类别3时', when_received_4: '接收到类别4时', when_received_5: '接收到类别5时', when_received_6: '接收到类别6时', when_received_7: '接收到类别7时', when_received_8: '接收到类别8时', when_received_9: '接收到类别9时', class_index: '类索引', label: 'label' } } var descriptor = { blocks: [ [' ', locale[lang].connect, 'connect', ''], [' ', locale[lang].set_wss_url, 'set_wss_url', wss_url], ['h', locale[lang].when_received, 'when_received'], ['h', locale[lang].when_received_0, 'when_received_0'], ['h', locale[lang].when_received_1, 'when_received_1'], ['h', locale[lang].when_received_2, 'when_received_2'], ['h', locale[lang].when_received_3, 'when_received_3'], ['h', locale[lang].when_received_4, 'when_received_4'], ['h', locale[lang].when_received_5, 'when_received_5'], ['h', locale[lang].when_received_6, 'when_received_6'], ['h', locale[lang].when_received_7, 'when_received_7'], ['h', locale[lang].when_received_8, 'when_received_8'], ['h', locale[lang].when_received_9, 'when_received_9'], ['r', locale[lang].class_index, 'class_index'], ['r', locale[lang].label, 'label'] ] }; ScratchExtensions.register('ML2Scratch', descriptor, ext); })({});