1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
6 <title>Site browser</title>
7 <link rel="stylesheet" href="browser.css" type="text/css" media="screen" title="Browser style" charset="utf-8" />
8 <script type="text/javascript" language="javascript" charset="utf-8" src="epoz_script_detect.js"></script>
9 <script type="text/javascript" language="javascript" charset="utf-8" src="javascript_events_api.js"></script>
10 <script type="text/javascript" language="javascript" charset="utf-8" src="sarissa.js"></script>
11 <script type="text/javascript" language="javascript" charset="utf-8">
13 /* keyboard keycodes */
14 var keyLeft = 37, keyUp = 38, keyRight = 39, keyDown = 40, keyEnter = 13;
16 /* globals variables */
17 var finder, finderContent, cellWidth, currentColumn;
18 var scrollbarPlaceholder_offset = 0;
19 var scrollXStep = 25, scrollTimeStep = 10;
20 var ressourceType = GetUrlParam('Type');
21 var sConnUrl = GetUrlParam( 'Connector' ) ;
23 if ( sConnUrl.substr(0,1) != '/' && sConnUrl.indexOf( '://' ) < 0 )
24 sConnUrl = window.location.href.replace( /browser.html.*$/, '' ) + sConnUrl ;
25 var getWindowWidth = (window.innerWidth != undefined) ? function(){return window.innerWidth;} : function(){return document.body.parentElement.clientWidth;};
26 var getWindowHeight = (window.innerHeight != undefined) ? function(){return window.innerHeight;} : function(){return document.body.parentElement.clientHeight;};
29 function _initBrowser(){
30 finder = document.getElementById('finder');
31 finder.colCpt = 3; // column counter;
32 finderContent = document.getElementById('finderContent');
33 cellWidth = Math.floor(getWindowWidth() / 3);
35 addListener(window, 'resize', resizeBrowser);
36 addListener(finder, 'click', onClickHandler);
37 addListener(finder, 'dblclick', onDblClickHandler);
38 var path = GetUrlParam('path');
39 path = (path) ? path : '/';
41 for (var i = 0 ; i<path.length ; i++){
42 if (path.charAt(i) == '/')
47 populateBrowser('ls', path);
50 document.body.style.overflowX = 'scroll';
52 scrollbarPlaceholder_offset = (window.scrollMaxY) ? window.scrollMaxY : document.body.offsetHeight - document.body.clientHeight;
54 finder.style.width = cellWidth * 3 + "px";
56 addListener(window, 'load', _initBrowser);
57 addListener(document, 'keydown', onKeydownHandler);
59 function onClickHandler(evt) {
60 var li = getTargetedObject(evt);
63 if (li.width != 16) // this img is a preview thumbnail.
67 // click on the current selected row
68 if (currentColumn == li.parentNode && currentColumn.currentRow == li)
71 currentColumn = li.parentNode;
73 if (currentColumn.currentRow) {
74 currentColumn.currentRow.className = currentColumn.currentRow.className.replace('-selected', '');
76 var command = li.className == 'folderish' ? 'ls' : 'info';
77 li.className += '-selected';
78 currentColumn.currentRow = li;
80 populateBrowser(command, li.path);
84 function onDblClickHandler(evt) {
85 var li = getTargetedObject(evt);
87 if(li.tagName != 'LI') {
88 if (li.tagName == 'IMG' && li.parentNode.tagName == 'LI')
93 console.log('dblclick !', li, window.parent);
94 switch(window.parent.name) {
95 case 'PlinnImageDialog' :
96 if (li.className == 'contentish-selected') {
97 window.parent.updateOrInsertImage(li.link);
101 case 'StandaloneBrowser' :
102 if (li.className == 'contentish-selected') {
103 window.opener.SetUrl(li.link);
108 var funcNum = GetUrlParam('CKEditorFuncNum');
109 window.opener.CKEDITOR.tools.callFunction(funcNum, li.link);
115 function onKeydownHandler(evt) {
116 evt = (evt) ? evt : window.event;
117 if(!currentColumn) currentColumn = finder.getElementsByTagName('ul')[0];
118 if(!currentColumn.currentRow) {
119 raiseMouseEvent(currentColumn.firstChild,'click');
123 var ob, evtType='click';
124 switch (evt.keyCode) {
126 ob = currentColumn.currentRow.previousSibling;
129 ob = currentColumn.currentRow.nextSibling;
132 var currentLevel = parseInt(currentColumn.parentNode.id.slice(6));
134 ob = document.getElementById('level-' + (currentLevel - 1)).firstChild;
135 if (ob.nodeType == 3) // text node
141 if(currentColumn.currentRow.className != 'folderish-selected')
143 ob = document.getElementById('level-' + (parseInt(currentColumn.parentNode.id.slice(6)) + 1)).firstChild.firstChild;
146 ob = currentColumn.currentRow;
151 raiseMouseEvent(ob, evtType);
154 function resizeBrowser() {
155 var columns = finder.getElementsByTagName('ul');
157 for (var i=0 ; i<columns.length ; i++) {
159 col.style.height = getWindowHeight() - scrollbarPlaceholder_offset + "px";;
162 //document.body.style.width = getWindowWidth();
165 /* from fck default browser */
166 function GetUrlParam( paramName )
168 var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
169 var oMatch = oRegex.exec( window.location.search ) ;
171 if ( oMatch && oMatch.length > 1 )
172 return unescape(oMatch[1]) ;
179 function populateBrowser(command, path) {
180 var prevColNum = finder.colCpt;
182 for (var i = 0 ; i<path.length ; i++){
183 if (path.charAt(i) == '/')
186 level = level - baseDepth;
188 // prepare / cleanup columns
189 var cellLevel, startCleanup = 3;
191 case 0 : // initialization case
193 cellLevel = document.getElementById('level-0');
194 cellLevel.style.width = cellWidth + "px";
195 // remove default content
196 cellLevel.removeChild(cellLevel.firstChild);
198 // cosmetic: display the second col with a scrollbar
199 var c1 = document.createElement('td');
201 c1.style.width = cellWidth + "px";
202 c1.appendChild(document.createElement('ul'));
203 finderContent.appendChild(c1);
205 // cosmetic: display the third col without scrollbar
206 var c2 = document.createElement('td');
208 c2.style.width = cellWidth + "px";
209 finderContent.appendChild(c2);
213 cellLevel = document.getElementById("level-1");
214 cellLevel.removeChild(cellLevel.firstChild);
215 var c2 = document.getElementById("level-2");
216 var ul = c2.firstChild;
222 cellLevel = document.getElementById("level-2");
223 var ul = cellLevel.firstChild;
225 cellLevel.removeChild(ul);
230 cellLevel = document.getElementById("level-" + level);
232 cellLevel = document.createElement('td');
233 cellLevel.id = "level-" + level;
234 cellLevel.style.width = cellWidth + "px";
235 finderContent.appendChild(cellLevel);
240 cellLevel.removeChild(cellLevel.firstChild);
241 startCleanup = level + 1
245 var nextColumn = document.getElementById("level-" + startCleanup);
247 finderContent.removeChild(nextColumn);
249 nextColumn = document.getElementById("level-" + ++startCleanup);
254 var req = new XMLHttpRequest();
255 req.open("POST", sConnUrl, false); // synchrone
256 req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
257 req.send("command=" + command + "&path="+escape(path) + "&Type=" + ressourceType);
258 var respDom = req.responseXML.documentElement;
261 var list = document.createElement('UL');
262 list.style.height= getWindowHeight() - scrollbarPlaceholder_offset + "px";
263 cellLevel.appendChild(list);
265 switch (respDom.tagName) {
268 var rows = respDom.getElementsByTagName('row');
269 var row, listItem, icon;
271 for (var i = 0 ; i<rows.length ; i++){
273 listItem = document.createElement('li');
274 if (row.getAttribute('folderish') != "0")
275 listItem.className = 'folderish';
277 listItem.className = 'contentish';
279 icon = document.createElement('img');
281 src = row.getAttribute('icon');
287 listItem.path = row.getAttribute('path');
288 listItem.link = row.getAttribute('link');
289 listItem.appendChild(icon);
290 listItem.appendChild(document.createTextNode(row.firstChild.nodeValue));
291 list.appendChild(listItem);
295 var li = document.createElement('li');
296 list.appendChild(li);
297 li.innerHTML = respDom.firstChild.nodeValue;
299 // add create link button
300 li = document.createElement('li');
301 li.style.textAlign = 'center';
302 var createLinkBtn = document.createElement('button');
303 var text = (ressourceType == 'Image') ? 'Insert' : 'Create link';
304 createLinkBtn.appendChild(document.createTextNode(text));
306 createLinkBtn.onclick = function(){
307 var url = respDom.lastChild.firstChild.nodeValue;
308 switch(window.parent.name) {
309 case 'PlinnImageDialog' :
310 window.parent.updateOrInsertImage(url);
312 case 'StandaloneBrowser' :
313 window.opener.SetUrl(url);
316 var funcNum = GetUrlParam('CKEditorFuncNum');
317 window.opener.CKEDITOR.tools.callFunction(funcNum, url);
323 list.appendChild(li);
324 li.appendChild(createLinkBtn);
328 if (prevColNum != finder.colCpt) {
329 var finderWidth = finder.colCpt * cellWidth;
330 finder.style.width = finderWidth + "px";
331 if (finder.colCpt - prevColNum > 0) {
332 var start = (window.scrollX) ? window.scrollX : document.body.scrollLeft;
333 var stop = finder.colCpt * cellWidth - getWindowWidth();
334 smoothScroll(start, stop);
339 function smoothScroll(start, stop) {
340 start += scrollXStep;
341 window.scroll(start, 0);
343 setTimeout('smoothScroll(' + start + ', ' + stop + ')', scrollTimeStep);
352 <table id="finder" cellspacing="0">
353 <tr id="finderContent">
354 <td id="level-0"><ul>
355 <li class="folderish">Folder</li>
356 <li class="contentish">Content</li>