From 07bcba0b71fe8c65cc12a7099b61ff70c8b4c11b Mon Sep 17 00:00:00 2001 From: Steve Nyemba Date: Mon, 30 Jun 2025 20:06:06 -0500 Subject: [PATCH] startup screen, register label form --- qcms-manifest.json | 7 +- www/html/_assets/images/python.png | Bin 7629 -> 12067 bytes www/html/_assets/js/studio.js | 5 +- www/html/_plugins/io.py | 11 ++- www/html/_plugins/register.py | 5 +- www/html/about.html | 122 ++++++++++++++++++++++++++++- www/html/index.html | 11 ++- www/html/menu.html | 19 +++-- www/html/wizard.html | 14 ---- 9 files changed, 160 insertions(+), 34 deletions(-) diff --git a/qcms-manifest.json b/qcms-manifest.json index ff389c5..630db5c 100644 --- a/qcms-manifest.json +++ b/qcms-manifest.json @@ -22,14 +22,15 @@ } ], "header": { - "title": "Data Transport", + "title": "Data Wrangler Workbench", "subtitle": "Open Workbench: Read, write & wrangle data"}, "index": "index.html", "on": { "load": { "pane": [ "www/html/menu.html" - ] + ], + "studio-intro":["www/html/about.html"] } }, "order": { @@ -45,7 +46,7 @@ "apply", "version" ], - "register":["get","add"], + "register":["get","add","technologies"], "io": [ "read", "open", "write" ] diff --git a/www/html/_assets/images/python.png b/www/html/_assets/images/python.png index 6cd76a9b49cb6af94367947967ab7a02a6439973..fa09908f19d3f165e949443c750f0960a646c958 100644 GIT binary patch literal 12067 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 literal 7629 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
') _openFile = $('
') $(_openFile).on('click',()=>{ var _id = '.'+_args.label+' .open-file' @@ -391,8 +392,8 @@ studio.frame = function (_args){ spreadsheet.refresh() }) - var _buttons = $('
 
') - _buttons.append(_openFile,_saveFile,_wizButton,_xbutton,_expandButton) + var _buttons = $('
 
') + _buttons.append(_pythonCode,_openFile,_saveFile,_wizButton,_xbutton,_expandButton) // _frame = $('
'.replace(/:label/,this._args.label)) var _frame = $('
') .addClass(this._args.label) diff --git a/www/html/_plugins/io.py b/www/html/_plugins/io.py index b6d4c87..1654e69 100644 --- a/www/html/_plugins/io.py +++ b/www/html/_plugins/io.py @@ -10,6 +10,7 @@ import numpy as np import json import base64 from flask import make_response, send_file +import copy @cms.Plugin(mimetype="application/json",method="POST") def read(**_args) : @@ -48,6 +49,9 @@ def open(**_args): return spreadsheet #{"Workbook":{"sheets":[{"usedRange":{"colIndex":1,"rowIndex":3},"name":"Sheet1","rows":[{"cells":[{"value":"name"},{"value":"age"}]},{"cells":[{"value":"steve"},{"value":"44"}]},{"cells":[{"value":"elon"},{"value":"9"}]},{"cells":[{"value":"nico"},{"value":"33"}]}],"standardHeight":20}]}}) @cms.Plugin(mimetype="application/octet-stream",method="POST") def write(**_args) : + """ + This functon generates an excel file, by returning the encoded 64bit stream + """ _request = _args['request'] _object = _request.json _sheets = None @@ -69,4 +73,9 @@ def write(**_args) : # Write each DataFrame to a different sheet _excelFile.seek(0) _stream= _excelFile.read() #send_file(_excelFile,as_attachment=True,download_name=f'{_label}-export.xlsx', mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') - return base64.b64encode(_stream).decode('utf-8') \ No newline at end of file + return base64.b64encode(_stream).decode('utf-8') + +@cms.Plugin(mimetype="text/plain") +def version (**_args) : + return transport.__edition__+ ' Edition '+transport.__version__ + diff --git a/www/html/_plugins/register.py b/www/html/_plugins/register.py index f40bf11..ea0b33a 100644 --- a/www/html/_plugins/register.py +++ b/www/html/_plugins/register.py @@ -16,7 +16,6 @@ def get (**_args) : for _key in _data : if _key not in ['default','email','version'] : - print (_key) _provider = _data[_key]['provider'] _name = None if 'table' in _data[_key] : @@ -49,3 +48,7 @@ def add(**_args): # # now we can/should get the rest of the list return get(**_args) + +@cms.Plugin(mimetype="application/json",method="GET") +def technologies(**_args): + return transport.supported().to_html(index=0) \ No newline at end of file diff --git a/www/html/about.html b/www/html/about.html index 24268d6..b7dfa7b 100644 --- a/www/html/about.html +++ b/www/html/about.html @@ -1,6 +1,120 @@ + + + + +
+
+

Supported Technologies

+
+
+ +
+
+
+ +
+ Your system is missing a database registry +
Click + + here to get started +
+
+

+ Credit +

+
    +
  • + HIPLAB @ Vanderbilt University Medical Center +
  • +
  • + Kidney Transpant Center @ Vanderbilt University Medical Center +
  • +
  • + the#SPHERE lab @ Vanderbilt University Medical Center +
  • + +
+

+

License

+
    +
  • + {{layout.header.title}} is licensed under MIT License +
  • +
  • + with most of the components require attribution. +
  • +
+

+

+

Component Attribution

+

+
    + +
  • + Syncfusion, +
  • +
  • + fontawesome, +
  • +
  • + Iconfinder +
  • +
  • + freepik.com | iconfuck +
  • + + +
+
+
\ No newline at end of file diff --git a/www/html/index.html b/www/html/index.html index efd4fa9..0bf36a5 100644 --- a/www/html/index.html +++ b/www/html/index.html @@ -45,15 +45,22 @@ var http = HttpClient.instance() uri = 'api/dbe/version' http.get(uri,(x)=>{ - var _html = ('
data-transport '+x.responseText+'
') + var _html = ('
Powered By data-transport '+x.responseText+'
') $ $('.footer').html(_html) + sessionStorage.wb_powered = x.responseText }) } + $(document).ready(function (){ + $('.studio-pane').css({display:'none'}) Initialize() $('.footer').css({'grid-template-columns':'100%','font-weight':'bold'}) }) -
\ No newline at end of file + +
+
+
+
\ No newline at end of file diff --git a/www/html/menu.html b/www/html/menu.html index ef49be0..b77c059 100644 --- a/www/html/menu.html +++ b/www/html/menu.html @@ -41,7 +41,11 @@ $('.search-results .labels').empty() http.get(uri,function (x){ var labels = JSON.parse(x.responseText) - + if (labels.length == 0){ + $('.get-started').css({display:'grid'}) + }else{ + $('.get-started').css({display:'none'}) + } labels.forEach(_data => { _icon = $('').attr('src',_data.icon) //'www/html/_assets/images/'+_data.provider+'.png') @@ -55,6 +59,7 @@ // $('.studio').slideUp('fast',()=>{ // }) + $('.studio-pane').css({display:'grid'}) if ($(_id).length == 0){ // _object = new studio.frame(this._data) // _object.render() @@ -64,7 +69,10 @@ } // var _label = this._data.label - this.work_bench.show() + $('.studio-intro').slideUp(()=>{ + this.work_bench.show() + }) + } $('.search-results .labels').append(_div) @@ -146,7 +154,7 @@

- Create a new database connection + Create a new database connection
@@ -157,8 +165,5 @@
-
- Credits & Thanks -
Attributions -

+
\ No newline at end of file diff --git a/www/html/wizard.html b/www/html/wizard.html index 92412a3..19850cb 100644 --- a/www/html/wizard.html +++ b/www/html/wizard.html @@ -26,20 +26,6 @@ var form = new ProviderInputForm(_provider) form.build('.db-form-input') - // $('.db-provider').slideUp('fast',function(){ - // $('.db-form').slideDown() - // _title = '.::. '+_provider - // $('.db-form-title').html(_title) - // $('.db-form-title').attr('provider',_provider) - // if (_provider.match(/sqlite|duckdb|databricks|bigquery/)){ - // $('.db-form .database').attr('placeholder','Absolute to database') - // if (_provider.match(/databricks|bigquery/)){ - // $('.db-form .database').attr('placeholder','Absolute to service account file') - // } - // $('.db-form .server').slideUp() - // $('.db-form .auth').slideUp() - // } - // }) })