| Line 1: |
Line 1: |
| | // License: GPL | | // License: GPL |
| − | // Indexeddb JavaScript | + | // User Interface Rendering |
| − | console.log('indb active'); | + | console.log('Interface handler loading'); |
| | + | |
| | + | function InterfaceMediaContainer ( WikibaseProcessor, indexedDBobject ) { |
| | + | |
| | + | this.renderInterface = function( sqitch ) { |
| | + | switch( sqitch ) { |
| | + | case 'controller_id': |
| | + | controller_render(); |
| | + | break; |
| | + | case 'personal_data_id': |
| | + | pd_site_render(); |
| | + | break; |
| | + | case 'interface_button_id': |
| | + | personal_data_edit_interface_render(); |
| | + | break; |
| | + | } |
| | + | } |
| | + | |
| | + | var button_save = [], |
| | + | button_remove = [], |
| | + | textInput = []; |
| | + | |
| | + | async function controller_render(){ |
| | + | console.log("this function is done by the current page controller for now"); |
| | + | notify_porting(); |
| | + | } |
| | + | |
| | + | async function pd_site_render(){ |
| | + | |
| | + | }; |
| | + | |
| | + | async function personal_data_edit_interface_render(){ |
| | + | clear_render(); |
| | + | |
| | + | // Get concerns relation :: Parts of this must be moved upstream, MAIN should know that this is the data the renderer will need and provide it |
| | + | |
| | + | var concern_origin = WikibaseProcessor.checkentity( { this_concerns: [ WBEStructure['concernsRelation'], WBEStructure['IDPropLoc'], WBEStructure['qIDPropName'] ] } )['this_concerns'][0]; |
| | + | |
| | + | // Get defval for entity :: Parts of this must be moved upstream, MAIN should know that this is the data the renderer will need and provide it |
| | + | |
| | + | var default_value = WikibaseProcessor.checkentity( { default_value: [ WBEStructure['defaultValRelation'], WBEStructure['IDPropLoc'] ] } )['default_value'][0]; //defal |
| | + | |
| | + | var get_record = indexedDBobject.EnqueuePDIO('update record'); |
| | + | |
| | + | get_record.then( function(result) { |
| | + | |
| | + | mw.loader.using( 'oojs-ui-core' ).done( function () { |
| | + | |
| | + | button_save = [], |
| | + | button_remove = [], |
| | + | textInput = []; |
| | + | |
| | + | var extrafield = ( result[concern_origin] != undefined ) ? Object.keys(result[concern_origin]).length : 0; |
| | + | |
| | + | button_save[ extrafield ] = new OO.ui.ButtonWidget( { label: "Save", classes: [ 'pduimark' ] } ); |
| | + | |
| | + | textInput[ extrafield ] = new OO.ui.TextInputWidget( { |
| | + | placeholder: default_value, |
| | + | classes: [ 'pduimark' ] |
| | + | } ); |
| | + | |
| | + | button_save[ extrafield ].on( 'click', function () { |
| | + | indexedDBobject.EnqueuePDIO('update record', concern_origin, extrafield, textInput[ extrafield ].value ); |
| | + | personal_data_edit_interface_render(); |
| | + | }); |
| | + | |
| | + | $( '#mw-content-text' ).prepend( button_save[ extrafield ].$element ); |
| | + | $( '#mw-content-text' ).prepend( textInput[ extrafield ].$element ); |
| | + | |
| | + | if ( extrafield > 0) { |
| | + | Object.keys( result[concern_origin] ).forEach( function(data) { |
| | + | button_save[data] = new OO.ui.ButtonWidget( { label: "Save", classes: [ 'pduimark' ] } ); |
| | + | button_remove[data] = new OO.ui.ButtonWidget( { label: "Delete", classes: [ 'pduimark' ] } ); |
| | + | textInput[data] = new OO.ui.TextInputWidget( { |
| | + | value: result[concern_origin][data], /// |
| | + | placeholder: default_value, |
| | + | classes: [ 'pduimark' ] |
| | + | } ); |
| | + | button_save[data].on( 'click', function () { |
| | + | |
| | + | indexedDBobject.EnqueuePDIO('update record', concern_origin, data, textInput[ data ].value ); |
| | + | |
| | + | personal_data_edit_interface_render(); |
| | + | }); |
| | + | |
| | + | button_remove[data].on( 'click', function () { |
| | + | indexedDBobject.EnqueuePDIO('remove from record', concern_origin, data ); |
| | + | personal_data_edit_interface_render(); |
| | + | }); |
| | + | $( '#mw-content-text' ).prepend( button_remove[data].$element ); |
| | + | $( '#mw-content-text' ).prepend( button_save[data].$element ); |
| | + | $( '#mw-content-text' ).prepend( textInput[data].$element ); |
| | + | |
| | + | }); |
| | + | |
| | + | } |
| | + | }); |
| | + | }); |
| | + | }; |
| | + | |
| | + | function clear_render() { |
| | + | var ifel = document.getElementsByClassName('pduimark'); |
| | + | while( ifel[0] ) { |
| | + | ifel[0].parentNode.removeChild(ifel[0]); |
| | + | }; |
| | + | }; |
| | + | |
| | + | function notify_porting() { |
| | + | |
| | + | mw.loader.using( 'oojs-ui-core' ).done( function () { |
| | + | |
| | + | var button_import = new OO.ui.SelectFileWidget( { label: "Import Personal Data", classes: [ 'pduimark' ] } ), |
| | + | |
| | + | button_export = new OO.ui.ButtonWidget( { label: "Export Personal Data", classes: [ 'pduimark' ] } ); |
| | + | |
| | + | button_import.on( 'change', function (event) { |
| | + | |
| | + | if (window.webkitURL != null) { |
| | + | console.log("loading file on webkit") |
| | + | } else { |
| | + | console.log("loading file non webkit") |
| | + | } |
| | + | |
| | + | console.log( event ); |
| | + | |
| | + | }); |
| | + | |
| | + | button_export.on( 'click', function () { |
| | + | |
| | + | var get_record = indexedDBobject.EnqueuePDIO('get record'); |
| | + | |
| | + | get_record.then( function(result) { |
| | + | console.log("happening"); |
| | + | if ( result === undefined ) { window.alert("No local data to export") } else { |
| | + | |
| | + | var filename_tosaveas = "pdiolocalexport_" + result.name.user + "_" + Date.now() + '.json'; |
| | + | |
| | + | result.id = ''; |
| | + | result.name.user = ''; |
| | + | |
| | + | var export_to_text = JSON.stringify(result); |
| | + | var textFileAsBlob = new Blob([export_to_text], {type:'text/plain'}); |
| | + | var downloadLink = document.createElement("a"); |
| | + | downloadLink.download = filename_tosaveas; |
| | + | if (window.webkitURL != null) |
| | + | { |
| | + | // Chrome allows the link to be clicked |
| | + | // without actually adding it to the DOM. |
| | + | downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob); |
| | + | } |
| | + | else |
| | + | { |
| | + | // Firefox requires the link to be added to the DOM |
| | + | // before it can be clicked. |
| | + | downloadLink.href = window.URL.createObjectURL(textFileAsBlob); |
| | + | downloadLink.style.display = "none"; |
| | + | document.body.appendChild(downloadLink); |
| | + | } |
| | + | |
| | + | downloadLink.click(); |
| | + | |
| | + | } |
| | + | |
| | + | }); |
| | + | |
| | + | }); |
| | + | |
| | + | mw.notify( $( button_import.$element ), { autoHide: false } ); |
| | + | mw.notify( $( button_export.$element ), { autoHide: false } ); |
| | + | }); |
| | + | } |
| | + | |
| | + | } |