root / branches / new-dialogs / XinhaLoader.js

Revision 1007, 6.3 kB (checked in by ray, 4 years ago)

merging new-dialogs and trunk via intermediate branch

Line 
1var Xinha = {};
2
3_editor_url = _editor_url.replace(/\x2f*$/, '/');
4
5Xinha.agt       = navigator.userAgent.toLowerCase();
6Xinha.is_ie    = ((Xinha.agt.indexOf("msie") != -1) && (Xinha.agt.indexOf("opera") == -1));
7Xinha.ie_version= parseFloat(Xinha.agt.substring(Xinha.agt.indexOf("msie")+5));
8Xinha.is_opera  = (Xinha.agt.indexOf("opera") != -1);
9Xinha.is_khtml  = (Xinha.agt.indexOf("khtml") != -1);
10Xinha.is_webkit  = (Xinha.agt.indexOf("applewebkit") != -1);
11Xinha.is_safari  = (Xinha.agt.indexOf("safari") != -1);
12Xinha.opera_version = navigator.appVersion.substring(0, navigator.appVersion.indexOf(" "))*1;
13Xinha.is_mac   = (Xinha.agt.indexOf("mac") != -1);
14Xinha.is_mac_ie = (Xinha.is_ie && Xinha.is_mac);
15Xinha.is_win_ie = (Xinha.is_ie && !Xinha.is_mac);
16Xinha.is_gecko  = (navigator.product == "Gecko" && !Xinha.is_safari); // Safari lies!
17Xinha.isRunLocally = document.URL.toLowerCase().search(/^file:/) != -1;
18Xinha.is_designMode = (typeof document.designMode != 'undefined' && !Xinha.is_ie); // IE has designMode, but we're not using it
19Xinha.isSupportedBrowser = Xinha.is_gecko || (Xinha.is_opera && Xinha.opera_version >= 9.1) || Xinha.ie_version >= 5.5 || Xinha.is_safari;
20
21Xinha.loadPlugins = function(plugins, callbackIfNotReady)
22{
23  if ( !Xinha.isSupportedBrowser ) return;
24 
25  Xinha.loadStyle(typeof _editor_css == "string" ? _editor_css : "Xinha.css","XinhaCoreDesign");
26  Xinha.createLoadingMessages(xinha_editors);
27  var loadingMessages = Xinha.loadingMessages;
28  Xinha._loadback(_editor_url + "XinhaCore.js",function () {
29    Xinha.removeLoadingMessages(xinha_editors); 
30    Xinha.createLoadingMessages(xinha_editors); 
31    callbackIfNotReady()
32  });
33  return false;
34}
35
36Xinha._loadback = function(Url, Callback, Scope, Bonus)
37
38  var T = !Xinha.is_ie ? "onload" : 'onreadystatechange';
39  var S = document.createElement("script");
40  S.type = "text/javascript";
41  S.src = Url;
42  if ( Callback )
43  {
44    S[T] = function()
45    {     
46      if ( Xinha.is_ie && ( ! ( /loaded|complete/.test(window.event.srcElement.readyState) ) ) )
47      {
48        return;
49      }
50     
51      Callback.call(Scope ? Scope : this, Bonus);
52      S[T] = null;
53    };
54  }
55  document.getElementsByTagName("head")[0].appendChild(S);
56};
57
58Xinha.getElementTopLeft = function(element)
59{
60  var curleft = curtop = 0;
61  if (element.offsetParent)
62  {
63    curleft = element.offsetLeft
64    curtop = element.offsetTop
65    while (element = element.offsetParent)
66    {
67      curleft += element.offsetLeft
68      curtop += element.offsetTop
69    }
70  }
71  return { top:curtop, left:curleft };
72}
73
74// find X position of an element
75Xinha.findPosX = function(obj)
76{
77  var curleft = 0;
78  if ( obj.offsetParent )
79  {
80    return Xinha.getElementTopLeft(obj).left;   
81  }
82  else if ( obj.x )
83  {
84    curleft += obj.x;
85  }
86  return curleft;
87};
88
89// find Y position of an element
90Xinha.findPosY = function(obj)
91{
92  var curtop = 0;
93  if ( obj.offsetParent )
94  {
95    return Xinha.getElementTopLeft(obj).top;   
96  }
97  else if ( obj.y )
98  {
99    curtop += obj.y;
100  }
101  return curtop;
102};
103
104Xinha.createLoadingMessages = function(xinha_editors)
105{
106  if ( Xinha.loadingMessages || !Xinha.isSupportedBrowser )
107  {
108    return;
109  }
110  Xinha.loadingMessages = [];
111 
112  for (var i=0;i<xinha_editors.length;i++)
113  {
114    if (!document.getElementById(xinha_editors[i]))
115    {
116          continue;
117    }
118    Xinha.loadingMessages.push(Xinha.createLoadingMessage(document.getElementById(xinha_editors[i])));
119  }
120}
121
122Xinha.createLoadingMessage = function(textarea,text)
123{
124  if ( document.getElementById("loading_" + textarea.id) || !Xinha.isSupportedBrowser)
125  {
126    return;
127  }
128  // Create and show the main loading message and the sub loading message for details of loading actions
129  // global element
130  var loading_message = document.createElement("div");
131  loading_message.id = "loading_" + textarea.id;
132  loading_message.className = "loading";
133 
134  loading_message.style.left = (Xinha.findPosX(textarea) + textarea.offsetWidth / 2) - 106 +  'px';
135  loading_message.style.top = (Xinha.findPosY(textarea) + textarea.offsetHeight / 2) - 50 +  'px';
136  // main static message
137  var loading_main = document.createElement("div");
138  loading_main.className = "loading_main";
139  loading_main.id = "loading_main_" + textarea.id;
140  loading_main.appendChild(document.createTextNode(Xinha._lc("Loading in progress. Please wait!")));
141  // sub dynamic message
142  var loading_sub = document.createElement("div");
143  loading_sub.className = "loading_sub";
144  loading_sub.id = "loading_sub_" + textarea.id;
145  text = text ? text : Xinha._lc("Loading Core");
146  loading_sub.appendChild(document.createTextNode(text));
147  loading_message.appendChild(loading_main);
148  loading_message.appendChild(loading_sub);
149  document.body.appendChild(loading_message);
150 
151  return loading_sub;
152}
153
154Xinha.loadStyle = function(style, id)
155{
156  var url = _editor_url || '';
157 
158  url += style;
159 
160  var head = document.getElementsByTagName("head")[0];
161  var link = document.createElement("link");
162  link.rel = "stylesheet";
163  link.href = url;
164  if (id) link.id = id;
165  head.appendChild(link);
166};
167Xinha._lc = function(string) {return string;}
168
169Xinha._addEvent = function(el, evname, func)
170{
171  if ( document.addEventListener )
172  {
173    el.addEventListener(evname, func, true);
174  }
175  else
176  {
177    el.attachEvent("on" + evname, func);
178  }
179}
180Xinha.addOnloadHandler = function (func)
181{
182  // Dean Edwards/Matthias Miller/John Resig
183  // http://dean.edwards.name/weblog/2006/06/again/
184 
185  var init = function ()
186  {
187    // quit if this function has already been called
188    if (arguments.callee.done) return;
189    // flag this function so we don't do the same thing twice
190    arguments.callee.done = true;
191    // kill the timer
192    if (Xinha.onloadTimer) clearInterval(Xinha.onloadTimer);
193   
194    func.call();
195  }
196  if (Xinha.is_ie)
197  {
198    document.write("<sc"+"ript id=__ie_onload defer src=javascript:void(0)><\/script>");
199    var script = document.getElementById("__ie_onload");
200    script.onreadystatechange = function()
201    {
202      if (this.readyState == "loaded")
203      {
204        init(); // call the onload handler
205      }
206    };
207  }
208  else if (/WebKit/i.test(navigator.userAgent))
209  {
210    Xinha.onloadTimer = setInterval(function()
211    {
212      if (/loaded|complete/.test(document.readyState))
213      {
214        init(); // call the onload handler
215      }
216    }, 10);
217  }
218  else /* for Mozilla/Opera9 */
219  {
220    document.addEventListener("DOMContentLoaded", init, false); 
221  }
222}
Note: See TracBrowser for help on using the browser.