// Avoid `console` errors in browsers that lack a console.
(function() {
var method;
var noop = function () {};
var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn'
];
var length = methods.length;
var console = (window.console = window.console || {});
while (length--) {
method = methods[length];
// Only stub undefined methods.
if (!console[method]) {
console[method] = noop;
}
}
}());
//Affiche un message 'message' de type 'type' pendant 'timeout' secondes
$.message = function (type,message,timeout){
message = message.replace(/<\/?script|iframe|object[^>]*>/gim,'');
var types = {
error : 'ERREUR',
warning : 'ATTENTION',
info : 'INFORMATION',
}
var data = { type: type, content: message, timeout: timeout };
if(types[type]) data.title = types[type];
$.toast(data);
}
//Permet les notifications types toast sans dépendance de librairie/css/html
$.toast = function (options) {
var defaults = {
title: null,
content: '',
type: 'info',
timeout: 3000
};
var o = $.extend(defaults, options);
if ($('.toastContainer').length == 0)
$('body').append('
');
var popupContainer = $('.toastContainer');
var popup = $('');
$(popupContainer).append(popup);
if (o.title) $('.toastTitle', popup).html(o.title);
$('.toastMessage', popup).html(o.content);
setTimeout(function () { popup.removeClass('hidden'); }, 50);
if (o.timeout != 0) {
setTimeout(function () {
popup.addClass('hidden');
setTimeout(function () {
popup.remove();
},100);
}, o.timeout);
} else {
popup.find('.toastRemove').removeClass('hidden');
}
}
$.page = function(element){
var path = window.location.pathname.split('/') ;
path = path[path.length-1];
path = path.replace('.php','');
return path;
}
$.getForm= function(element){
return $(element).getForm();
}
$.setForm= function(element,data){
var o = {};
var obj = $(element);
$('input,select,textarea',obj).each(function(i,element){
if(element.id!=null && element.id!=""){
if(data[element.id]!=null){
if($(element).attr("type")=='checkbox' || $(element).attr("type")=='radio'){
$(element).prop("checked",data[element.id]==1 || data[element.id]=='true' ?true:false);
} else {
$(element).val(data[element.id]);
}
}
}
});
return o;
}
//Gestion des tableaux pour le formData
$.form_data = function(formData, key,values){
var hasFile = false;
if(values instanceof File ) hasFile = true;
if( typeof values == 'object' && !(values instanceof File) ){
for(subkey in values)
if($.form_data(formData,key + '[' + subkey + ']',values[subkey])) hasFile = true;
}else{
formData.append(key, values);
}
return hasFile;
}
$.action = function(data,success,error,progress) {
var formData = new FormData();
var defaultSuccess = data.defaultSuccess != undefined ? data.defaultSuccess : true;
// if(data.defaultSuccess !== undefined) delete data.defaultSuccess;
//hasFile determine si un fichier uploadé se trouve dans le tableau des data
// Si c'est le cas, il envois les données en multipart, sinon il les envoie en json classique.
var hasFile = false;
$.each(data, function(key, value){
if($.form_data(formData,key, value) == true) hasFile = true;
});
var request = {
url : 'action.php',
method : 'POST',
success: function(response){
$('.btn.btn-preloader').removeClass('btn-preloader');
if(response && !response.error){
if(success!=null)success(response);
} else {
if(response.errorCode && response.errorCode=='401') window.location = 'action.php?action=logout';
var errorMessage = 'ERREUR : '+"\n"+response.error;
if(response.trace) errorMessage += "\n"+response.trace+"
";
if(defaultSuccess) $.message('error',errorMessage,0);
if(error!=null) error(response);
}
},
error : function(response){
$('.btn.btn-preloader').removeClass('btn-preloader');
if(response.status == 200 && $.localhost() ){
$('body').append('
Action debug '+response.responseText+'');
} else {
if(response.readyState == 0 && error==null) return;
if(error!=null){
if(response.errorCode && response.errorCode=='401') window.location = 'action.php?action=logout';
error(response);
}else{
$.message('error','Erreur indefinie, merci de contacter un administrateur',0);
}
}
},
xhr: function() {
var xhr = new window.XMLHttpRequest();
if(data.downloadResponse) xhr.responseType = 'blob';
xhr.upload.addEventListener("progress", function(evt){
if (evt.lengthComputable) {
var percentComplete = (evt.loaded / evt.total) * 100;
percentComplete = Math.round(percentComplete * 100) / 100;
if(progress) progress(percentComplete,'upload');
}
}, false);
xhr.addEventListener("progress", function(evt){
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
if(progress) progress(percentComplete,'download');
}
}, false);
xhr.addEventListener('readystatechange', function(e) {
if(xhr.readyState == 4 && xhr.status == 200) {
if(data.downloadResponse){
var disposition = xhr.getResponseHeader('content-disposition');
var matches = /"([^"]*)"/.exec(disposition);
var filename = (matches != null && matches[1] ? matches[1] : 'file');
var blob = new Blob([xhr.response], { type: xhr.response.type });
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
$('body').append(link);
link.click();
link.remove();
window.URL.revokeObjectURL(link);
}
}
});
return xhr;
}
};
if(!hasFile){
request.data = data;
}else{
request.data = formData;
request.processData = false;
request.contentType = false;
}
$.ajax(request);
}
$.localhost = function(){
return (document.location.hostname=='127.0.0.1' || document.location.hostname=='localhost');
}
$.hashData = function(name){
var page = window.location.hash.substring(1);
page += "&"+window.location.search.substring(1);
data = {};
if(page!='' && page!= null){
options = page.split('&');
var data = {};
for(var key in options){
infos = options[key].split('=');
data[infos[0]] = infos[1];
}
}
if(name == null) return data;
if(typeof name === "object"){
data = name;
hashstring = '';
for(var key in data)
hashstring+= "&"+key+"="+data[key];
hashstring = hashstring.substring(1);
window.location.hash = hashstring;
return;
}
return typeof data[name] == "undefined" ? '':data[name];
}
$.urlParam = function (name,value) {
var parameters = window.location.href.match(/[\\?&]([^]*)=([^]*)/g);
var data = {};
for (var key in parameters) {
var couple = parameters[key].substring(1, parameters[key].length).split('=');
data[couple[0]] = couple[1];
}
if(name == null) return data;
if (value == null)
return data[name] ? data[name] : null;
if (value != false) data[name] = value;
var url = '?';
for (var key in data) {
if (value == false && key == name) continue;
url += key + '=' + data[key]+'&';
}
window.history.pushState('', document.title, url.substring(0, url.length-1));
}
$.fn.extend({
toJson : function(){
return $.getForm(this);
},
fitText: function(ratio, options) {
var compressor = ratio || 1,
settings = $.extend({
'minFontSize' : Number.NEGATIVE_INFINITY,
'maxFontSize' : Number.POSITIVE_INFINITY
}, options);
return this.each(function(){
var element = $(this);
var resizer = function() {
element.css('font-size', Math.max(Math.min(element.width() / (compressor*10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize)));
};
resizer();
$(window).on('resize.fittext orientationchange.fittext', resizer);
});
},
getForm: function(){
var o = {};
var obj = $(this);
for(var key in obj.data()){
if(key!="action" && key != "id") continue;
o[key] = obj.attr('data-'+key);
}
$('input,select,textarea',obj).each(function(i,element){
var element = $(element);
var id = element.attr('id');
if(id!=null && id!=""){
if(element.attr("type")=='checkbox' || element.attr("type")=='radio'){
o[id] = (element.is(':checked')?1:0);
} else if(element.attr("type")=='file'){
if(!element[0].files.length) return;
if(element[0].files.length == 1){
o[id] = element[0].files[0];
} else {
//Attention, le passage de multiples fichiers
//entraine une modification de la structure du
//tableau $_FILES dans le php (voir fonction normalize_php_files())
o[id] = {};
for(var i=0; i ');
div.append(form);
var input = form.find('input[type="file"]');
var zone = $('' + o.label + '
');
div.append(zone);
//test if dnd is enabled n browser
var div = document.createElement('div');
var dragAndDropEnabled = (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && 'FormData' in window && 'FileReader' in window;
//set elements styles
input.attr('style', "width: 0.1px;height: 0.1px;opacity: 0;overflow: hidden; position: absolute;z-index: -1");
//set events
zone.on('click', function (e) {
form.find('input[type="file"]').trigger('click');
e.preventDefault();
e.stopPropagation();
})
.on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {
e.preventDefault();
e.stopPropagation();
})
.on('dragover dragenter', function () {
if (o.hover) form.addClass(o.hover);
})
.on('dragleave dragend drop', function () {
if (o.hover) form.removeClass(o.hover);
})
.on('drop', function (e) {
droppedFiles = e.originalEvent.dataTransfer.files;
form.trigger('submit');
});
input.on('change', function (e) {
form.trigger('submit');
});
form.on('submit', function (e) {
e.preventDefault();
if (o.start){
var result = o.start();
if(result == -1) return;
}
if (dragAndDropEnabled) {
var ajaxData = new FormData();
if (droppedFiles) {
$.each(droppedFiles, function (i, file) {
var ext = file.name.split('.');
ext = ext.pop();
if(o.allowed && $.inArray(ext.toLowerCase(),o.allowed.split(','))===-1){
$.message('error','Extension fichier '+ext+' non permise (autorisé:'+o.allowed+')',0);
return;
}
if(o.size && file.size > o.size){
$.message('error','Taille fichier '+file.size+' octets trop grande (autorisé:'+o.size+' octets)',0);
return;
}
ajaxData.append(input.attr('name'), file);
});
}else{
ajaxData = new FormData(form.get(0));
for(var key in $('input',form).get(0).files){
var file = $('input',form).get(0).files[key];
if(file.name==null || typeof file !='object') continue;
var ext = file.name.split('.');
ext = ext.pop();
if(o.allowed && $.inArray(ext.toLowerCase(),o.allowed.split(','))===-1){
$.message('error','Extension fichier '+ext+' non permise (autorisé:'+o.allowed+')',0);
$('input',form).val();
return;
}
if(o.size && file.size > o.size){
$.message('error','Taille fichier '+file.size+' octets trop grande (autorisé:'+o.size+' octets)',0);
$('input',form).val();
return;
}
}
}
if (o.addData){
var addionnalData = o.addData();
for(var k in addionnalData)
ajaxData.append(k, addionnalData[k]);
}
droppedFiles = null;
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data: ajaxData,
dataType: 'json',
cache: false,
contentType: false,
processData: false,
complete: function (data) {
if (o.complete) o.complete(data.responseJSON);
},
success: function (data) {
if (o.success) o.success(data);
},
error: function (data) {
if (o.error) o.error(data);
}
});
} else {
var iframeName = 'uploadiframe' + new Date().getTime();
iframe = $('');
$('body').append(iframe);
form.attr('target', iframeName);
iframe.one('load', function () {
var data = JSON.parse(iframe.contents().find('body').text());
if (!data.success) alert(data.error);
form.removeAttr('target');
iframe.remove();
if (o.complete) o.complete();
});
}
});
}
});
},
shiftCheckboxes: function() {
var instance = this;
this.on('click', function(e) {
var checkbox = $(e.target);
if(e.shiftKey && instance.last) {
var from = instance.index(instance.last);
var to = instance.index(checkbox);
instance.slice(Math.min(from, to), Math.max(from, to) + 1)
.filter(':not(:disabled)')
.prop('checked', checkbox.prop('checked'))
.trigger('change');
}
instance.last = checkbox;
});
},
clear: function(){
return this.each(function() {
var obj = $(this);
obj.find('input,select,textarea').val('').prop('checked',false).prop('selected',false);
obj.find('*[contenteditable="true"]').text('');
});
},
addLine: function (rows){
return this.each(function() {
var obj = $(this);
var model = null;
var container = null;
if(obj.prop("tagName") == 'UL'){
container = obj;
model = container.find('li:first-child');
container.find('li:visible').remove();
}else if(obj.prop("tagName") == 'TABLE'){
container = obj.find('tbody');
model = container.find('tr:first-child');
container.find('tr:visible').remove();
}else{
container = obj;
childName = container.children().get(0).nodeName;
model = container.find(childName+':first-child');
container.find(childName+':visible:not(.nofill)').remove();
}
var tpl = model.get(0).outerHTML;
//fix jquery backslahes break
tpl = tpl.replace(/{{##/g,'{{/').replace(/{{\/(.*)}}=""/g,'{{/$1}}');
//fix images url not found on template
tpl = tpl.replace(/( ]*\s)(data-src)/g,'$1src');
for(var key in rows){
var line = $(Mustache.render(tpl,rows[key]));
container.append(line);
line.removeClass('hidden');
}
});
},
//Retourne un node jquery visible à partir d'un
//modèle de template invisible + données mustache
template: function(data){
return $(Mustache.render($(this).get(0).outerHTML,data)).removeClass('hidden');
},
//Permet le resize d'un panel vertical
panelResize : function(options){
var obj = $(this);
var o = $.extend({
handlerClass : 'panel-resize-handler',
hoverClass : 'panel-resize-handler-hover',
handlerWidth : 10,
direction : 'right',
minWidth : 30,
maxWidth : 700,
update : function(data){}
}, options);
var handlerId = 'handler-'+generate_uuid(10);
var handler = $('
');
var timeout = null;
var left;
if( o.direction== 'right'){
left = obj.position().left+obj.outerWidth()-(o.handlerWidth/2);
}else if (o.direction== 'left'){
left = obj.position().left-(o.handlerWidth/2);
}
handler.css({
left :left,
top : obj.position().top
});
handler.hover(function(){
clearTimeout(timeout);
handler.addClass(o.hoverClass);
},
function(){
timeout = setTimeout(function(){
handler.removeClass(o.hoverClass);
},300);
});
if(!window.handlerActive) window.handlerActive = {};
if(!window.handlerPosition) window.handlerPosition = {};
handler.mousedown(function(){
window.handlerPosition[handlerId] = handler.position().left;
window.handlerPanelWidth = obj.outerWidth();
window.handlerActive[handlerId] = true;
});
$(document).mouseup(function(){
window.handlerActive[handlerId] = false;
var left;
if( o.direction== 'right'){
left = obj.position().left+obj.outerWidth()-(o.handlerWidth/2);
}else if (o.direction== 'left'){
left = obj.position().left-(o.handlerWidth/2);
}
handler.css({left : left});
o.update({
element : obj,
handler : handler,
width : obj.outerWidth()
});
});
$(document).mousemove(function( event ) {
if(!window.handlerActive[handlerId]) return;
var newPosition = (event.pageX-2);
var negativeWidth = window.handlerPosition[handlerId] - newPosition;
var newWidth = window.handlerPanelWidth- (negativeWidth * (o.direction== 'right'?1:-1) );
if(newWidth < o.minWidth || newWidth <1 || newWidth > o.maxWidth ){
return;
}
handler.css({
left : newPosition+'px'
});
obj.css({
width : newWidth+'px',
maxWidth : newWidth+'px'
});
});
obj.after(handler);
},
fill: function (option,callback,progress){
return this.each(function() {
var obj = $(this);
var model = null;
var container = null;
option = $.extend({
differential : false,
showing : function(item){
//permet la personnalisation de l'apparition des lignes ( removeClass('hidden') par defaut)
item.removeClass('hidden');
}
},option);
var preloader = null;
if(option.preloader){
var preloader = $(option.preloader);
preloader.css('position','absolute');
preloader.css('left',(obj.offset().left+obj.width()/2)+'px');
preloader.css('top',(obj.offset().top+30)+'px');
$('body').append(preloader);
}
if(obj.prop("tagName") == 'UL'){
container = obj;
model = container.find('li:first-child');
if(!option.export && !option.differential) container.children('li:visible').remove();
} else if(obj.prop("tagName") == 'TABLE'){
container = obj.find('tbody');
model = container.find('tr:first-child');
if(!option.export && !option.differential) container.children('tr:visible').remove();
} else if(obj.prop("tagName") == "SELECT"){
container = obj;
model = container.find('option[value*="{{"]');
if(model.length==0) model = $('{{label}} ');
if(!option.export && !option.differential) container.find('option:not([value*="{{"])').remove();
} else{
container = obj;
childName = container.children().get(0).nodeName;
model = container.find(childName+':first-child');
if(!option.export && !option.differential) container.find(childName+':visible:not(.nofill)').remove();
}
var tpl = model.get(0).outerHTML;
//fix jquery backslashes break
tpl = tpl.replace(/{{##/g,'{{/').replace(/{{\/(.*)}}=""/g,'{{/$1}}');
//fix images url not found on template
tpl = tpl.replace(/( ]*\s?)(data-src)/g,'$1src');
var pagination = obj.nextAll('.pagination').length ? obj.nextAll('.pagination') : obj.parent().nextAll('.pagination');
if(pagination.length!=0) option.page = $('li.active',pagination).attr('data-value');
tpl = tpl.replace(/(data-style)/g, 'style');
if(option.export)
option.downloadResponse = true;
//on clone l'objet option pour ne transmettre que des datas utiles
data = $.extend({},option);
delete data.showing;
delete data.templating;
$.action(data,function(r){
//On ne gere la pagination et l'affichage tableau que si on est pas en mode export
if(!option.export){
if(option.differential){
//suppression des élements dom qui ne sont plus en db
$('>[data-id]:visible',container).each(function(i,line){
var line = $(line);
toDelete = true;
for(var key in r.rows){
if(line.attr('data-id') == r.rows[key].id){
toDelete = false;
break;
}
}
if(toDelete) line.remove();
});
}
//var activeIds = [];
for(var key in r.rows){
var line;
var data = r.rows[key];
var lineTpl = tpl;
if(option.templating) lineTpl = option.templating(data,line,tpl);
if(!option.differential){
line = $(Mustache.render(lineTpl,data));
container.append(line);
option.showing(line,key);
}else{
//activeIds.push(data.id);
var existing = $('> [data-id="'+data.id+'"]',container);
//existe en data et pas dans le dom : ajout
if(existing.length == 0){
line = $(Mustache.render(lineTpl,data));
line.attr('data-update-tag',data.updated);
if(key==0){
container.append(line);
}else{
var previousIndex = key-1;
var previous = $('>[data-id]:visible',container).eq(previousIndex);
previous.after(line);
}
option.showing(line,key);
}else{
//existe en data et dans le dom et pas de modification : on passe au suivant
if(existing.attr('data-update-tag') == data.updated){
continue;
//existe en data et dans le dom mais a été modifié : on remplace
}else{
line = $(Mustache.render(lineTpl,data));
line.attr('data-update-tag',data.updated);
existing.after(line);
existing.remove();
option.showing(line,key);
}
}
}
}
if(option.differential){
var existingDom = [];
for(var key in r.rows){
var data = r.rows[key];
var line = $('>[data-id="'+r.rows[key].id+'"]',container);
var index = line.index() -1;
if(key != index){
var prevIndex = (key-1);
if(prevIndex<0){
container.prepend(line.detach());
}else{
var prevElement = $('>[data-id]:visible()',container).eq(prevIndex);
prevElement.after(line.detach());
}
}
}
}
if(r.pagination){
$('.page-item-previous,.page-item-next').remove();
r.pagination.pages = Math.ceil(r.pagination.pages);
var previewNumber = pagination.attr('data-range') != '' && pagination.attr('data-range') != null ? parseInt(pagination.attr('data-range')) : 5;
previewNumber = previewNumber < 2 ? 2 : previewNumber;
var template = pagination.find('li:not(:visible)');
if(template.length>0 ){
template = template.get(0).outerHTML;
$('li:not(:eq(0))',pagination).remove();
var current = parseInt(r.pagination.current);
var previousPages = current-previewNumber;
var nextPages = current+previewNumber;
var dropDownTpl = '
';
for(i=0;i ');
pagination.prepend(prev);
prev.click(function(){
pagination.find('li[data-value="'+(current-1)+'"]').trigger('click');
});
}
if(current ');
pagination.append(next);
next.click(function(){
pagination.find('li[data-value="'+(current+1)+'"]').trigger('click');
});
}
if(r.pagination.pages>1){
pagination.find('.page-item:not(.hidden):first .page-link').css('border-radius','0.25rem 0 0 0.25rem');
}else{
pagination.find('.page-item:not(.hidden):first .page-link').css('border-radius','0.25rem 0.25rem 0.25rem 0.25rem');
}
$('.pagination-select span',pagination).click(function(){
var selectedPage = (parseInt($(this).text())-1);
pagination.find('li[data-value="'+selectedPage+'"]').trigger('click');
});
}
}
}
if(preloader) preloader.remove();
if(callback!=null)callback(r);
},null,function(percent,type){
if(progress) progress(percent,type);
});
});
},
filters: function (values){
var obj = $(this);
var box = obj.next('.filter-box');
if(values){
if(values.keyword && values.keyword!='')
$('.filter-keyword',box).val(values.keyword);
for(var key in values.advanced){
var filter = values.advanced[key];
filter_add($('.filter-add-button',box),filter);
}
return;
}
var formData = {
keyword : $('.filter-keyword',box).val()
};
formData.advanced = [], formData.multiple = [], formData.custom = {};
$('.filterRow:visible',box).each(function(i,row){
var row = $(row);
if(row.find('.filter-column').val()=='') return;
var filter = {
join : row.find('.filter-join').val(),
column : row.find('.filter-column').val(),
type : row.find('.filter-column option:selected').attr('data-filter-type'),
operator : {},
value : {}
}
if ($('.filter-value-block',row).length > 1) {
$('.filter-value-block',row).each(function(j,block){
var block = $(block);
filter.operator[j] = block.find('.filter-operator').val();
filter.value[j] = block.find('.filter-value').last().val();
});
formData.multiple.push(filter);
} else {
filter.operator = row.find('.filter-operator').val();
values = row.find('.filter-value');
if(values.length > 1){
filter.value = [];
for(var j=0; j'+match+'';
});
}
},
matcher: function(r){
if(obj.val() == r.name)
if(o.onClick)
o.onClick(r,obj);
return ''+r.name+'
';
},
afterSelect: function(item) {
obj.data('selected',true);
if(o.onClick) o.onClick(item,obj);
obj.trigger("change");
}
}).blur(function(){
if(o.onBlur) o.onBlur(obj);
});
if(o.suggest){
obj.on("click", function () {
ev = $.Event("keydown");
ev.keyCode = ev.which = 40;
$(this).trigger(ev);
return true
});
}
obj.data('typeahead').next = function (event) {
var active = this.$menu.find('.active').removeClass('active');
var next = active.next();
if (!next.length) {
next = $(this.$menu.find($(this.options.item || this.theme.item).prop('tagName'))[0]);
}
while (next.hasClass('divider') || next.hasClass('dropdown-header')) {
next = next.next();
}
next.addClass('active');
var newVal = this.updater(next.data('value'));
this.$element.val(newVal.name || newVal.label || newVal);
};
obj.data('typeahead').prev = function (event) {
var active = this.$menu.find('.active').removeClass('active');
var prev = active.prev();
if (!prev.length){
prev = this.$menu.find($(this.options.item || this.theme.item).prop('tagName')).last();
}
while (prev.hasClass('divider') || prev.hasClass('dropdown-header')) {
prev = prev.prev();
}
prev.addClass('active');
var newVal = this.updater(prev.data('value'));
if (this.changeInputOnMove) this.$element.val(newVal.name || newVal.label || newVal);
};
});
},
location: function (options){
return this.each(function() {
var obj = $(this);
var o = $.extend({},options);
obj.off('keyup').on('keyup', function(event) {
if(!$(this).val().length) return;
});
obj.autocomplete({
action: 'location_search',
force: (o.force ? o.force : false),
items: (o.items ? o.items : 8),
data: {
maxresults: (o.items ? o.items : 8),
language: (o.language ? o.language : "fr"),
country: (o.country ? o.country : "FRA"),
},
skin : function(item){
var html = ' ';
var re = new RegExp(obj.val(),"gi");
name = item.label.replace(re, function (x) {
return ''+x+' ';
});
html += name+' ';
return html;
},
highlight : function(item){
return item;
},
onClick : function(selected,element){
obj.val(selected.label);
if(!is_empty_obj(selected.address)) {
var infos = {
number: selected.address.houseNumber ? selected.address.houseNumber : '',
street: selected.address.street ? selected.address.street : '',
district: selected.address.district ? selected.address.district : '',
city: selected.address.city ? selected.address.city : '',
county: selected.address.county ? selected.address.county : '',
state: selected.address.state ? selected.address.state : '',
country: selected.address.country ? selected.address.country : '',
zip: selected.address.postalCode ? selected.address.postalCode : '',
};
infos.address = (infos.street && infos.street.length && infos.number && infos.number.length) ? infos.number+' '+infos.street : (infos.street ? infos.street : '');
obj.removeData();
obj.data(infos);
if(o.select) o.select(infos);
if(o.geocode) o.geocode(selected);
}
},
onBlur : function(selected,element){
},
onCancel : function(element){
obj.val('');
}
});
});
},
colorInput: function (options) {
return this.each(function () {
var o = $.extend({
choices : [
'#34495e',
'#9b59b6',
'#3498db',
'#2ecc71',
'#1abc9c',
'#95a5a6',
'#ecf0f1',
'#e74c3c',
'#e67e22',
'#f1c40f',
'#d35400',
'#55E6C1',
'#EAB543',
'#F8EFBA',
'#FD7272',
'#3B3B98',
'#B33771',
'#6c5ce7',
'#0984e3',
'#00cec9',
'#fd79a8',
'#d63031',
'#a29bfe',
'#55efc4'
]
},options);
var input = $(this);
input.hide();
var component = input.data('component-color');
if(component){
//reload
}else{
var component = $('');
//load
input.data('component-color',component);
input.after(component);
component.append(input.detach());
}
var picker = $('.component-color-picker',component);
var palette = $('.component-color-palette',component);
var thumb = $('.component-color-thumb',component);
thumb.css('backgroundColor',input.val());
var html = '';
for(var k in o.choices){
html += '
';
}
html += '
';
html += ' ';
picker.html(html);
$('.other-color',component).click( function(){
palette.click();
});
palette.change(function(){
input.val(palette.val()).change();
picker.addClass('hidden');
});
input.change(function(){
thumb.css('backgroundColor',input.val());
});
component.click(function(e){
e.stopPropagation();
picker.removeClass('hidden');
setTimeout(function(){picker.addClass('active')},50);
});
$('.color-choice',picker).click(function(e){
e.stopPropagation();
picker.removeClass('active');
setTimeout(function(){picker.addClass('hidden')},200);
input.val($(this).attr('data-color')).change();
});
$(window).click(function() {
picker.removeClass('active');
setTimeout(function(){picker.addClass('hidden')},200);
});
});
},
date: function (options){
return this.each(function(){
var obj = $(this);
obj.on('paste', function(e){
is_valid_date(e.originalEvent.clipboardData.getData('Text')) ? obj.val("") : e.preventDefault();
});
//Jours ouvrés
var minDate = options.beginDate;
var beforeShowDay = '';
if(options.workdays){
var minDate = new Date();
var daysToAdd = [0, 0, 2, 2, 2, 2, 1];
minDate.setDate(minDate.getDate()+parseInt(options.beginDate)+daysToAdd[minDate.getDay()]);
beforeShowDay = $.datepicker.noWeekends;
}
obj.datepicker({
dateFormat: options.dateFormat,
dayNames: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
dayNamesMin: ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"],
dayNamesShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"],
monthNames: ["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Décembre"],
monthNamesShort: ["Jan","Fév","Mars","Avr","Mai","Juin","Juil","Aout","Sept","Oct","Nov","Déc"],
firstDay: 1,
minDate: minDate,
beforeShowDay: beforeShowDay,
maxDate: options.endDate,
changeMonth: true,
yearRange: "-30:+30",
changeYear: true,
onSelect: function(dateText, inst){
obj.trigger("blur");
},
beforeShow: function(){
if(obj.is('[readonly]')) return false;
}
}).keypress(function(event){
if(event.keyCode==47) event.preventDefault();
var length = obj.val().length;
if(length == 2 || length == 5) obj.val(obj.val()+'/');
}).blur(function(event){
obj.removeClass('border border-danger');
if(obj.val()=='') return;
var segments = obj.val().split('/');
if(segments.length!=3) return;
if(segments[0] > 31 || segments[1] > 12) obj.addClass('border border-danger');
}).attr('maxlength','10');
obj.attr('placeholder',options.placeholder);
obj.attr('title','Format '+options.dateFormat);
});
},
hour: function (options){
return this.each(function() {
var obj = $(this);
obj.on('paste', function(e){
is_valid_hour(e.originalEvent.clipboardData.getData('Text')) ? obj.val("") : e.preventDefault();
});
obj.timepicker({
scrollDefault: 'now',
timeFormat: options.timeFormat,
step: options.step,
onSelect: function(timeText, inst) {
obj.trigger("blur");
}
}).keypress(function(e) {
if(!e.key.match(/[0-9:]/)) e.preventDefault();
if(obj.val().length == 2) obj.val(obj.val()+':');
}).blur(function(event){
obj.removeClass('border border-danger')
if(obj.val()=='') return;
var segments = obj.val().split(':');
if(segments.length!=2) return;
if(segments[0] > 23 || segments[1] > 59) obj.addClass('border border-danger');
}).attr('maxlength','5');
obj.attr("placeholder",options.placeholder);
obj.attr('title',"Format hh:mm");
});
},
raiseNumber: function(from,to) {
return this.each(function(){
var obj = $(this);
obj.text(from);
var interval = from<=to ? (800 / (to - from)) : (800 / (from - to));
var interval = setInterval(function(){
var number = parseFloat(obj.text());
if(from<=to){
if(number>=to) {
clearInterval(interval);
return;
}
obj.text(number+1);
} else {
if(number<=to) {
clearInterval(interval);
return;
}
obj.text(number-1);
}
},interval);
});
}
});