mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-27 12:18:54 +02:00
Removed ajax_ui.js. This could cause problems with webpack building.
This commit is contained in:
parent
d2237a2598
commit
b678f32b35
2 changed files with 0 additions and 305 deletions
|
@ -1,304 +0,0 @@
|
|||
"use strict";
|
||||
/*
|
||||
*
|
||||
* part-db version 0.1
|
||||
* Copyright (C) 2005 Christoph Lechner
|
||||
* http://www.cl-projects.de/
|
||||
*
|
||||
* part-db version 0.2+
|
||||
* Copyright (C) 2009 K. Jacobs and others (see authors.php)
|
||||
* http://code.google.com/p/part-db/
|
||||
*
|
||||
* Part-DB Version 0.4+
|
||||
* Copyright (C) 2016 - 2019 Jan Böhmer
|
||||
* https://github.com/jbtronics
|
||||
*
|
||||
* This 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; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*
|
||||
*/
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var Cookies = require("js-cookie");
|
||||
/**
|
||||
* Extract the title (The name between the <title> tags) of a HTML snippet.
|
||||
* @param {string} html The HTML code which should be searched.
|
||||
* @returns {string} The title extracted from the html.
|
||||
*/
|
||||
function extractTitle(html) {
|
||||
var title = "";
|
||||
var regex = /<title>(.*?)<\/title>/gi;
|
||||
if (regex.test(html)) {
|
||||
var matches = html.match(regex);
|
||||
for (var match in matches) {
|
||||
title = $(matches[match]).text();
|
||||
}
|
||||
}
|
||||
return title;
|
||||
}
|
||||
var AjaxUI = /** @class */ (function () {
|
||||
function AjaxUI() {
|
||||
this.BASE = "/";
|
||||
this.trees_filled = false;
|
||||
this.statePopped = false;
|
||||
//Make back in the browser go back in history
|
||||
window.onpopstate = this.onPopState;
|
||||
$(document).ajaxError(this.onAjaxError.bind(this));
|
||||
//$(document).ajaxComplete(this.onAjaxComplete.bind(this));
|
||||
}
|
||||
/**
|
||||
* Starts the ajax ui und execute handlers registered in addStartAction().
|
||||
* Should be called in a document.ready, after handlers are set.
|
||||
*/
|
||||
AjaxUI.prototype.start = function () {
|
||||
console.info("AjaxUI started!");
|
||||
this.BASE = $("body").data("base-url") + "/";
|
||||
console.info("Base path is " + this.BASE);
|
||||
this.registerLinks();
|
||||
this.registerForm();
|
||||
this.fillTrees();
|
||||
};
|
||||
/**
|
||||
* Fill the trees with the given data.
|
||||
*/
|
||||
AjaxUI.prototype.fillTrees = function () {
|
||||
var categories = Cookies.get("tree_datasource_tree-categories");
|
||||
var devices = Cookies.get("tree_datasource_tree-devices");
|
||||
var tools = Cookies.get("tree_datasource_tree-tools");
|
||||
if (typeof categories == "undefined") {
|
||||
categories = "categories";
|
||||
}
|
||||
if (typeof devices == "undefined") {
|
||||
devices = "devices";
|
||||
}
|
||||
if (typeof tools == "undefined") {
|
||||
tools = "tools";
|
||||
}
|
||||
this.treeLoadDataSource("tree-categories", categories);
|
||||
this.treeLoadDataSource("tree-devices", devices);
|
||||
this.treeLoadDataSource("tree-tools", tools);
|
||||
this.trees_filled = true;
|
||||
//Register tree btns to expand all, or to switch datasource.
|
||||
$(".tree-btns").click(function (event) {
|
||||
event.preventDefault();
|
||||
$(this).parents("div.dropdown").removeClass('show');
|
||||
//$(this).closest(".dropdown-menu").removeClass('show');
|
||||
$(".dropdown-menu.show").removeClass("show");
|
||||
var mode = $(this).data("mode");
|
||||
var target = $(this).data("target");
|
||||
var text = $(this).text() + " \n<span class='caret'></span>"; //Add caret or it will be removed, when written into title
|
||||
if (mode === "collapse") {
|
||||
// @ts-ignore
|
||||
$('#' + target).treeview('collapseAll', { silent: true });
|
||||
}
|
||||
else if (mode === "expand") {
|
||||
// @ts-ignore
|
||||
$('#' + target).treeview('expandAll', { silent: true });
|
||||
}
|
||||
else {
|
||||
Cookies.set("tree_datasource_" + target, mode);
|
||||
exports.ajaxUI.treeLoadDataSource(target, mode);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
};
|
||||
/**
|
||||
* Load the given url into the tree with the given id.
|
||||
* @param target_id
|
||||
* @param datasource
|
||||
*/
|
||||
AjaxUI.prototype.treeLoadDataSource = function (target_id, datasource) {
|
||||
var text = $(".tree-btns[data-mode='" + datasource + "']").html();
|
||||
text = text + " \n<span class='caret'></span>"; //Add caret or it will be removed, when written into title
|
||||
switch (datasource) {
|
||||
case "categories":
|
||||
exports.ajaxUI.initTree("#" + target_id, 'tree/categories/');
|
||||
break;
|
||||
case "locations":
|
||||
exports.ajaxUI.initTree("#" + target_id, 'tree/locations');
|
||||
break;
|
||||
case "footprints":
|
||||
exports.ajaxUI.initTree("#" + target_id, 'tree/footprints');
|
||||
break;
|
||||
case "manufacturers":
|
||||
exports.ajaxUI.initTree("#" + target_id, 'tree/manufacturers');
|
||||
break;
|
||||
case "suppliers":
|
||||
exports.ajaxUI.initTree("#" + target_id, 'tree/suppliers');
|
||||
break;
|
||||
case "tools":
|
||||
exports.ajaxUI.initTree("#" + target_id, 'tree/tools/');
|
||||
break;
|
||||
case "devices":
|
||||
exports.ajaxUI.initTree("#" + target_id, 'tree/devices');
|
||||
break;
|
||||
}
|
||||
$("#" + target_id + "-title").html(text);
|
||||
};
|
||||
/**
|
||||
* Fill a treeview with data from the given url.
|
||||
* @param tree The Jquery selector for the tree (e.g. "#tree-tools")
|
||||
* @param url The url from where the data should be loaded
|
||||
*/
|
||||
AjaxUI.prototype.initTree = function (tree, url) {
|
||||
//let contextmenu_handler = this.onNodeContextmenu;
|
||||
$.getJSON(exports.ajaxUI.BASE + url, function (data) {
|
||||
// @ts-ignore
|
||||
$(tree).treeview({
|
||||
data: data,
|
||||
enableLinks: false,
|
||||
showIcon: false,
|
||||
showBorder: true,
|
||||
onNodeSelected: function (event, data) {
|
||||
if (data.href) {
|
||||
exports.ajaxUI.navigateTo(data.href);
|
||||
}
|
||||
},
|
||||
//onNodeContextmenu: contextmenu_handler,
|
||||
expandIcon: "fas fa-plus fa-fw fa-treeview", collapseIcon: "fas fa-minus fa-fw fa-treeview"
|
||||
}).treeview('collapseAll', { silent: true });
|
||||
});
|
||||
};
|
||||
/**
|
||||
* Register all links, for loading via ajax.
|
||||
*/
|
||||
AjaxUI.prototype.registerLinks = function () {
|
||||
$('a').not(".link-external, [data-no-ajax]").click(function (event) {
|
||||
var a = $(this);
|
||||
var href = $.trim(a.attr("href"));
|
||||
//Ignore links without href attr and nav links ('they only have a #)
|
||||
if (href != null && href != "" && href.charAt(0) !== '#') {
|
||||
event.preventDefault();
|
||||
exports.ajaxUI.navigateTo(href);
|
||||
}
|
||||
});
|
||||
console.debug('Links registered!');
|
||||
};
|
||||
/**
|
||||
* Register all forms for loading via ajax.
|
||||
*/
|
||||
AjaxUI.prototype.registerForm = function () {
|
||||
var options = {
|
||||
success: this.onAjaxComplete,
|
||||
beforeSubmit: function (arr, $form, options) {
|
||||
//When data-with-progbar is specified, then show progressbar.
|
||||
if ($form.data("with-progbar") != undefined) {
|
||||
exports.ajaxUI.showProgressBar();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
$('form').not('[data-no-ajax]').ajaxForm(options);
|
||||
console.debug('Forms registered!');
|
||||
};
|
||||
AjaxUI.prototype.showProgressBar = function () {
|
||||
//Blur content background
|
||||
$('#content').addClass('loading-content');
|
||||
// @ts-ignore
|
||||
$('#progressModal').modal({
|
||||
keyboard: false,
|
||||
backdrop: false,
|
||||
show: true
|
||||
});
|
||||
};
|
||||
AjaxUI.prototype.hideProgressBar = function () {
|
||||
// @ts-ignore
|
||||
$('#progressModal').modal('hide');
|
||||
//Remove the remaining things of the modal
|
||||
$('.modal-backdrop').remove();
|
||||
$('body').removeClass('modal-open');
|
||||
$('body, .navbar').css('padding-right', "");
|
||||
};
|
||||
/**
|
||||
* Navigates to the given URL
|
||||
* @param url The url which should be opened.
|
||||
* @param show_loading Show the loading bar during loading.
|
||||
*/
|
||||
AjaxUI.prototype.navigateTo = function (url, show_loading) {
|
||||
if (show_loading === void 0) { show_loading = true; }
|
||||
if (show_loading) {
|
||||
this.showProgressBar();
|
||||
}
|
||||
$.ajax(url, {
|
||||
success: this.onAjaxComplete
|
||||
});
|
||||
//$.ajax(url).promise().done(this.onAjaxComplete);
|
||||
};
|
||||
/**
|
||||
* Called when an error occurs on loading ajax. Outputs the message to the console.
|
||||
*/
|
||||
AjaxUI.prototype.onAjaxError = function (event, request, settings) {
|
||||
'use strict';
|
||||
//Ignore aborted requests.
|
||||
if (request.statusText == 'abort') {
|
||||
return;
|
||||
}
|
||||
console.error("Error getting the ajax data from server!");
|
||||
console.log(event);
|
||||
console.log(request);
|
||||
console.log(settings);
|
||||
//If it was a server error and response is not empty, show it to user.
|
||||
if (request.status == 500 && request.responseText !== "") {
|
||||
console.log("Response:" + request.responseText);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* This function gets called every time, the "back" button in the browser is pressed.
|
||||
* We use it to load the content from history stack via ajax and to rewrite url, so we only have
|
||||
* to load #content-data
|
||||
* @param event
|
||||
*/
|
||||
AjaxUI.prototype.onPopState = function (event) {
|
||||
var page = location.href;
|
||||
exports.ajaxUI.statePopped = true;
|
||||
exports.ajaxUI.navigateTo(page);
|
||||
};
|
||||
/**
|
||||
* This function takes the response of an ajax requests, and does the things we need to do for our AjaxUI.
|
||||
* This includes inserting the content and pushing history.
|
||||
* @param responseText
|
||||
* @param textStatus
|
||||
* @param jqXHR
|
||||
*/
|
||||
AjaxUI.prototype.onAjaxComplete = function (responseText, textStatus, jqXHR) {
|
||||
console.debug("Ajax load completed!");
|
||||
exports.ajaxUI.hideProgressBar();
|
||||
//Parse response to DOM structure
|
||||
var dom = $.parseHTML(responseText);
|
||||
//And replace the content container
|
||||
$("#content").replaceWith($("#content", dom));
|
||||
//Replace login menu too (so everything is up to date)
|
||||
$("#login-content").replaceWith($('#login-content', dom));
|
||||
//Replace flash messages and show them
|
||||
$("#message-container").replaceWith($('#message-container', dom));
|
||||
$(".toast").toast('show');
|
||||
//Set new title
|
||||
var title = extractTitle(responseText);
|
||||
document.title = title;
|
||||
//Push to history, if we currently arent poping an old value.
|
||||
if (!exports.ajaxUI.statePopped) {
|
||||
// @ts-ignore
|
||||
history.pushState(null, title, this.url);
|
||||
}
|
||||
else {
|
||||
//Clear pop state
|
||||
exports.ajaxUI.statePopped;
|
||||
}
|
||||
//Do things on the new dom
|
||||
exports.ajaxUI.registerLinks();
|
||||
exports.ajaxUI.registerForm();
|
||||
};
|
||||
return AjaxUI;
|
||||
}());
|
||||
exports.ajaxUI = new AjaxUI();
|
||||
//# sourceMappingURL=ajax_ui.js.map
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue