mirror of
https://github.com/antos-rde/antosdk-apps.git
synced 2024-12-27 04:28:21 +01:00
117 lines
4.2 KiB
CoffeeScript
117 lines
4.2 KiB
CoffeeScript
|
# Copyright 2017-2018 Xuan Sang LE <xsang.le AT gmail DOT com>
|
||
|
|
||
|
# AnTOS Web desktop is is licensed under the GNU General Public
|
||
|
# License v3.0, see the LICENCE file for more information
|
||
|
|
||
|
# This program is free software: you can redistribute it and/or
|
||
|
# modify it under the terms of the GNU General Public License as
|
||
|
# published by the Free Software Foundation, either version 3 of
|
||
|
# the License, or (at your option) any later version.
|
||
|
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
# General Public License for more details.
|
||
|
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
#along with this program. If not, see https://www.gnu.org/licenses/.
|
||
|
class CodeBlock extends this.OS.GUI.BaseApplication
|
||
|
constructor: (args) ->
|
||
|
super "CodeBlock", args
|
||
|
|
||
|
main: () ->
|
||
|
me = @
|
||
|
@scheme.set "apptitle", "CodeBlock"
|
||
|
@btnact = @find "btn-action"
|
||
|
@container = @find "ws"
|
||
|
|
||
|
#file = "#{@path()}/toolbox.xml".asFileHandler()
|
||
|
#console.log file
|
||
|
#file.read (d) ->
|
||
|
# return me.error "Cannot load the toolbox" if d.error
|
||
|
#console.log d
|
||
|
#toolbox = $.parseHTML d
|
||
|
#me.scheme.append toolbox
|
||
|
|
||
|
me.workspace = Blockly.inject me.container,
|
||
|
{
|
||
|
grid:
|
||
|
spacing: 25
|
||
|
length: 3
|
||
|
colour: '#ccc'
|
||
|
snap: true
|
||
|
zoom:
|
||
|
controls: true
|
||
|
wheel: true
|
||
|
toolbox: @find "blockly_toolbox"
|
||
|
}
|
||
|
|
||
|
#if(Blockly.RpiControl)
|
||
|
# this.workspace.registerToolboxCategoryCallback('EXTRAS', function(workspace)
|
||
|
# {
|
||
|
# var xmlList = [];
|
||
|
# for (var i = 0; i < Blockly.RpiControl.length; i++) {
|
||
|
# var el = Blockly.RpiControl[i];
|
||
|
# if (Blockly.Blocks[el]) {
|
||
|
# var blockText = '<xml><block type="'+el+'"></block></xml>';
|
||
|
# var block = Blockly.Xml.textToDom(blockText).firstChild;
|
||
|
# xmlList.push(block);
|
||
|
# }
|
||
|
# }
|
||
|
# return xmlList;
|
||
|
#});
|
||
|
|
||
|
@blen = 1024
|
||
|
#@btnact.set "onbtclick", (e) ->
|
||
|
#me.openSession()
|
||
|
# code = Blockly.JavaScript.workspaceToCode me.workspace
|
||
|
# console.log code
|
||
|
@on "resize", () ->
|
||
|
Blockly.svgResize me.workspace
|
||
|
@bindKey "ALT-N", () -> me.actionFile "#{me.name}-New"
|
||
|
@bindKey "ALT-O", () -> me.actionFile "#{me.name}-Open"
|
||
|
@bindKey "CTRL-S", () -> me.actionFile "#{me.name}-Save"
|
||
|
@bindKey "ALT-W", () -> me.actionFile "#{me.name}-Saveas"
|
||
|
|
||
|
menu: () ->
|
||
|
me = @
|
||
|
menu = [{
|
||
|
text: "File",
|
||
|
child: [
|
||
|
{ text: __("New"), dataid: "#{@name}-New", shortcut: "A-N" },
|
||
|
{ text: "__(Open)", dataid: "#{@name}-Open", shortcut: "A-O" },
|
||
|
{ text: "__(Save)", dataid: "#{@name}-Save", shortcut: "C-S" },
|
||
|
{ text: "__(Save as)", dataid: "#{@name}-Saveas", shortcut: "A-W" }
|
||
|
],
|
||
|
onmenuselect: (e) -> me.actionFile e.item.data.dataid
|
||
|
}]
|
||
|
menu
|
||
|
|
||
|
actionFile: (n) ->
|
||
|
console.log n
|
||
|
openSession: () ->
|
||
|
me = @
|
||
|
proto = if window.location.protocol is "https:" then "wss://" else "ws://"
|
||
|
@socket = new WebSocket proto + @_api.HOST + "/ws/filestream.lua"
|
||
|
@socket.binaryType = "arraybuffer"
|
||
|
@socket.onopen = () ->
|
||
|
console.log "socket open"
|
||
|
enc = new TextEncoder "utf-8"
|
||
|
me.socket.send enc.encode me.blen + "os://packages/packages.json"
|
||
|
|
||
|
@socket.onmessage = (e) ->
|
||
|
console.log e.data
|
||
|
console.log new TextDecoder("utf-8").decode new Uint8Array e.data
|
||
|
me.socket.close() if e.data.byteLength < me.blen
|
||
|
|
||
|
@socket.onclose = () ->
|
||
|
me.socket = null
|
||
|
console.log "socket closed"
|
||
|
|
||
|
|
||
|
|
||
|
cleanup: (e) ->
|
||
|
@socket.close() if @socket
|
||
|
|
||
|
CodeBlock.singleton = true
|
||
|
this.OS.register "CodeBlock", CodeBlock
|