diff --git a/TermTk/TTkGui/clipboard.py b/TermTk/TTkGui/clipboard.py index 4ce0f173..07e5b022 100644 --- a/TermTk/TTkGui/clipboard.py +++ b/TermTk/TTkGui/clipboard.py @@ -59,7 +59,13 @@ class TTkClipboard(): @staticmethod def _loadClipboardManager(): try: - if importlib.util.find_spec('copykitten'): + if importlib.util.find_spec('pyodideProxy'): + TTkLog.info("Using 'pyodideProxy' as clipboard manager") + import pyodideProxy as _c + TTkClipboard._manager = _c + TTkClipboard._setText = _c.copy + TTkClipboard._text = _c.paste + elif importlib.util.find_spec('copykitten'): TTkLog.info("Using 'copykitten' as clipboard manager") import copykitten as _c TTkClipboard._manager = _c @@ -113,9 +119,14 @@ class TTkClipboard(): def text(): '''text''' if TTkClipboard._text: - txt = TTkClipboard._text() - if txt == str(TTkClipboard._clipboard): + txt = "" + try: + txt = TTkClipboard._text() + except Exception as e: + TTkLog.error("Clipboard error, try to export X11 if you are running this UI via SSH") + for line in str(e).split("\n"): + TTkLog.error(line) + if txt == None or txt == str(TTkClipboard._clipboard): return TTkClipboard._clipboard - else: - return TTkClipboard._text() + return txt return TTkClipboard._clipboard diff --git a/tests/sandbox/clipbboard.test.html b/tests/sandbox/clipbboard.test.html new file mode 100644 index 00000000..ed5f1d5d --- /dev/null +++ b/tests/sandbox/clipbboard.test.html @@ -0,0 +1,84 @@ + + + + + +Clipboard Test + + + +

Clipboard Test

+ +

Click the button below to copy the text to your clipboard:

+ + + + + +
+ +
+ +

+ + + + \ No newline at end of file diff --git a/tests/sandbox/js b/tests/sandbox/js new file mode 120000 index 00000000..b0a546f3 --- /dev/null +++ b/tests/sandbox/js @@ -0,0 +1 @@ +../../tools/webExporter/js \ No newline at end of file diff --git a/tools/webExporter/index.html b/tools/webExporter/index.html new file mode 100644 index 00000000..0545777f --- /dev/null +++ b/tools/webExporter/index.html @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/tests/sandbox/js/ttkproxy.js b/tools/webExporter/js/ttkproxy.js similarity index 90% rename from tests/sandbox/js/ttkproxy.js rename to tools/webExporter/js/ttkproxy.js index b62be65e..04d4151b 100644 --- a/tests/sandbox/js/ttkproxy.js +++ b/tools/webExporter/js/ttkproxy.js @@ -29,6 +29,32 @@ class TTkProxy { } pyodideProxy = { + copy: function(text){ + console.log("Copying:",text) + if(navigator.clipboard){ + navigator.clipboard.writeText(text) + return //codes below wont be executed + } + const textArea = document.createElement("textarea") + textArea.value = text + + document.body.appendChild(textArea) + + textArea.focus() + textArea.select() + + document.execCommand('copy') + + document.body.removeChild(textArea) + }, + paste: function(){ + if(navigator.clipboard){ + text = navigator.clipboard.readText() + console.log("Pasted:",text) + return text + } + return null + }, consoleLog: function(m){ console.log("TTk:",m) }, diff --git a/tools/webExporter/package.json b/tools/webExporter/package.json new file mode 100644 index 00000000..207a13b6 --- /dev/null +++ b/tools/webExporter/package.json @@ -0,0 +1,10 @@ +{ + "libs" : [ + {"pkg" :"bin/TermTk.tgz", + "name": "TermTk"}, + {"pkg" :"bin/dpt.tgz", + "name": "Dumb Paint Tool"} + ], + "mainOld": "main.py", + "main": "dumb.paint.tool.py" +} diff --git a/tools/webExporterInit.sh b/tools/webExporterInit.sh new file mode 100755 index 00000000..3b2cc0f3 --- /dev/null +++ b/tools/webExporterInit.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash + +# MIT License +# +# Copyright (c) 2024 Eugenio Parodi +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + +_PWD=`pwd` +_TOOLS_BASE_PATH=$(dirname $(readlink -f $0)) +_BASE_PATH=$( readlink -f ${_TOOLS_BASE_PATH}/.. ) +_TMP_PATH=$( readlink -f ${_BASE_PATH}/tmp ) + +_MAJOR=$( git describe --tags | sed 's,\([0-9]*\)\..*,\1,' ) +_MINOR=$( git describe --tags | sed 's,[0-9]*\.\([0-9]*\)\..*,\1,' ) +_PATCH=$( git describe --tags | sed 's,[0-9]*\.[0-9]*\.\([0-9]*\)[^0-9].*,\1,' ) +_STAGE=$( git describe --tags | sed 's,[^-]*-a-\?\([0-9]*\).*,\1,' ) + +_VERSION="${_MAJOR}.${_MINOR}.${_PATCH}-a${_STAGE}" +_DOCVERSION="${_MAJOR}.${_MINOR}.${_PATCH}-a" + +echo Version: ${_VERSION} +echo Name: ${_NAME} + +mkdir -p ${_TMP_PATH} +rm -rf ${_TMP_PATH}/* itchExport.zip + +${_TOOLS_BASE_PATH}/prepareBuild.sh release + +mkdir -p ${_TMP_PATH}/bin \ + ${_TMP_PATH}/www/pyodide \ + ${_TMP_PATH}/www/xterm/ \ + ${_TMP_PATH}/www/xterm-addon-fit \ + ${_TMP_PATH}/www/xterm-addon-unicode11 \ + ${_TMP_PATH}/www/webfonts \ + ${_TMP_PATH}/www/nerdfonts \ + ${_TMP_PATH}/www/opentype + +function _download { + _P=$1 + _F=$2 + if [ -f tests/sandbox/${_F} ] ; + then cp tests/sandbox/${_F} ${_P} ; + else wget -P ${_P} https://ceccopierangiolieugenio.github.io/binaryRepo/pyTermTk/${_F}; + fi ; +}; + +_download ${_TMP_PATH}/www/pyodide/ www/pyodide/pyodide.js +# _download ${_TMP_PATH}/www/pyodide/ www/pyodide/pyodide.js +_download ${_TMP_PATH}/www/pyodide/ www/pyodide/pyodide-lock.json +_download ${_TMP_PATH}/www/pyodide/ www/pyodide/python_stdlib.zip +_download ${_TMP_PATH}/www/pyodide/ www/pyodide/pyodide.asm.js +_download ${_TMP_PATH}/www/pyodide/ www/pyodide/repodata.json +_download ${_TMP_PATH}/www/pyodide/ www/pyodide/pyodide.asm.wasm + +_download ${_TMP_PATH}/www/xterm/ www/xterm/xterm.css +_download ${_TMP_PATH}/www/xterm/ www/xterm/xterm.js +_download ${_TMP_PATH}/www/xterm/ www/xterm/xterm.js.map + +_download ${_TMP_PATH}/www/xterm-addon-fit/ www/xterm-addon-fit/xterm-addon-fit.js +_download ${_TMP_PATH}/www/xterm-addon-fit/ www/xterm-addon-fit/xterm-addon-fit.js.map + +_download ${_TMP_PATH}/www/xterm-addon-unicode11/ www/xterm-addon-unicode11/xterm-addon-unicode11.js + +# _download ${_TMP_PATH}/www/webfonts/ www/webfonts/fa-regular-400.woff2 +# _download ${_TMP_PATH}/www/nerdfonts/ www/nerdfonts/HurmitNerdFontMono-Regular.otf +# _download ${_TMP_PATH}/www/nerdfonts/ www/nerdfonts/DejaVuSansMNerdFont-Regular.ttf +_download ${_TMP_PATH}/www/opentype/ www/opentype/3270SemiCondensed-Regular.otf + +_download ${_TMP_PATH}/www/ www/favicon.ico + + +tar cvzf ${_TMP_PATH}/bin/TermTk.tgz --exclude='__pycache__' --transform "s,^.*TermTk/,TermTk/," ${_TMP_PATH}/TermTk +tar cvzf ${_TMP_PATH}/bin/DPT.tgz --exclude='__pycache__' --transform "s,^.*/dumb,dumb," ${_TOOLS_BASE_PATH}/dumb.paint.tool.py ${_TOOLS_BASE_PATH}/dumb_paint_lib + +# find ${_TMP_PATH}/TermTk \ +# | grep -v __pycache__ | xargs tar cvzf ${_TMP_PATH}/bin/TermTk.tgz -C ${_TMP_PATH} +# +# find ${_TOOLS_BASE_PATH}/dumb.paint.tool.py ${_TOOLS_BASE_PATH}/dumb_paint_lib \ +# | grep -v __pycache__ | xargs tar cvzf ${_TMP_PATH}/bin/DPT.tgz -C ${_TOOLS_BASE_PATH} + +cp -a ${_TOOLS_BASE_PATH}/webExporter/* ${_TMP_PATH}/ + +echo '{ + "libs" : [ + {"pkg" :"bin/TermTk.tgz", + "name": "TermTk"}, + {"pkg" :"bin/DPT.tgz", + "name": "Dumb Paint Tool"} + ], + "mainOld": "main.py", + "main": "dumb.paint.tool.py" +}' > ${_TMP_PATH}/package.json + +rm -rf ${_TMP_PATH}/TermTk +pushd ${_TMP_PATH} +zip -r ${_PWD}/itchExport.zip * +popd \ No newline at end of file