/* Copyright 2020 Adam Gray This file is part of the tagem program. The tagem program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 3 of the License. The tagem program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. This copyright notice should be included in any copy or substantial copy of the tagem source code. The absense of this copyright notices on some other files in this project does not indicate that those files do not also fall under this license, unless they have a different license written at the top of the file. */ #ifdef PREPOPULATE_D_TBL_FROM_IDS #define PREPOPULATE1 \ MINIMISED_JS_DECL_view_dirs "([" PREPOPULATE_D_TBL_FROM_IDS "]);" MINIMISED_JS_DECL_setup_page_for_d_tbl "();" #else #define PREPOPULATE1 #endif #ifdef PREPOPULATE_T_TBL_FROM_IDS #define PREPOPULATE2 \ MINIMISED_JS_DECL_view_tags "([" PREPOPULATE_T_TBL_FROM_IDS "]);" MINIMISED_JS_DECL_setup_page_for_t_tbl "();" #else #define PREPOPULATE2 #endif #ifdef PREPOPULATE_F_TBL_FROM_IDS #define PREPOPULATE3 \ MINIMISED_JS_DECL_view_files "([" PREPOPULATE_F_TBL_FROM_IDS "]);" MINIMISED_JS_DECL_setup_page_for_f_tbl "();" #else #define PREPOPULATE3 #endif #define ACTION_ON_DOCUMENT_LOAD PREPOPULATE1 PREPOPULATE2 PREPOPULATE3 #ifdef USE_LOCAL_YT_JS # define USE_REMOTE_YT_JS__STR "false" #else # define USE_REMOTE_YT_JS__STR "true" #endif #define TOSTR_(x) #x #define TOSTR(x) TOSTR_(x) #define N_SELECT3_OPTS_STR TOSTR(N_SELECT3_OPTS) #include #include "../auto-generated/js.hpp" #include "../auto-generated/svg.hpp" #define ADD_TOGGLE_WITH_ACTION(id, name, fn) \ "
" \ "" name "" \ "" \ "
" #define ADD_TOGGLE(id, name) \ ADD_TOGGLE_WITH_ACTION(id, name, "console.log") #define SELECT3_OPT(_, n, __) \ "
" #define SELECT3_INPUT__BASE(id, placeholder, var, is_single, misc) \ "
" \ "" \ "
" \ BOOST_PP_REPEAT(N_SELECT3_OPTS, SELECT3_OPT, _) \ "
" \ "
" #define SELECT3_INPUT__SINGLE(id, placeholder, var) \ SELECT3_INPUT__BASE(id, placeholder, var, "1", "") #define SELECT3_INPUT(id, placeholder, var) \ SELECT3_INPUT__BASE(id, placeholder, var, "0", "") #define SELECT3_INPUT__ONINPUT(id, placeholder, var, fn) \ SELECT3_INPUT__BASE(id, placeholder, var, "0", " data-fn=\"" fn "\"") #define CREATE_TAG_SELECT_WO_BTN__UNCLOSED(id) \ "
" \ SELECT3_INPUT(id, "tag", "t") #define CREATE_TAG_SELECT_WO_BTN(id) \ CREATE_TAG_SELECT_WO_BTN__UNCLOSED(id) \ "
" // elem = (id,text,fn) #define CREATE_TAG_SELECT(r, data, elem) \ CREATE_TAG_SELECT_WO_BTN__UNCLOSED(BOOST_PP_TUPLE_ELEM(0, elem)) \ "" \ "" #define CREATE_TAG_SELECT_W_ADD_AND_REMOVE_BTNS(r, data, elem) \ CREATE_TAG_SELECT_WO_BTN__UNCLOSED(BOOST_PP_TUPLE_ELEM(0, elem)) \ "" \ "" \ "" "" "" "" "" "" "" "" "" "" R"=========(
SITEMAP
)=========" #define CREATE_SITEMAP_LINK(r, data, elem) \ "" BOOST_PP_TUPLE_ELEM(1, elem) "
" BOOST_PP_SEQ_FOR_EACH(CREATE_SITEMAP_LINK, _, BOOST_PP_VARIADIC_SEQ_TO_SEQ((MINIMISED_JS_DECL_view_tasks "()", SVG_DB "Tasks")(MINIMISED_JS_DECL_toggle_admin_dashboard "()", SVG_SETTINGS)(MINIMISED_JS_DECL_view_dir"(prompt('/directory/path/'),1)","Filesystem Dir")(MINIMISED_JS_DECL_toggle"('help')",SVG_INFO_CIRCLE)(MINIMISED_JS_DECL_rotate_stylesheet"()",SVG_LIST)(MINIMISED_JS_DECL_view_text_editor"()",SVG_TEXT_EDITOR)(MINIMISED_JS_DECL_add_tags_dialog"()",SVG_TAG_PLUS)(MINIMISED_JS_DECL_add_files_dialog"()",SVG_NEW_FILE)(MINIMISED_JS_DECL_add_dirs_dialog"()",SVG_NEW_DIR)(MINIMISED_JS_DECL_add_devices_dialog"()","+Devices"))) R"=========(
)=========" "
" SVG_HISTORY "
" R"=========(
)=========" "
" "" "
" SVG_SEARCH "
" "
" SVG_DIR "
" "
" "
" R"=========(
)=========" #define CREATE_MENU_ITEM(r, data, elem) \ "" BOOST_PP_TUPLE_ELEM(1, elem) "" "
" BOOST_PP_SEQ_FOR_EACH(CREATE_MENU_ITEM, _, BOOST_PP_VARIADIC_SEQ_TO_SEQ( (MINIMISED_JS_DECL_toggle_sidebar "('left-side')", SVG_TRIANGLE_LEFT)\ (MINIMISED_JS_DECL_view_dir "()", SVG_DIR)\ (MINIMISED_JS_DECL_setup_page_for_d_tbl "()", SVG_DIRS)\ (MINIMISED_JS_DECL_view_tag "()", SVG_TAG)\ (MINIMISED_JS_DECL_setup_page_for_t_tbl "()", SVG_TAGS)\ (MINIMISED_JS_DECL_play_current_files_as_playlist_if_not_already "()", SVG_REPEAT)\ (MINIMISED_JS_DECL_view_file "()", SVG_FILE)\ (MINIMISED_JS_DECL_setup_page_for_f_tbl "()", SVG_FILES)\ (MINIMISED_JS_DECL_toggle_sidebar "('right-side')", SVG_TRIANGLE_RIGHT) )) "
" "
" #define CREATE_USER_SETTINGS_OPTION1(descr, id, fn, data_id) \ "" \ "" descr "" \ "" \ "

" \ "" \ "" \ "" SVG_EDIT "" \ "" \ "" #define CREATE_USER_SETTINGS_OPTION(descr, id, fn) \ CREATE_USER_SETTINGS_OPTION1(descr, id, fn, "0") #define CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL(name) \ CREATE_USER_SETTINGS_OPTION1("File Table: Hide " name " column?", "tbl_f_hide_col_" name, MINIMISED_JS_DECL_set_tbl_f_hide_col, name) #define CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER(name) \ "" \ "" name "" \ "" \ "" "" \ "" "
" "" "" "" "" "" CREATE_USER_SETTINGS_OPTION("Use RegEx?", "use_regex", MINIMISED_JS_DECL_set_use_regex) CREATE_USER_SETTINGS_OPTION("Time to sleep while viewing inanimate media", "sleep_on_inanimate_media", MINIMISED_JS_DECL_set_sleep_on_inanimate_media) CREATE_USER_SETTINGS_OPTION("Time to sleep after media error", "sleep_after_media_err", MINIMISED_JS_DECL_set_sleep_after_media_err) CREATE_USER_SETTINGS_OPTION("Prioritise local files when autoplaying?", "prioritise_local_autoplay", MINIMISED_JS_DECL_set_prioritise_local_autoplay) CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("thumbnail") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("fname") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("ftitle") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("tags") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("dateadded") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("date_origin") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("file_size") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("duration") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("w") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("h") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("views") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("likes") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("dislikes") CREATE_USER_SETTINGS_OPTION__HIDE_F_TBL_COL("fps") "" "" "" "" CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("text") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("placeholder-text") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("fg") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("bg") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("description") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("sel1") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("sel2") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("sel3") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("help-bg") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("help-fg") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("likes-fg") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("likes-bg") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("dislikes") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("views") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("link") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("link-hover") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("db-name") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("thumb-outline") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("table-row-outline") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("border") CREATE_USER_SETTINGS_OPTION__CSS_COLOUR_PICKER("box-outline") "
SettingValue
CSS Theme" "" "
" "
" "
" "" SVG_NEW_DIR "" "
" "

Recursively add all files in a directory to the database, up to a specified maximum depth

" CREATE_TAG_SELECT_WO_BTN("tagselect-record-fs-dir") "" "
" "
" "Generate thumbnails" "Update video metadatas" "Update mimetypes" "
" SELECT3_INPUT__ONINPUT("select-user-for-edit", "username", "u", MINIMISED_JS_DECL_load_user_for_edit) CREATE_TAG_SELECT_WO_BTN("tagselect-useredit") "" SVG_NEW_USER "" "Edit User Permissions Table" "
" "

" "
" "
" "
" "
" "Permission" "
" "
" "Granted?" "
" "
Edit
" "
" "
" "
" #define CREATE_USER_PERMISSIONS_TBL_ROW(data, _, permission_name) \ "
" \ "
" permission_name "
" \ "
" \ "" \ "
" BOOST_PP_SEQ_FOR_EACH( CREATE_USER_PERMISSIONS_TBL_ROW, _, ("stream_files") ("exec_qry") ("exec_safe_sql_cmds") ("exec_unsafe_sql_cmds") ("exec_safe_tasks") ("exec_unsafe_tasks") ("edit_tasks") ("link_tags") ("unlink_tags") ("edit_tags") ("merge_files") ("backup_files") ("add_files") ("create_files") ("edit_names") ("add_eras") ("record_local_fs") ("edit_users") ) "
" "
" "
" "
" "Edit User Tag Blacklist" "
" "

User will not be able to see any files, directories, etc., which are tagged by an encompassed tag

" "

" // The username of the user we are editing goes here "
" "
" "
" "
" "Tag" "
" "
" SVG_SQUARE_DELETE "
" "
" "
" "
" "
" "" SVG_PLUS "" "
" "
" "" SVG_LOGOUT "" "
" "" "" "
" "

How to Query

" "" "

" #include "../qry-help-text.txt" "

" "
" #define TOGGLEABLE_DIV_PRE(id) \ "Show " id "" \ "

" #define TOGGLEABLE_DIV_POST \ "


" "
" TOGGLEABLE_DIV_PRE("credits") #include "credits.html" TOGGLEABLE_DIV_POST TOGGLEABLE_DIV_PRE("filter-syntax") #include "filter-syntax.html" TOGGLEABLE_DIV_POST TOGGLEABLE_DIV_PRE("keyboard-shortcuts") #include "keyboard-shortcuts.html" TOGGLEABLE_DIV_POST "Show qry help" TOGGLEABLE_DIV_PRE("examples") #include "examples.html" TOGGLEABLE_DIV_POST "
" "
" "

Tasks

" "
" "
" "
" "
" "
" "
" "" "" "" "" "" "Browser does not support object elements" "" "
" "
" // This div is *replaced* by the Youtube IFrame API, so causes issues when told to hide while it is loading "
" "
" "
" "" ADD_TOGGLE("autoplay","Autoplay") "" "" SVG_REPEAT_NONE "" "" SVG_REPEAT "" "" SVG_REPEAT_ONE "" "" "
" SVG_VIEW "
" "
" "" "" "
" "
" "
" "" "" "
" "
" "Likes" "
" "Hide" "
" "
" "
" "
" "
" "Show/Hide Comments" "
" "
" "
" "
" "
" "
" "" "
" "

Assign Value

" SELECT3_INPUT__ONINPUT("file2-select", "f2", "var_name", MINIMISED_JS_DECL_init_file2_input_for_file2_var_of_index) "" "" "" "
" "
" BOOST_PP_SEQ_FOR_EACH(CREATE_TAG_SELECT_W_ADD_AND_REMOVE_BTNS, _, BOOST_PP_VARIADIC_SEQ_TO_SEQ( ("tagselect-self-p","Parent Tags",MINIMISED_JS_DECL_add_parent_tags,MINIMISED_JS_DECL_rm_parent_tags) ("tagselect-self-c","Child Tags",MINIMISED_JS_DECL_add_child_tags,MINIMISED_JS_DECL_rm_child_tags) ("tagselect-self-s","Sibling Tags",MINIMISED_JS_DECL_add_sibling_tags,MINIMISED_JS_DECL_rm_sibling_tags) )) "" SELECT3_INPUT__SINGLE("dirselect", "/Path/Of/Directory", "d") #include "components/change-file-to-backup.html" #define CREATE__ADD_TO_DB__DIALOG(r, data, elem) \ "
" \ "" \ "" \ "
" \ "" \ "
" BOOST_PP_SEQ_FOR_EACH(CREATE__ADD_TO_DB__DIALOG, _, BOOST_PP_VARIADIC_SEQ_TO_SEQ(("t","New Tag Name")("f","File URL, e.g. https://www.youtube.com/watch?v=dQw4w9WgXcQ")("d","'Directory' URL, i.e. a prefix of file URLS, e.g. https://www.youtube.com/watch?v=")("D","'Device' URL, e.g. https://youtube.com/"))) "
" ADD_TOGGLE_WITH_ACTION("add-f-backup-toggle","Download Locally?", MINIMISED_JS_DECL_toggle_dl_locally) "
" ADD_TOGGLE("add-f-backup-ytdl","YouTube-DL?") ADD_TOGGLE("audio-only", "Audio-Only?") "
" "Either select a local directory, if downloading the backup locally, or else type in the full URL of the backup (which can also be local, but will not trigger a download)" "
" "If the backup is into a local directory, AND you have still provided a backup URL, the file will be downloaded from that URL rather than from the main file's URL." "
" "You may wish to use a different URL to download the file, if you wish to still link the web page that links to the file. For instance, the link to the file itself may be temporary." "
" "" "Send backup request" "
" "" "" "" "" "" "" "" "" "" "" "
IDStartEndTags
" "
" CREATE_TAG_SELECT(_, _, ("tagselect-era", "Select Tags", MINIMISED_JS_DECL_hide_node "(this.parentNode.parentNode)")) "" "
" BOOST_PP_SEQ_FOR_EACH(CREATE_TAG_SELECT, _, BOOST_PP_VARIADIC_SEQ_TO_SEQ( ("tagselect-eras", "Add to Eras", MINIMISED_JS_DECL_tag_stuff_then "('e'," MINIMISED_JS_DECL_get_era_ids "(), this," MINIMISED_JS_DECL_era_tagger_fn ")") ("tagselect-dirs", "Add to Dirs", MINIMISED_JS_DECL_tag_stuff_then "('d'," MINIMISED_JS_DECL_get_dir_ids "(), this," MINIMISED_JS_DECL_dir_tagger_fn ")") ("tagselect-files","Add to Files", MINIMISED_JS_DECL_tag_stuff_then "('f'," MINIMISED_JS_DECL_get_file_ids "(), this," MINIMISED_JS_DECL_file_tagger_fn ")") )) "
" "" "" "" "" "" "" "" "" "" "" "" "" "" "
Added
Origin
Ended
" "
" "
" "

Edit file name here...

" "" SVG_SAVE_FILE "" "
" "Write text here..." "
" "
" "
" // NOTE: Do not class as class "help", for display reasons "

Selection Types

" "

Primary

is used for assigning tags" "
" "

Secondary

is used only to select duplicates of the primary file for merging" "
" #define COLS \ ("thumbnail","Thumb",0,"") \ ("","Name",2,"regexp") \ ("","#Files",1,"12 - 34") #define TBL_ID "t" #define TBL_NAME_COLS "[1]" #define TBL_TAGS_COLS "[]" #define IS_SELECTABLE #include "components/tbl.html" #define COLS \ ("","Name",2,"regexp") \ ("","Device",2,"regexp") \ ("","#Files",1,"12 - 34") \ ("","Tags",2,"regexp") #define TBL_ID "d" #define TBL_NAME_COLS "[0,1]" #define TBL_TAGS_COLS "[]" #define IS_SELECTABLE #include "components/tbl.html" #define ACTION_BTNS ("",MINIMISED_JS_DECL_prompt_thumb_w"()","Thumb Size")("select-all",MINIMISED_JS_DECL_select_all_rows "('f')","Select All")("deselect-all",MINIMISED_JS_DECL_deselect_all_rows "('f', 1);"MINIMISED_JS_DECL_deselect_all_rows"('f', 2);"MINIMISED_JS_DECL_deselect_all_rows"('f', 3);","Deselect All")("merge-files",MINIMISED_JS_DECL_merge_files"()","Merge Files")("backup-files",MINIMISED_JS_DECL_toggle_file_add_backup_dialog"()","Backup")("add-file2",MINIMISED_JS_DECL_toggle"('file2-container')","Add/Update Value")("view-as-playlist",MINIMISED_JS_DECL_view_files_as_playlist"()","View as Playlist") #define IS_SELECTABLE #define COLS \ ("thumbnail","Thumb",0,"") \ ("fname","Name",2,"regexp") \ ("ftitle","Title",2,"regexp") \ ("db","In Databases",2,"regexp") \ ("tags","Tags",2,"regexp") \ ("file_size","Size (Range)",1,"12.3KB - 45.6MB") \ ("dateadded","Date Added",1,"Date Query") \ ("date_origin","Origin Date",1,"Date Query") \ ("duration","Duration",1,"Time Query") \ ("w","Width",1,"123-456") \ ("h","Height",1,"123-456") \ ("views","Views",1,"123-456") \ ("likes","Likes",1,"123-456") \ ("dislikes","Dislikes",1,"123-456") \ ("fps","FPS",1,"12.3-45.6") #define TBL_ID "f" #define TBL_NAME_COLS "[1,2,3]" #define TBL_TAGS_COLS "[4]" #include "components/tbl.html" R"=========(

)=========" "
" SVG_USER "
" "" "" "" R"=========(
)=========" #define CREATE_SIDE_WRAPPER(r, data, elem) \ "
" \ "
" elem "
" \ "
" \ "
" BOOST_PP_SEQ_FOR_EACH(CREATE_SIDE_WRAPPER, _, ("values")("parents")("siblings")("children")("tags")) R"=========(
)=========" #ifdef USE_LOCAL_JS #else "" #endif "" "" ""