12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231 |
- XFormsModel.prototype = new XFormsElement;
- function XFormsModel (strParentId, bAutodata, strID, strTag)
- {
- if (!strID)
- {
- return;
- }
-
- XFormsElement.call(this, strParentId, strID, strTag);
-
- // Attribute
- this.attribute["autocdata"] = bAutodata = false;
-
- // Property
- this.autocdata;
- this.instances = new Collection();
- this.property = new Hashtable();
- this.propertyReg;
- this.registry;
-
- this.m_objTabIndex = new Array();
- this.m_objHttpClient = new HttpClient();
- this.m_objCurrentSubmission;
- this.m_bDoneUnload = false;
-
- this.m_hmInstanceData = null;
- this.m_bHasUploadFile = false;
- this.m_strSessionId = "";
-
- this.m_resetRoot = null;
- };
- XFormsModel.prototype.getId = function ()
- {
- return this.id;
- };
- XFormsModel.prototype.addLog = function ()
- {
- //TODO
- window.alert("model.addLog() is not avilable.");
- };
- XFormsModel.prototype.addScript = function (strScript)
- {
- // <script> Element 를 생성한다.
- var heScript = document.createElement("script");
- heScript.setAttribute("type", "text/javascript");
-
- // 스크립트 내용을 쓴다.
- heScript.text = strScript;
-
- // HEAD에 스크립트를 추가한다.
- var heHead = document.firstChild.firstChild;
- heHead.appendChild(heScript);
- };
- XFormsModel.prototype.alert = function (strMessage, strTitle, nType)
- {
- //TODO
- window.alert(strMessage);
- };
- XFormsModel.prototype.base64decode = function (strData)
- {
- return Base64.decode(strData);
- };
- XFormsModel.prototype.base64decodefile = function ()
- {
- window.alert("model.base64decodefile() is not available.");
- };
- XFormsModel.prototype.base64encode = function (strData)
- {
- return Base64.encode(strData);
- };
- XFormsModel.prototype.base64encodefile = function ()
- {
- window.alert("model.base64encodefile() is not available.");
- };
- XFormsModel.prototype.close = function ()
- {
- window.close();
- };
- XFormsModel.prototype.copyNode = function (strDest, strSource)
- {
- var xnDest = null;
- if ("string" == typeof(strDest))
- {
- xnDest = this.getInstanceSinglePart(null, strDest);
- }
- else
- {
- // String이 아니면 Node가 바로 들어 올 수 있다.
- xnDest = strDest;
- }
-
- var xnSource = null;
- if ("string" == typeof(strSource))
- {
- xnSource = this.getInstanceSinglePart(null, strSource);
- }
- else
- {
- // String이 아니면 Node가 바로 들어 올 수 있다.
- xnSource = strSource;
- }
-
- if (null != xnDest && null != xnSource)
- {
- // Dest의 자식을 모두 지운다.
- var xlChild = xnDest.childNodes;
- if (null != xlChild)
- {
- for (var i=xlChild.length-1; i>=0; i--)
- {
- var xnChild = xlChild[i];
- if (null != xnChild)
- {
- xnDest.removeChild(xlChild[i]);
- }
- }
- }
-
- // Source의 자식을 Clone 하여 Dest에 붙인다.
- xlChild = xnSource.childNodes;
- if (null != xlChild)
- {
- for (var i=0; i<xlChild.length; i++)
- {
- var xnChild = xlChild[i];
- if (null != xnChild)
- {
- xnDest.appendChild(xnChild.cloneNode(true));
- }
- }
- }
- }
- };
- XFormsModel.prototype.destroy = function (strTarget)
- {
- var xnTarget = null;
- if ("string" == typeof(strTarget))
- {
- xnTarget = this.getInstanceSinglePart(null, strTarget);
- }
- else
- {
- // String이 아니면 Node가 바로 들어 올 수 있다.
- xnTarget = strTarget;
- }
-
- if (null != xnTarget)
- {
- var xnParent = xnTarget.parentNode;
- if (null != xnParent)
- {
- xnParent.removeChild(xnTarget);
- }
- }
- };
- XFormsModel.prototype.download = function ()
- {
- window.alert("model.download() is not available.");
- };
- XFormsModel.prototype.downloadFile = function (strURL)
- {
- window.open(strURL, "_blank", "toolbar=no, location=no, resizable=yes, scrollbars=yes, status=no, menubar=no");
- };
- XFormsModel.prototype.duplicate = function (strRef, strOrigin, strBefore)
- {
- var xnRef = null;
- if ("string" == typeof(strRef))
- {
- xnRef = this.getInstanceSinglePart(null, strRef);
- }
- else
- {
- // String이 아니면 Node가 바로 들어 올 수 있다.
- xnRef = strRef;
- }
-
- var xnOrigin = null;
- if ("string" == typeof(strOrigin))
- {
- xnOrigin = this.getInstanceSinglePart(null, strOrigin);
- }
- else
- {
- // String이 아니면 Node가 바로 들어 올 수 있다.
- xnOrigin = strOrigin;
- }
-
- if (null != xnRef && null != xnOrigin)
- {
- var xnClone = xnOrigin.cloneNode(true);
-
- if (null == strBefore || strBefore.isEmpty())
- {
- xnRef.appendChild(xnClone);
- }
- else
- {
- var xnExist = XmlLib.selectSingleNode(xnRef, strBefore);
- if (null != xnRef)
- {
- xnRef.insertBefore(xnClone, xnExist);
- }
- }
- }
- };
- XFormsModel.prototype.getFocus = function ()
- {
- return window.getFocus();
- };
- /**
- * ref 에 해당하는 노드 값을 반환한다.
- * @return
- */
- XFormsModel.prototype.getValue = function (strRef)
- {
- if ("string" == typeof(strRef))
- {
- //TODO root 로 시작하는지 instance 로 시작하는지 구분해야한다.
- //TODO strRef가 "/root/example"일때와 root.exaple일때 구분해야한다.
- var objInstance = this.getInstance();
- if (null != objInstance)
- {
- var xnRoot = objInstance.documentElement;
- if (null != xnRoot)
- {
- var xnNode = XmlLib.selectSingleNode(xnRoot, strRef);
- if (null != xnNode)
- {
- return XmlLib.getTextValue(xnNode);
- }
- }
- }
- return "";
- }
- else
- {
- return XmlLib.getTextValue(strRef);
- }
- };
- XFormsModel.prototype.getXPathValue = function (strOperation)
- {
- if (is_ie)
- {
- return xPathOperation(strOperation)
- }
- else
- {
- var objXpathResult = instance1.documentElement.evaluate(strOperation,instance1.documentElement,null,XPathResult.STRING_TYPE,null);
- return objXpathResult.stringValue;
- }
- };
- XFormsModel.prototype.makeNode = function (strRef)
- {
- if (null == strRef || "" == strRef)
- {
- return false;
- }
-
- strRef = strRef.trim();
-
- var strInstance = "";
- var bInstance = false;
- if (0 == strRef.indexOf("instance('"))
- {
- strInstance = strRef.substr("instance('".length);
- var nPos = strInstance.indexOf("'");
- if (0 > nPos)
- {
- return false;
- }
- strInstance = strInstance.substring(nPos + 1);
- bInstance = true;
- }
-
- var xnDoc = this.getInstanceDocument();
- if (!xnDoc)
- {
- return false;
- }
-
- var xnElement = xnDoc.firstChild;
- var xlChild = xnElement.childNodes;
- var xnTemp;
- var xnSave;
- var strElement;
- var strXPath = strRef;
- var strNodeName = xnElement.nodeName;
- if (!bInstance)
- {
- var nPos = strXPath.indexOf(strNodeName);
- if (-1 != nPos)
- {
- if ('/' == strXPath.charAt(0) && 1 == nPos)
- {
- var nIndex = 1 + strNodeName.length + 1;
- if (strXPath.length <= nIndex)
- {
- return false;
- }
- strXPath = strXPath.substr(1 + strNodeName.length + 1);
- }
- else if ('/' != strXPath.charAt(0) && 0 == nPos)
- {
- var nIndex = 1 + strNodeName.length;
- if (strXPath.length <= nIndex)
- {
- return false;
- }
- strXPath = strXPath.substr(strNodeName.length + 1);
- }
- }
- }
-
- if (bInstance)
- {
- var nPos = strRef.indexOf("/");
- if (-1 == nPos)
- {
- return false;
- }
- strXPath = strRef.substr(nPos + 1);
- }
-
- while (true)
- {
- var nIndex = strXPath.indexOf("/");
- if (-1 == nIndex)
- {
- if (-1 != strXPath.indexOf("@"))
- {
- break;
- }
- var j = strXPath.indexOf(":");
- if (j != -1)
- {
- strXPath = strXPath.substr(j+1);
- }
- strElement = strXPath;
- xnTemp = this.searchNode(xlChild, strXPath);
- break;
- }
- else
- {
- var strTempPath = strXPath.substring(0, nIndex);
- strXPath = strXPath.substr(nIndex + 1);
-
- var nColon = strXPath.indexOf(":");
- if (-1 != nColon)
- {
- strTempPath = strTempPath.substr(nColon + 1);
- }
- strElement = strTempPath;
- xnTemp = this.searchNode(xlChild, strTempPath);
- }
-
- if (null == xnTemp)
- {
- break;
- }
- else
- {
- xlChild = xnTemp.childNodes;
- xnSave = xnTemp;
- }
- }
-
- if (null == xnTemp)
- {
- var xnNew;
-
- var nStartBracket = strElement.indexOf("[");
- if (-1 != nStartBracket)
- {
- var nIndex = nStartBracket + 1;
- var nLastIndex = strElement.indexOf("]");
- if (isFinite(strElement.substring(nIndex,nLastIndex)))
- {
- strElement = strElement.substr(0,nStartBracket);
- }
- //TODO
- }
-
- var strMakeName = "";
- var strPrefix = "";
-
- var nIndex = strRef.indexOf(":" + strElement);
- if (-1 < nIndex)
- {
- // TODO
- }
-
- if (!strPrefix.isEmpty())
- {
- strPrefix = strPrefix + ":" + strElement;
- }
- else
- {
- strPrefix = strElement;
- }
-
- if (null == xnSave)
- {
- if (null != xnElement)
- {
- xnNew = XmlLib.createChild(xnElement, strPrefix);
- this.makeNode(strRef);
- }
- }
- else
- {
- xnNew = XmlLib.createChild(xnSave, strPrefix);
- this.makeNode(strRef);
- }
-
- return true;
- }
- return true;
- };
- XFormsModel.prototype.searchNode = function (xlNodeList, strElement)
- {
- var nNodeCount = null;
- if (!xlNodeList)
- {
- return null;
- }
- if (-1 != strElement.indexOf("["))
- {
- var nFristIndex = strElement.indexOf("[");
- var nLastIndex = strElement.indexOf("]");
- if (isFinite(strElement.substring(nFristIndex+1,nLastIndex)))
- {
- nNodeCount = Number(strElement.substring(nFristIndex+1,nLastIndex));
- strElement = strElement.substr(0,nFristIndex);
- }
- }
- var ntempCount = 0;
- for (var i=0; i<xlNodeList.length; i++)
- {
- var xnNode = xlNodeList.item(i);
- if (null != xnNode && strElement == xnNode.nodeName)
- {
- ntempCount++;
- if (null == nNodeCount)
- {
- return xnNode;
- }
- else
- {
- if (ntempCount == nNodeCount)
- {
- return xnNode;
- }
- }
- }
- }
- return null;
- };
- XFormsModel.prototype.makeValue = function (strRef, strValue, bCData)
- {
- var bCreateNode = this.makeNode(strRef);
- if (bCreateNode)
- {
- this.setValue(strRef, strValue, bCData);
- }
- };
- XFormsModel.prototype.propertynames = function (strSep)
- {
- var strPropertyNames = "";
- if (null == strSep)
- {
- strSep = "";
- }
-
- var nLength = 0;
- for(var strName in this.property)
- {
- strPropertyNames += (strName + strSep);
- nLength++;
- }
-
- if (0 < nLength)
- {
- strPropertyNames = strPropertyNames.substr(0, strPropertyNames.length - strSep.length);
- }
-
- return strPropertyNames;
- };
- XFormsModel.prototype.refreshCurrentModel = function (bAutoRefresh)
- {
- if (null == bAutoRefresh)
- {
- bAutoRefresh = true;
- }
- if(bAutoRefresh)
- {
- this.dispatch("xforms-recalculate");
- // TODO xforms-revalidate 미구현
- this.dispatch("xforms-refresh");
- }
- else
- {
- this.refresh();
- }
- };
- /**
- * 모든 bind의 수식을 다시 계산하여 인스턴스에 적용한다
- * @return
- */
- XFormsModel.prototype.recalculate = function ()
- {
- var arKeyset = this.children.keys();
- for (var i=0; i<arKeyset.length; i++)
- {
- var strChildName = arKeyset[i];
- var objChild = this.children.item(strChildName);
- if (objChild instanceof XFormsBind)
- {
- objChild.bindExecute();
- }
- }
- };
- /**
- * 인스턴스에 저장되어 있는 모든 데이터를 실제 맵핑된 컨트롤에 반영한다.
- * @return
- */
- XFormsModel.prototype.refresh = function ()
- {
- // model의 자식들을 refresh 한다.
- var arKeyset = this.children.keys();
- for (var i=0; i<arKeyset.length; i++)
- {
- var strId = arKeyset[i];
- var objControl = this.children.item(strId);
- if (null != objControl)
- {
- if (objControl.refresh)
- {
- objControl.refresh();
- }
- }
- }
-
- // body의 자식들을 refresh 한다.
- var objBody = body;
- if (null == objBody)
- {
- objBody = document.allElement("body");
- }
-
- if (null != objBody)
- {
- objBody.refresh();
- }
- };
- XFormsModel.prototype.refreshpart = function ()
- {
- //TODO
- if (null != window.console)
- {
- console.log("Unimplemented refreshpart()");
- }
- };
- XFormsModel.prototype.removenode = function (strRef)
- {
- this.removeNode(strRef);
- };
- XFormsModel.prototype.removeNode = function (strRef)
- {
- var xnDoc = this.getInstanceDocument();
- if (null != xnDoc)
- {
- var xnNode = XmlLib.selectSingleNode(xnDoc, strRef);
- if (null != xnNode)
- {
- var xnParentNode = xnNode.parentNode;
- if (null != xnParentNode)
- {
- xnParentNode.removeChild(xnNode);
- }
- }
- }
- };
- XFormsModel.prototype.removeNodeset = function (strRef)
- {
- var xnDoc = this.getInstanceDocument();
- if (null != xnDoc)
- {
- var xlNode = XmlLib.selectNodes(xnDoc, strRef);
- for (var i=0; i<xlNode.length; i++)
- {
- var xnNode = xlNode.item(i);
- if (null != xnNode)
- {
- var xnParentNode = xnNode.parentNode;
- if (null != xnParentNode)
- {
- xnParentNode.removeChild(xnNode);
- }
- }
- }
- }
- };
- XFormsModel.prototype.removeRegistry = function ()
- {
- window.alert("model.removeRegistry() is not available.");
- };
- XFormsModel.prototype.reset = function ()
- {
- if (null != instance1)
- {
- instance1.documentElement.removeChild(instance1.root);
- instance1.documentElement.appendChild(this.m_resetRoot.cloneNode(true));
- }
- };
- XFormsModel.prototype.resetInstanceNode = function (strRef)
- {
- var xnDoc = this.getInstanceDocument();
- if (null != xnDoc)
- {
- var xnParentNode;
- var xnNewNode;
- var xlNode = XmlLib.selectNodes(xnDoc, strRef);
- for (var i=0; i<xlNode.length; i++)
- {
- var xnNode = xlNode.item(i);
- if (null != xnNode)
- {
- if (0 == i)
- {
- //xnNewNode = xnNode.cloneNode(true);
- var strCloneNode = XmlLib.serializeToString(xnNode);
- strCloneNode = strCloneNode.match(/\<(\/|)(([ㄱ-ㅎ가-힣]|\w|\_|\.)*)(\/|)\>/g).join("");
- xnNewNode = XmlLib.loadXMLFromString(strCloneNode);
- if (null != xnNewNode)
- {
- xnNewNode = XmlLib.getRootElementNode(xnNewNode);
- }
- }
-
- xnParentNode = xnNode.parentNode;
- if (null != xnParentNode)
- {
- xnParentNode.removeChild(xnNode);
- }
- }
- }
-
- if (null != xnParentNode && null != xnNewNode)
- {
- xnParentNode.appendChild(xnNewNode.cloneNode(true));
- }
- }
- };
- XFormsModel.prototype.getAttribute = function (strKey)
- {
- if ("id" != strKey)
- {
- this.getProperty(strKey);
- }
- };
-
- XFormsModel.prototype.setAttribute = function (strKey, strValue)
- {
- this.setProperty(strKey,strValue);
- };
- XFormsModel.prototype.getProperty = function (strKey)
- {
- if ((is_ie6 || is_ie7 || is_chromeFrame) && (!is_smartphone))
- {
- return model.m_objHttpClient.post(window.getTrustFormURL()+ "/SessionStorageManager.tfs?Soonsu_ServiceName=GetProperty", strKey, false, "text/xml", "UTF-8");
- }
- else
- {
- var strGetPpy = sessionStorage.getItem(strKey);
- strGetPpy = null != strGetPpy ? strGetPpy : "";
- return strGetPpy;
- }
- };
- XFormsModel.prototype.setProperty = function (strKey, strValue)
- {
- if ((is_ie6 || is_ie7 || is_chromeFrame) && (!is_smartphone))
- {
- var strParam = strKey + "#&" + strValue;
- model.m_objHttpClient.post(window.getTrustFormURL()+ "/SessionStorageManager.tfs?Soonsu_ServiceName=SetProperty", strParam, false, "text/xml", "UTF-8");
- }
- else
- {
- sessionStorage[strKey] = strValue;
- }
- };
- XFormsModel.prototype.deleteProperty = function (strKey)
- {
- if ((is_ie6 || is_ie7 || is_chromeFrame) && (!is_smartphone))
- {
- model.m_objHttpClient.post(window.getTrustFormURL()+ "/SessionStorageManager.tfs?Soonsu_ServiceName=DeleteProperty", strKey, false, "text/xml", "UTF-8");
- }
- else
- {
- sessionStorage.removeItem(strKey);
- }
- };
- XFormsModel.prototype.resetProperty = function ()
- {
- if ((is_ie6 || is_ie7 || is_chromeFrame) && (!is_smartphone))
- {
- model.m_objHttpClient.post(window.getTrustFormURL()+ "/SessionStorageManager.tfs?Soonsu_ServiceName=ResetProperty", null, false, "text/xml", "UTF-8");
- }
- else
- {
- sessionStorage.clear();
- }
- };
- XFormsModel.prototype.revalidate = function ()
- {
- //TODO
- if (null != window.console)
- {
- console.log("Unimplemented revalidate()");
- }
- };
- XFormsModel.prototype.send = function (strSubmissionID, bRefresh, bThread, bSynch, lTimeout)
- {
- var objSubmission = this.children.item(strSubmissionID);
-
- if (null != objSubmission && objSubmission instanceof XFormsSubmission)
- {
- if (null == bRefresh)
- {
- bRefresh = true;
- }
-
- if (null == bThread)
- {
- bThread = false;
- }
-
- if (null == bSynch)
- {
- bSynch = false;
- }
-
- if (null == lTimeout)
- {
- lTimeout = 0;
- }
-
- var strAction = objSubmission.attribute["action"];
- var strAdd = objSubmission.attribute["add"];
- var strEncoding = objSubmission.attribute["encoding"];
- var strMediaType = objSubmission.attribute["mediatype"];
- var strMethod = objSubmission.attribute["method"];
- var strRef = objSubmission.attribute["ref"];
- var strReplace = objSubmission.attribute["replace"];
- var strResultRef = objSubmission.attribute["resultref"];
- var strType = objSubmission.attribute["type"];
-
- // ref 처리
- var strData;
- var strBoundary;
- if ("application/x-www-form-urlencoded" == strMediaType)
- {
- strData = this._getPostDataAll(strRef, true, strType, strEncoding, strMediaType);
- }
- else if ("multipart/form-data" == strMediaType)
- {
- this.m_hmInstanceData = new Hashtable();
- this.m_bHasUploadFile = false;
- strData = this._getPostDataAll(strRef, false, strType, strEncoding, strMediaType);
-
- strBoundary = "KKPK" + String(new Date().getTime());
- var strBoundarySep = "--" + strBoundary + "\r\n";
- var strBoundaryTerm = "--" + strBoundary + "--\r\n";
-
- var arRequestData = ["\r\n"];
- for (var strKey in this.m_hmInstanceData)
- {
- var strValue = this.m_hmInstanceData[strKey];
- if (undefined != strValue)
- {
- arRequestData.push('Content-Disposition: form-data; name="'+strKey+'"\r\n\r\n'+strValue+'\r\n');
- }
- }
- if (this.m_bHasUploadFile)
- {
- var strHostURL = window.getHostURL();
- if (0 != strAction.indexOf(strHostURL) && 0 != strAction.indexOf("http://") && 0 != strAction.indexOf("HTTP://"))
- {
- strAction = strHostURL + strAction;
- }
-
- arRequestData.push('Content-Disposition: form-data; name="__TF_Action"\r\n\r\n'+strAction+'\r\n');
- arRequestData.push('Content-Disposition: form-data; name="__TF_Boundary"\r\n\r\n'+strBoundary+'\r\n');
-
- strAction = __getAppName() + "/FileAttach.tfs";
- }
- strData = arRequestData.join(strBoundarySep) + strBoundaryTerm;
- }
- else if ("application/xml" == strMediaType || "text/xml" == strMediaType || "application/json" == strMediaType)
- {
- strData = this._getPostDataXmlAll(strRef);
- }
-
-
- // 비동기 이면 HttpClient에서 ready state 이벤트에 의해 Model.updateDataForAsync() 함수가 호출된다.
- if (bSynch)
- { // 그때 필요한 정보를 가지고 있는 submission 을 기억한다.
- this.m_objCurrentSubmission = objSubmission;
- this.m_objCurrentSubmission.m_refresh = bRefresh;
- }
-
- //submission 의 type이 custom 일때
- if ("custom" == strType)
- {
- var strTempData = strData;
- try
- {
- strData = onbeforesend(strTempData);
- strData = null == strData ? strTempData : strData;
- }
- catch(err)
- {
- strData = strTempData;
- }
- }
- var strResult;
- if ("get" == strMethod)
- {
- strResult = this.m_objHttpClient.get(strAction + "?" + strData, bSynch, strMediaType, strEncoding);
- }
- else if ("post" == strMethod)
- {
- strResult = this.m_objHttpClient.post(strAction, strData, bSynch, strMediaType, strEncoding, false);
- }
- else if ("form-data-post" == strMethod)
- {
- strResult = this.m_objHttpClient.post(strAction, strData, bSynch, strMediaType, strEncoding, true, strBoundary);
- }
-
-
- var xnResultDoc = null;
- if (null != strResult && !strResult.isEmpty())
- {
- // trim을 하지 않으면 Mozilla 계열의 Browser에서 Dom을 이상하게 만든다.
- strResult = strResult.trim();
- if ("custom" == strType)
- {
- var strTempResult = strResult;
- try
- {
- strResult = onaftersend(strTempResult);
- strResult = null == strResult ? strTempResult : strResult;
- }
- catch(err)
- {
- strResult = strTempResult;
- }
- }
- // result 처리
- xnResultDoc = XmlLib.loadXMLFromString(strResult);
- if (null != xnResultDoc)
- {
- if (null == xnResultDoc.firstChild || ("root" != xnResultDoc.firstChild.nodeName && "xml" != xnResultDoc.firstChild.nodeName))
- {
- var objLightGridData = this.makeLightGridObject(strResult, strMediaType);
-
- if (null != objLightGridData)
- {
- for (var i=0; i<document.controls.length; i++)
- {
- var objControl = document.controls.item(i);
- if (null != objControl && null != objControl.attribute["nodeset"])
- {
- if(strResultRef == objControl.attribute["nodeset"])
- {
- objControl.m_objGridData = objLightGridData;
- objControl.refresh();
- break;
- }
- }
- }
- objLightGridData = null;
- }
- }
- else
- {
- this.updateData(XmlLib.getRootElementNode(xnResultDoc), strResultRef, strAdd, strReplace);
- if (bRefresh)
- {
- model.refreshCurrentModel();
- }
- }
- }
- }
- //TODO 네이밍 다시
- this.setResultKM(xnResultDoc);
-
- return this.m_objHttpClient.status();
- }
- };
- /**
- * resultKM 동작을 위한 Function
- * @param {XmlNode} xnResultDoc : 결과 노드.
- * @memberOf {TypeName}
- * TODO error, updateinstance에 관한 스펙 부족. 생략.
- */
- XFormsModel.prototype.setResultKM = function (xnResultDoc)
- {
- // resultKM 노드 처리. 2011.09.20. 박현우
- // 요청 완료를 하고 회답받은 문자열을 XML 노드로 변경한 후에 실행.
- if ("200" == this.m_objHttpClient.status(0) && null!= xnResultDoc)
- {
- // resultKM 노드가 있을 시.
- for (var i=0; i<xnResultDoc.getElementsByTagName("resultKM").length; i++)
- {
- var xnResultKM = xnResultDoc.getElementsByTagName("resultKM").item(i); // resultKM 노드를 순서대로 검색.
- var clAttribute = new Collection();
-
- // 모든 attribute를 받아와 넣는다.
- for (var j=0; j<xnResultKM.attributes.length; j++)
- {
- var xnAttribute = xnResultKM.attributes.item(j);
- clAttribute.add(xnAttribute.name, xnAttribute.value);
- }
-
- if ("alert" == clAttribute.item("type"))
- {
- // TODO 원래의 형태는 //////////////////
- // Source : a.jsp //
- // Description : 경고경고뭐라뭐라 //
- // URL : http://www.comsquare.kr //
- // 확 인 //
- // 이지만 석유공사에서 사용을 위해 단순 alert으로 출력.
- alert(clAttribute.item("description"));
- }
- else
- {
- this.dispatch("onerror");
- }
-
- if ("true" == clAttribute.item("clear"))
- {
- // 노드 자기 자신 삭제.
- // TODO 미구현
- }
- }
- }
- };
- // TODO Test 필요
- XFormsModel.prototype.convertEncoding = function (strText, strEncodingValue)
- {
- // var nLastIndex = strText.indexOf(strEncodingValue) + strEncodingValue.length;
- var strChangeText = strText.replace(strEncodingValue, "UTF-8");
- var strUnicode = encodeURIComponent(strChangeText);
- strUnicode = decodeURIComponent(strUnicode);
- };
- function FdecodeURI2(s)
- {
- var ss = s;
- try
- {
- ss = decodeURI(ss);
- ss = ss.replaceAll("+"," ");
- ss = ss.replaceAll("%2B","+");
- }
- catch(e)
- {
- }
- return ss;
- }
-
- function FisEncodedString(str)
- {
- if (FdecodeURI2(str)==str)
- {
- return false;
- }
- return true;
- };
- XFormsModel.prototype.makeLightGridObject = function (strResult, strMediaTypes)
- {
- try
- {
- // json 방식일때......는 한줄임.ㅠㅠ
- if ("application/json" == strMediaTypes)
- {
- return jQuery.parseJSON(strResult);
- }
-
- var objLightGridData = {status:null, column:null, data:null};
-
- // 배열 들어가는 순서
- // 0 : Header 정보
- // 1 : col style
- // 2~ : data
- var arResult = strResult.substring(0, strResult.length-1).split("|"); // 맨마지막이 '|'로 끝나기 때문에 맨마지막 '|'를 삭제해 준다.
-
- // Caption부분 String
- var strHeader = arResult[0];
-
- // 구분자 ^로 나눌때 caption의 Col 구분자인 '\^'도 나눠지지 않게 치환.
- strHeader = strHeader.replaceAll("\\^", "__TF_CAP_");
-
- // 배열 들어가는 순서
- // 0 : T 아무래도 LightGrid라는걸 알려주기 위한 헤더인듯.
- // 1 : Row 갯수
- // 2 : Col 갯수
- // 3 : Caption 이름
- // 4 : col width
- var arHeader = strHeader.split("^");
-
- // status 값 객체화
- objLightGridData.status = {row:parseInt(arHeader[1]), col:parseInt(arHeader[2])};
-
- // Caption영역에 필요한 값들의 배열.
- var arCaptionNames = arHeader[3].split("__TF_CAP_"); // caption Name
- var arColumnWidths = arHeader[4].split(","); // Column Width
- var arColumnTypes = new Array(); // Column Type
- var arColumnStyles = new Array(); // Column Style
-
- // Column Style
- var arColumnInfo = arResult[1].split("^");
- for (var i=0; i<parseInt(arHeader[2]); i++)
- {
- // Style을 배열로 저장
- var strColumnStyle = arColumnInfo[i].split("!")[1];
- strColumnStyle = ("" == strColumnStyle && null == strColumnStyle) ? "" : strColumnStyle;
- arColumnStyles.push(strColumnStyle);
-
- // Type을 배열로 저장
- var strColumnType = arColumnInfo[i].split("!")[0];
- strColumnType = ("" == strColumnType && null == strColumnType) ? "" : strColumnType;
- arColumnTypes.push(strColumnType);
- }
-
- // Colume부분 객체화를 위한 String 만들기
- var strCaptionData = "objLightGridData.column = [";
- for (var i=0; i<parseInt(arHeader[2]); i++)
- {
- strCaptionData += "{";
- strCaptionData += "width:" + parseInt(arColumnWidths[i]) + ", style:'" + arColumnStyles[i] + "', type:'" + arColumnTypes[i] + "', caption:'" + arCaptionNames[i];
- if (i != parseInt(arHeader[2]) - 1)
- {
- strCaptionData += "'}, ";
- }
- else
- {
- strCaptionData += "'}";
- }
- }
- // objLightGridData.column 객체화
- eval(strCaptionData + "]");
-
-
- // Data부분 객체화를 위한 String 만들기
- var strBodyData = "objLightGridData.data = [";
- for (var i=2; i<arResult.length; i++)
- {
- var strRowData = arResult[i].substring(0, arResult[i].length-1); // 맨 마지막이 '^'로 끝나기 때문에 마지막 ^를 삭제해 준다.
- var arColData = strRowData.split("^");
- strBodyData += "[";
-
- for (var j=0; j<parseInt(arHeader[2]); j++)
- {
- var strColData = ("" == arColData[j] || null == arColData[j]) ? "" : arColData[j];
- strBodyData += "{D:'" + strColData;
-
- if (j != parseInt(arHeader[2]) - 1)
- {
- strBodyData += "'}, ";
- }
- else
- {
- strBodyData += "'}";
- }
- }
-
- if (i != arResult.length - 1)
- {
- strBodyData += "], ";
- }
- else
- {
- strBodyData += "]";
- }
- }
-
- // objLightGridData.data 객체화.
- eval(strBodyData += "]");
-
- // var objLightGridData = {status:null, caption:null, width:null, type:null, style:null, data:null};
- //
- // // 배열 들어가는 순서
- // // 0 : Header 정보
- // // 1 : col style
- // // 2~ : data
- // var arResult = strResult.split("|");
- //
- // // Caption부분 String
- // var strHeader = arResult[0];
- //
- // // 구분자 ^로 나눌때 caption의 Col 구분자인 '\^'도 나눠지지 않게 치환.
- // strHeader = strHeader.replaceAll("\\^", "__TF_CAP_");
- //
- // // 배열 들어가는 순서
- // // 0 : T 아무래도 LightGrid라는걸 알려주기 위한 헤더인듯.
- // // 1 : Row 갯수
- // // 2 : Col 갯수
- // // 3 : Caption 이름
- // // 4 : col width
- // var arHeader = strHeader.split("^");
- //
- // objLightGridData.status = {row:parseInt(arHeader[1]), col:parseInt(arHeader[2])};
- //
- // // caption을 객체화 하기
- // var arCaptionName = arHeader[3].split("__TF_CAP_");
- //
- // var strEvalValue = "objLightGridData.caption = {";
- // for (var i=0; i<parseInt(arHeader[2]); i++)
- // {
- // var strCaptionName = (arCaptionName[i]) ? arCaptionName[i] : "";
- // if (i != parseInt(arHeader[2]) - 1)
- // {
- // strEvalValue += "col"+i+":'" + strCaptionName + "', ";
- // }
- // else
- // {
- // strEvalValue += "col"+i+":'" + strCaptionName + "'";
- // }
- // }
- // eval(strEvalValue + "}");
- //
- // // width를 객체화 하기
- // strEvalValue = "objLightGridData.width = {";
- //
- // var arCaptionWidth = arHeader[4].split(",");
- //
- // for (var i=0; i<parseInt(arHeader[2]); i++)
- // {
- // var strCaptionWidth = arCaptionWidth[i] ? arCaptionWidth[i].trim() : "";
- // if (i != parseInt(arHeader[2]) - 1)
- // {
- // strEvalValue += "col"+i+":" + strCaptionWidth + ", ";
- // }
- // else
- // {
- // strEvalValue += "col"+i+":" + strCaptionWidth;
- // }
- // }
- // eval(strEvalValue + "}");
- //
- // // style, type을 분리하여 객체화 하기
- // strEvalValue = "objLightGridData.style = {";
- //
- // // Type이 함께 있기 때문에 String을 동시에 만들어준다.
- // var strEvalCaptionType = "objLightGridData.type = {";
- //
- // var arCaptionStyle = arResult[1].split("^");
- //
- // for (var i=0; i<parseInt(arHeader[2]); i++)
- // {
- // var strCaptionStyle = arCaptionStyle[i] ? arCaptionStyle[i].trim() : "";
- //
- // var strCaptionType = (null != strCaptionStyle.split("!")[0]) ? strCaptionStyle.split("!")[0] : ""; // caption type 넣기
- // strCaptionStyle = (null != strCaptionStyle.split("!")[1]) ? strCaptionStyle.split("!")[1] : ""; // caption style 넣기
- //
- // if (i != parseInt(arHeader[2]) - 1)
- // {
- // strEvalCaptionType += "col" + i + ":'" +strCaptionType + "', ";
- // strEvalValue += "col"+i+":'" + strCaptionStyle + "', ";
- // }
- // else
- // {
- // strEvalCaptionType += "col" + i + ":'" +strCaptionType + "'";
- // strEvalValue += "col"+i+":'" + strCaptionStyle + "'";
- // }
- // }
- // eval(strEvalValue + "}");
- // eval(strEvalCaptionType + "}");
- //
- // // data를 객체화 하기
- // strEvalValue = "objLightGridData.data = [";
- // for (var i=2; i<arResult.length; i++)
- // {
- // strEvalValue += "{";
- // var strData = arResult[i];
- // var arColData = strData.split("^");
- // for (var j=0; j<parseInt(arHeader[2]);j++)
- // {
- // var strColData = arColData[j] ? arColData[j].trim() : "";
- // if (j != parseInt(arHeader[2]) - 1)
- // {
- // strEvalValue += "col" + j + ":'" + strColData + "', ";
- // }
- // else
- // {
- // strEvalValue += "col" + j + ":'" + strColData + "'";
- // }
- // }
- // if (i != arResult.length-1)
- // {
- // strEvalValue = strEvalValue + "}, ";
- // }
- // else
- // {
- // strEvalValue = strEvalValue + "}";
- // }
- // }
- // eval(strEvalValue + "]");
-
- return objLightGridData;
- }
- catch (e)
- {
- //TODO 문서구조 오류 로그파일에 추가
- return null;
- }
- };
- /**
- *
- * @param strServerPath xrw파일이 위치하는 폴더명
- * @param strDeployPath html파일로 변환할 폴더명
- * @param strSubDir 서브 폴더가 존재할 때 포함해서 변환할지에 대한 설정(true/false)
- * @return
- */
- XFormsModel.prototype.deployDirectory = function (strServerPath, strDeployPath, strSubDir)
- {
- var strResult;
- var strSubmitData = "ServerPath=" + strServerPath + "&DeployPath=" + strDeployPath + "&SubDir=" + strSubDir +"&";
- strAction = __getAppName() + "/DeploymentPartManager.tfs";
- strResult = this.m_objHttpClient.post(strAction, strSubmitData);
- };
- XFormsModel.prototype.setFocus = function (strId, bEnsureVisible)
- {
- window.setFocus(strId);
- };
- XFormsModel.prototype.setValue = function (strRef, strValue, bCdata)
- {
- //TODO root 로 시작하는지 instance 로 시작하는지 구분해야한다.
- //TODO strRef가 "/root/example"일때와 root.exaple일때 구분해야한다.
-
- var objInstance = this.getInstance();
- if (null != objInstance)
- {
- var xnRoot = objInstance.documentElement;
- if (null != xnRoot)
- {
- if (typeof(strRef) != "string")
- {
- XmlLib.setTextValue(strRef, strValue);
- objInstance.synchronize();
- }
- else
- {
- var xnNode = XmlLib.selectSingleNode(xnRoot, strRef);
- if (null != xnNode)
- {
- XmlLib.setTextValue(xnNode, strValue);
- objInstance.synchronize();
- }
- }
- }
- }
- };
- XFormsModel.prototype.setXPathValue = function (strRef, strOperation)
- {
- this.setValue(strRef, xPathOperation(strOperation));
- };
- XFormsModel.prototype.toggle = function (strCaseId)
- {
- var arKeyset = document.controls.keys();
- for (var i=0; i<arKeyset.length; i++)
- {
- var strId = arKeyset[i];
- var objChild = document.controls.item(strId);
- if (objChild.id == strCaseId && objChild instanceof XFormsCase)
- {
- objChild.select(true);
- }
- }
- };
- XFormsModel.prototype.urlencode = function (strData, strEncoding)
- {
- return URIEncoder.encode(strData, strEncoding);
- };
- /**
- * Http 통신을 지원하는 모듈을 반환한다.
- * @return
- */
- XFormsModel.prototype.getHttpClient = function ()
- {
- return this.m_objHttpClient;
- };
- XFormsModel.prototype.getSessionId = function ()
- {
- return this.m_strSessionId;
- };
- XFormsModel.prototype.setSessionId = function (strSessionId)
- {
- this.m_strSessionId = strSessionId;
- };
- XFormsModel.prototype.isProcessAutoCdata = function (strValue)
- {
- if(strValue.indexOf("&") > 0 || strValue.indexOf("<") > 0 ||
- strValue.indexOf(">") > 0 || strValue.indexOf("'") > 0 ||
- strValue.indexOf("\"") > 0)
- {
- return true;
- }
- return false;
- };
- XFormsModel.prototype.getInstancePart = function (strInstanceID, strRef)
- {
- //TODO root 로 시작하는지 instance 로 시작하는지 구분해야한다.
- //TODO strRef가 "/root/example"일때와 root.exaple일때 구분해야한다.
- var xnInstansDoc = this.getInstanceDocument(strInstanceID);
-
- return XmlLib.selectNodes(xnInstansDoc, strRef);
- };
- XFormsModel.prototype.getInstanceSinglePart = function (strInstanceID, strRef)
- {
- //TODO root 로 시작하는지 instance 로 시작하는지 구분해야한다.
- //TODO strRef가 "/root/example"일때와 root.exaple일때 구분해야한다.
-
- // root 로 시작하고 XPath일때
- var xnInstansDoc = this.getInstanceDocument(strInstanceID);
- if (null != xnInstansDoc)
- {
- var xnNode = XmlLib.selectSingleNode(xnInstansDoc, strRef);
- return xnNode;
- }
- return null;
- };
- /**
- * 인스턴스를 구한다.
- * @return
- */
- XFormsModel.prototype.getInstance = function (strInstanceId)
- {
- var objInstance = null;
- if (0 != this.instances.count())
- {
- // 인자 strInstanceId가 없다면
- if (null == strInstanceId || "" == strInstanceId)
- {
- // 첫 인스턴스를 구한다.
- var arKeyset = this.instances.keys();
- for (var i=0; i<arKeyset.length; i++)
- {
- var strId = arKeyset[i];
- objInstance = this.instances.item(strId);
- if (null != objInstance)
- {
- break;
- }
- }
- }
- // 인자 strInstanceId가 있다면
- else
- {
- // ID 에 맞는 인스턴스를 구한다.
- objInstance = this.instances.item(strInstanceId);
- }
- }
- return objInstance;
- };
- /**
- * 인스턴스의 DocumentElement를 구한다.
- * @param strInstanceID
- * @return
- */
- XFormsModel.prototype.getInstanceDocument = function (strInstanceID)
- {
- var xnDoc = null;
-
- var objInstance = this.getInstance(strInstanceID);
- // 인스턴스가 있다면
- if (null != objInstance)
- {
- xnDoc = objInstance.documentElement;
- }
- return xnDoc;
- };
- XFormsModel.prototype.initChildren = function ()
- {
- var arKeyset = this.children.keys();
- for (var i=0; i<arKeyset.length; i++)
- {
- var strId = arKeyset[i];
- var objChild = this.children.item(strId);
-
- if (null != objChild && objChild.init)
- {
- objChild.init();
- }
- }
-
- XFormsDocument.init();
- };
- XFormsModel.prototype.getTabIndex = function ()
- {
- return this.m_objTabIndex;
- };
- XFormsModel.prototype.initTabIndex = function ()
- {
- for (var i=0; i<this.m_objTabIndex.length; i++)
- {
- if (this.m_objTabIndex[i] && this.m_objTabIndex[i].m_heControl)
- {
- this.m_objTabIndex[i].m_TabIndex = i;
- this.m_objTabIndex[i].m_heControl.tabIndex = i+1;
- }
- }
- };
- XFormsModel.prototype.replaceTabIndex = function (nArrIndex, nTabIndex, objControl)
- {
- this.removeTabIndex(nArrIndex);
- this.addTabIndex(nTabIndex, objControl);
- this.initTabIndex();
- };
- XFormsModel.prototype.removeTabIndex = function (nArrIndex)
- {
- this.m_objTabIndex.splice(nArrIndex, 1);
- };
- XFormsModel.prototype.addTabIndex = function (nTabIndex, objControl)
- {
- if (-1 != nTabIndex)
- {//instance, submission, bind, item 제외
-
- if (0 == this.m_objTabIndex.length)
- {
- this.m_objTabIndex.push(objControl);
- return;
- }
-
- for (var i=0; i<this.m_objTabIndex.length; i++)
- {
- if (nTabIndex < this.m_objTabIndex[i].navIndex)
- {
- this.m_objTabIndex.splice(i, 0, objControl);
- return;
- }
- }
-
- this.m_objTabIndex.push(objControl);
- }
- };
- //////////////////////////////////////////////////////
- //Private 함수
- XFormsModel.prototype._getPostDataXmlAll = function (strRefList)
- {
- var strData = "";
- if (null != strRefList && !strRefList.isEmpty())
- {
- var arRef = strRefList.split(",");
- for (var i=0; i<arRef.length; i++)
- {
- var strRef = arRef[i];
- if (null != strRef && !strRef.isEmpty())
- {
- strRef = strRef.trim();
-
- var xnRefNode = this.getInstanceSinglePart(null, strRef);
- if (null != xnRefNode)
- {
- strData += XmlLib.serializeToString(xnRefNode);
- }
- }
- }
- }
- return strData;
- };
- /**
- * PostData 전체를 구한다.
- * @param strRef
- * @return
- */
- XFormsModel.prototype._getPostDataAll = function (strRef, bEncoded, strType, strEncoding, strMediaType)
- {
- var strData = "";
- if (null != strRef && "" != strRef)
- {
- // ref 는 ','로 구분되어 다중으로 쓰일 수 있다.
- var arRef = strRef.split(",");
- for (var i=0; i<arRef.length; i++)
- {
- var strSplitRef = arRef[i];
- if (null != strSplitRef && "" != strSplitRef)
- {
- strSplitRef = strSplitRef.trim();
- }
-
- var strResult = this._getPostData(strSplitRef, bEncoded, strType, strEncoding, strMediaType);
- if ("error" == strResult)
- {
- return strResult;
- }
- strData += strResult;
- }
- }
- return strData;
- };
- /**
- * ref 하나에 대한 PostData를 구한다.
- * @param strRef
- * @param bEncoded
- * @return
- */
- XFormsModel.prototype._getPostData = function (strRef, bEncoded, strType, strEncoding, strMediaType)
- {
- var strData = "";
- if (null != strRef && "" != strRef)
- {
- var xnDoc = this.getInstanceDocument();
- if ("/" == strRef || "." == strRef)
- {
- this._getPostDataNode(xnDoc, bEncoded, strType, strEncoding, strMediaType);
- }
- else
- {
- var xlChild = XmlLib.selectNodes(xnDoc, strRef);
- for (var i=0; i<xlChild.length; i++)
- {
- var xnChild = xlChild.item(i);
- // 하위 노드 얻기
- strData += this._getPostDataNode(xnChild, bEncoded, strType, strEncoding, strMediaType);
- }
- }
- }
- return strData;
- };
- /**
- * Node 하나에 대한 PostData를 구한다.
- * @param xnNode
- * @param bEncoded
- * @return
- */
- XFormsModel.prototype._getPostDataNode = function (xnNode, bEncoded, strType, strEncoding, strMediaType)
- {
- var strData= "";
- if (!XmlLib.hasChildNodesExceptText(xnNode))
- {
- var strNodeName;
- var strNodeValue;
- var nNodeType = xnNode.nodeType;
-
- if (Node.ELEMENT_NODE == nNodeType)
- {
- strNodeName = xnNode.nodeName;
- strNodeValue = XmlLib.getTextValue(xnNode);
-
- if (!bEncoded) // endcode 가 아니면 멀티업데이트
- {
- var arLinkedControl = XFormsDocument.getBindControlsByNode(xnNode);
- var objLinkedControl;
- for (var i = 0; i < arLinkedControl.length; i++)
- {
- objLinkedControl = arLinkedControl[i];
- var strTag = objLinkedControl.attribute["tag"];
-
- if ("xforms:file" == strTag)
- {
- var arTempValue = strNodeValue.split("?");
- var strTempValue = "";
- for (var i = 0; i < arTempValue.length; i++)
- {
- var arTempFileName = arTempValue[i].split("|");
- if (strTempValue != "") strTempValue += "?";
- strTempValue += arTempFileName[0];
-
- if (arTempFileName[1])
- {
- strTempValue += "|";
- strTempValue += arTempFileName[1];
- this.m_bHasUploadFile = true;
- }
- }
-
- if (arTempValue.length > 1) this.m_bHasUploadFile = true;
- if (this.m_bHasUploadFile) strNodeName = "__TF_Upload_" + strNodeName;
- strNodeValue = strTempValue;
- break;
- }
- else if ("xforms:img" == strTag && "true" == objLinkedControl.attribute["upload"])
- {
- var arTempValue = strNodeValue.split("|");
- var strTempValue = arTempValue[0];
-
- if (arTempValue[1])
- {
- strTempValue += "|";
- strTempValue += arTempValue[1];
-
- this.m_bHasUploadFile = true;
- strNodeName = "__TF_Upload_" + strNodeName;
- }
-
- strNodeValue = strTempValue;
- break;
- }
- }
-
- this.m_hmInstanceData[strNodeName] = strNodeValue;
- return "";
- }
- //TODO checkValid
- //TODO checkRequired
- //TODO checkRelevant
- if ("secure" == strType)
- {
- return strNodeName + "=" + strNodeValue+ "&";
- }
- else
- {
- return URIEncoder.encode(strNodeName, strEncoding) + "=" + URIEncoder.encode(strNodeValue, strEncoding)+ "&";
- }
- }
- }
- else
- {
- var xlChild = xnNode.childNodes;
- for (var i=0; i<xlChild.length; i++)
- {
- var xnChild = xlChild[i];
- // 하위 노드 얻기
- var strResult = this._getPostDataNode(xnChild, bEncoded, strType, strEncoding);
- if ("error" == strResult)
- {
- return strResult;
- }
- strData += strResult;
- }
- }
- return strData;
- };
- XFormsModel.prototype.updateDataForASync = function (xnResult)
- {
- if (null != this.m_objCurrentSubmission)
- {
- var strResultRef = this.m_objCurrentSubmission.attribute["resultref"];
- var strAdd = this.m_objCurrentSubmission.attribute["add"];
- var strReplace = this.m_objCurrentSubmission.attribute["replace"];
-
- this.updateData(xnResult, strResultRef, strAdd, strReplace);
- if (this.m_objCurrentSubmission.m_refresh)
- {
- model.refreshCurrentModel();
- }
- if (-1 != this.m_objCurrentSubmission.attribute["function"].indexOf("("))
- {
- try{window.eval(this.m_objCurrentSubmission.attribute["function"])}catch(e){};
- }
- else
- {
- try{window.eval(this.m_objCurrentSubmission.attribute["function"]+"();")}catch(e){};
- }
- }
- };
- XFormsModel.prototype.updateData = function (xnResult, strResultRef, strAdd, strReplace)
- {
- if (!xnResult)
- {
- return;
- }
-
- // add = [none, top, bottom]
- if (null == strAdd || "" == strAdd)
- {
- strAdd = "none";
- }
- // replace = [instance, all]
- if (null == strReplace || "" == strReplace)
- {
- strReplace = "instance";
- }
-
- var xnInstanceDoc = this.getInstanceDocument();
- if (null != xnInstanceDoc)
- {
- var xnTarget = XmlLib.selectSingleNode(xnInstanceDoc, strResultRef);
- var strNodeName;
- var xnParent;
-
- // target 노드가 있을 때
- if (xnTarget)
- {
- strNodeName = xnTarget.nodeName;
- xnParent = xnTarget.parentNode;
-
- // none 일때 기존 XPath의 값을 삭제한다.
- if ("top" != strAdd && "bottom" != strAdd)
- {
- var xlChild = xnParent.childNodes;
- var i = 0;
- while(i<xlChild.length)
- {
- var xnChild = xlChild[i];
- if (strNodeName == xnChild.nodeName)
- {
- xnParent.removeChild(xnChild);
- }
- else
- {
- i++;
- }
- }
- // for (var i=0; i<xlChild.length; i++)
- // {
- // var xnChild = xlChild[i];
- // if (strNodeName == xnChild.nodeName)
- // {
- // xnParent.removeChild(xnChild);
- // }
- // }
- }
- }
- // target 노드가 없을 때
- else
- {
- // append 하기위해 XPath 한 단계 위 부모를 찾는다.
- var nPos = strResultRef.lastIndexOf("/");
- strResultRef = strResultRef.substring(0, nPos);
- xnParent = XmlLib.selectSingleNode(xnInstanceDoc, strResultRef);
- }
-
- var xlResultChild = xnResult.childNodes;
-
- // 결과가 있다면 (최상위 노드말고 한단계 밑의 노드들을 사용한다. (TF 논리)
- if (xlResultChild && xnParent)
- {
- for (var i=0; i<xlResultChild.length; i++)
- {
- var xnReusltChild = xlResultChild[i];
- if ("top" == strAdd)
- {
- var xnOldFirstChild = xnParent.firstChild;
- xnParent.insertBefore(xnReusltChild.cloneNode(true), xnOldFirstChild);
- }
- else
- {
- xnParent.appendChild(xnReusltChild.cloneNode(true));
- }
- }
-
- this._synchronizeInstances();
- }
- }
- };
- XFormsModel.prototype._synchronizeInstances = function ()
- {
- // 인스턴스들을 한번씩 초기화 해준다.
- var arKeyset = this.instances.keys();
- for (var i=0; i<arKeyset.length; i++)
- {
- var strName = arKeyset[i];
- var objInstance = this.instances.item(strName);
- if (null != objInstance)
- {
- objInstance.synchronize();
- }
- }
- };
- XFormsModel.prototype.setParentData = function (xnParentData, strTagetRef)
- {
- if (!xnParentData)
- {
- return;
- }
- else
- {
- if (Node.DOCUMENT_NODE == xnParentData.nodeType)
- {
- xnParentData = xnParentData.firstChild;
- }
- }
-
- var xnInstanceDoc = this.getInstanceDocument();
- if (null != xnInstanceDoc)
- {
- var xnTarget = XmlLib.selectSingleNode(xnInstanceDoc, strTagetRef);
-
- // target 노드가 있을 때
- if (xnTarget && xnParentData)
- {
- var xlTargetChild = xnTarget.childNodes;
- if (xlTargetChild)
- {
- var nChildNodeCount = xlTargetChild.length;
- for (var i=0; i<nChildNodeCount; i++)
- {
- xnTarget.removeChild(xnTarget.lastChild);
- }
- }
-
- var xlParentDataChild = xnParentData.childNodes;
- if (xlParentDataChild)
- {
- for (var i=0; i<xlParentDataChild.length; i++)
- {
- var xnReusltChild = xlParentDataChild[i];
- xnTarget.appendChild(xnReusltChild.cloneNode(true));
- }
-
- this._synchronizeInstances();
- }
- }
- }
- };
- XFormsModel.prototype.cloneInstances = function ()
- {
- if (0 != this.instances.count())
- {
- var arKeyset = this.instances.keys();
- for (var i=0; i<arKeyset.length; i++)
- {
- var strId = arKeyset[i];
- var objInstance = this.instances.item(strId);
- if (null != objInstance)
- {
- objInstance.cloneInstances();
- }
- }
- }
- };
- XFormsModel.prototype.defaultAction = function (strEventName, event)
- {
- switch(strEventName)
- {
- case "xforms-recalculate" :
- {
- this.recalculate(); break;
- }
- case "xforms-revalidate" :
- {
- break;
- }
- case "xforms-refresh" :
- {
- this.refresh(); break;
- }
- case "xforms-compute-exception" :
- {
- break;
- }
- case "xforms-link-exception" :
- {
- break;
- }
- case "xforms-model-construct" :
- {
- break;
- }
- case "xforms-close" :
- {
- break;
- }
- case "xforms-reset" :
- {
- break;
- }
- case "xforms-ready" :
- {
- //this.cloneInstances();
- break;
- }
- case "onredirecthtml" :
- {
- break;
- }
- case "ontimeout" :
- {
- break;
- }
- }
- };
- //////////////////////////////////////////////////////
- // 전역함수
- XFormsModel.onload = function ()
- {
- __initWindow();
-
- __initDocument();
-
- // instance, submission, bind 들을 초기화한다.
- __createElements();
-
- // event들을 element에 연결한다.
- __addEventListener();
-
- var strSessionId = model.m_objHttpClient.get(window.getTrustFormURL() + "/SessionStorageManager.tfs?Soonsu_ServiceName=SessionId", false, "text/xml", "utf-8", false);
- model.setSessionId(strSessionId);
-
- // 부모에서 전달한 값을 받는다.
- window.getParentData();
- // var now = new Date();
- // var nStart = now.getTime();
- // 컨트롤들을 초기화한다.
- model.initChildren();
- now = new Date();
- // if (null != window.console)
- // {
- // console.log(((now.getTime()- nStart)/1000)+"초");
- // }
- // 컨트롤의 tabIndex를 멤버변수로 초기화 한다.
- model.initTabIndex();
-
- if (is_smartphone)
- {
- $("#HE_body").css("-webkit-tap-highlight-color","rgba(0,0,0,0)");
- }
- if ("visible" == body.getAttribute("visibility"))
- {
- document.body.style.visibility = "visible";
- }
-
- // xforms-model-construct 이벤트
- if (window.xforms_model_construct || window.xforms_model_construct_model)
- {
- var event = XFormsWindow.getCurrentEvent();
- var strOriginEventName = event.name;
- var strOriginTarget = event.target;
- var strOriginCurrentTarget = event.currentTarget;
- var strOriginDescription = event.description;
- var strOriginPropagate = event.propagate;
- var strOriginDefaultAction = event.defaultAction;
-
- model.dispatch("xforms-model-construct");
- event.name = strOriginEventName;
- event.target = strOriginTarget;
- event.currentTarget = strOriginCurrentTarget;
- event.description = strOriginDescription;
- event.propagate = strOriginPropagate;
- event.defaultAction = strOriginDefaultAction;
- }
-
- // model 을 refresh 한다.
- model.refreshCurrentModel();
-
- // xforms-model-construct_done 이벤트
- if (window.xforms_model_construct_done || window.xforms_model_construct_done_model)
- {
- var event = XFormsWindow.getCurrentEvent();
- var strOriginEventName = event.name;
- var strOriginTarget = event.target;
- var strOriginCurrentTarget = event.currentTarget;
- var strOriginDescription = event.description;
- var strOriginPropagate = event.propagate;
- var strOriginDefaultAction = event.defaultAction;
-
- model.dispatch("xforms-model-construct-done");
- event.name = strOriginEventName;
- event.target = strOriginTarget;
- event.currentTarget = strOriginCurrentTarget;
- event.description = strOriginDescription;
- event.propagate = strOriginPropagate;
- event.defaultAction = strOriginDefaultAction;
- }
-
- window.m_bReady = true;
-
- // xforms-ready 이벤트
- if (window.xforms_ready || window.xforms_ready_model)
- {
- var event = XFormsWindow.getCurrentEvent();
- var strOriginEventName = event.name;
- var strOriginTarget = event.target;
- var strOriginCurrentTarget = event.currentTarget;
- var strOriginDescription = event.description;
- var strOriginPropagate = event.propagate;
- var strOriginDefaultAction = event.defaultAction;
-
- model.dispatch("xforms-ready");
-
- event.name = strOriginEventName;
- event.target = strOriginTarget;
- event.currentTarget = strOriginCurrentTarget;
- event.description = strOriginDescription;
- event.propagate = strOriginPropagate;
- event.defaultAction = strOriginDefaultAction;
- }
-
- var collec = new Object();
-
- if (null != instance1)
- {
- model.m_resetRoot = instance1.root.cloneNode(true);
- }
- };
- XFormsModel.onunload = function ()
- {
- if (!model.m_bDoneUnload)
- {
- // xforms-close 이벤트
- if (window.xforms_close || window.xforms_close_model)
- {
- try
- {
- if (window.xforms_close)
- {
- xforms_close();
- }
- if (window.xforms_close_model)
- {
- xforms_close_model();
- }
-
- }
- catch (e)
- {
- }
- }
-
- // 자식윈도우인 경우 부모의 Children 리스트에서 제거 한다.
- if (null != window.opener)
- {
- try
- {
- window.opener.removeChildWindow(window);
- if (window.opener != window.openerTargetWindow)
- {
- if (null != window.opener.m_objModal)
- {
- window.openerTargetWindow.m_objModal = window.opener.m_objModal;
- }
- else
- {
- window.openerTargetWindow.removeBodyHiddenDiv();
- }
- }
- } catch (e) {}
- }
-
- // xforms-model-destruct 이벤트
- if (window.xforms_model_destruct || window.xforms_model_destruct_model)
- {
- try
- {
- if (window.xforms_model_destruct)
- {
- xforms_model_destruct();
- }
- if (window.xforms_model_destruct_model)
- {
- xforms_model_destruct_model();
- }
- }
- catch (e)
- {
- }
- }
-
- model.m_bDoneUnload = true;
- }
- for (var i=0; i<window.children.length; i++)
- {
- var objChild = window.children.item(i);
- if (null != objChild)
- {
- objChild.close();
- }
- }
- };
- /**
- * model에 instance를 추가한다.
- * @param strID
- * @param objInstance
- * @return
- */
- XFormsModel.appendInstance = function (strID, objInstance, strParentId)
- {
- var objModel = document.allElement.item(strParentId);
- if (!objModel)
- {
- objModel = model;
- }
-
- if (objModel.instances.exists(strID))
- {
- // 기존 같은 아이디의 instance
- var objExistedInstance = objModel.instances.item(strID);
-
- if (null != objExistedInstance)
- {
- var xlChild = objInstance.root.childNodes;
- for (var i=0; i<xlChild.length; i++)
- {
- var xnChild = xlChild[i];
- XmlLib.importChildNode(objExistedInstance.root, xnChild, true);
- }
- }
- }
- else
- {
- objModel.instances.add(strID, objInstance);
- }
- };
- // TODO createChild 구현중 2011. 03. 15. 박현우 /////////////////////////////////////////////////////////////////////////////////////
- //XFormsModel.create = function (strID, clAttribute, strStyle)
- //{
- //// // 메인노드 생성
- //// var xnModel = XFormsModel.createMainNode(clAttribute);
- //// var xnParent = document.getElementById("HE_"+strParentId);
- //// xnParent.appendChild(xnModel);
- ////
- //// xnModel = XFormsModel.createSubNodes(xnModel, clAttribute);
- //// // object 생성
- // return XFormsModel.createObject(strParentId, xnModel, clAttribute, strStyle);
- //};
- //
- //XFormsModel.createObject = function (strParentId, xnModel, clAttribute, strStyle)
- //{
- //// XFormsModel (strParentId, bAutodata, strID, strTag)
- //// var bAutodata = "";
- //// var strId = xnModel.getAttribute("elementid");
- //// var strUserDefineAttrib = "";
- ////
- //// for (var i=0; i<clAttribute.count(); i++)
- //// {
- //// var strAttributeName = clAttribute.keys()[i];
- //// switch (strAttributeName)
- //// {
- //// case "autodata" :
- //// {
- //// if ("true" == clAttribute.item(strAttributeName))
- //// bAutodata = true;
- //// break;
- //// }
- //// default :
- //// {
- //// if (!STYLE_LIST[strAttributeName])
- //// {
- //// strUserDefineAttrib += strAttributeName + ":" + clAttribute.item(strAttributeName) + "; ";
- //// }
- //// break;
- //// }
- //// }
- //// }
- //// var objModel = new XFormsModel (strParentId, bAutodata, "xforms:model", strUserDefineAttrib);
- //// return objModel;
- //};
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|