|
|
/* Copyright (C) NAVER corp.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ if(typeof window.nhn=='undefined') window.nhn = {}; if (!nhn.husky) nhn.husky = {};
/** * @fileOverview This file contains application creation helper function, which would load up an HTML(Skin) file and then execute a specified create function. * @name HuskyEZCreator.js */ nhn.husky.EZCreator = new (function(){ this.nBlockerCount = 0;
this.createInIFrame = function(htOptions){ if(arguments.length == 1){ var oAppRef = htOptions.oAppRef; var elPlaceHolder = htOptions.elPlaceHolder; var sSkinURI = htOptions.sSkinURI; var fCreator = htOptions.fCreator; var fOnAppLoad = htOptions.fOnAppLoad; var bUseBlocker = htOptions.bUseBlocker; var htParams = htOptions.htParams || null; }else{ // for backward compatibility only
var oAppRef = arguments[0]; var elPlaceHolder = arguments[1]; var sSkinURI = arguments[2]; var fCreator = arguments[3]; var fOnAppLoad = arguments[4]; var bUseBlocker = arguments[5]; var htParams = arguments[6]; }
if(bUseBlocker) nhn.husky.EZCreator.showBlocker();
var attachEvent = function(elNode, sEvent, fHandler){ if(elNode.addEventListener){ elNode.addEventListener(sEvent, fHandler, false); }else{ elNode.attachEvent("on"+sEvent, fHandler); } }
if(!elPlaceHolder){ alert("Placeholder is required!"); return; }
if(typeof(elPlaceHolder) != "object") elPlaceHolder = document.getElementById(elPlaceHolder);
var elIFrame, nEditorWidth, nEditorHeight;
try{ elIFrame = document.createElement("<IFRAME frameborder=0 scrolling=no>"); }catch(e){ elIFrame = document.createElement("IFRAME"); elIFrame.setAttribute("frameborder", "0"); elIFrame.setAttribute("scrolling", "no"); } elIFrame.style.width = "1px"; elIFrame.style.height = "1px"; elPlaceHolder.parentNode.insertBefore(elIFrame, elPlaceHolder.nextSibling); attachEvent(elIFrame, "load", function(){ fCreator = elIFrame.contentWindow[fCreator] || elIFrame.contentWindow.createSEditor2; // top.document.title = ((new Date())-window.STime);
// window.STime = new Date();
try{ nEditorWidth = elIFrame.contentWindow.document.body.scrollWidth || "500px"; nEditorHeight = elIFrame.contentWindow.document.body.scrollHeight + 12; elIFrame.style.width = "100%"; elIFrame.style.height = nEditorHeight+ "px"; elIFrame.contentWindow.document.body.style.margin = "0"; }catch(e){ nhn.husky.EZCreator.hideBlocker(true); elIFrame.style.border = "5px solid red"; elIFrame.style.width = "500px"; elIFrame.style.height = "500px"; alert("Failed to access "+sSkinURI); return; } var oApp = fCreator(elPlaceHolder, htParams); // oEditor
oApp.elPlaceHolder = elPlaceHolder;
oAppRef[oAppRef.length] = oApp; if(!oAppRef.getById) oAppRef.getById = {}; if(elPlaceHolder.id) oAppRef.getById[elPlaceHolder.id] = oApp;
oApp.run({fnOnAppReady:fOnAppLoad}); // top.document.title += ", "+((new Date())-window.STime);
nhn.husky.EZCreator.hideBlocker(); }); // window.STime = new Date();
elIFrame.src = sSkinURI; this.elIFrame = elIFrame; }; this.showBlocker = function(){ if(this.nBlockerCount<1){ var elBlocker = document.createElement("DIV"); elBlocker.style.position = "absolute"; elBlocker.style.top = 0; elBlocker.style.left = 0; elBlocker.style.backgroundColor = "#FFFFFF"; elBlocker.style.width = "100%";
document.body.appendChild(elBlocker); nhn.husky.EZCreator.elBlocker = elBlocker; }
nhn.husky.EZCreator.elBlocker.style.height = Math.max(document.body.scrollHeight, document.body.clientHeight)+"px"; this.nBlockerCount++; }; this.hideBlocker = function(bForce){ if(!bForce){ if(--this.nBlockerCount > 0) return; } this.nBlockerCount = 0; if(nhn.husky.EZCreator.elBlocker) nhn.husky.EZCreator.elBlocker.style.display = "none"; } })();
|