JS 유틸 함수 추가

main
이범준 3 months ago
parent 027cb40272
commit da4b17e634

@ -49,8 +49,10 @@
<script src="<c:url value="/resources/js/fims/cmmn/fims-support.js?${ver}"/>"></script> <script src="<c:url value="/resources/js/fims/cmmn/fims-support.js?${ver}"/>"></script>
<script src="<c:url value="/resources/js/fims/cmmn/fims-componentization.js?${ver}"/>"></script> <script src="<c:url value="/resources/js/fims/cmmn/fims-componentization.js?${ver}"/>"></script>
<!-- 이벤트 자동 탐지 --> <!-- 개발 편의성 유틸 -->
<script src="<c:url value="/resources/js/fims/cmmn/detect.js?${ver}"/>"></script> <script src="<c:url value="/resources/js/fims/cmmn/detect.js?${ver}"/>"></script>
<script src="<c:url value="/resources/js/fims/cmmn/objectInspector.js?${ver}"/>"></script>
<script src="<c:url value="/resources/js/fims/cmmn/registByXml.js?${ver}"/>"></script>
<!-- endbuild --> <!-- endbuild -->
<c:set var="functions" scope="request"> <c:set var="functions" scope="request">

@ -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…
Cancel
Save