// //*********************************************************************** // * // This file is part of the "fubagToobox" System * // Author: Marko Seidel * // Copyright (C) 2021, archium GmbH * // * //*********************************************************************** // /** = Creative Commons Lizenzvertrag = Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de) Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten. = Creative Commons License = Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/) Individual permissions beyond the scope of this license may be available at https://archium.org. **/ // verbiete dragging aller "anchor" .. function disableAnchor(){ $('a').on('dragstart', function(event){ return false; }); } function usetheme(_theme){ // theme setzen window.setTimeout(function () { app.themechange(_theme); }, 100); } const eProj = 0; const eHead = 1; const eMenu = 2; const eData = 3; const eProp = 4; const eThem = 5; const eDone = 6; // var ebody = undefined; var isprogress = 0; // var events = []; // event-kette events[eProj] = new CustomEvent ('proj', { detail: {next:'head', actual:'proj'}, bubbles : true, cancelable: true, composed: false }); events[eHead] = new CustomEvent ('head', { detail: {next:'menu', actual:'head'}, bubbles : true, cancelable: true, composed: false }); events[eMenu] = new CustomEvent ('menu', { detail: {next:'data', actual:'menu'}, bubbles : true, cancelable: true, composed: false }); events[eData] = new CustomEvent ('data', { detail: {next:'prop', actual:'data'}, bubbles : true, cancelable: true, composed: false }); events[eProp] = new CustomEvent ('prop', { detail: {next:'them', actual:'prop'}, bubbles : true, cancelable: true, composed: false }); events[eThem] = new CustomEvent ('them', { detail: {next:'done', actual:'them'}, bubbles : true, cancelable: true, composed: false }); events[eDone] = new CustomEvent ('done', { detail: {next:'done', actual:'done'}, bubbles : true, cancelable: true, composed: false }); var actualevent = events[eProj]; function callevents(_elem, _event){ if (_elem != null){ if (_event != null){ // console.log('callevents:', _event, _elem); _elem.dispatchEvent(_event); } } } function handleevents(e){ var caption = '..load dataverse'; if (e == undefined){ timestart = Date.now() console.log('start events..'); caption = '..load project'; actualevent = events[eProj]; ebody.addEventListener('proj', function(e){ handleevents(e); }, false); app.module[app.active_module].getproject('project'); isprogress = 0; app.waitpos = 0; app.waitmax = 100; app.waittitle('Please wait..', caption, true); var bar = $.messager.progress('bar'); bar.progressbar({ text: '{value}%' }); }else{ switch (e.detail.actual){ case "proj": { isprogress+= 15; caption = '..load head'; actualevent = events[eHead]; ebody.removeEventListener('proj', handleevents); ebody.addEventListener('head', handleevents, false); app.module[app.active_module].getelements('head', '');break; } case "head": { isprogress+= 15; caption = '..load menu'; actualevent = events[eMenu]; ebody.removeEventListener('head', handleevents); ebody.addEventListener('menu', handleevents, false); app.module[app.active_module].getelements('menu', '');break; } case "menu": { isprogress+= 15; caption = '..load datagrids'; actualevent = events[eData]; ebody.removeEventListener('menu', handleevents); ebody.addEventListener('data', handleevents, false); app.module[app.active_module].getelements('datagrid', 'dataverse;dataset;user'); disableAnchor();break; } case "data": { isprogress+= 15; caption = '..load properties'; actualevent = events[eProp]; ebody.removeEventListener('data', handleevents); ebody.addEventListener('prop', handleevents, false); app.module[app.active_module].getelements2('propgrid', 'file;search');break; } case "prop": { isprogress+= 15; caption = '..load themes'; actualevent = events[eThem]; ebody.removeEventListener('prop', handleevents); ebody.addEventListener('them', handleevents, false); app.module[app.active_module].getthemes();break; } case "them": { isprogress+= 15; caption = '..closing up'; actualevent = events[eDone]; ebody.removeEventListener('them', handleevents); ebody.addEventListener('done', handleevents, false); app.module[app.active_module].done();break; } case "done": isprogress = 100; caption = '..successfully loaded'; actualevent = null; ebody.removeEventListener('done', handleevents); break; } app.waittitle('Please wait..', caption); app.waitprogress(isprogress, 'callevents', e.detail.actual); // console.log('next event..', isprogress, e.detail); } } function loadIndex() { // startsequenz // app.getID(true); ebody = document; handleevents(undefined); } function getlayout(_prefix, _sub, _suffix) { // layout-initialisierung var html = ''; html+= ''; // return html; } // ### ###################################################################### // ### initialisierung // app.active_module = 'archium'; app.trans.items = 'Entries'; // modul-variable als object app.module[app.active_module] = app.module[app.active_module] || {}; app.module[app.active_module].prefix = 'frm_'; app.module[app.active_module].sub = 'data'; app.module[app.active_module].suffix = '_edit'; app.module[app.active_module].project = 'archium'; //standard app.module[app.active_module].layout = 'layout_archium'; app.module[app.active_module].region = 'region_archium'; app.module[app.active_module].titletab = ''; app.module[app.active_module].titlepan = ''; // app.module[app.active_module].svgobject = {} // svg-pfade app.module[app.active_module].alias = ''; app.module[app.active_module].root = undefined; app.module[app.active_module].node = null; app.module[app.active_module].menu = null; app.module[app.active_module].selitem = app.makeStruct('id type alias'); app.module[app.active_module].selparent = app.makeStruct('id type alias'); app.module[app.active_module].selected = new app.module[app.active_module].selitem('1', '', 'root'); // app.module[app.active_module].searchresult = []; // search-result app.module[app.active_module].searchheader = {}; // search-header (dataset, file) // ### ###################################################################### // ### json handling - start // ### // ### parameter vorbelegen app.module[app.active_module].getparams = app.module[app.active_module].getparams || function(_from, _type, _what, _who){ var params = {suid:app.getID()}; params.from = _from; // 'db', 'file', 'dataverse' oder andere params.type = _type; params.func = 'getHtml'; params.what = _what; params.who = _who; params.user = app.user_id; params.modl = app.active_module; params.info = 'read '+_from+' > '+_what+' > '+_who+'?'; params.suff = _what; params.alias = "root" params.refr = true; params.proj = app.module[app.active_module].project // return params } app.module[app.active_module].done = app.module[app.active_module].done || function(){ app.waitclose(isprogress); console.log('all events done!'); } // ### themes laden (vom server) app.module[app.active_module].getthemes = app.module[app.active_module].getthemes || function(_this){ var params = app.module[app.active_module].getparams('db', 'json', 'params', 'get.themes'); params.func = 'getParams'; // // console.log('getthemes(before):', params, $(_this), ebody); $.postJSON('', params, function(_data){ app.message(_data.msg); if (_data.success == true){ // console.log('getthemes(data):', params.what, 'received :', _data, $(_this)); $('#head_theme').combobox('loadData', _data.themes.data);// combo füllen }else{ } // callevents(ebody, actualevent); // },function(jqxhr, textStatus){ // }); } app.module[app.active_module].loadIndex = app.module[app.active_module].loadIndex || function(){ __win_reload(this); } // ### elemente laden (vom server) app.module[app.active_module].getelements = app.module[app.active_module].getelements || function(_what, _who){ var ln = app.module[app.active_module].layout; // console.log(_what, 'to get:', _what, '"', _who, '"'); var layout = document.getElementById(ln); if (layout !== null){ app.module[app.active_module].record = null; var who = _who+'' var loop = who.split(';') var params = app.module[app.active_module].getparams('db', 'html', _what, ''); // console.log('getelements():', params.what, 'request:', params); $.postJSON('', params, function(_data){ // console.log('getelements(data):', _data); switch (params.what) { case 'svg':{ // svg break; } default:{ // datagrid, propgrid, files... if ((params.what == 'datagrid') || (params.what == 'head') || (params.what == 'menu')){ for (var i=0;i ''){ ln = ln+'_'+loop[i] } // console.log(params.what, 'received 4:', '"', ln,'"'); var dg = 'dg_'+params.proj+'_'+params.what+'_'+loop[i]; if (typeof _data === 'string'){ // html (string) aufbereiten repl = _data.replace('%dg%', dg); switch(loop[i]){ case 'dataverse': repl = repl.replace('%idfield%', 'id'); break; case 'dataset': repl = repl.replace('%idfield%', 'datasetId'); break; } // console.log('getelements():', params.what, 'received (',i,'):', '"', ln,'"', '"', dg,'"', '"', pg,'"', repl ); data = JSON.parse(repl); // objekt aus "string" erstellen if (i == 0){ // bei mehreren elementen, fehler nur im ersten durchlauf anzeigen app.message(data.msg); } } if (data.success == true) { // console.log('getelements():', params.what, 'received 5:', '"', ln,'"', data); layoutbase = document.getElementById(ln); if (layoutbase !== null){ // console.log('getelements():', params.what, 'received 6:', '"', ln,'"', data); $(layoutbase).empty(); // niemals 2-mal einfügen, deshalb evtl. vorher leeren.. $(layoutbase).append(data.html);// menü, grid ... usw. füllen app.easyui(layout); // console.log(params.what, 'getelements:', _what, loop[i], '"', _who,'"'); window.setTimeout(function (_what, _loop) { switch(params.what){ case 'menu': app.module[app.active_module].loadmenu(this); // callevents(ebody, actualevent); break; case 'datagrid': app.module[app.active_module].loadgrid(this, _what, _loop, "root", "root"); callevents(ebody, actualevent); break; default: callevents(ebody, actualevent); } disableAnchor(); }(params.what, loop[i]), 30); }else{ // console.log('element "', ln, '" not found.'); } } } } } } },function(jqxhr, textStatus){ // }); }else{ // console.log('element "', ln, '" not found.'); } }; // ### elemente laden (vom server) app.module[app.active_module].getelements2 = app.module[app.active_module].getelements2 || function(_what, _who){ var ln = app.module[app.active_module].layout; // console.log(_what, 'to get:', _what, '"', _who, '"'); var layout = document.getElementById(ln); if (layout !== null){ app.module[app.active_module].record = null; var who = _who+'' var loop = who.split(';') var params = app.module[app.active_module].getparams('db', 'html', _what, '') // console.log('getelements2():', params.what, 'request:', params); $.postJSON('', params, function(_data){ // console.log('getelements2(data):', _data); switch (params.what) { case 'svg':{ // svg break; } default:{ // datagrid, propgrid, files... if (typeof _data === 'string'){ // html (string) aufbereiten repl = _data; if (params.what == 'propgrid'){ var ln = 'layout_'+params.proj+'_'+params.what; for (var i=0;i 0){ if (!app.module[app.active_module].node){ app.module[app.active_module].node = app.module[app.active_module].root[0]; // achtung, mehrere roots möglich } app.module[app.active_module].expandnodetree(app.module[app.active_module].menu, app.module[app.active_module].node); $('#AC_menu_refresh').linkbutton('disable'); } }, 10); }(app.module[app.active_module].project, params.what), 100); }else{ // console.log('element "', ln, '" not found.'); } } } } } } },function(jqxhr, textStatus){ // }); }else{ // console.log('element "', ln, '" not found.'); } }; // ### projekt laden (vom server) app.module[app.active_module].getproject = app.module[app.active_module].getproject || function(_what){ // show progress $('.easyui-tree').tree('loadData', []); // menü leeren // var params = app.module[app.active_module].getparams('db', 'json', _what, '') params.func = 'getParams'; // //console.log(params.what, ' request:', params); $.postJSON('', params, function(_data){ // console.log('getproject(data):', _data); app.message(_data.msg); if (_data.success == true){ app.local_ip = _data.localip; app.local_port = _data.localport; app.module[app.active_module].project = _data.project; app.module[app.active_module].layout = 'layout_'+_data.project; app.module[app.active_module].region = 'region_'+_data.project; app.module[app.active_module].alias = _data.alias; window.setTimeout(function(){ app.module[app.active_module].getsvg('getsvg', 'dataverse;dataset;datafile;', 'matrix(1.1,0,0,1.1,0,0)', 14, 14, '0 0 16 16'); }, 100); // callevents(ebody, actualevent); } },function(jqxhr, textStatus){ // }); // } // ### svg laden (vom server) ... momentan n.b. app.module[app.active_module].getsvg = app.module[app.active_module].getsvg || function(_what, _name, _matrix, _width, _height, _viewbox){ // console.log('getsvg(request):', _what, ':', _name, _matrix, _width, _height, _viewbox); var params = app.module[app.active_module].getparams('modul', 'json', _what, '') params.func = 'getParams'; if (_name.length > 0){ params.who = (_name)?_name:''; params.widt = (_width)?_width:30; params.heit = (_height)?_height:30; params.matx = (_matrix)?_matrix:'matrix(1.1,0,0,1.1,0,0)'; params.view = (_viewbox)?_viewbox:'0 0 16 16'; // console.log('getsvg(request):', params.what, ':', params); // $.postJSON('', params, function(_data){ app.message(_data.msg); console.log('getsvg received (',params.what ,'):', _data); if (_data.success == true) { if (_data.svgobject){ if (typeof _data.svgobject == 'object'){ app.module[app.active_module].svgobject = _data.svgobject; console.log('postJSON received data: ', _data.total, 'x', params.what); } } } },function(jqxhr, textStatus){ // }); } } // ### menü laden (vom server) app.module[app.active_module].loadmenu = app.module[app.active_module].loadmenu || function(_this){ // console.log('loadmenu:', $('.easyui-tree')) var params = app.module[app.active_module].getparams('dataverse', 'json', 'menu', '') params.func = 'getValues'; // // console.log(params.what, ' request:', params); $.postJSON('', params, function(_data){ // console.log(params.what, ' received:', data); app.message(_data.msg); if (_data.success == true){ // app.waittitle('Please wait..', '..show menu'); app.module[app.active_module].menu = $('.easyui-tree') if (app.module[app.active_module].menu.length > 0){ // console.log(params.what, ' received(rows):', _data["rows"]); app.module[app.active_module].menu.tree('loadData', _data.rows);// menü füllen app.module[app.active_module].menu.tree('collapseAll'); // app.module[app.active_module].node = null; app.module[app.active_module].root = app.module[app.active_module].menu.tree('getRoots'); $.easyui.forEach(app.module[app.active_module].root, true, function(node){ // console.log(app.module[app.active_module].root, node) if (node.attributes){ if (node.attributes.alias != 'root'){ if (node.attributes.datasetPid){ // achtung, mehrere roots möglich if (node.attributes.datasetPid == app.module[app.active_module].root[0].attributes.datasetPid){ app.module[app.active_module].node = node; return false; } } } } return true; }); // callevents(ebody, actualevent); } } },function(jqxhr, textStatus){ // }); // $('#cc').layout('expand','west'); }; // ### data-grid - laden (vom server) app.module[app.active_module].loadgrid = app.module[app.active_module].loadgrid || function(_this, _what, _who, _alias, _name){ // console.log('loadgrid(inner):', _what, _who, _alias, _name); var params = app.module[app.active_module].getparams('dataverse', 'json', 'datagrid', _who) params.func = 'getValues'; params.alias = _alias; params.name = _name; params.grid = '#dg_'+params.proj+'_'+params.what+'_'+params.who // app.module[app.active_module].emptygrid(this, params.grid, params.what, false); // grid leeren // // console.log("loadgrid(setTitle):", params.what, params.who, params.name) app.waittitle('Please wait..', '..load for "'+_who+'"'); window.setTimeout(function(){ $.postJSON('', params, function(_data){ // console.log("loadgrid(data):", _data) // console.log('loadgrid(', dg,')',params.what, 'received:', _data); app.message(_data.msg); if (_data.success == true){ app.waittitle('Please wait..', '..create view for "'+_who+'"'); window.setTimeout(function(){ //if (params.who == 'dataset'){ app.waitclose(); //} }, 1000); var dg = $(params.grid); if (dg.length > 0){ var pn = $('#'+app.module[app.active_module].region+'_'+params.who) if (_data.total > 0){ var opt = app.module[app.active_module].emptygrid(this, params.grid, params.what, true); opt.columns = _data.cols; _data.opt = opt; dg.datagrid(_data.opt); dg.datagrid('loadData', _data.rows);// grid füllen // console.log("loadgrid(setTitle):", params.what, params.who, params.name, pn) pn.panel('setTitle', params.name) }else{ pn.panel('setTitle', '- i found nothing similar here -') } dg.datagrid('unselectAll') } // window.setTimeout(function () { $('#AC_menu_refresh').linkbutton('enable'); if (params.who == app.module[app.active_module].selected.type){ switch(params.who){ case 'dataverse': app.module[app.active_module].selectgridrow(_this, params.grid, app.module[app.active_module].selected.id) break; case 'dataset':{ app.module[app.active_module].selectgridrow(_this, params.grid, app.module[app.active_module].selected.id) break; } } } }, 10); } },function(jqxhr, textStatus){ // }); }, 100); }; // ### property-grid - laden (vom server) app.module[app.active_module].loadpropgrid = app.module[app.active_module].loadpropgrid || function(_this, _node, _what, _who){ var lt = $('#'+app.module[app.active_module].layout); if (lt.length == 1){ var pg_verse = lt.layout('panel','east'); // var params = app.module[app.active_module].getparams('dataverse', 'json', 'propgrid', _who) params.func = 'getValues'; params.alias = (_node)?_node.attributes.datasetPid:''; params.name = app.module[app.active_module].titlepan; params.grid = '#pg_'+params.proj+'_'+params.what+'_'+params.who params.tabs = '#tabs_'+params.proj+'_'+params.what // // console.log('loadpropgrid:', params) // app.module[app.active_module].emptygrid(this, params.grid, params.what, false); // grid leeren // $(params.tabs).tabs('select', 0); var tab = $(params.tabs).tabs('getTab', 0); $(params.tabs).tabs('update', {tab: tab, options:{title: 'Dataset: '+app.module[app.active_module].titletab}}) // if (_node.attributes.type == 'dataset'){ $.postJSON('', params, function(_data){ // console.log('loadpropgrid():', params.what, 'received:', _data); app.message(_data.msg); if (_data.success == true){ if (_data.total > 0){ var pg = $(params.grid); // console.log('loadgrid(', pg,')',params.what, 'received:', _data); if (pg.length > 0){ app.module[app.active_module].settoolbar('east', false); var opt = app.module[app.active_module].emptygrid(this, params.grid, params.what, true); opt.columns = _data.cols; _data.opt = opt; pg.propertygrid(_data.opt); pg.propertygrid('loadData', _data.rows);// grid füllen if (lt){ // window.setTimeout(function(){ // if (type == 'dataset'){ if (pg_verse){ if (pg_verse.panel('options').collapsed == true){ lt.layout('expand', 'east'); } } // }, 10); } } } } },function(jqxhr, textStatus){ // }); }else{ window.setTimeout(function(){ lt.layout('collapse', 'east'); }, 10); } if (pg_verse){ pg_verse.panel('setTitle', app.module[app.active_module].titlepan); } }else{ app.message({type:'alert', title:'Error', msg: 'Fatal error:
. layout not found: "'+app.module[app.active_module].layout+'"'}); } } // json handling - ende // ### ###################################################################### // ### ###################################################################### // ### button handling - start // ### // ### buttons - enable/disable app.module[app.active_module].enable = app.module[app.active_module].enable || function(_enable, _prefix, _suff){ var elem = $('#'+_prefix+_suff); window.setTimeout(function(){ $(elem).linkbutton(_enable?'enable':'disable'); }, 50); } // ### buttons - hide/show (toggle) app.module[app.active_module].hide = app.module[app.active_module].hide || function(_hidefirst, _prefix, _suff1, _suff2, _class){ var b1 = $('#'+_prefix+_suff1); var b2 = $('#'+_prefix+_suff2); window.setTimeout(function(){ if (_hidefirst){ $(b1).addClass(_class); $(b2).removeClass(_class); }else{ $(b1).removeClass(_class); $(b2).addClass(_class); } }, 50); } // ### button handling - ende // ### ###################################################################### // ### ###################################################################### // ### property-grid - expand/collapse (alle) app.module[app.active_module].expandgroups = app.module[app.active_module].expandgroups || function(_this, _expand){ var pg = $(_this).closest('div.datagrid').find('table.easyui-propertygrid'); // console.log('expandgroups:', pg); if (pg.length == 1){ var dg = $(pg); var b1 = $(_this).attr('id'); var b2 = ''; var gr = dg.datagrid('groups'); var ac = b1.split("_").pop()+'Group'; if (ac == 'expandGroup'){ b2 = b1.replace('expand', 'collapse'); }else{ b2 = b1.replace('collapse', 'expand') } $('#'+b1).addClass('mod-tb-btn-hide'); $('#'+b2).removeClass('mod-tb-btn-hide'); for(var i=0; i 0){ data = {} data.rows = []; if (_delete == true) { // alles löschen, wenn komplett neues grid vorhanden.. opt.columns = []; }else{ // ..sonst nur leeren opt.fitColumns = false; opt.columns = dg.datagrid('options').columns; } data.opt = opt; if (_what == 'datagrid'){ opt.singleSelect = true; dg.datagrid(data.opt); dg.datagrid('loadData', data.rows); // grid leeren } else{ if (_what == 'propgrid'){ dg.propertygrid(data.opt); dg.propertygrid('loadData', data.rows); // grid leeren } } } return opt; }; // ### ###################################################################### // ### data-grid zeile nach id selektieren app.module[app.active_module].selectgridrow = app.module[app.active_module].selectgridrow || function(_this, _gridid, _id){ var dg = $(_gridid); if (dg.length > 0){ dg.datagrid('unselectAll'); var idfield = dg.attr('idfield') var rows = dg.datagrid('getRows'); for(var i=0,len=rows.length; i die anzahl der "checkboxen" würde sich verdoppeln. // ### var ck = $(dv).find('input.checkbox.dataset'); // ### ################################################################## var ck = dv.find('.easyui-propertygrid').prev('div').find('input.checkbox.dataset'); // console.log('checkgroup(one 1):', ck.length, ck); var pg = $(dv).find('table.easyui-propertygrid'); if (pg.length == 1){ var dg = $(pg); var groups = dg.datagrid('groups'); var group = null; var ck = $(_event.target); for(var i=0; i 0){ if (groups[r].value.indexOf('&'+ doi) > 0){ for(var i=groups[r].startIndex; i die anzahl der "checkboxen" würde sich verdoppeln. // ### var ck = $(dv).find('input.checkbox.dataset'); // ### ################################################################## var ck = dv.find('.easyui-propertygrid').prev('div').find('input.checkbox.dataset'); // console.log('checkgroup(all 1):', ck.length, ck); var pg = $(dv).find('table.easyui-propertygrid'); if (pg.length == 1){ const start = Date.now(); var ac = $(_this).attr('id').split("_").pop()+'Row'; var checked = true if (ac != 'checkRow'){ checked = false; } var dg = $(pg); var rows = dg.datagrid('getRows'); for(var i=0; i 0){ var dg = $(pg).find('table.easyui-propertygrid'); if (dg.length == 1){ var sels = dg.datagrid('getChecked'); // console.log('expandnode region:', $(_this), dg, pg, sels); app.module[app.active_module].settoolbar(_region, (sels.length != 0)?true:false); } } } } // ### ###################################################################### // ### oncollapse - (layout) app.module[app.active_module].collapseregion = app.module[app.active_module].collapseregion || function(_this, _region){ switch (_region){ case 'east': var rg = $(_this).layout('panel', _region); var pg = $(rg).find('div.datagrid'); if (pg.length > 0){ var dg = $(pg).find('table.easyui-propertygrid'); if (dg.length == 1){ dg.datagrid('clearChecked'); dg.datagrid('clearSelections'); var sels = dg.datagrid('getChecked'); // console.log('expandnode region:', $(_this), dg, pg, sels); app.module[app.active_module].settoolbar(_region, (sels.length != 0)?true:false); } } } } // ### ###################################################################### // ### toobar anpassen - (layout-region) app.module[app.active_module].settoolbar = app.module[app.active_module].settoolbar || function(_region, _doit){ switch (_region){ case 'east': var btn = 'AC_search_'; app.module[app.active_module].hide(_doit, btn, 'check', 'uncheck', 'mod-tb-btn-hide') app.module[app.active_module].enable(true, btn, 'search'); app.module[app.active_module].enable(_doit, btn, 'save'); //app.module[app.active_module].enable(_doit, btn, 'excel'); } } // ### ###################################################################### // ### menü-knoten expandieren - (knoten finden, daten (grids) laden, basis selektieren) app.module[app.active_module].expandnodetree = app.module[app.active_module].expandnodetree || function(_tree, _node){ // console.log('expandnodetree:', _node); type = (_node.attributes.type)?_node.attributes.type:"unknown" if (type == 'file'){ return; } var lt = $('#'+app.module[app.active_module].layout); if (lt.length == 1){ app.module[app.active_module].selected = new app.module[app.active_module].selitem(_node.id, _node.attributes.type, _node.attributes.alias) // var title = (_node.attributes.type == 'dataset')?_node.attributes.title:'- i found nothing similar here -' var node = $(_tree).tree('getParent', _node.target) node = (node)?node:_node alias = (node.attributes.alias)?node.attributes.alias:"root" name = (node.attributes.name)?node.attributes.name:"root" // if (typeof _node.children == 'object'){ $(_tree).tree('collapseAll'); // console.log('expandnodetree(1):', _node.target.id); $(_tree).tree('expandTo', _node.target); $(_tree).tree({ onExpand: function(_node, _tree){ app.timestart = Date.now() // var tt = $(_node.target).closest('.easyui-tree'); $(_tree).tree('select', _node.target); // console.log('onExpand(on):', _node.target, _tree); var dgt_verse = ''; app.module[app.active_module].titlepan = ''; app.module[app.active_module].titletab = title; var dgt_delim = ' » '; var dg_verse = lt.layout('panel','center'); if (dg_verse){ // var node = $(_tree).tree('getSelected'); while(node){ if (node.attributes){ if (node.attributes.type){ switch(node.attributes.type){ case "dataverse": dgt_verse = dgt_delim + node.text + dgt_verse; break; } }else{ dgt_verse = node.text + dgt_verse; app.module[app.active_module].titlepan = dgt_verse; } } node = $(_tree).tree('getParent', node.target); } dg_verse.panel('setTitle', dgt_verse); } app.module[app.active_module].loadgrid(_tree, 'datagrid', 'dataverse', alias, dgt_verse); // app.module[app.active_module].loadgrid(_tree, 'datagrid', 'dataset', alias, dgt_verse); app.module[app.active_module].loadpropgrid(_tree, _node, 'propgrid', 'file'); // $('li').removeClass('parent-menu'); elem = $(_tree).tree('getParent', _node.target); if ($(elem).length > 0){ $(elem.target).closest('li').addClass('parent-menu'); var parent = $(elem)[0] app.module[app.active_module].selparent = new app.module[app.active_module].selitem(parent.id, parent.attributes.type, parent.attributes.alias) }else{ app.module[app.active_module].selparent = new app.module[app.active_module].selitem(1, "dataverse", "root") } }(_node, _tree) }) $(_tree).tree('expand', _node.target); } }else{ app.message({type:'alert', title:'Error', msg: 'Fatal error:
. layout not found: "'+app.module[app.active_module].layout+'"'}); } } // ### grid handling - ende // ### ###################################################################### function syntaxHighlight(json) { json = json.replace(/&/g, '&').replace(//g, '>'); return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { var cls = 'number'; if (/^"/.test(match)) { if (/:$/.test(match)) { cls = 'key'; } else { cls = 'string'; } } else if (/true|false/.test(match)) { cls = 'boolean'; } else if (/null/.test(match)) { cls = 'null'; } return '' + match + ''; }); } // ### suche - in property-grid anstoßen app.module[app.active_module].gosearch = app.module[app.active_module].gosearch || function(_this, _dialog){ // console.log('gosearch(): ', app.sid, _this.focus(), _dialog) timestart = Date.now(); $(_this).first().focus(); app.module[app.active_module].execute(_dialog, 'search', 'dataverse'); } // ### suche - in property-grid laden (vom server) app.module[app.active_module].searchvalues = app.module[app.active_module].searchvalues || function(_this, _what, _who, _param){ // console.log('searchvalues:', app.active_module, _what, _who, _param, _this); var lt = $('#'+app.module[app.active_module].layout); if (lt.length == 1){ var pg_verse = lt.layout('panel','east'); var params = app.module[app.active_module].getparams('search', 'json', _what, _who) params.func = 'getValues'; params.alias = ''; params.name = app.module[app.active_module].titlepan; params.grid = '#pg_'+params.proj+'_'+params.what+'_'+params.who params.tabs = '#tabs_'+params.proj+'_'+params.what params.parm = _param; // app.module[app.active_module].emptygrid(this, params.grid, params.what, false); // grid leeren // $(params.tabs).tabs('select', 0); var tab = $(params.tabs).tabs('getTab', 1); tab.panel('options').tab.hide(); $(params.tabs).tabs('update', {tab: tab, options:{title: '- i found nothing similar here -'}}) // // console.log('searchvalues(before)',params); // app.waitmax = 100; app.wait('Search', 'Read data from "Dataverse" - waiting...', true); // var startDate = new Date(); $.postJSON('', params, function(_data){ // console.log('searchvalues(data):', params.what, 'received:', _data); app.message(_data.msg); if (_data.success == true){ var data = _data.search; if (data){ if (_data.success == true){ timeend = Date.now(); // console.log('searchvalues(dvs-complete):', ' dauer(ms):', timeend-timestart); timestart = Date.now(); var pg = $(params.grid); // console.log('searchvalues(', params.grid,')',params.what, 'received 1:', data); if (pg.length > 0){ app.module[app.active_module].settoolbar('east', false); var opt = app.module[app.active_module].emptygrid(this, params.grid, params.what, true); opt.columns = data.cols; data.opt = opt; pg.propertygrid(data.opt); if (data.total > 0){ app.module[app.active_module].searchcolumns = data.columns; app.module[app.active_module].searchentries = data.entries; app.module[app.active_module].searchtime = new Date(); pg.propertygrid('loadData', data.rows);// grid füllen window.setTimeout(function(){ if (pg_verse){ if (pg_verse.panel('options').collapsed == true){ lt.layout('expand', 'east'); } pg_verse.panel('setTitle', params.name); } groups = pg.datagrid('groups'); // console.log('searchvalues 1:', pg_verse.find('div.datagrid-group span input')); var tab = $(params.tabs).tabs('getTab', 1); tab.panel('options').tab.show(); $(params.tabs).tabs('update', {tab: tab, options:{title: 'Found: '+data.datasets+' datasets & '+data.files+' files'}}) $(params.tabs).tabs('select', 1); // var seconds = (app.module[app.active_module].searchtime.getTime() - startDate.getTime()) ; timeend = Date.now(); // console.log('searchvalues(gui-complete):', ' dauer(ms):', timeend-timestart); timestart = Date.now(); // console.log('searchvalues( data ):', seconds, data); // app.waitclose(); $('#dialog_search').dialog('close'); }, 10); }else{ app.message({type:'alert', title:'Information', msg: 'No result found for this query:

. '+_data.query+'

Please, enter a different term and search again.'}); } // app.waitclose(); } } } } },function(jqxhr, textStatus){ app.waitclose(); }); }else{ app.waitclose(); app.message({type:'alert', title:'Error', msg: 'Fatal error:
. layout not found: "'+app.module[app.active_module].layout+'"'}); } } // schreib-krücke für javascript (getestet bis ca. 3000 zeilen) app.module[app.active_module].writecsv = app.module[app.active_module].writecsv || function(_filename, _value){ var fileName = _filename; var fileContent = _value; var refFile = new Blob([fileContent], {type: 'text/plain'}); window.URL = window.URL || window.webkitURL; var dlbtn = document.getElementById("download"); dlbtn.setAttribute("href", window.URL.createObjectURL(refFile)); dlbtn.setAttribute("download", fileName); dlbtn.click(); } function _getValuefromEntry(_key, _entry){ var keyarr = _key.split('.'); var value = _entry for (var i=0; i 0){ shead+='\t'; } shead+=key; // TODO: evtl die übersetzung und reihenfolge verwenden ihead+=1; } files[entry._csvfile] = shead; // console.log('header(',entry._csvfile,'):', shead); } var writestr = files[entry._csvfile]; var sentry = ''; var ientry = 0; for (const [key, value] of Object.entries(header)){ if (ientry > 0){ sentry+='\t'; } sentry+=_getValuefromEntry(key, entry); ientry+=1; } if (sentry.length > 2){ // console.log('entry(',e,'):', sentry); files[entry._csvfile] = writestr + '\n' + sentry; } } for (const [key, value] of Object.entries(files)){ app.module[app.active_module].writecsv(key, value); // console.log('entries(', key,' ):', value); } } // ### speichern - csv vorbereiten app.module[app.active_module].createcsv = app.module[app.active_module].createcsv || function(_this, _filename){ var dv = $(_this).closest('div.datagrid'); if (dv.length == 1){ // ### ################################################################## // ### achtung! // ### das normale ermitteln der "checkboxen" funktioniert nicht, da das "grid-view" 2-mal existiert. // ### > die anzahl der "checkboxen" würde sich verdoppeln. // ### var ck = $(dv).find('input.checkbox.dataset'); // ### ################################################################## var ck = dv.find('.easyui-propertygrid').prev('div').find('input.checkbox.dataset:checked'); if (ck.length > 0){ // ermitteln aller angewählten Einträge var result = []; result.file = _filename; try{ result.dois = []; result.save = []; result.time = app.module[app.active_module].searchtime; var entries = app.module[app.active_module].searchentries; for (var k = 0; k < ck.length; k++){ result.dois.push($(ck[k]).attr('doi')); } // search - auswertung: for (var d = 0; d < result.dois.length; d++){ var doi = result.dois[d].replace(';', ''); for (var e = 0; e < entries.length; e++){ var name = ''; if (entries[e].dataset_persistent_id == doi){ name = result.file.replace('%placeholder%', '_file_'+entries[e].dataset_name); }else{ if (entries[e].global_id == doi){ name = result.file.replace('%placeholder%', '_dataset_'+entries[e].name); }else{ continue; } } if (name.length > 0){ // console.log('createcsv(', e, '):', name) entries[e]._csvfile = name; result.save.push(entries[e]); } } } // result.save.enries = entries; }finally{ // console.log('savecsv(before)', _filename, result, files); // einträge bearbeiten und zum speichern merken app.module[app.active_module].searchresult = result; app.module[app.active_module].fillcsv(_this, result); for (var file in files) { var writestr = ''; // console.log('<< new file:', file); for (const [ikey, value] of Object.entries(files[file])) { if (ikey > 0){ writestr+='\n'; } writestr+=value; } } } }else{ app.message({type:'alert', title:'Information', msg: 'Data selection:
. no values checked.'}); } }else{ app.message({type:'alert', title:'Error', msg: 'Fatal error:
. datagrid not found: "'+app.module[app.active_module].layout+'"'}); } } // ### speichern - csv vorbereiten app.module[app.active_module].savecsv = app.module[app.active_module].savecsv || function(_this, _what, _who, _param){ var params = app.module[app.active_module].getparams('db', 'json', 'params', 'search.header') params.func = 'getParams'; params.time = app.getTimecompact(app.module[app.active_module].searchtime); app.module[app.active_module].searchheader = {} $.postJSON('', params, function(_data){ app.message(_data.msg); if (_data.success == true){ // console.log('savecsv(data):', params.what, 'received :', _data); app.module[app.active_module].searchheader = _data.columns; app.module[app.active_module].createcsv(_this, params.time+'_%placeholder%.csv'); }else{ app.confirm( {type:'alert', title:'Information', msg: 'No search "header" found:

. i will use a standard "header" names.', callback: function(r){ if (r){ app.module[app.active_module].createcsv(_this, params.time+'_%placeholder%.csv'); }} }); } },function(jqxhr, textStatus){ // }); } // ### speichern - excel app.module[app.active_module].saveexcel = app.module[app.active_module].saveexcel || function(_this, _what, _who, _param){ // console.log('saveexcel:', app.active_module, _what, _who, _param, _this); var dv = $(_this).closest('div.datagrid'); if (dv.length == 1){ // ### ################################################################## // ### achtung! // ### das normale ermitteln der "checkboxen" funktioniert nicht, da das "grid-view" 2-mal existiert. // ### > die anzahl der "checkboxen" würde sich verdoppeln. // ### var ck = $(dv).find('input.checkbox.dataset'); // ### ################################################################## var ck = dv.find('.easyui-propertygrid').prev('div').find('input.checkbox.dataset:checked'); if (ck.length > 0){ var params = app.module[app.active_module].getparams('excel', 'json', _what, _who) params.func = 'getValues'; params.alias = ''; params.name = app.module[app.active_module].titlepan; params.grid = '#pg_'+params.proj+'_'+params.what+'_'+params.who params.tabs = '#tabs_'+params.proj+'_'+params.what for (var i = 0; i < ck.length; i++){ _param.push({dois: $(ck[i]).attr('doi')}); } params.parm = _param; // // ### ################################################################## // ### achtung! // ### das normale ermitteln der "checkboxen" funktioniert nicht, da das "grid-view" 2-mal existiert. // ### > die anzahl der "checkboxen" würde sich verdoppeln. // ### var ck = $(dv).find('input.checkbox.dataset'); // ### ################################################################## // console.log('saveexcel(before)',params, ck); $.postJSON('', params, function(_data){ // console.log('saveexcel(data):', params.what, 'received:', _data); app.message(_data.msg); if (_data.success == true){ // nicht implementiert } },function(jqxhr, textStatus){ // }); }else{ app.message({type:'alert', title:'Information', msg: 'Data selection:
. no values checked.'}); } }else{ app.message({type:'alert', title:'Error', msg: 'Fatal error:
. datagrid not found: "'+app.module[app.active_module].layout+'"'}); } } app.module[app.active_module].func = app.module[app.active_module].func || function(_this, _func, _who, _params){ // console.log("func:", _func, _who, _params, ' > element:', _this) switch (_func){ case 'check': app.module[app.active_module].checkgroups(_this, _who); break; case 'expand': app.module[app.active_module].expandgroups(_this, _who); break; case 'search':{ params = _params if (app.module[app.active_module].selected){ if (app.module[app.active_module].selected.alias){ params.push({subtree: app.module[app.active_module].selected.alias}); }else{ if (app.module[app.active_module].selparent){ if (app.module[app.active_module].selparent.alias){ params.push({subtree: app.module[app.active_module].selparent.alias}); }else{ params.push({subtree: ":root"}); } }else{ params.push({subtree: ":root"}); } } } app.module[app.active_module].searchvalues(_this, 'propgrid', 'search', params); break; } case 'save':{ params = [] switch (_who){ case "excel": // sichern als XLS app.module[app.active_module].saveexcel(_this, _func, _who, params); break; case "csv": // sichern als CSV app.module[app.active_module].savecsv(_this, _func, _who, params); break; case "params": // sichern der suchparameter app.module[app.active_module].saveparams(_this, _func, _who, params); break; default: app.message({type:'alert', title:'Error', msg: 'Fatal error:
. unknown type (who): "'+_who+'"'}); } break; } case 'load':{ params = [] switch (_who){ case "params": // lesen der suchparameter app.module[app.active_module].loadparams(_this, _func, _who, params); break; default: app.message({type:'alert', title:'Error', msg: 'Fatal error:
. unknown type (who): "'+_who+'"'}); } break; } default: app.message({type:'alert', title:'Error', msg: 'Fatal error:
. unknown type (func): "'+_func+'"'}); } } app.module[app.active_module].opendialog = app.module[app.active_module].opendialog || function( _data, _layout, _dialog, _title){ app.message(_data.msg); if (_data.success == true){ var shtml = unescape(_data.html); window.setTimeout(function (_html) { // niemals 2-mal einfügen, deshalb evtl. vorher löschen.. $(_dialog).remove(); $(_layout).append(shtml);// menü, grid ... usw. füllen app.easyui(_layout); var dialog = $(_dialog); $(dialog).dialog({ title: _title, modal: true }).dialog('center').dialog('open').find("input.validatebox-text" ).first().focus(); window.setTimeout(function () { app.bindKeyaction(_dialog); disableAnchor(); }, 200); }(shtml), 50); } } app.module[app.active_module].login = app.module[app.active_module].login || function(_this){ if (document.getElementById(app.module[app.active_module].layout) !== null){ app.module[app.active_module].record = null; // var params = app.module[app.active_module].getparams('db', 'json', 'login', '') params.func = 'getHtml'; params.pref = 'archium'; params.midl = '_'; // var laynam = '#layout_'+params.what; var dlgnam = '#dialog_'+params.what; // console.log(params.what, 'request:', dlgnam, params); var layout = $(laynam); if (layout.length > 0){ var encrypted = CryptoJS.AES.encrypt('12345678', 'Klaus Wendel'); var decrypted = CryptoJS.AES.decrypt(encrypted, 'Klaus Wendel'); params.decrypted = decrypted.toString(CryptoJS.enc.Utf8); params.encrypted = encrypted.toString(CryptoJS.enc.Utf8); $.postJSON('', params, function(data){ // console.log(params.what, 'received:', data); app.message(data.msg); if (data.success == true){ app.module[app.active_module].opendialog(data, laynam, dlgnam, 'Login'); } },function(jqxhr, textStatus){ // }); } } }; app.module[app.active_module].logout = app.module[app.active_module].logout || function(_this){ app.module[app.active_module].record = null; // var params = app.module[app.active_module].getparams('db', 'json', 'logout', '') params.func = 'routeToURL'; params.refr = false; // $.postJSON('', params, function(data){ // console.log('data:', data); app.message(data.msg); if (data.success == true){ app.sid = ''; var route = data.route.trim(); if (route.length > 0){ window.open(route,"_self"); } } },function(jqxhr, textStatus){ // console.log('complete:', jqxhr, textStatus); // }); } app.module[app.active_module].search = app.module[app.active_module].search || function(_this){ if (document.getElementById(app.module[app.active_module].layout) !== null){ app.module[app.active_module].record = null; // var params = app.module[app.active_module].getparams('db', 'json', 'search', '') params.func = 'getHtml'; params.pref = 'archium'; params.midl = '_'; params.parm = []; params.parm.push({meta: "subject"}); // var laynam = '#layout_'+params.what; var dlgnam = '#dialog_'+params.what; // console.log(params.what, 'request:', dlgnam, params); var layout = $(laynam); if (layout.length > 0){ timestart = Date.now(); $.postJSON('', params, function(data){ // console.log(params.what, 'received:', data); app.message(data.msg); if (data.success == true){ app.module[app.active_module].opendialog(data, laynam, dlgnam, 'Search'); } },function(jqxhr, textStatus){ // }); } } }; // behandlung vor der ausführung der funktion app.module[app.active_module].execute = app.module[app.active_module].execute || function(_this, _func, _who){ // console.log('execute:', _func, _who, _this); switch (_func){ case 'search':{ if ($(_this).length > 0){ //aufbereiten der Formulardaten var params = [] params.push({per_page: 1000}); switch (_who){ case 'dataverse':{ params.push({type: "dataverse"}); params.push({type: "dataset"}); break; } case 'dataset': case 'file':{ params.push({type: "dataset"}); params.push({type: "file"}); break; } } // echte eingabefelder im formular laden var inputs = $('#dialog_'+_func).find('input.textbox-f'); for(var i=0; i 0){ var field = $(inputs[i]).attr('field'); params.push({search: field+'=['+value+']'}); } } // var icheck = 0; var checks = $('#dialog_'+_func).find(".easyui-datalist"); var field = checks.attr('field') var value = ''; var rows = checks.datagrid('getChecked'); // console.log('execute check( ):', field, rows); for(var i=0; i0){ value+=';'; } value+='"'+$(rows[i]).prop('value')+'"'; icheck+=1; } if (icheck>0){ params.push({search: field+'=[{'+value+'}]'}); } // params.push({_q_: '*'}); // console.log('execute 1:', _func, _who, params); // besser nicht sortieren, weil die reihenfolge der "datasets" und "files" sonst durcheinander kommt. // bei getrennter bearbeitung (erst "datasets", dann "files" zuordnen) gibt es kein problem params.push({sort: "date"}); params.push({order: "desc"}); app.module[app.active_module].func(_this, _func, _who, params); }else{ app.message({type:'alert', title:'Error', msg: 'Dialog error:
. dialog was not found: "dialog_search"'}); } break; } } } app.module[app.active_module].getgrouptitle = app.module[app.active_module].getgrouptitle || function(_value){ var slabel = '' if (_value.indexOf('&dataset;') > -1){ valarr = _value.split('&') // array: // . 0 = name // . 1 = type (dataset) // . 2 = doi slabel = slabel + ''; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + '
 ' + valarr[0] + '
'; // console.log('getgrouptitle(dataset):', valarr); }else{ valarr = _value.split('&') // array: // . 0 = name // . 1 = id // . 2 = type (file) // . 3 = content type (f.e. text/plain) content = valarr[3].split('/') switch (content[0]){ case "text": { sicon= "icon-file"; if (content.length > 1) { switch (content[1]) { case "tab-separated-values": sicon = "icon-tabular"; break; case "css": sicon = "icon-code"; break; case "html": sicon = "icon-code"; break; case "x-go": sicon = "icon-code"; break; case "x-tex": sicon = "icon-code"; break; case "javascript": sicon = "icon-code"; break; default: sicon = "icon-file"; } } break; } case "image": sicon = "icon-image"; break; case "audio": sicon= "icon-audio"; break; case "video": sicon = "icon-video";break; case "application": { sicon= "icon-package"; if (content.length > 1) { switch (content[1]) { case "json": sicon = "icon-code"; } } break; } default: sicon= "icon-file"; } // console.log('getgrouptitle(file):', valarr, content, sicon); slabel = slabel + ''; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + ' '; slabel = slabel + '
  − ' + valarr[0] + ' ' + valarr[1] + '
'; // console.log('getgrouptitle(file):', valarr); } return slabel; }