/*
© 1980 - 2016 Copyright by Traccia - hi tech for life. All rights reserved.
libreria jQuery per Apex
realizzata da: Simone Bruno
data creazione: 15/01/2014
comando per generare la documentazione:
~/jsdoc/jsdoc ~/Desktop/"progetti Traccia"/traccia-lib/traccia-lib.js ~/Desktop/"progetti Traccia"/traccia-lib/README.md -t ~/docstrap/template -c ~/docstrap/template/jsdoc.conf.json -d ~/Desktop/"progetti Traccia"/traccia-lib/doc/
*/
/*************** utility *********************/
/** restituisce un numero decimale, partendo dal valore dell'elemento, convertendo la virgole in punti
@param {string} id - id dell'elemento da convertire
*/
function getFloatFromValId(id) {
return $v(id) == '' ? 0 : parseFloat($v(id).replace(',','.'));
}
/** restituisce un numero decimale, partendo dal testo dell'elemento, convertendo la virgole in punti
@param {string} id - id dell'elemento da convertire
*/
function getFloatFromTextId(id) {
return $('#'+id).text() == '' ? 0 : parseFloat($('#'+id).text().replace(',','.'));
}
/** restituisce un numero decimale, partendo dal testo dell'elemento, convertendo la virgole in punti
@param {element} obj - elemento
*/
function getFloatFromTextObj(obj) {
return $(obj).text() == '' ? 0 : parseFloat($(obj).text().replace(',','.'));
}
/** pads left
@param {string} padString - stringa da riempire
@param {integer} length - lunghezza desiderata
*/
String.prototype.lpad = function(padString, length) {
var str = this;
while (str.length < length)
str = padString + str;
return str;
}
/** pads right
@param {string} padString - stringa da riempire
@param {integer} length - lunghezza desiderata
*/
String.prototype.rpad = function(padString, length) {
var str = this;
while (str.length < length)
str = str + padString;
return str;
}
/** trimming space from both side of the string */
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
/** trimming space from left side of the string */
String.prototype.ltrim = function() {
return this.replace(/^\s+/,"");
}
/** trimming space from right side of the string */
String.prototype.rtrim = function() {
return this.replace(/\s+$/,"");
}
/*************** utility *********************/
/*************** navigazione *********************/
/** vai alla pagina passando i valori
@param {string} pagina - numero di pagina chiamata
@param {string} parametri - elenco di item da settare nella pagina chiamata, separati da virgola
@param {string} valori - valori degli item da settare nella pagina chiamata, separati da virgola. Attenzione: devono avere lo stesso ordine dei parametri
*/
function goTo(pagina,parametri,valori) {
//var parametri=parametri.split("|");
//var valori=valori.split("|");
var url='f?p=&APP_ID.:'+pagina+':&SESSION.::NO:'+pagina+':'+parametri+':'+valori;
window.location.href=url;
}
/** apre un Popup
@param {string} url - url pagina chiamata
@param {integer} width - larghezza popup
@param {integer} height - altezza popup
*/
function Popup(url,width,height) {
w = open(url,"winLov","Scrollbars=1,resizable=0,width="+width+",height="+height);
if (w.opener == null)
w.opener = self;
w.focus();
}
/** impedisce la navigazione di default di un link */
function noNavigare(event) {
event.preventDefault();
}
/*************** navigazione *********************/
/*************** interfaccia *********************/
/** apre un div a fisarmonica contenente un iframe ed effettua il toggle dei pulsanti di apertura/chiusura con id=btnApri/btnChiudi_"id del div da contenitore"
@param {string} div - id del div contenitore
@param {string} url - url della pagina da caricare
*/
function apri(div,url) {
if (url!=null) {
$('#'+div).html('<iframe src="'+url+'" style="border:none;width:100%;height:350px;" frameborder="0" framespacing="0" marginheight="0" marginwidth="0"></iframe>');
}
$('#'+div).show('slow');
$('#btnApri'+div).hide();
$('#btnChiudi'+div).show();
}
/** chiude il div a fisarmonica contenente un iframe ed effettua il toggle dei pulsanti di apertura/chiusura con id=btnApri/btnChiudi_"id del div da contenitore"
@param {string} div - id del div contenitore
*/
function chiudi(div) {
$('#'+div).hide('slow');
$('#btnApri'+div).show();
$('#btnChiudi'+div).hide();
}
/** intercetta i click sulle voci di menù non linkabili e ne espande/chiude il contenuto */
function apriEChiudiMenu() {
idPadre = $("#menu-principale .clicked").parent().attr("id");
classPadre = $("#"+idPadre).attr("class");
if(classPadre == "closed"){
$("#"+idPadre).removeClass("closed");
$("#"+idPadre).addClass("open");
}
else if (classPadre == "open"){
$("#"+idPadre).removeClass("open");
$("#"+idPadre).addClass("closed");
}
else if (classPadre == "last closed"){
$("#"+idPadre).removeClass("last closed");
$("#"+idPadre).addClass("last open");
}
else if (classPadre == "last open"){
$("#"+idPadre).removeClass("last open");
$("#"+idPadre).addClass("last closed");
}
}
/** evidenzia tutte le righe di un report se la colonna con classe "search" ha valore uguale a "val"
@param {string} search - classe della colonna da confrontare
@param {string} val - valore del rigo da evidenziare
@param {string} colore - colore evidenziazione ammesso in CSS (red, yellow, cian, orange, ...)
*/
function evidenziaRighe(search,val, color) {
$("."+search).each(function(index,element) {
if ($(element).text() == val || $(element).val() == val)
$(element).parent().parent().children().css({"background-color":color, "font-weight":"bold"});
});
}
/** mostra avanzamento sottomissione pagina */
function caricaPagina(){
$('#wwvFlowForm').submit(function() {
$('#apex_wait_popup').show();
$('#apex_wait_overlay').show();
});
}
/** nascondi avanzamento sottomissione pagina */
function paginaCaricata(){
$('#apex_wait_popup').hide();
$('#apex_wait_overlay').hide();
}
function apriMenuLaterale() {
$('#apriMenu').click(function(){
// se si tratta del menù regione
if ($('#right').size()>0) {
$('#right').css('margin-left', '300px');
$('#left').show('slow');
} else {
$('#uMidCol').removeClass('apex_cols apex_span_12');
$('#uMidCol').addClass('apex_cols apex_span_9');
$('#uLeftCol').show('slow');
}
$('#apriMenu').hide();
$('#chiudiMenu').show();
setSessionValue('P0_MENU_LATERALE', 'S');
});
}
function chiudiMenuLaterale() {
// funziona sul nuovo tema
$("h1:contains('Menù principale')").append('<a href="javascript:void(0)" title="Chiudi menù laterale" class="apri-chiudi-menu" id="chiudiMenu"><</a>').css('padding','5px 0 5px 10px');
$('#chiudiMenu').click(function(){
// se si tratta del menù regione
if ($('#right').size()>0) {
$('#left').hide();
$('#right').css('margin-left', '30px');
$('#apriBarra').show();
}
else {
$('#uLeftCol').hide();
$('#uMidCol').removeClass('apex_cols apex_span_9');
$('#uMidCol').addClass('apex_cols apex_span_12');
}
$('#apriMenu').show();
$('#chiudiMenu').hide();
setSessionValue('P0_MENU_LATERALE', 'N');
});
// chiudi automaticamente il menù laterale se l'utente ha scelto di non vederlo
if ($v('P0_MENU_LATERALE') == 'N') $('#chiudiMenu').click();
}
(function($) {
$.fn.fixMe = function() {
return this.each(function() {
var $this = $(this), $t_fixed;
function init() {
$this.wrap('<div class="container" />');
$t_fixed = $this.clone();
$t_fixed.find("tbody").hide().end().css({"top":0, "position":"fixed", "width":"auto", "display":"none", "border":"none" }).insertBefore($this);
resizeFixed();
}
function resizeFixed() {
$t_fixed.find("th").each(function(index) {
console.log($this.find("th").eq(index).width());
$(this).css("width",$this.find("th").eq(index).width()+"px");
});
}
function scrollFixed() {
var offset = $(this).scrollTop(),
tableOffsetTop = $this.offset().top,
tableOffsetBottom = tableOffsetTop + $this.height() - $this.find("thead").height();
if(offset < tableOffsetTop || offset > tableOffsetBottom)
$t_fixed.hide();
else if(offset >= tableOffsetTop && offset <= tableOffsetBottom && $t_fixed.is(":hidden"))
$t_fixed.show();
resizeFixed();
}
$(window).resize(resizeFixed);
$(window).scroll(scrollFixed);
init();
});
};
})(jQuery);
/** blocca in automatico la testata delle tabelle con la classe testatafissa.
*/
function bloccaTestateTabelle() {
$(".testatafissa table").fixMe();
}
/*************** interfaccia *********************/
/*************** form *********************/
/** imposta lunghezza di 2 caratteri agli elementi con classe: sigla2.
@deprecated
*/
function impostaLunghezzaSigle() {
$('.sigla2').attr('maxlength',2);
}
/** impedisce l'iserimento di numeri */
function controlloLettere() {
if(event.keyCode < 65 || event.keyCode > 122)
event.preventDefault();
else if(event.which < 65 || event.keyCode > 122)
return false;
}
/** impedisce l'iserimento di lettere */
function controlloSoloNumeri () {
if(event.keyCode < 42 || event.keyCode > 57)
event.preventDefault();
else if(event.which < 42 || event.which > 57)
return false;
}
/** popola campi automaticamente. NOTA: Da apex 4.1 è possibile usare un'azione dinamica di tipo pl/sql
@param {string} idParametro - id dell'item contenente il parametro da passare
@param {string} idRisultato - id dell'item che conterrà il risultato
@param {string} processo - processo su richiesta da chiamare
*/
function autocompleteForm(idParametro, idRisultato, processo) {
var get = new htmldb_Get( null, '&APP_ID.','APPLICATION_PROCESS='+processo,0);
get.add('T_VALUE', $('#'+idParametro).val());
gReturn = get.get();
$('#'+idRisultato).val(gReturn);
}
/** Verifica che il campo sia in formato ora hh.mm
*/
function oraValida(obj,avvisi) {
avvisi = typeof avvisi !== 'undefined' ? avvisi : false;
var str = $(obj).val().replace('.','');
if (str.length > 4 || isNaN(str) || parseInt(str)<0 || parseInt(str)>2400) {
if(avvisi) alert('Errore: Ora non corretta!');
$(obj).addClass('errore');
return false;
}
str = str.lpad('0',4);
if (parseInt(str.substring(2,4)) > 59) {
if(avvisi) alert('Errore: Ora non corretta!');
$(obj).addClass('errore');
return false;
}
$(obj).removeClass('errore');
return true;
}
/** Applica il formato ora hh.mm a tutti gli elementi con classe formatOra
*/
function applicaFormatOra() {
$('.formatOra').each(function (index,element) {
if (oraValida(element,false)) {
var str = $(this).val();
str = str.lpad('0',4);
var ore = str.substring(0,2);
var minuti = str.substring(2,4);
$(element).val(ore+':'+minuti);
}
});
}
/** Classe formatoOra applicata a una casella di testo => formatta automaticamento il campo in formato ora hh.mm
*/
function formatOra() {
$('.formatOra').change(function(){
if (oraValida(this,true)) {
var str = $(this).val();
str = str.lpad('0',4);
var ore = str.substring(0,2);
var minuti = str.substring(2,4);
$(this).val(ore+':'+minuti);
}
});
}
/** Elimina la formattazione dell'ora per poterla salvare come numerico
*/
function eliminaFormatOra() {
$('.formatOra').each(function (index,element) {
$(element).val(element.value.replace(':',''));
});
}
/** Applica il formato ora hh(n).mm a tutti gli elementi con classe formatoOreMinuti
*/
function applicaFormatOreMinuti() {
$('.formatOreMinuti').each(function (index,element) {
var str = $(this).val();
str = str.lpad('0',4);
l = str.length;
var ore = str.substring(0,l-2);
var minuti = str.substring(l-2);
$(this).val(ore+':'+minuti);
});
}
/** Classe formatoOreMinuti applicata a una casella di testo => formatta automaticamento il campo in formato ora hh(n):mm
*/
function formatOreMinuti() {
$('.formatOreMinuti').change(function(){
var str = $(this).val();
str = str.lpad('0',4);
l = str.length;
var ore = str.substring(0,l-2);
var minuti = str.substring(l-2);
$(this).val(ore+':'+minuti);
});
}
/** Elimina la formattazione ore:minuti per poterla salvare come numerico
*/
function eliminaFormatOreMinuti() {
$('.formatOreMinuti').each(function (index,element) {
$(element).val(element.value.replace(':',''));
});
}
/** Classe valuta applicata a una casella di testo => formatta automaticamente il campo in formato valuta
Richiede: module:plugin/jshashtable-2.1.js, plugin/jquery.numberformatter-1.2.3.js
*/
function formatValuta() {
$('.valuta').change(function(){
$(this).parseNumber({format:"#,##0.00", locale:"de"});
$(this).formatNumber({format:"#,##0.00", locale:"de"});
});
}
/** Imposta il valore dell'item nella pagina e in session
@param {string} idItem - id dell'item da settare
@param {string} valore - valore da assegnare
*/
function setSessionValue(idItem, valore) {
var get = new htmldb_Get( null, APP_ID,'APPLICATION_PROCESS=dummy', 0);
// setta valore nella pagina
$x_Value(idItem, valore);
// setta valore in sessione
get.add(idItem,valore);
gReturn = get.get();
get = null;
}
/*************** form *********************/
/*************** plugin *********************/
/** Converte il contenuto di item o elementi testuali (in base al tipo passato) in codici a barre code39.
Richiede: module:plugin/jquery-barcode.min.js
@param {string} classe - id dell'item contenente il parametro da passare
@param {string} tipo - T: Testo per elementi testuali (es. div, span, ...), V: Valore per elementi di form (testo, liste di selezione, ...)
*/
function creaCodiciABarre(classe,tipo) {
// impostazioni
var btype = 'code39';
var renderer = 'css';
var quietZone = false;
var settings = {
output:renderer,
bgColor: '#FFFFFF',
color: '#000000',
barWidth: 3,
barHeight: 100
};
$('.'+classe).each(function (index,element) {
if (tipo == 'T')
$(element).barcode($(element).text(), btype, settings);
else if (tipo == 'V')
$(element).barcode($v(element.id), btype, settings);
else
return;
});
}
/** aggiunge in automatico un pulsante per tornare in testa alla pagina.
Richiede: plugin/jquery.scrollTo.min.js, css/custom_apex.css, css/images/scrollTop.png
@param {integer} altezzaLimite - altezza in pixel, oltre la quale apparirà il pulsante Torna Su
*/
function creaTornaSu(altezzaLimite) {
$("body").prepend( '<div id="scrollTop" style="display: block;"><a href="#top"></a></div>' );
$(window).scroll( function() {
var position=$("#scrollTop").position();
if(position.top<altezzaLimite){
$("#scrollTop").fadeOut(600);
} else {
$("#scrollTop").fadeIn(600);
}
});
$("#scrollTop").hide().click(function(){$.scrollTo(0,800);});
}
/*************** plugin *********************/
/*************** esegui al caricamento della pagina *********************/
$(function() {
formatOra();
formatOreMinuti();
formatValuta();
paginaCaricata();
caricaPagina();
creaTornaSu(1000);
chiudiMenuLaterale();
apriMenuLaterale();
bloccaTestateTabelle();
});
/*************** esegui al caricamento della pagina *********************/