JS 유틸 함수 추가
parent
027cb40272
commit
da4b17e634
@ -0,0 +1,309 @@
|
||||
/**************************************************************************
|
||||
* 커스텀 태그로 Class인스턴스 생성 및 설정
|
||||
**************************************************************************/
|
||||
function registBaseObject(pageName){
|
||||
|
||||
let xmlElements = new DomQuery().setContainers("[data-doctx='"+pageName+"']").findAll("[data-xml-conf]");
|
||||
|
||||
let pageObjectDeclarationEnd = false;
|
||||
let confDeclarationEnd = false;
|
||||
|
||||
|
||||
let allScript = "";
|
||||
for(let xmlElement of xmlElements){
|
||||
|
||||
var isGlobalObject = true;
|
||||
if(xmlElement.hasAttribute("is-not-global")){
|
||||
isGlobalObject = false;
|
||||
}
|
||||
|
||||
let pageObject_abbreviation_s = "";
|
||||
if(!isGlobalObject && !pageObjectDeclarationEnd){
|
||||
pageObject_abbreviation_s = "var $P = pageObject."+pageName+";";
|
||||
}
|
||||
|
||||
let baseObject = xmlElement.dataset.name;
|
||||
let baseObjectType = xmlElement.className;
|
||||
|
||||
let scriptForSingleObject = "";
|
||||
|
||||
let createInstance_s = "";
|
||||
if(xmlElement.querySelector("new-function") == null && xmlElement.querySelector("new-constructor") == null){
|
||||
continue;
|
||||
}
|
||||
|
||||
let newConf = xmlElement.querySelector("new-function")
|
||||
? xmlElement.querySelector("new-function")
|
||||
: xmlElement.querySelector("new-constructor");
|
||||
|
||||
let leftOfNew = "var ";
|
||||
if(!isGlobalObject){
|
||||
leftOfNew = "$P.";
|
||||
}
|
||||
|
||||
if(newConf.tagName == "NEW-FUNCTION"){
|
||||
// 사용자정의함수로 인스턴스 생성
|
||||
createInstance_s = leftOfNew + baseObject + " = "+newConf.textContent +";";
|
||||
} else if(newConf.tagName == "NEW-CONSTRUCTOR"){
|
||||
//new 생성자로 인스턴스 생성
|
||||
//conf argument 설정 스크립트
|
||||
var confDeclaration = "";
|
||||
if(!confDeclarationEnd){
|
||||
confDeclaration = "var "
|
||||
}
|
||||
|
||||
let conf_s = confDeclaration+"conf = " + newConf.textContent +";";
|
||||
//인스턴스생성스크립트
|
||||
let newContructor_s = leftOfNew + baseObject + " = new "+baseObjectType+"(conf);";
|
||||
createInstance_s = conf_s + "\n" + newContructor_s;
|
||||
}
|
||||
|
||||
let instanceNameDef_s = "";
|
||||
if(!isGlobalObject){
|
||||
instanceNameDef_s = "var "+baseObject+" = $P."+baseObject+";";
|
||||
} else {
|
||||
instanceNameDef_s = "window."+baseObject+" = "+baseObject+";";
|
||||
}
|
||||
|
||||
if(xmlElement.tagName == "DATASETCONTROL-C"){
|
||||
//컨트롤인스턴스명
|
||||
const overwritableMehtods = [
|
||||
"onDatasetChange",
|
||||
"onCurrentChange",
|
||||
"onSelectionChange",
|
||||
"onModify",
|
||||
"onAppend",
|
||||
"onSort",
|
||||
"onReplace",
|
||||
"onSave",
|
||||
"onRemove",
|
||||
"save",
|
||||
"remove",
|
||||
"getInfo",
|
||||
"setInfo"
|
||||
];
|
||||
//메소드 재정의
|
||||
let methodOverwrite_s = "";
|
||||
for(var i=0; i < xmlElement.children.length; i++){
|
||||
let methodDef = xmlElement.children[i];
|
||||
if(overwritableMehtods.indexOf(methodDef.className) != -1){
|
||||
methodOverwrite_s += overwriteMethodScript(baseObject, methodDef.className, methodDef);
|
||||
}
|
||||
}
|
||||
|
||||
scriptForSingleObject = pageObject_abbreviation_s + "\n"
|
||||
+ createInstance_s + "\n"
|
||||
+ instanceNameDef_s + "\n"
|
||||
+ methodOverwrite_s + "\n";
|
||||
} else {
|
||||
scriptForSingleObject = pageObject_abbreviation_s + "\n"
|
||||
+ createInstance_s + "\n"
|
||||
+ instanceNameDef_s + "\n";
|
||||
|
||||
}
|
||||
|
||||
|
||||
allScript += scriptForSingleObject + "\n";
|
||||
|
||||
|
||||
if(!isGlobalObject){
|
||||
pageObjectDeclarationEnd = true;
|
||||
}
|
||||
if(newConf.tagName == "NEW-CONSTRUCTOR"){
|
||||
confDeclarationEnd = true;
|
||||
}
|
||||
}
|
||||
|
||||
let register = document.createElement("script");
|
||||
register.innerHTML = "(function(){" + "\n"
|
||||
+ allScript
|
||||
+ "})();"
|
||||
|
||||
document.body.appendChild(register);
|
||||
document.body.removeChild(register);
|
||||
}
|
||||
|
||||
function overwriteMethodScript(baseObject, m_name, methodDef){
|
||||
let result_script = "";
|
||||
if(methodDef != null && methodDef.textContent.trim() != ""){
|
||||
let hasOnObj = "";
|
||||
if(methodDef.hasAttribute("is-not-control")){
|
||||
hasOnObj = ".dataset";
|
||||
}
|
||||
|
||||
if(methodDef.textContent.trim() != "null"){
|
||||
result_script = baseObject+hasOnObj+"."+m_name+" = " + methodDef.textContent+";"+"\n";
|
||||
} else {
|
||||
result_script = baseObject+hasOnObj+"."+m_name+" = () => {};"+"\n";
|
||||
}
|
||||
}
|
||||
return result_script;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* 커스텀 태그(클래스)
|
||||
**************************************************************************/
|
||||
class XmlDatasetControl extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.setAttribute("data-xml-conf","");
|
||||
this.className = "DatasetControl";
|
||||
this.setAttribute("hidden","hidden");
|
||||
}
|
||||
}
|
||||
customElements.define("datasetcontrol-c", XmlDatasetControl);
|
||||
|
||||
class XmlPagingSupport extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.setAttribute("data-xml-conf","");
|
||||
this.className = "PagingSupport";
|
||||
this.setAttribute("hidden","hidden");
|
||||
}
|
||||
}
|
||||
customElements.define("pagingsupport-c", XmlPagingSupport);
|
||||
|
||||
class XmlTableSupport extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.setAttribute("data-xml-conf","");
|
||||
this.className = "TableSupport";
|
||||
this.setAttribute("hidden","hidden");
|
||||
}
|
||||
}
|
||||
customElements.define("tablesupport-c", XmlTableSupport);
|
||||
|
||||
class XmlFormFields extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.setAttribute("data-xml-conf","");
|
||||
this.className = "FormFields";
|
||||
this.setAttribute("hidden","hidden");
|
||||
}
|
||||
}
|
||||
customElements.define("formfields-c", XmlFormFields);
|
||||
|
||||
/**************************************************************************
|
||||
* 커스텀 태그(생성자)
|
||||
**************************************************************************/
|
||||
class XmlNewFunction extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
customElements.define("new-function", XmlNewFunction);
|
||||
|
||||
class XmlNewConstructor extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
customElements.define("new-constructor", XmlNewConstructor);
|
||||
|
||||
/**************************************************************************
|
||||
* 커스텀 태그(class메소드)
|
||||
**************************************************************************/
|
||||
class XmlOnDatasetChange extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onDatasetChange";
|
||||
}
|
||||
}
|
||||
customElements.define("ondatasetchange-f", XmlOnDatasetChange);
|
||||
|
||||
class XmlOnCurrentChange extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onCurrentChange";
|
||||
}
|
||||
}
|
||||
customElements.define("oncurrentchange-f", XmlOnCurrentChange);
|
||||
|
||||
class XmlOnSelectionChange extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onSelectionChange";
|
||||
}
|
||||
}
|
||||
customElements.define("onselectionchange-f", XmlOnSelectionChange);
|
||||
|
||||
class XmlOnModify extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onModify";
|
||||
}
|
||||
}
|
||||
customElements.define("onmodify-f", XmlOnModify);
|
||||
|
||||
class XmlOnAppend extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onAppend";
|
||||
}
|
||||
}
|
||||
customElements.define("onappend-f", XmlOnAppend);
|
||||
|
||||
class XmlOnSort extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onSort";
|
||||
}
|
||||
}
|
||||
customElements.define("onsort-f", XmlOnSort);
|
||||
|
||||
class XmlOnReplace extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onReplace";
|
||||
}
|
||||
}
|
||||
customElements.define("onreplace-f", XmlOnReplace);
|
||||
|
||||
class XmlOnSave extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onSave";
|
||||
}
|
||||
}
|
||||
customElements.define("onsave-f", XmlOnSave);
|
||||
|
||||
class XmlOnRemove extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "onRemove";
|
||||
}
|
||||
}
|
||||
customElements.define("onremove-f", XmlOnRemove);
|
||||
|
||||
class XmlSave extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "save";
|
||||
}
|
||||
}
|
||||
customElements.define("save-f", XmlSave);
|
||||
|
||||
class XmlRemove extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "remove";
|
||||
}
|
||||
}
|
||||
customElements.define("remove-f", XmlRemove);
|
||||
|
||||
class XmlGetInfo extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "getInfo";
|
||||
}
|
||||
}
|
||||
customElements.define("getinfo-f", XmlGetInfo);
|
||||
|
||||
class XmlSetInfo extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.className = "setInfo";
|
||||
}
|
||||
}
|
||||
customElements.define("setinfo-f", XmlSetInfo);
|
Loading…
Reference in New Issue