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 += '';
+ for (var i in launcher_tmp.event_file) {
+ document.getElementById('event_files_menu').innerHTML += '';
+ }
+ 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...');
+ //}
+
+
+ /*
+
+ */
+
+
+ }
+
+ //} 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 += '';
+ for (var i in launcher_tmp.event_file) {
+ document.getElementById('event_files_menu').innerHTML += '';
+ }
+ 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...');
+ //}
+
+
+ /*
+
+ */
+
+
+ }
+
+ //} 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;
}