mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-21 09:35:49 +02:00
Added an simple event system and readded some functions from the legacy Part-DB.
This commit is contained in:
parent
570aa68535
commit
3e54d35fac
3 changed files with 180 additions and 3 deletions
|
@ -53,7 +53,13 @@ import {ajaxUI} from "../ts_src/ajax_ui";
|
||||||
|
|
||||||
window.ajaxUI = ajaxUI;
|
window.ajaxUI = ajaxUI;
|
||||||
|
|
||||||
//Start AjaxUI
|
//Require all events;
|
||||||
|
require('../ts_src/event_listeners');
|
||||||
|
|
||||||
|
|
||||||
|
//Start AjaxUI AFTER all event has been registered
|
||||||
$(document).ready(ajaxUI.start());
|
$(document).ready(ajaxUI.start());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//console.log('Hello Webpack Encore! Edit me in assets/js/app.js');
|
//console.log('Hello Webpack Encore! Edit me in assets/js/app.js');
|
|
@ -56,6 +56,10 @@ class AjaxUI {
|
||||||
|
|
||||||
private statePopped : boolean = false;
|
private statePopped : boolean = false;
|
||||||
|
|
||||||
|
//Listener savers;
|
||||||
|
private ajax_complete_listeners : Array<() => void> = [];
|
||||||
|
private start_listeners : Array<() => void> = [];
|
||||||
|
|
||||||
public constructor()
|
public constructor()
|
||||||
{
|
{
|
||||||
//Make back in the browser go back in history
|
//Make back in the browser go back in history
|
||||||
|
@ -64,6 +68,27 @@ class AjaxUI {
|
||||||
//$(document).ajaxComplete(this.onAjaxComplete.bind(this));
|
//$(document).ajaxComplete(this.onAjaxComplete.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a function, which will be executed every time, a ajax request was successful.
|
||||||
|
* Should be used to register functions for elements in the #content div
|
||||||
|
* @param {() => void} func The function which should be registered.
|
||||||
|
*/
|
||||||
|
public addAjaxCompleteAction(func : ()=>void)
|
||||||
|
{
|
||||||
|
this.ajax_complete_listeners.push(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a function, which will be called once, when start() is run.
|
||||||
|
* Should be used to register functions for elements outside the #content div.
|
||||||
|
* @param {() => void} func The function which should be registered.
|
||||||
|
*/
|
||||||
|
public addStartAction(func: ()=>void)
|
||||||
|
{
|
||||||
|
this.start_listeners.push(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the ajax ui und execute handlers registered in addStartAction().
|
* Starts the ajax ui und execute handlers registered in addStartAction().
|
||||||
* Should be called in a document.ready, after handlers are set.
|
* Should be called in a document.ready, after handlers are set.
|
||||||
|
@ -82,9 +107,10 @@ class AjaxUI {
|
||||||
this.registerForm();
|
this.registerForm();
|
||||||
this.fillTrees();
|
this.fillTrees();
|
||||||
|
|
||||||
|
|
||||||
this.initDataTables();
|
this.initDataTables();
|
||||||
|
|
||||||
|
//Trigger start event
|
||||||
|
$(document).trigger("ajaxUI:start");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -206,7 +232,7 @@ class AjaxUI {
|
||||||
public registerLinks()
|
public registerLinks()
|
||||||
{
|
{
|
||||||
// Unbind all old handlers, so the things are not executed multiple times.
|
// Unbind all old handlers, so the things are not executed multiple times.
|
||||||
$('a').not(".link-external, [data-no-ajax]").unbind('click').click(function (event) {
|
$('a').not(".link-external, [data-no-ajax], .page-link").unbind('click').click(function (event) {
|
||||||
let a = $(this);
|
let a = $(this);
|
||||||
let href = $.trim(a.attr("href"));
|
let href = $.trim(a.attr("href"));
|
||||||
//Ignore links without href attr and nav links ('they only have a #)
|
//Ignore links without href attr and nav links ('they only have a #)
|
||||||
|
@ -367,6 +393,9 @@ class AjaxUI {
|
||||||
ajaxUI.registerLinks();
|
ajaxUI.registerLinks();
|
||||||
ajaxUI.registerForm();
|
ajaxUI.registerForm();
|
||||||
ajaxUI.initDataTables();
|
ajaxUI.initDataTables();
|
||||||
|
|
||||||
|
//Trigger reload event
|
||||||
|
$(document).trigger("ajaxUI:reload");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
142
assets/ts_src/event_listeners.ts
Normal file
142
assets/ts_src/event_listeners.ts
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************************
|
||||||
|
*
|
||||||
|
* In this file all the functions that has to be called using AjaxUIoperation are registered.
|
||||||
|
* You can use AjaxUI:start and AjaxUI:reload events.
|
||||||
|
*
|
||||||
|
***********************************/
|
||||||
|
|
||||||
|
|
||||||
|
//Register greek input in search fields.
|
||||||
|
$(document).on("ajaxUI:start ajaxUI:reload", function() {
|
||||||
|
//@ts-ignore
|
||||||
|
$("input[type=text], textarea, input[type=search]").unbind("keydown").keydown(function (event : KeyboardEvent) {
|
||||||
|
let greek = event.altKey;
|
||||||
|
|
||||||
|
let greek_char : string = "";
|
||||||
|
if (greek){
|
||||||
|
switch(event.key) {
|
||||||
|
case "w": //Omega
|
||||||
|
greek_char = '\u2126';
|
||||||
|
break;
|
||||||
|
case "u":
|
||||||
|
case "m": //Micro
|
||||||
|
greek_char = "\u00B5";
|
||||||
|
break;
|
||||||
|
case "p": //Phi
|
||||||
|
greek_char = "\u03C6";
|
||||||
|
break;
|
||||||
|
case "a": //Alpha
|
||||||
|
greek_char = "\u03B1";
|
||||||
|
break;
|
||||||
|
case "b": //Beta
|
||||||
|
greek_char = "\u03B2";
|
||||||
|
break;
|
||||||
|
case "c": //Gamma
|
||||||
|
greek_char = "\u03B3";
|
||||||
|
break;
|
||||||
|
case "d": //Delta
|
||||||
|
greek_char = "\u03B4";
|
||||||
|
break;
|
||||||
|
case "l": //Pound
|
||||||
|
greek_char = "\u00A3";
|
||||||
|
break;
|
||||||
|
case "y": //Yen
|
||||||
|
greek_char = "\u00A5";
|
||||||
|
break;
|
||||||
|
case "o": //Yen
|
||||||
|
greek_char = "\u00A4";
|
||||||
|
break;
|
||||||
|
case "1": //Sum symbol
|
||||||
|
greek_char = "\u2211";
|
||||||
|
break;
|
||||||
|
case "2": //Integral
|
||||||
|
greek_char = "\u222B";
|
||||||
|
break;
|
||||||
|
case "3": //Less-than or equal
|
||||||
|
greek_char = "\u2264";
|
||||||
|
break;
|
||||||
|
case "4": //Greater than or equal
|
||||||
|
greek_char = "\u2265";
|
||||||
|
break;
|
||||||
|
case "5": //PI
|
||||||
|
greek_char = "\u03c0";
|
||||||
|
break;
|
||||||
|
case "q": //Copyright
|
||||||
|
greek_char = "\u00A9";
|
||||||
|
break;
|
||||||
|
case "e": //Euro
|
||||||
|
greek_char = "\u20AC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(greek_char=="") return;
|
||||||
|
|
||||||
|
let $txt = $(this);
|
||||||
|
//@ts-ignore
|
||||||
|
let caretPos = $txt[0].selectionStart;
|
||||||
|
let textAreaTxt = $txt.val().toString();
|
||||||
|
$txt.val(textAreaTxt.substring(0, caretPos) + greek_char + textAreaTxt.substring(caretPos) );
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//@ts-ignore
|
||||||
|
this.greek_once = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
//Register bootstrap select picker
|
||||||
|
$(document).on("ajaxUI:reload", function () {
|
||||||
|
//@ts-ignore
|
||||||
|
$(".selectpicker").selectpicker();
|
||||||
|
});
|
||||||
|
|
||||||
|
//Use bootstrap tooltips for the most tooltips
|
||||||
|
$(document).on("ajaxUI:start ajaxUI:reload", function () {
|
||||||
|
$(".tooltip").remove();
|
||||||
|
$('a[title], button[title], span[title], h6[title]')
|
||||||
|
//@ts-ignore
|
||||||
|
.tooltip("hide").tooltip({container: "body", placement: "auto", boundary: 'window'});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//Need for proper body padding, with every navbar height
|
||||||
|
$(window).resize(function () {
|
||||||
|
let height : number = $('#navbar').height() + 10;
|
||||||
|
$('body').css('padding-top', height);
|
||||||
|
$('#fixed-sidebar').css('top', height);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(window).on('load', function () {
|
||||||
|
let height : number = $('#navbar').height() + 10;
|
||||||
|
$('body').css('padding-top', height);
|
||||||
|
$('#fixed-sidebar').css('top', height);
|
||||||
|
});
|
Loading…
Add table
Add a link
Reference in a new issue