%PDF- %PDF-
Direktori : /home1/lightco1/public_html/media/system/js/ |
Current File : //home1/lightco1/public_html/media/system/js/repeatable.js |
(function($){"use strict";$.JRepeatable=function(input,options){var self=this;if(!self||self===window){return new $.JRepeatable(input,options)}self.$input=$(input);if(self.$input.data("JRepeatable")){return self}self.$input.data("JRepeatable",self);self.init=function(){self.options=$.extend({},$.JRepeatable.defaults,options);self.$container=$(self.options.container);$("body").append(self.$container);self.$rowsContainer=self.$container.find(self.options.repeatableElement).parent();self.prepareModal();self.inputs=[];self.values={};self.prepareTemplate();var val=self.$input.val();if(val){try{self.values=JSON.parse(val)}catch(e){if(e instanceof SyntaxError){try{val=val.replace(/'/g,'"').replace(/\\"/g,"'");self.values=JSON.parse(val)}catch(e){if(window.console){console.log(e)}}}else if(window.console){console.log(e)}}}self.buildRows();$(document).on("click",self.options.btModalOpen,function(e){e.preventDefault();self.$modalWindow.modal("show")});self.$modalWindow.on("click",self.options.btModalClose,function(e){e.preventDefault();self.$modalWindow.modal("hide");self.buildRows()});self.$modalWindow.on("click",self.options.btModalSaveData,function(e){e.preventDefault();self.$modalWindow.modal("hide");self.refreshValue()});self.$container.on("click",self.options.btAdd,function(e){e.preventDefault();var after=$(this).parents(self.options.repeatableElement);if(!after.length){after=null}self.addRow(after)});self.$container.on("click",self.options.btRemove,function(e){e.preventDefault();var row=$(this).parents(self.options.repeatableElement);self.removeRow(row)});self.$input.trigger("weready")};self.prepareTemplate=function(){var $rows=self.$container.find(self.options.repeatableElement);var $row=$($rows.get(0));try{self.clearScripts($row)}catch(e){if(window.console){console.log(e)}}var inputs=$row.find("*[name]");for(var i=0,l=inputs.length;i<l;i++){var name=$(inputs[i]).attr("name");if(self.values[name]){continue}self.inputs.push({name:name,type:$(inputs[i]).attr("type")||inputs[i].tagName.toLowerCase()});self.values[name]=[]}self.template=$row.prop("outerHTML");$rows.remove();self.$input.trigger("prepare-template",self.template)};self.prepareModal=function(){var modalEl=$(self.options.modalElement);modalEl.css({position:"absolute",width:"auto","max-width":"100%"});modalEl.on("shown",function(){self.resizeModal()});$(window).resize(function(){self.resizeModal()});self.$modalWindow=modalEl.modal({show:false,backdrop:"static"});self.$input.trigger("prepare-modal",self.$modalWindow)};self.resizeModal=function(){if(!self.$modalWindow.is(":visible")){return}var docHalfWidth=$(document).width()/2,modalHalfWidth=self.$modalWindow.width()/2,rowsHalfWidth=self.$rowsContainer.width()/2,marginLeft=modalHalfWidth>=docHalfWidth?0:-modalHalfWidth,left=marginLeft?"50%":0,top=$(document).scrollTop()+$(window).height()*.2;self.$modalWindow.css({top:top,left:left,"margin-left":marginLeft,overflow:rowsHalfWidth>modalHalfWidth?"auto":"visible"})};self.buildRows=function(){var $oldRows=self.$rowsContainer.children();if($oldRows.length){self.removeRow($oldRows)}var count=self.values[Object.keys(self.values)[0]].length||1,row=null;for(var i=0;i<count;i++){row=self.addRow(row,i)}};self.addRow=function(after,valueKey){var count=self.$container.find(self.options.repeatableElement).length;if(count>=self.options.maximum){return null}var row=$.parseHTML(self.template);if(after){$(after).after(row)}else{self.$rowsContainer.append(row)}var $row=$(row);self.fixUniqueAttributes($row,count+1);if(valueKey!==null&&valueKey!==undefined){for(var i=0,l=self.inputs.length;i<l;i++){var name=self.inputs[i].name,type=self.inputs[i].type,value=null;if(self.values[name]){value=self.values[name][valueKey]}if(value===null||value===undefined){continue}if(type==="radio"){$row.find('*[name*="'+name+'"][value="'+value+'"]').attr("checked","checked")}else if(type==="checkbox"){if(value.length){for(var v=0,vl=value.length;v<vl;v++){$row.find('*[name*="'+name+'"][value="'+value[v]+'"]').attr("checked","checked")}}else{$row.find('*[name*="'+name+'"][value="'+value+'"]').attr("checked","checked")}}else{$row.find('*[name*="'+name+'"]').val(value)}}}try{self.fixScripts($row)}catch(e){if(window.console){console.log(e)}}self.$input.trigger("row-add",$row);return $row};self.removeRow=function(row){self.$input.trigger("row-remove",row);$(row).remove()};self.fixUniqueAttributes=function($row,count){var haveIds=$row.find("*[id]");self.increaseAttrName(haveIds,"id",count);var haveFor=$row.find("label[for]");self.increaseAttrName(haveFor,"for",count);var haveName=$row.find("*[name]");self.increaseAttrName(haveName,"name",count)};self.increaseAttrName=function(elements,attr,count){for(var i=0,l=elements.length;i<l;i++){var $el=$(elements[i]);var oldValue=$el.attr(attr);$el.attr(attr,count+"-"+oldValue)}};self.refreshValue=function(){var $rows=self.$container.find(self.options.repeatableElement);self.values={};for(var i=0,l=self.inputs.length;i<l;i++){var name=self.inputs[i].name,type=self.inputs[i].type;self.values[name]=[];for(var r=0,rl=$rows.length;r<rl;r++){var $row=$($rows[r]),val=null;if(type==="radio"){val=$row.find('*[name*="'+name+'"]:checked').val()}else if(type==="checkbox"){var checked=$row.find('*[name*="'+name+'"]:checked');if(checked.length>1){val=[];for(var c=0,cl=checked.length;c<cl;c++){val.push($(checked[c]).val())}}else{val=checked.val()}}else{val=$row.find('*[name*="'+name+'"]').val()}val=val===null?"":val;self.values[name].push(val)}}self.$input.val(JSON.stringify(self.values));self.$input.trigger("value-update",self.values)};self.clearScripts=function($row){if($.fn.chosen){$row.find("select").each(function(){if($(this).data("chosen")){$(this).chosen("destroy")}})}if($.fn.minicolors){$row.find(".minicolors input").each(function(){$(this).minicolors("destroy",$(this))})}};self.fixScripts=function($row){$row.find(".minicolors").each(function(){var $el=$(this);$el.minicolors({control:$el.attr("data-control")||"hue",position:$el.attr("data-position")||"right",theme:"bootstrap"})});$row.find('a[onclick*="jInsertFieldValue"]').each(function(){var $el=$(this),inputId=$el.siblings('input[type="text"]').attr("id"),$select=$el.prev(),oldHref=$select.attr("href");$el.attr("onclick","jInsertFieldValue('', '"+inputId+"');return false;");$select.attr("href",oldHref.replace(/&fieldid=(.+)&/,"&fieldid="+inputId+"&"));jMediaRefreshPreview(inputId)});if(window.SqueezeBox&&window.SqueezeBox.assign){SqueezeBox.assign($row.find("a.modal").get(),{parse:"rel"})}};self.init()};$.JRepeatable.defaults={modalElement:"#modal-container",btModalOpen:"#open-modal",btModalClose:".close-modal",btModalSaveData:".save-modal-data",btAdd:"a.add",btRemove:"a.remove",maximum:10,repeatableElement:"table tbody tr"};$.fn.JRepeatable=function(options){return this.each(function(){var options=options||{},data=$(this).data();for(var p in data){if(data.hasOwnProperty(p)){options[p]=data[p]}}new $.JRepeatable(this,options)})};$(window).on("load",function(){$("input.form-field-repeatable").JRepeatable()})})(jQuery);