From 33d163512e0f4137589b5ed6a364756b4da87b89 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 5 Feb 2020 11:17:55 -0500 Subject: [PATCH] Still working on listing the presentations --- app/index.html | 5 +- app/js/module_app_ui_v2 2020-02-03.js.bak | 436 ++++++++++++++++++++ app/js/module_app_ui_v2 2020-02-05.js.bak | 459 ++++++++++++++++++++++ app/js/module_app_ui_v2.js | 108 +++-- 4 files changed, 978 insertions(+), 30 deletions(-) create mode 100644 app/js/module_app_ui_v2 2020-02-03.js.bak create mode 100644 app/js/module_app_ui_v2 2020-02-05.js.bak diff --git a/app/index.html b/app/index.html index f4fbecd..648c7fb 100644 --- a/app/index.html +++ b/app/index.html @@ -266,6 +266,9 @@ let safe_to_render_launcher = false; // currently only set to true in module_app_idb.js let run_check_file_cache = false; + let looping_tbl_event_presentation = false; + + //const loading_loop_interval = app_config.loading_loop_interval; // in milliseconds //const loading_loop_interval = 500; //const main_loop_interval = app_config.main_loop_interval; // in milliseconds @@ -401,7 +404,7 @@ run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt safe_to_render_launcher = false; // Set to false so that the launcher render only starts after the launcher object has updated idb_event_presentation_check_datetime = Date.now() + idb_event_presentation_check_period; - let render_event_presentation_records_result = uiv2.render_event_presentation_records(); // NOTE: v2 idb to ui + let render_event_presentation_records_result = await uiv2.render_event_presentation_records(); // NOTE: v2 idb to ui } if (idb_event_presenter_check_datetime < Date.now()) { diff --git a/app/js/module_app_ui_v2 2020-02-03.js.bak b/app/js/module_app_ui_v2 2020-02-03.js.bak new file mode 100644 index 0000000..8101a6f --- /dev/null +++ b/app/js/module_app_ui_v2 2020-02-03.js.bak @@ -0,0 +1,436 @@ + +exports.render_event_records = function () { + console.log('Rendering event records...'); + //console.log(tbl_event); + //console.log(event_id); + + tbl_event.iterate(function(value, key, iteration) { + if (value.id == event_id) { + console.log('*** Event id ('+event_id+') found in table.'); + document.getElementById('event_name').innerHTML = '@'+value.name; + } else { + console.log('Event not it.'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_file complete') + tbl_event_complete = true; + }); + +} + +// NOTE: The event_file table should probably only be looped through once when the table is actually updated. +// NOTE: Not each time the other objects (event, location, session, presentation, presenter) are updated. +exports.render_event_file_records = function (event_files, event_id) { + console.log('Rendering event file records...'); + + /* + tbl_event_file.iterate(function(value, key, iteration) { + if (value.id == event_id) { + console.log('*** Event id ('+event_id+') found in table.'); + document.getElementById('event_name').innerHTML = '@'+value.name; + } else { + console.log('Event not it.'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_file complete') + tbl_event_complete = true; + }); + + + document.getElementById('event_files_menu').innerHTML = '

Event Files

'; + document.getElementById('event_files_menu').innerHTML += ''; + + */ + +} + + +exports.render_event_location_records = async function () { + console.log('Rendering event location records...'); + + await tbl_event_location.iterate(function(value, key, iteration) { + if (value.id == event_location_id) { + console.log('*** Event location id ('+event_location_id+') found in table.'); + document.getElementById('location_name').innerHTML = ' '+value.name; + } else { + console.log('Event location not it.'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_file complete') + tbl_event_location_complete = true; + }); + +} + + +exports.render_event_location_file_records = function (events) { + console.log('Rendering event location file records...'); +} + + +exports.render_event_session_records = async function () { + console.log('Rendering event session records...'); + + // First: update or add sessions + tbl_event_session.iterate(function(value, key, iteration) { + if (value.event_id == event_id && value.event_location_id == event_location_id) { + console.log('*** Event session id ('+value.id+') is part of this event location.'); + + // *** ** * Checking if the session is already in the launcher menu * ** *** + if (document.getElementById('menu_event_session_'+value.id)) { + // Update the session menu list item + document.getElementById('menu_event_session_'+value.id).innerHTML = value.name; + } else { + // Unhide the sessions menu + if (document.getElementById('sessions_menu').classList.contains('d-none') ) { + document.getElementById('sessions_menu').classList.remove('d-none'); + document.getElementById('sessions_menu').classList.add('d-block'); + } + + // Add the new session to the session menu + let node = document.createElement('LI'); + node.id = 'menu_event_session_'+value.id; + node.className = 'list-group-item btn btn-info d-flex justify-content-between align-items-center btn_view_session'; + node.setAttribute('data-session_id', value.id); + let text_node = document.createTextNode(value.name); + node.appendChild(text_node); + + document.getElementById('sessions_menu').getElementsByTagName('ul')[0].appendChild(node); + } + + let session_startdatetime = new Date(value.start_datetime); + + // *** ** * Checking if the session is already in the launcher sessions detail * ** *** + if (document.getElementById('detail_session_'+value.id)) { + // Update the launcher sessions list + // NOTE: Updating this text is very awkward? + document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].firstChild.data = value.name; + console.log(document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0]); + document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].getElementsByTagName('span')[0].innerHTML = dateFns.format(session_startdatetime, 'ddd h:mm A'); + } else { + // Add the new session to the launcher sessions list + let div_node = document.createElement('DIV'); + div_node.id = 'detail_session_'+value.id; + div_node.className = 'container d-none session_detail'; + div_node.setAttribute('data-session_id', value.id); + + let h2_node = document.createElement('H2'); + h2_node.className = 'session_title d-flex justify-content-between align-items-center'; + + // NOTE: Instead of a text node should this just be wrapped in a set of tags? + // Updating this is kind of awkward... see above + let h2_text_node = document.createTextNode(value.name); + h2_node.appendChild(h2_text_node); + + let h2_span_node = document.createElement('SPAN'); + h2_span_node.className = 'badge badge-pill badge-info'; + + let h2_span_text_node = document.createTextNode(dateFns.format(session_startdatetime, 'ddd h:mm A')); + h2_span_node.appendChild(h2_span_text_node); + + h2_node.appendChild(h2_span_node); + + div_node.appendChild(h2_node); + + // Add placeholder cards for session files and session presentations + // Files + let files_div_node = document.createElement('DIV'); + files_div_node.className = 'card session_files'; + + let files_header_div_node = document.createElement('DIV'); + files_header_div_node.className = 'card-header'; + + let files_header_text_node = document.createTextNode('Sessions Files:'); + files_header_div_node.appendChild(files_header_text_node); + + let files_body_div_node = document.createElement('DIV'); + files_body_div_node.className = 'card-body'; + + let files_body_ul_node = document.createElement('UL'); + files_body_ul_node.className = 'list-group list-group-flush'; + + files_body_div_node.appendChild(files_body_ul_node); + + files_div_node.appendChild(files_header_div_node); + files_div_node.appendChild(files_body_div_node); + + div_node.appendChild(files_div_node); + + // Presentations + let presentations_div_node = document.createElement('DIV'); + presentations_div_node.className = 'card session_presentations'; + + let presentations_header_div_node = document.createElement('DIV'); + presentations_header_div_node.className = 'card-header'; + + let presentations_header_text_node = document.createTextNode('Presentations:'); + presentations_header_div_node.appendChild(presentations_header_text_node); + + let presentations_body_div_node = document.createElement('DIV'); + presentations_body_div_node.className = 'card-body'; + + let presentations_body_ul_node = document.createElement('UL'); + presentations_body_ul_node.className = 'list-group list-group-flush'; + + presentations_body_div_node.appendChild(presentations_body_ul_node); + + presentations_div_node.appendChild(presentations_header_div_node); + presentations_div_node.appendChild(presentations_body_div_node); + + div_node.appendChild(presentations_div_node); + + + document.getElementById('launcher_sessions').appendChild(div_node); + } + + } else { + console.log('Event session not it.'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_session complete') + tbl_event_session_complete = true; + }).then(function() { + // Second: remove sessions from the launcher sessions menu and sessions list + // This is basing the removal of sessions only on the menu list of sessions. + // In theory this should be safe as long as nothing gets out sync... + console.log('Looking for removed sessions...'); + + let session_list_items = document.getElementById('sessions_menu').getElementsByTagName('ul')[0].childNodes; + console.log(session_list_items); + //console.log(session_list_items.length); + + for (var i in session_list_items) { + console.log(session_list_items[i].getAttribute('data-session_id')); + //console.log(session_list_items[i]); + let session_id = session_list_items[i].getAttribute('data-session_id') + let session_valid = false; + + tbl_event_session.iterate(function(value, key, iteration) { + //console.log(value.event_id+' ?= '+event_id+' : '+value.event_location_id+' ?= '+event_location_id+' : '+value.id+' ?= '+session_id); + if (value.event_id == event_id && value.event_location_id == event_location_id && value.id == session_id) { + // The session is still part of the event and the location + session_valid = true; + } else { + // The session is no longer part of the event and or the location + //console.log('Need to remove session id '+session_id); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_session looking for sessions to remove is complete') + if (session_valid) { + console.log('Keep session id '+session_id); + } else { + console.log('Remove session id '+session_id); + document.getElementById('menu_event_session_'+session_id).remove(); // Remove the node from the launcher sessions menu list + document.getElementById('detail_session_'+session_id).remove(); // Remove the node from the launcher sessions list + } + }); + } + }); + + // Third: re-index view session buttons + // NOTE: Should this go in a .then() section? + // NOTE: It might make even more sense to only have this done individually per add. Should also do a remove to keep things clean. + //index_launcher_sessions('btn_view_session'); + index_launcher_sessions('btn_view_session'); + +} + + +exports.render_event_session_file_records = function (events) { + console.log('Rendering event session file records...'); +} + + +exports.render_event_presentation_records = async function (events) { + console.log('********** ********* ****** ** * ** ****** ********* *********'); + console.log('Rendering event presentation records...'); + + let launcher_sessions = document.getElementById('launcher_sessions').childNodes; //_list_items + console.log(launcher_sessions); + console.log(tbl_event_presentation); + + for (let i in launcher_sessions) { + console.log(launcher_sessions[i].getAttribute('data-session_id')); + let session_id = launcher_sessions[i].getAttribute('data-session_id'); + + //console.log(launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul').childElementCount); + + let presentations_list = launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].childNodes; + console.log(presentations_list); + //console.log(presentations_list.length); + if (presentations_list.length) { + console.log('Presentations listed under this session (id='+session_id+'). (launcher sessions loop i = '+i+')'); + console.log(launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')); + /* + * loop through list of presentations + * if in + */ + await tbl_event_presentation.iterate(function(value, key, iteration) { + if (document.getElementById('event_presentation_'+value.id)) { + // Update the launcher presentations list for a session + document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('strong')[0].innerHTML = value.name; + let presentation_startdatetime = new Date(value.start_datetime); + document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerHTML = dateFns.format(presentation_startdatetime, 'h:mm A'); + } else { + + } + }).then(function() { + + }); + + } else { + console.log('No presentations listed under this session (id='+session_id+'). Time to iterate through presentations table. (launcher sessions loop i = '+i+')'); + + let new_i = i; + console.log(new_i); + + + //if (!looping_tbl_event_presentation) { + // looping_tbl_event_presentation = true; + await tbl_event_presentation.iterate(function(value, key, iteration) { + console.log('Launcher sessions loop i: '+i+' : '+new_i); + if (value.event_session_id == session_id) { + console.log('*** Presentation id ('+value.id+') is part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); + + // Add the new session to the launcher sessions list + let presentation_li_node = document.createElement('LI'); + presentation_li_node.id = 'event_presentation_'+value.id; + presentation_li_node.className = 'list-group-item'; + presentation_li_node.setAttribute('data-presentation_id', value.id); + + let presentation_li_heading_div_node = document.createElement('DIV'); + presentation_li_heading_div_node.className = 'list-group-item-heading d-flex justify-content-between align-items-center'; + + let presentation_name_strong_node = document.createElement('STRONG'); + + let presentation_name_text_node= document.createTextNode(value.name); + presentation_name_strong_node.appendChild(presentation_name_text_node); + + let presentation_heading_span_node = document.createElement('SPAN'); + presentation_heading_span_node.className = 'badge badge-pill badge-info'; + + let presentation_startdatetime = new Date(value.start_datetime); + let presentation_heading_span_text_node = document.createTextNode(dateFns.format(presentation_startdatetime, 'h:mm A')); + presentation_heading_span_node.appendChild(presentation_heading_span_text_node); + + presentation_li_heading_div_node.appendChild(presentation_name_strong_node); + presentation_li_heading_div_node.appendChild(presentation_heading_span_node); + + presentation_li_node.appendChild(presentation_li_heading_div_node); + + console.log('************ ISSUE ************'); + console.log(launcher_sessions[i].getElementsByClassName('session_presentations')); + //launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].appendChild(presentation_li_node); + let launcher_session_details = document.getElementById('detail_session_'+session_id); + console.log(launcher_session_details.getElementsByClassName('session_presentations')); + let session = document.getElementById('detail_session_'+session_id).getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].appendChild(presentation_li_node); + } else { + console.log('*** Presentation id ('+value.id+') is NOT part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_presentation looking for presentations to update or add is complete'); + looping_tbl_event_presentation = true; + //tbl_event_presentation_iterate_count++; + /* + if (session_valid) { + console.log('Keep session id '+session_id); + } else { + console.log('Remove session id '+session_id); + document.getElementById('menu_event_session_'+session_id).remove(); // Remove the node from the launcher sessions menu list + document.getElementById('detail_session_'+session_id).remove(); // Remove the node from the launcher sessions list + } + */ + }); + + //} else { + // console.log('Waiting until tbl_event_presentation has finished iterating...'); + //} + + + /* +
+
Presentations:
+
+
    +
    +
    + */ + + + } + + //} else { + // console.log('Waiting until launcher_sessions has finished looping...'); + //} + + } + + return true; +} + + +exports.render_event_presention_file_records = function (events) { + console.log('Rendering event presentation file records...'); +} + + +exports.render_event_presenter_records = function (events) { + console.log('Rendering event presenter records...'); +} + + +exports.render_event_presenter_file_records = function (events) { + console.log('Rendering event presenter file records...'); +} + + +/* Updated 2020-01-31 */ +function index_launcher_sessions(class_name) { + console.log('Indexing launcher sessions with class name: '+class_name); + var class_elements = document.getElementsByClassName(class_name); + + + for (var i = 0; i < class_elements.length; i++) { + class_elements[i].addEventListener( 'click', function() {view_session( this.getAttribute('data-session_id')) } ); + } + console.log(class_elements); + return true; +} + + +/* Updated 2020-01-31 */ +function view_session(session_id) { + var class_elements = document.getElementsByClassName('session_detail'); // This class name should be the class names for each div container + console.log('*** View session ID: '+session_id); + for (var i = 0; i < class_elements.length; i++) { + console.log('*** checking: '+class_elements[i].getAttribute('data-session_id')); + if (class_elements[i].getAttribute('data-session_id') == session_id) { + console.log('show'); + class_elements[i].classList.remove('d-none'); + class_elements[i].classList.add('d-block'); + } else { + console.log('hide'); + class_elements[i].classList.remove('d-block'); + class_elements[i].classList.add('d-none'); + } + } + + return true; +} + + +function format_bytes(bytes, decimals = 2) { + if (bytes === 0) return '0 Bytes'; + + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; +} diff --git a/app/js/module_app_ui_v2 2020-02-05.js.bak b/app/js/module_app_ui_v2 2020-02-05.js.bak new file mode 100644 index 0000000..955bcc4 --- /dev/null +++ b/app/js/module_app_ui_v2 2020-02-05.js.bak @@ -0,0 +1,459 @@ + +exports.render_event_records = function () { + console.log('Rendering event records...'); + //console.log(tbl_event); + //console.log(event_id); + + tbl_event.iterate(function(value, key, iteration) { + if (value.id == event_id) { + console.log('*** Event id ('+event_id+') found in table.'); + document.getElementById('event_name').innerHTML = '@'+value.name; + } else { + console.log('Event not it.'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_file complete') + tbl_event_complete = true; + }); + +} + +// NOTE: The event_file table should probably only be looped through once when the table is actually updated. +// NOTE: Not each time the other objects (event, location, session, presentation, presenter) are updated. +exports.render_event_file_records = function (event_files, event_id) { + console.log('Rendering event file records...'); + + /* + tbl_event_file.iterate(function(value, key, iteration) { + if (value.id == event_id) { + console.log('*** Event id ('+event_id+') found in table.'); + document.getElementById('event_name').innerHTML = '@'+value.name; + } else { + console.log('Event not it.'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_file complete') + tbl_event_complete = true; + }); + + + document.getElementById('event_files_menu').innerHTML = '

    Event Files

    '; + document.getElementById('event_files_menu').innerHTML += ''; + + */ + +} + + +exports.render_event_location_records = async function () { + console.log('Rendering event location records...'); + + await tbl_event_location.iterate(function(value, key, iteration) { + if (value.id == event_location_id) { + console.log('*** Event location id ('+event_location_id+') found in table.'); + document.getElementById('location_name').innerHTML = ' '+value.name; + } else { + console.log('Event location not it.'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_file complete') + tbl_event_location_complete = true; + }); + +} + + +exports.render_event_location_file_records = function (events) { + console.log('Rendering event location file records...'); +} + + +exports.render_event_session_records = async function () { + console.log('Rendering event session records...'); + + // First: update or add sessions + tbl_event_session.iterate(function(value, key, iteration) { + if (value.event_id == event_id && value.event_location_id == event_location_id) { + console.log('*** Event session id ('+value.id+') is part of this event location.'); + + // *** ** * Checking if the session is already in the launcher menu * ** *** + if (document.getElementById('menu_event_session_'+value.id)) { + // Update the session menu list item + document.getElementById('menu_event_session_'+value.id).innerHTML = value.name; + } else { + // Unhide the sessions menu + if (document.getElementById('sessions_menu').classList.contains('d-none') ) { + document.getElementById('sessions_menu').classList.remove('d-none'); + document.getElementById('sessions_menu').classList.add('d-block'); + } + + // Add the new session to the session menu + let node = document.createElement('LI'); + node.id = 'menu_event_session_'+value.id; + node.className = 'list-group-item btn btn-info d-flex justify-content-between align-items-center btn_view_session'; + node.setAttribute('data-session_id', value.id); + let text_node = document.createTextNode(value.name); + node.appendChild(text_node); + + document.getElementById('sessions_menu').getElementsByTagName('ul')[0].appendChild(node); + } + + let session_startdatetime = new Date(value.start_datetime); + + // *** ** * Checking if the session is already in the launcher sessions detail * ** *** + if (document.getElementById('detail_session_'+value.id)) { + // Update the launcher sessions list + // NOTE: Updating this text is very awkward? + document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].firstChild.data = value.name; + console.log(document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0]); + document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].getElementsByTagName('span')[0].innerHTML = dateFns.format(session_startdatetime, 'ddd h:mm A'); + } else { + // Add the new session to the launcher sessions list + let div_node = document.createElement('DIV'); + div_node.id = 'detail_session_'+value.id; + div_node.className = 'container d-none session_detail'; + div_node.setAttribute('data-session_id', value.id); + + let h2_node = document.createElement('H2'); + h2_node.className = 'session_title d-flex justify-content-between align-items-center'; + + // NOTE: Instead of a text node should this just be wrapped in a set of tags? + // Updating this is kind of awkward... see above + let h2_text_node = document.createTextNode(value.name); + h2_node.appendChild(h2_text_node); + + let h2_span_node = document.createElement('SPAN'); + h2_span_node.className = 'badge badge-pill badge-info'; + + let h2_span_text_node = document.createTextNode(dateFns.format(session_startdatetime, 'ddd h:mm A')); + h2_span_node.appendChild(h2_span_text_node); + + h2_node.appendChild(h2_span_node); + + div_node.appendChild(h2_node); + + // Add placeholder cards for session files and session presentations + // Files + let files_div_node = document.createElement('DIV'); + files_div_node.className = 'card session_files'; + + let files_header_div_node = document.createElement('DIV'); + files_header_div_node.className = 'card-header'; + + let files_header_text_node = document.createTextNode('Sessions Files:'); + files_header_div_node.appendChild(files_header_text_node); + + let files_body_div_node = document.createElement('DIV'); + files_body_div_node.className = 'card-body'; + + let files_body_ul_node = document.createElement('UL'); + files_body_ul_node.className = 'list-group list-group-flush'; + + files_body_div_node.appendChild(files_body_ul_node); + + files_div_node.appendChild(files_header_div_node); + files_div_node.appendChild(files_body_div_node); + + div_node.appendChild(files_div_node); + + // Presentations + let presentations_div_node = document.createElement('DIV'); + presentations_div_node.className = 'card session_presentations'; + + let presentations_header_div_node = document.createElement('DIV'); + presentations_header_div_node.className = 'card-header'; + + let presentations_header_text_node = document.createTextNode('Presentations:'); + presentations_header_div_node.appendChild(presentations_header_text_node); + + let presentations_body_div_node = document.createElement('DIV'); + presentations_body_div_node.className = 'card-body'; + + let presentations_body_ul_node = document.createElement('UL'); + presentations_body_ul_node.className = 'list-group list-group-flush'; + + presentations_body_div_node.appendChild(presentations_body_ul_node); + + presentations_div_node.appendChild(presentations_header_div_node); + presentations_div_node.appendChild(presentations_body_div_node); + + div_node.appendChild(presentations_div_node); + + + document.getElementById('launcher_sessions').appendChild(div_node); + } + + } else { + console.log('Event session not it.'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_session complete') + tbl_event_session_complete = true; + }).then(function() { + // Second: remove sessions from the launcher sessions menu and sessions list + // This is basing the removal of sessions only on the menu list of sessions. + // In theory this should be safe as long as nothing gets out sync... + console.log('Looking for removed sessions...'); + + let session_list_items = document.getElementById('sessions_menu').getElementsByTagName('ul')[0].childNodes; + console.log(session_list_items); + //console.log(session_list_items.length); + + for (var i in session_list_items) { + console.log(session_list_items[i].getAttribute('data-session_id')); + //console.log(session_list_items[i]); + let session_id = session_list_items[i].getAttribute('data-session_id') + let session_valid = false; + + tbl_event_session.iterate(function(value, key, iteration) { + //console.log(value.event_id+' ?= '+event_id+' : '+value.event_location_id+' ?= '+event_location_id+' : '+value.id+' ?= '+session_id); + if (value.event_id == event_id && value.event_location_id == event_location_id && value.id == session_id) { + // The session is still part of the event and the location + session_valid = true; + } else { + // The session is no longer part of the event and or the location + //console.log('Need to remove session id '+session_id); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_session looking for sessions to remove is complete') + if (session_valid) { + console.log('Keep session id '+session_id); + } else { + console.log('Remove session id '+session_id); + document.getElementById('menu_event_session_'+session_id).remove(); // Remove the node from the launcher sessions menu list + document.getElementById('detail_session_'+session_id).remove(); // Remove the node from the launcher sessions list + } + }); + } + }); + + // Third: re-index view session buttons + // NOTE: Should this go in a .then() section? + // NOTE: It might make even more sense to only have this done individually per add. Should also do a remove to keep things clean. + //index_launcher_sessions('btn_view_session'); + index_launcher_sessions('btn_view_session'); + +} + + +exports.render_event_session_file_records = function (events) { + console.log('Rendering event session file records...'); +} + + +exports.render_event_presentation_records = async function (events) { + console.log('********** ********* ****** ** * ** ****** ********* *********'); + console.log('Rendering event presentation records...'); + + let launcher_sessions = document.getElementById('launcher_sessions').childNodes; //_list_items + console.log(launcher_sessions); + console.log(tbl_event_presentation); + + /* + loop through the sessions list (not table) { + let session_id = ; + attempt to loop through list of presentations (possibly empty) { + let presentation_id = ; + let presentation_id_found = false; + iterate through tbl_event_presentation + if (li presentation_id = tbl_event_presentation.id and session id = tbl_event_presentation.event_session_id) { + update the presentation_id + presentation_id_found = true; + } else if (session id = tbl_event_presentation.event_session_id) { + add in the new presentation_id from the table + presentation_id_found = true; + } + if (presentation_id_found == false) { + // remove the presentation + } + } + } + */ + + + + for (let i in launcher_sessions) { + console.log(launcher_sessions[i].getAttribute('data-session_id')); + let session_id = launcher_sessions[i].getAttribute('data-session_id'); + + //console.log(launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul').childElementCount); + + let presentations_list = launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].childNodes; + console.log(presentations_list); + //console.log(presentations_list.length); + if (presentations_list.length) { + console.log('Presentations listed under this session (id='+session_id+'). (launcher sessions loop i = '+i+')'); + console.log(launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')); + /* + * loop through list of presentations + * if in + */ + await tbl_event_presentation.iterate(function(value, key, iteration) { + if (document.getElementById('event_presentation_'+value.id)) { + // Update the launcher presentations list for a session + document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('strong')[0].innerHTML = value.name; + let presentation_startdatetime = new Date(value.start_datetime); + document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerHTML = dateFns.format(presentation_startdatetime, 'h:mm A'); + } else { + + } + }).then(function() { + + }); + + } else { + console.log('No presentations listed under this session (id='+session_id+'). Time to iterate through presentations table. (launcher sessions loop i = '+i+')'); + + let new_i = i; + console.log(new_i); + + + //if (!looping_tbl_event_presentation) { + // looping_tbl_event_presentation = true; + await tbl_event_presentation.iterate(function(value, key, iteration) { + console.log('Launcher sessions loop i: '+i+' : '+new_i); + if (value.event_session_id == session_id) { + console.log('*** Presentation id ('+value.id+') is part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); + + // Add the new session to the launcher sessions list + let presentation_li_node = document.createElement('LI'); + presentation_li_node.id = 'event_presentation_'+value.id; + presentation_li_node.className = 'list-group-item'; + presentation_li_node.setAttribute('data-presentation_id', value.id); + + let presentation_li_heading_div_node = document.createElement('DIV'); + presentation_li_heading_div_node.className = 'list-group-item-heading d-flex justify-content-between align-items-center'; + + let presentation_name_strong_node = document.createElement('STRONG'); + + let presentation_name_text_node= document.createTextNode(value.name); + presentation_name_strong_node.appendChild(presentation_name_text_node); + + let presentation_heading_span_node = document.createElement('SPAN'); + presentation_heading_span_node.className = 'badge badge-pill badge-info'; + + let presentation_startdatetime = new Date(value.start_datetime); + let presentation_heading_span_text_node = document.createTextNode(dateFns.format(presentation_startdatetime, 'h:mm A')); + presentation_heading_span_node.appendChild(presentation_heading_span_text_node); + + presentation_li_heading_div_node.appendChild(presentation_name_strong_node); + presentation_li_heading_div_node.appendChild(presentation_heading_span_node); + + presentation_li_node.appendChild(presentation_li_heading_div_node); + + console.log('************ ISSUE ************'); + console.log(launcher_sessions[i].getElementsByClassName('session_presentations')); + //launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].appendChild(presentation_li_node); + let launcher_session_details = document.getElementById('detail_session_'+session_id); + console.log(launcher_session_details.getElementsByClassName('session_presentations')); + let session = document.getElementById('detail_session_'+session_id).getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].appendChild(presentation_li_node); + } else { + console.log('*** Presentation id ('+value.id+') is NOT part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); + } + }).then(function() { + console.log('idb_to_ui: Iterate tbl_event_presentation looking for presentations to update or add is complete'); + looping_tbl_event_presentation = true; + //tbl_event_presentation_iterate_count++; + /* + if (session_valid) { + console.log('Keep session id '+session_id); + } else { + console.log('Remove session id '+session_id); + document.getElementById('menu_event_session_'+session_id).remove(); // Remove the node from the launcher sessions menu list + document.getElementById('detail_session_'+session_id).remove(); // Remove the node from the launcher sessions list + } + */ + }); + + //} else { + // console.log('Waiting until tbl_event_presentation has finished iterating...'); + //} + + + /* +
    +
    Presentations:
    +
    +
      +
      +
      + */ + + + } + + //} else { + // console.log('Waiting until launcher_sessions has finished looping...'); + //} + + } + + return true; +} + + +exports.render_event_presention_file_records = function (events) { + console.log('Rendering event presentation file records...'); +} + + +exports.render_event_presenter_records = function (events) { + console.log('Rendering event presenter records...'); +} + + +exports.render_event_presenter_file_records = function (events) { + console.log('Rendering event presenter file records...'); +} + + +/* Updated 2020-01-31 */ +function index_launcher_sessions(class_name) { + console.log('Indexing launcher sessions with class name: '+class_name); + var class_elements = document.getElementsByClassName(class_name); + + + for (var i = 0; i < class_elements.length; i++) { + class_elements[i].addEventListener( 'click', function() {view_session( this.getAttribute('data-session_id')) } ); + } + console.log(class_elements); + return true; +} + + +/* Updated 2020-01-31 */ +function view_session(session_id) { + var class_elements = document.getElementsByClassName('session_detail'); // This class name should be the class names for each div container + console.log('*** View session ID: '+session_id); + for (var i = 0; i < class_elements.length; i++) { + console.log('*** checking: '+class_elements[i].getAttribute('data-session_id')); + if (class_elements[i].getAttribute('data-session_id') == session_id) { + console.log('show'); + class_elements[i].classList.remove('d-none'); + class_elements[i].classList.add('d-block'); + } else { + console.log('hide'); + class_elements[i].classList.remove('d-block'); + class_elements[i].classList.add('d-none'); + } + } + + return true; +} + + +function format_bytes(bytes, decimals = 2) { + if (bytes === 0) return '0 Bytes'; + + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; +} diff --git a/app/js/module_app_ui_v2.js b/app/js/module_app_ui_v2.js index c0910c8..955bcc4 100644 --- a/app/js/module_app_ui_v2.js +++ b/app/js/module_app_ui_v2.js @@ -49,10 +49,10 @@ exports.render_event_file_records = function (event_files, event_id) { } -exports.render_event_location_records = function () { +exports.render_event_location_records = async function () { console.log('Rendering event location records...'); - tbl_event_location.iterate(function(value, key, iteration) { + await tbl_event_location.iterate(function(value, key, iteration) { if (value.id == event_location_id) { console.log('*** Event location id ('+event_location_id+') found in table.'); document.getElementById('location_name').innerHTML = ' '+value.name; @@ -72,7 +72,7 @@ exports.render_event_location_file_records = function (events) { } -exports.render_event_session_records = function () { +exports.render_event_session_records = async function () { console.log('Rendering event session records...'); // First: update or add sessions @@ -245,32 +245,79 @@ exports.render_event_session_file_records = function (events) { } -exports.render_event_presentation_records = function (events) { +exports.render_event_presentation_records = async function (events) { console.log('********** ********* ****** ** * ** ****** ********* *********'); console.log('Rendering event presentation records...'); let launcher_sessions = document.getElementById('launcher_sessions').childNodes; //_list_items console.log(launcher_sessions); + console.log(tbl_event_presentation); - for (var i in launcher_sessions) { + /* + loop through the sessions list (not table) { + let session_id = ; + attempt to loop through list of presentations (possibly empty) { + let presentation_id = ; + let presentation_id_found = false; + iterate through tbl_event_presentation + if (li presentation_id = tbl_event_presentation.id and session id = tbl_event_presentation.event_session_id) { + update the presentation_id + presentation_id_found = true; + } else if (session id = tbl_event_presentation.event_session_id) { + add in the new presentation_id from the table + presentation_id_found = true; + } + if (presentation_id_found == false) { + // remove the presentation + } + } + } + */ + + + + for (let i in launcher_sessions) { console.log(launcher_sessions[i].getAttribute('data-session_id')); let session_id = launcher_sessions[i].getAttribute('data-session_id'); - console.log(launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul').childElementCount); - let new_i = i; - if (launcher_sessions[new_i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul').childElementCount) { - console.log('Presentations listed under this session'); + //console.log(launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul').childElementCount); + + let presentations_list = launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].childNodes; + console.log(presentations_list); + //console.log(presentations_list.length); + if (presentations_list.length) { + console.log('Presentations listed under this session (id='+session_id+'). (launcher sessions loop i = '+i+')'); console.log(launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')); - } else { - console.log('No presentations listed under this session. Time to iterate through presentations table.'); + /* + * loop through list of presentations + * if in + */ + await tbl_event_presentation.iterate(function(value, key, iteration) { + if (document.getElementById('event_presentation_'+value.id)) { + // Update the launcher presentations list for a session + document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('strong')[0].innerHTML = value.name; + let presentation_startdatetime = new Date(value.start_datetime); + document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerHTML = dateFns.format(presentation_startdatetime, 'h:mm A'); + } else { + + } + }).then(function() { + + }); + } else { + console.log('No presentations listed under this session (id='+session_id+'). Time to iterate through presentations table. (launcher sessions loop i = '+i+')'); + + let new_i = i; console.log(new_i); - tbl_event_presentation.iterate(function(value, key, iteration) { - console.log('here 1??? '+new_i); + //if (!looping_tbl_event_presentation) { + // looping_tbl_event_presentation = true; + await tbl_event_presentation.iterate(function(value, key, iteration) { + console.log('Launcher sessions loop i: '+i+' : '+new_i); if (value.event_session_id == session_id) { - console.log('*** Presentation id ('+value.id+') is part of this session.'); + console.log('*** Presentation id ('+value.id+') is part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); // Add the new session to the launcher sessions list let presentation_li_node = document.createElement('LI'); @@ -299,14 +346,18 @@ exports.render_event_presentation_records = function (events) { presentation_li_node.appendChild(presentation_li_heading_div_node); console.log('************ ISSUE ************'); - console.log('here 2??? '+new_i); - console.log(launcher_sessions[new_i].getElementsByClassName('session_presentations')); - launcher_sessions[new_i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].appendChild(presentation_li_node); + console.log(launcher_sessions[i].getElementsByClassName('session_presentations')); + //launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].appendChild(presentation_li_node); + let launcher_session_details = document.getElementById('detail_session_'+session_id); + console.log(launcher_session_details.getElementsByClassName('session_presentations')); + let session = document.getElementById('detail_session_'+session_id).getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].appendChild(presentation_li_node); } else { - console.log('*** Presentation id ('+value.id+') is NOT part of this session.'); + console.log('*** Presentation id ('+value.id+') is NOT part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); } }).then(function() { - console.log('idb_to_ui: Iterate tbl_event_presentation looking for presentations to update or add is complete') + console.log('idb_to_ui: Iterate tbl_event_presentation looking for presentations to update or add is complete'); + looping_tbl_event_presentation = true; + //tbl_event_presentation_iterate_count++; /* if (session_valid) { console.log('Keep session id '+session_id); @@ -317,6 +368,10 @@ exports.render_event_presentation_records = function (events) { } */ }); + + //} else { + // console.log('Waiting until tbl_event_presentation has finished iterating...'); + //} /* @@ -331,18 +386,13 @@ exports.render_event_presentation_records = function (events) { } + //} else { + // console.log('Waiting until launcher_sessions has finished looping...'); + //} + } - //.getElementsByTagName('ul')[0].childNodes; - - /* - - Loop through session divs - Look for presentations to update in each session. Update - Look for presentations to add in each session. Append presentations into the div - Look for presentations to remove from each session. Remove - - */ + return true; }