diff --git a/admin.html b/admin.html index 6692e00..37f821d 100644 --- a/admin.html +++ b/admin.html @@ -17,12 +17,10 @@ -
- -
+

errors

diff --git a/static/admin.js b/static/admin.js index a1d994a..caa04b2 100644 --- a/static/admin.js +++ b/static/admin.js @@ -19,39 +19,84 @@ const SCAN_URL = '/video_metadata/admin.php?action=scan'; -function displayPathInfo(path_info) +function copyJSONtoDOMData(node, path_info) +{ + node.dataset.baseName = path_info.base_name; + node.dataset.contentSize = path_info.content_size; + node.dataset.depth = path_info.depth; + node.dataset.fileExtension = path_info.path_extension; + node.dataset.fullPath = path_info.full_path; + node.dataset.mediaType = path_info.media_type; + node.dataset.pathType = path_info.path_type; +} + +function updatePathInfoStyle(node) +{ + node.classList.remove('unknown', 'movie', 'tv_show'); + + if (node.dataset.pathType == 'directory') { + node.classList.add('directory'); + } else if (node.dataset.pathType == 'file') { + node.classList.add('file'); + + if (node.dataset.mediaType != '') + node.classList.add(node.dataset.mediaType); + } + + if (node.dataset.mediaType == 'unknown') + node.classList.add('unknown'); +} + +function updateMediaType(node, media_type) +{ + node.dataset.mediaType = media_type; + updateRadioButtons(node, media_type) + updatePathInfoStyle(node); + + for (let child of node.children) { + if (child.nodeName == 'DIV') + updateMediaType(child, media_type); + } +} + +function updateRadioButtons(node, media_type) +{ + if (media_type == 'movie') + node.querySelector('input[value^="movie"]').setAttribute('checked', true); + else if (media_type == 'tv_show') + node.querySelector('input[value^="tv_show"]').setAttribute('checked', true); +} + +// NOTE: recursively build DOM tree with attached data attributes and callbacks +// for editing the data +function buildDirectoryTreeWithData(path_info) { const DEPTH_NAMES = ['depth_0', 'depth_1', 'depth_2', 'depth_3', 'depth_4', 'depth_5']; let t = document.querySelector("#path_info_template"); let clone = document.importNode(t.content, true); - let sub_list = clone.querySelector('li'); + let sub_list = clone.querySelector('div'); sub_list.querySelector('form span').textContent = path_info.base_name; sub_list.classList.add(DEPTH_NAMES[path_info.depth]); - if (path_info.path_type == 'directory') { - sub_list.classList.add('directory'); - } else if (path_info.path_type == 'file') { - sub_list.classList.add('file'); - sub_list.classList.add(((path_info.media_type == '') ? 'none' : path_info.media_type)); - } - if (path_info.media_type == 'unknown') - sub_list.classList.add('unknown'); - - if (path_info.media_type == 'movie') - sub_list.querySelector('input[value^="movie"]').setAttribute('checked', true); - else if (path_info.media_type == 'tv_show') - sub_list.querySelector('input[value^="tv_show"]').setAttribute('checked', true); + copyJSONtoDOMData(sub_list, path_info); + updatePathInfoStyle(sub_list); + updateRadioButtons(sub_list, path_info.media_type) // NOTE: don't display the radio buttons on top level directory if (path_info.depth == 0) { let s = sub_list.querySelector('form span'); sub_list.appendChild(s); sub_list.removeChild(sub_list.querySelector('form')); + } else { + //sub_list.querySelector('form').addEventListener('change', onMediaTypeChanged); + sub_list.querySelector('form').addEventListener('change', function(e){ + updateMediaType(sub_list, e.target.value); + }); } for (let node of path_info.contents) - sub_list.appendChild(displayPathInfo(node)); + sub_list.appendChild(buildDirectoryTreeWithData(node)); return clone; } @@ -60,7 +105,7 @@ function scanFolderResponse(data) { let error_container = document.querySelector('#error_container'); let info_container = document.querySelector('#info pre'); - let main_container = document.querySelector('#main_container ul'); + let main_container = document.querySelector('#main_container'); resetContainers(error_container, info_container, main_container); if (data.errors) { @@ -78,7 +123,7 @@ function scanFolderResponse(data) if (data.path_info) { console.log(data.path_info); - main_container.appendChild(displayPathInfo(data.path_info)); + main_container.appendChild(buildDirectoryTreeWithData(data.path_info)); } } diff --git a/static/default.css b/static/default.css index 9013523..276c72b 100644 --- a/static/default.css +++ b/static/default.css @@ -62,7 +62,6 @@ ul { .file { font-size: 0.75em; } .movie { background-color: #89b441; } .tv_show { background-color: #ccf; } -.none { background-color: #ccc; } .unknown { background-color: #c77; } .depth_1 { margin-left: 20px; }