HuskyEZCreator.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. if(typeof window.nhn=='undefined') window.nhn = {};
  2. if (!nhn.husky) nhn.husky = {};
  3. /**
  4. * @fileOverview This file contains application creation helper function, which would load up an HTML(Skin) file and then execute a specified create function.
  5. * @name HuskyEZCreator.js
  6. */
  7. nhn.husky.EZCreator = new (function(){
  8. this.nBlockerCount = 0;
  9. this.createInIFrame = function(htOptions){
  10. if(arguments.length == 1){
  11. var oAppRef = htOptions.oAppRef;
  12. var elPlaceHolder = htOptions.elPlaceHolder;
  13. var sSkinURI = htOptions.sSkinURI;
  14. var fCreator = htOptions.fCreator;
  15. var fOnAppLoad = htOptions.fOnAppLoad;
  16. var bUseBlocker = htOptions.bUseBlocker;
  17. var htParams = htOptions.htParams || null;
  18. }else{
  19. // for backward compatibility only
  20. var oAppRef = arguments[0];
  21. var elPlaceHolder = arguments[1];
  22. var sSkinURI = arguments[2];
  23. var fCreator = arguments[3];
  24. var fOnAppLoad = arguments[4];
  25. var bUseBlocker = arguments[5];
  26. var htParams = arguments[6];
  27. }
  28. if(bUseBlocker) nhn.husky.EZCreator.showBlocker();
  29. var attachEvent = function(elNode, sEvent, fHandler){
  30. if(elNode.addEventListener){
  31. elNode.addEventListener(sEvent, fHandler, false);
  32. }else{
  33. elNode.attachEvent("on"+sEvent, fHandler);
  34. }
  35. }
  36. if(!elPlaceHolder){
  37. alert("Placeholder is required!");
  38. return;
  39. }
  40. if(typeof(elPlaceHolder) != "object")
  41. elPlaceHolder = document.getElementById(elPlaceHolder);
  42. var elIFrame, nEditorWidth, nEditorHeight;
  43. try{
  44. elIFrame = document.createElement("<IFRAME frameborder=0 scrolling=no>");
  45. }catch(e){
  46. elIFrame = document.createElement("IFRAME");
  47. elIFrame.setAttribute("frameborder", "0");
  48. elIFrame.setAttribute("scrolling", "no");
  49. }
  50. elIFrame.style.width = "1px";
  51. elIFrame.style.height = "1px";
  52. elPlaceHolder.parentNode.insertBefore(elIFrame, elPlaceHolder.nextSibling);
  53. attachEvent(elIFrame, "load", function(){
  54. fCreator = elIFrame.contentWindow[fCreator] || elIFrame.contentWindow.createSEditor2;
  55. // top.document.title = ((new Date())-window.STime);
  56. // window.STime = new Date();
  57. try{
  58. nEditorWidth = elIFrame.contentWindow.document.body.scrollWidth || "500px";
  59. nEditorHeight = elIFrame.contentWindow.document.body.scrollHeight + 12;
  60. elIFrame.style.width = "100%";
  61. elIFrame.style.height = nEditorHeight+ "px";
  62. elIFrame.contentWindow.document.body.style.margin = "0";
  63. }catch(e){
  64. nhn.husky.EZCreator.hideBlocker(true);
  65. elIFrame.style.border = "5px solid red";
  66. elIFrame.style.width = "500px";
  67. elIFrame.style.height = "500px";
  68. alert("Failed to access "+sSkinURI);
  69. return;
  70. }
  71. var oApp = fCreator(elPlaceHolder, htParams); // oEditor
  72. oApp.elPlaceHolder = elPlaceHolder;
  73. oAppRef[oAppRef.length] = oApp;
  74. if(!oAppRef.getById) oAppRef.getById = {};
  75. if(elPlaceHolder.id) oAppRef.getById[elPlaceHolder.id] = oApp;
  76. oApp.run({fnOnAppReady:fOnAppLoad});
  77. // top.document.title += ", "+((new Date())-window.STime);
  78. nhn.husky.EZCreator.hideBlocker();
  79. });
  80. // window.STime = new Date();
  81. elIFrame.src = sSkinURI;
  82. this.elIFrame = elIFrame;
  83. };
  84. this.showBlocker = function(){
  85. if(this.nBlockerCount<1){
  86. var elBlocker = document.createElement("DIV");
  87. elBlocker.style.position = "absolute";
  88. elBlocker.style.top = 0;
  89. elBlocker.style.left = 0;
  90. elBlocker.style.backgroundColor = "#FFFFFF";
  91. elBlocker.style.width = "100%";
  92. document.body.appendChild(elBlocker);
  93. nhn.husky.EZCreator.elBlocker = elBlocker;
  94. }
  95. nhn.husky.EZCreator.elBlocker.style.height = Math.max(document.body.scrollHeight, document.body.clientHeight)+"px";
  96. this.nBlockerCount++;
  97. };
  98. this.hideBlocker = function(bForce){
  99. if(!bForce){
  100. if(--this.nBlockerCount > 0) return;
  101. }
  102. this.nBlockerCount = 0;
  103. if(nhn.husky.EZCreator.elBlocker) nhn.husky.EZCreator.elBlocker.style.display = "none";
  104. }
  105. })();