2022-03-05 23:28:29 +01:00
'use strict' ;
2022-03-06 14:45:01 +01:00
//CSS
import "bootstrap-fileinput/css/fileinput.css"
//JS
2022-03-06 23:27:20 +01:00
2022-03-06 14:45:01 +01:00
import "bootstrap-fileinput" ;
2022-03-05 23:28:29 +01:00
const RegisterEventHelper = class {
constructor ( ) {
2022-03-06 14:45:01 +01:00
this . registerTooltips ( ) ;
this . registerJumpToTopBtn ( ) ;
2022-03-07 01:28:32 +01:00
this . registerFileInput ( ) ;
2022-03-06 14:45:01 +01:00
this . registerSpecialCharInput ( ) ;
2022-03-07 01:28:32 +01:00
2022-03-06 14:45:01 +01:00
this . registerHoverPics ( ) ;
2022-03-05 23:28:29 +01:00
}
registerLoadHandler ( fn ) {
document . addEventListener ( 'turbo:load' , fn ) ;
}
2022-03-06 14:45:01 +01:00
registerTooltips ( ) {
this . registerLoadHandler ( ( ) => {
$ ( ".tooltip" ) . remove ( ) ;
2022-07-24 20:23:12 +02:00
//Exclude dropdown buttons from tooltips, otherwise we run into endless errors from bootstrap (bootstrap.esm.js:614 Bootstrap doesn't allow more than one instance per element. Bound instance: bs.dropdown.)
$ ( 'a[title], button[title]:not([data-bs-toggle="dropdown"]), span[title], h6[title], h3[title], i.fas[title]' )
2022-03-06 14:45:01 +01:00
//@ts-ignore
. tooltip ( "hide" ) . tooltip ( { container : "body" , placement : "auto" , boundary : 'window' } ) ;
} ) ;
}
registerHoverPics ( ) {
}
registerFileInput ( ) {
this . registerLoadHandler ( ( ) => {
$ ( ".file" ) . fileinput ( ) ;
} ) ;
}
registerJumpToTopBtn ( ) {
this . registerLoadHandler ( ( ) => {
$ ( window ) . scroll ( function ( ) {
if ( $ ( this ) . scrollTop ( ) > 50 ) {
$ ( '#back-to-top' ) . fadeIn ( ) ;
} else {
$ ( '#back-to-top' ) . fadeOut ( ) ;
}
} ) ;
// scroll body to 0px on click
$ ( '#back-to-top' ) . click ( function ( ) {
$ ( '#back-to-top' ) . tooltip ( 'hide' ) ;
$ ( 'body,html' ) . animate ( {
scrollTop : 0
} , 800 ) ;
return false ;
} ) . tooltip ( ) ;
} ) ;
}
registerSpecialCharInput ( ) {
this . registerLoadHandler ( ( ) => {
//@ts-ignore
$ ( "input[type=text], textarea, input[type=search]" ) . unbind ( "keydown" ) . keydown ( function ( event ) {
let greek = event . altKey ;
let greek _char = "" ;
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 ;
} )
}
2022-03-05 23:28:29 +01:00
}
export default new RegisterEventHelper ( ) ;