// 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 = $(''); 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); }); } });