diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..b8387eb --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/oEditor.js b/oEditor.js new file mode 100644 index 0000000..1bb94b1 --- /dev/null +++ b/oEditor.js @@ -0,0 +1,172 @@ +/** + * Created by Ivan Mokrotovarov on 10.09.2018. + * + */ + +'use strict'; + +class oEditor { + + constructor(obj,target,options = {}){ + this.obj=obj; + this.target = target; + this.options = {}; + Object.assign(this.options,options); + this.prefix = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5); + + } + getFieldDescription(fieldName){ + return (typeof this.options.fields !== 'undefined'?(this.options.fields[fieldName]?this.options.fields[fieldName]:fieldName):fieldName); + } + getFormHeader(){ + let title="Editing"; + if (typeof this.options.title !== 'undefined') + title = this.options.title; + return "
"+title+"
"; + } + getSelectFieldHtml(tag){ + let name = this.getFieldDescription(tag) + let value = this.obj[tag]; + let html = "
"; + return html; + } + getFieldHtml(tag){ + let name = this.getFieldDescription(tag) + let value = this.obj[tag]; + return "
"; + } + getFormFooter(){ + let html=""; + return html; + } + + errorParse(errors){ + this.clearErrors(); + for (let e in errors){ + let inp = $("#div"+this.getFieldId(e)); + inp.addClass("has-error"); + inp.addClass("has-feedback"); + $("#"+this.getFieldId(e)).after(""+errors[e]+"") + $("#"+this.getFieldId(e)).after("") + + } + } + + clearErrors(){ + $("#"+this.target+" .form-control-feedback").remove(); + $("#"+this.target+" .help-block").remove(); + $("#"+this.target+" .has-error").removeClass("has-error"); + $("#"+this.target+" .has-feedback").removeClass("has-feedback"); + } + + createForm(){ + let trg = $("#"+this.target); + trg.empty(); + let html=this.getFormHeader(); + for (let tag in this.obj){ + if (typeof this.options.hidefields !== "undefined" && jQuery.inArray(tag,this.options.hidefields)>=0) + continue; + if (typeof this.options.selectfields !== "undefined" && this.options.selectfields[tag]) + { + html+=this.getSelectFieldHtml(tag); + }else + html+=this.getFieldHtml(tag); + } + html+="
"; + if (this.options.showFooter || this.options.showSubmit|| this.options.showCancel || this.options.showReset ) { + html += this.getFormFooter(); + } + html+="
"; + trg.append(html); + // change selected value + if (typeof this.options.selectfields !== "undefined"){ + for (let tag in this.options.selectfields){ + $("#"+this.prefix+"_"+tag).val(this.obj[tag]); + } + } + if (typeof this.options.events !== "undefined" ) { + for (let e in this.options.events) { + let ev = this.options.events[e]; + $("#" + this.prefix + "_" + e).on(ev.type, this, ev.handler); + } + } + + // assign button events + if (typeof this.options.onDelete!=='undefined'){ + $("#btn"+this.prefix+"_delete").on("click",this,$.proxy(this.onDelete,this)); + } + if (typeof this.options.onSubmit!=='undefined'){ + $("#btn"+this.prefix+"_submit").on("click",this,$.proxy(this.onSubmit,this)); + } + if (typeof this.options.onReset!=='undefined'){ + $("#btn"+this.prefix+"_reset").on("click",this,$.proxy(this.onReset,this)); + } + } + + onReset(e){ + if (this.options.onDelete){ + this.options.onDelete(this); + } + else + this.createForm(); + } + + onDelete(e){ + if (this.options.onDelete){ + this.options.onDelete(this); + } + } + + onSubmit(e){ + if (this.options.onSubmit){ + this.options.onSubmit(this); + } + } + + getFieldId(tag){ + return this.prefix + "_" + tag; + } + getChangedObject(){ + let result = {}; + Object.assign(result,this.obj); + for (let tag in result){ + let inp = $("#"+this.prefix + "_"+tag); + if (inp.length>0) + result[tag]=inp.val(); + } + return result; + } + hide(){ + let trg = $("#"+this.target); + trg.empty(); + } + +} \ No newline at end of file diff --git a/oList.js b/oList.js new file mode 100644 index 0000000..b048f38 --- /dev/null +++ b/oList.js @@ -0,0 +1,127 @@ +/** + * Created by Ivan Mokrotovarov on 11.09.2018. + */ + + +class oList{ + constructor(list,target,options = {}){ + this.list=list; + this.target = target; + this.options = {}; + Object.assign(this.options,options); + } + + static filter(list_id, input_id) { + let input, filter, ul, li, a, i; + input = document.getElementById(input_id); + filter = input.value.toUpperCase(); + ul = document.getElementById(list_id); + li = ul.getElementsByClassName('list-group-item'); + + for (i = 0; i < li.length; i++) { + a = li[i];//.getElementsByTagName("a"); + if (a.innerHTML.toUpperCase().indexOf(filter) > -1) { + li[i].style.display = ""; + } else { + li[i].style.display = "none"; + } + } + } + getFieldDescription(fieldName){ + return (typeof this.options.fields!=='undefined'?(this.options.fields[fieldName]?this.options.fields[fieldName]:fieldName):fieldName); + } + + getFormHeader(){ + let title="List"; + if (typeof this.options.title!=='undefined') + title = this.options.title; + let html = "
"+title; + if (typeof this.options.titleButtons!=='undefined') + html +=this.options.titleButtons; + html +="
"; + return html; + + } + getSearchBlock(){ + let html = "
"; + html += ""; + html += '
'; + return html; + } + getItemHtml(tag,text){ + return "" + text + ""; + //"
"; + } + getFormFooter(){ + let html=""; + return html; + } + createForm(){ + let trg = $("#"+this.target); + trg.empty(); + let html=this.getFormHeader(); + if (this.options.showSearch) + html+=this.getSearchBlock(); + html += "
"; + for (let tag in this.list){ + let item = this.list[tag]; + html+=this.getItemHtml(this.getId(item),this.getText(item)); + } + html+="
"; + if (this.options.showFooter || this.options.showSubmit || this.options.showCancel) { + html += this.getFormFooter(); + } + html+="
"; + trg.append(html); + $(('#'+this.target)).on('click',"a.list-group-item", $.proxy(this.onSelect,this)); + } + + + + onSelect(e){ + var $this = $(e.target); + var $alias = $this.data('alias'); + $("#"+$this.parent()[0].id+" > .active").removeClass('active'); + $this.addClass('active') + if (this.options.onSelect){ + this.options.onSelect($this); + } + return false; + } + getId(item){ + if (this.options.getId){ + return this.options.getId(item); + }else + { + return item.id; + } + } + + getText(item){ + if (this.options.getText){ + return this.options.getText(item); + }else + { + return item.name; + } + } + + + onSubmit(){ + if (this.options.onSubmit){ + this.options.onSubmit(this); + } + } + + +} \ No newline at end of file