diff --git a/src/core/css/tour.css b/src/core/css/tour.css index 5809ded823d945516ab91df0f1c12c3fde46b01a..9a3fde12680b8ac536a122d6253f385f497d2bae 100644 --- a/src/core/css/tour.css +++ b/src/core/css/tour.css @@ -237,3 +237,16 @@ div.caosdb-v-tour-toc-show { border: none; z-index: 100000; } + +.caosdb-v-tour-toc-detour { + font-size: 0.875em; + padding-left: 1em; +} + +.caosdb-v-tour-toc-cur { + border: 1px dashed #e1eff0; +} + +.caosdb-v-tour-toc-active-item.caosdb-v-tour-toc-cur { + border: none; +} diff --git a/src/core/css/webcaosdb.css b/src/core/css/webcaosdb.css index 9174c141e9159b550a7593037a012acd253ef4d7..892c86b9cfe79f750307503a7973e58e5354ea93 100644 --- a/src/core/css/webcaosdb.css +++ b/src/core/css/webcaosdb.css @@ -701,11 +701,6 @@ details p { padding: 0.2rem 0.5rem; } -.caosdb-v-tour-toc-detour { - font-size: 0.875em; - padding-left: 1em; -} - .caosdb-f-edit { display: none; position: relative; diff --git a/src/core/js/tour.js b/src/core/js/tour.js index 5eebd0d543797ef253cd8490c6125e64f78ff37d..57ffe0f5192f6693e1e99319df0ab2109869b115 100644 --- a/src/core/js/tour.js +++ b/src/core/js/tour.js @@ -193,9 +193,9 @@ var tour = new function () { for (const element of this.elements) { const next = element.create_menu_entry(); - if (next) { + if (next) { elements_list.append(next); - } + } } return page_set_entry; } @@ -553,14 +553,17 @@ var tour = new function () { create_menu_entry() { const id_anchor = `#${this.config.id}`; - if (this.config.do_not_show_in_toc) { - return; - } - var detour = "" + if (this.config.do_not_show_in_toc) { + return; + } + var classes = "" if (this.config.detour){ - detour = " caosdb-v-tour-toc-detour" + classes = " caosdb-v-tour-toc-detour" + } + if (sessionStorage["tour-page-open-cur"] == this.config.id) { + classes = classes + " caosdb-v-tour-toc-cur"; } - var entry = $("<li class='caosdb-f-tour-overview-entry caosdb-v-tour-overview-entry-page"+detour+"' />"); + var entry = $("<li class='caosdb-f-tour-overview-entry caosdb-v-tour-overview-entry-page" + classes + "' />"); var link = $("<a href='" + this.config.href + id_anchor + "'>" + this.name + "</a>")[0]; $(link).click((e) => { @@ -620,6 +623,7 @@ var tour = new function () { _highlight_menu() { $(".caosdb-v-tour-toc-active-item").toggleClass("caosdb-v-tour-toc-active-item", false); + $(".caosdb-v-tour-toc-cur").toggleClass("caosdb-v-tour-toc-cur", false); $(this.menu_entry).toggleClass("caosdb-v-tour-toc-active-item", true); } @@ -680,6 +684,7 @@ var tour = new function () { _open() { const button = $(this.button); const target = $(this.config["target"]) + sessionStorage["tour-page-open-cur"] = this.config.id; if (button.is(".caosdb-f-tour-open-page")) { return; // already open } @@ -687,8 +692,10 @@ var tour = new function () { return; // element to attach to not available; can't open } if (this.get_next()) { - logger.debug(`Set next page in session store to `, this.get_next().config.id); - sessionStorage["tour-page-open-next"] = this.get_next().config.id + if ($(`#${this.get_next().config.id}`).length == 0) { + logger.debug(`Set next page in session store to `, this.get_next().config.id); + sessionStorage["tour-page-open-next"] = this.get_next().config.id + } } target.on('hidden.bs.popover', (e) => { button[0].dispatchEvent(tour.close_page_event); @@ -1195,11 +1202,9 @@ var tour = new function () { this.id = config.id || "tour0"; this.config = config; this.elements = new Array(); - this.start_tour_button = $('<a class="dropdown-item" id="caosdb-tour-start-btn">Start Tour</a>'); - this.leave_tour_button = $('<a class="dropdown-item disabled caosdb-f-leave-tour" id="caosdb-tour-leave-btn">Leave Tour</a>'); this.active = false; - var menuitem = $(' <li class="dropdown" id="caosdb-navbar-tour"> <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#"> Tour <span class="caret"></span></a><ul class="dropdown-menu"></ul></li>') + var menuitem = $('<li class="nav-item" id="caosdb-navbar-tour"><a href="#" class="d-none nav-link caosdb-f-start-tour-btn" title="Start a Tour">Tour</a><a href="#" title="Leave the Tour" class="d-none caosdb-f-leave-tour-btn nav-link">Tour</a></li>') $(".caosdb-navbar").append(menuitem); for (const element of this.config.elements) { @@ -1219,20 +1224,11 @@ var tour = new function () { this.config.deactivate_other = true; } - menuitem.find("ul").append($(' <li> </li>').append(this.start_tour_button)); - menuitem.find("ul").append($(' <li> </li>').append(this.leave_tour_button)); - // TODO - move to tour-page href - this.start_tour_button.on("click", () => { - this.activate(); - }); - $(".caosdb-f-leave-tour").click((e) => { + $(".caosdb-f-leave-tour-btn").click((e) => { this.deactivate(); - $(".caosdb-v-tour-toc-show").toggleClass("visible", false); }); - $(".caosdb-f-tour-toc-toggle").click((e) => { - $(".caosdb-v-tour-toc-sidebar").toggleClass("caosdb-v-tour-toc-hidden"); - $("body").toggleClass("tour-sidebar-visible"); - $(".caosdb-v-tour-toc-show").toggleClass("visible"); + $(".caosdb-f-start-tour-btn").click((e) => { + this.activate(); }); this.update(); @@ -1241,7 +1237,12 @@ var tour = new function () { this._elements_by_id = {}; this._tour_pages = []; this._index_elements(this._elements_by_id, this._tour_pages, this); + this._toggle_tour_buttons(); + } + _toggle_tour_buttons() { + $(".caosdb-f-leave-tour-btn").toggleClass("d-none", !this.active); + $(".caosdb-f-start-tour-btn").toggleClass("d-none", this.active); } _tour_active () { @@ -1338,6 +1339,8 @@ var tour = new function () { for (const element of this.elements) { element._deactivate(); } + + sessionStorage.removeItem("tour-page-open-next") } /** @@ -1360,16 +1363,13 @@ var tour = new function () { _deactivate() { if (this.active) { - this.set_tour_button_text("Start A Tour"); logger.debug("Tour._deactivate tour"); this.old_state_active = false; this.active = false; this._hide_tour_sidebar(); - $("#caosdb-tour-start-btn").removeClass("disabled"); - $("#caosdb-tour-leave-btn").addClass("disabled"); + this._toggle_tour_buttons(); this.update(); } - this.leave_tour_button.hide(); } _hide_tour_sidebar() { @@ -1382,16 +1382,13 @@ var tour = new function () { _activate() { if (!this.active) { - this.set_tour_button_text("Tour"); logger.debug("Tour._activate tour"); this.old_state_active = true; this.active = true; this._show_tour_sidebar(); - $("#caosdb-tour-start-btn").addClass("disabled"); - $("#caosdb-tour-leave-btn").removeClass("disabled"); + this._toggle_tour_buttons(); this.update(); } - this.leave_tour_button.show(); } /** @@ -1418,10 +1415,6 @@ var tour = new function () { } } - set_tour_button_text(text) { - $("button.caosdb-f-tour-button").text(text); - } - create_tour_overview_panel() { var tour_overview = $('<ul class="list-unstyled caosdb-v-tour-overview"/>'); for (const element of this.elements) { @@ -1467,7 +1460,8 @@ var tour = new function () { } if (typeof sessionStorage["tour-page-open-next"] === "undefined") { - sessionStorage["tour-page-open-next"] = instance._tour_pages[0]; + const next = sessionStorage["tour-page-open-cur"] || instance._tour_pages[0]; + sessionStorage["tour-page-open-next"] = next } instance.init_activation(config.persistent_state);