Author: vmassol
Date: 2008-02-13 22:14:42 +0100 (Wed, 13 Feb 2008)
New Revision: 7707

Added:
   xwiki-platform/skins/trunk/toucan/src/main/resources/toucan/ajax/
   
xwiki-platform/skins/trunk/toucan/src/main/resources/toucan/ajax/panelWizard.js
Log:
XSTOUCAN-1: Create Toucan skin from xwiki.org

* Committed panelWizard js that I had forgotten to commit.

Couldn't test it since XE is currently hosed due to the template move

Added: 
xwiki-platform/skins/trunk/toucan/src/main/resources/toucan/ajax/panelWizard.js
===================================================================
--- 
xwiki-platform/skins/trunk/toucan/src/main/resources/toucan/ajax/panelWizard.js 
                            (rev 0)
+++ 
xwiki-platform/skins/trunk/toucan/src/main/resources/toucan/ajax/panelWizard.js 
    2008-02-13 21:14:42 UTC (rev 7707)
@@ -0,0 +1,565 @@
+function computeBounds(){
+  leftPanelsLeft   = getX(leftPanels);
+  leftPanelsRight  = leftPanelsLeft  + leftPanels.offsetWidth;
+  rightPanelsLeft  = getX(rightPanels);
+  rightPanelsRight = rightPanelsLeft + rightPanels.offsetWidth;
+  allpanelsLeft    = getX(allPanels);
+  allpanelsTop     = getY(allPanels);
+}
+
+function debugwrite(sometext){
+  
document.getElementById("headerglobal").appendChild(document.createTextNode(sometext));
+}
+
+function isPanel(el){
+  if (el.className && ((el.className == "panel") || 
(el.className.indexOf("panel ") >=0) || (el.className.indexOf(" panel") >=0))){
+     return true;
+  }
+  return false;
+}
+
+function getX(el) {
+  if (el.offsetParent) {
+    if(window.ActiveXObject) {
+      return el.offsetLeft + getX(el.offsetParent) + el.clientLeft;
+    }
+    else {
+      return el.offsetLeft + getX(el.offsetParent) + (el.scrollWidth - 
el.clientWidth); 
+    }
+  }
+  else {
+    if (el.x) {
+      return el.x;
+    }
+    else
+      return 0;
+  }
+}
+
+function getY(el) {
+  if (el.offsetParent) {
+    if(window.ActiveXObject) {
+      return el.offsetTop + getY(el.offsetParent) + el.clientTop;
+    }
+    else {
+      return el.offsetTop + getY(el.offsetParent) + (el.scrollHeight - 
el.clientHeight); 
+    }
+  }
+  else {
+    if (el.y)
+      return el.y;
+    else
+      return 0;
+  }
+}
+
+function getBlocList(el) {
+  var list = [];
+  var nb = el.childNodes.length;
+  for (var i=0; i<nb; i++) {
+    var el2 = el.childNodes[i];
+    if(isPanel(el2)) {
+      if (!el2.isDragging)  {
+        list.push(el2);
+      }
+    }
+  }
+  return list;
+}
+
+function getDragBoxPos(list, y) {
+  var nb = list.length;
+  if (nb == 0) return 0;
+  for (var i=0; i<nb; i++) {
+    if (list[i]==dragel)
+      return i;
+  }
+  return -1;
+}
+
+function getAllPanels(el){
+  var list=[];
+  var divs = el.getElementsByTagName("div");
+  var j = 0;
+  for(var i = 0; i < divs.length; i++) {
+    if (isPanel(divs[i])){
+      list[j] = divs[i];
+      j++;
+    }
+  }
+  return list;
+}
+
+function getClosestDropTarget(x, y, w, h) {
+  if (window.showLeftColumn == 1 && ( x <= leftPanelsRight    && (x+w) >= 
leftPanelsLeft))  return leftPanels;
+  if (window.showRightColumn == 1 && ((x+w) >= rightPanelsLeft &&  x <= 
rightPanelsRight ))   return rightPanels;
+  return allPanels;
+}
+
+function onDragStart(el,x,y) {
+  if (el.isDragging) return;
+  hideddrivetip();
+  window.isDraggingPanel = true;
+  if (enabletip==true) hideddrivetip();
+  realParent = el.parentNode;
+  parentNode = el.parentNode;
+  var isAdded = (realParent != leftPanels && realParent != rightPanels);
+  var x = getX(el);
+  var y = getY(el);
+  if(window.ActiveXObject) {
+    dragel.style.height = (el.offsetHeight ? (el.offsetHeight) : 
el.displayHeight) + "px";
+  }
+  else {
+    dragel.style.height = (el.offsetHeight ? (el.offsetHeight-2) : 
el.displayHeight) + "px";
+  }
+  dragel.style.display = "block";
+  // Make the current absolute
+  el.style.left = x + "px";
+  el.style.top =  y + "px";
+  el.style.zIndex = "10";
+
+  if (isAdded){
+    parentNode = allPanels;
+    el.placeholder = document.createElement("div");
+    el.placeholder.className="placeholder";
+    if(window.ActiveXObject) {
+      el.placeholder.style.height = (el.offsetHeight ? (el.offsetHeight) : 
el.displayHeight) + "px";
+    }
+    else {
+      el.placeholder.style.height = (el.offsetHeight ? (el.offsetHeight-2) : 
el.displayHeight) + "px";
+    }
+    realParent.replaceChild(el.placeholder, el);
+    el.placeholder.style.display = "block";
+    addClass(allPanels, "dropTarget");
+  }
+  else {
+    realParent.replaceChild(dragel, el);
+  }
+  // Make the current absolute
+  el.style.position = "absolute";
+  document.body.appendChild(el);
+  el.isDragging = true;
+  prevcolumn = parentNode;
+}
+
+function onDrag(el,x,y) {
+  if (enabletip==true) hideddrivetip();
+  parentNode = getClosestDropTarget(x,y, el.offsetWidth, el.offsetHeight);
+  if(parentNode != prevcolumn){
+    if(prevcolumn != allPanels) {
+      prevcolumn.removeChild(dragel);
+    }
+    if (parentNode != allPanels){
+      parentNode.appendChild(dragel);
+      rmClass(allPanels, "dropTarget");
+    }
+    else{
+      addClass(allPanels, "dropTarget");
+    }
+  }
+  prevcolumn = parentNode;
+  var list = getBlocList(parentNode);
+  var pos = getDragBoxPos(list, y);
+  if(pos == -1) {
+    return;
+  }
+  if (list.length==0){
+      if (parentNode != allPanels){
+        parentNode.appendChild( dragel); 
+      }
+  }
+  else if (pos!=0 && y<=getY(list[pos-1])) {
+    parentNode.insertBefore(dragel, list[pos-1]);
+  }
+  else if (pos!=(list.length-1) && y>=getY(list[pos+1])) {
+    if (list[pos+2]) {
+      parentNode.insertBefore(dragel, list[pos+2]);
+    } else {
+      if (parentNode != allPanels){
+        parentNode.appendChild( dragel); 
+      }
+      else {
+        dragel.parentNode.removeChild(dragel);
+      }
+    }
+  }
+}
+
+function onDragEnd(el,x,y) {
+  el.isDragging = false;
+  window.isDraggingPanel = false;
+  el.style.position = "static";
+  if (parentNode == allPanels){
+    el.placeholder.parentNode.replaceChild(el, el.placeholder);
+    el.placeholder = undefined;
+    rmClass(allPanels, "dropTarget");
+  }
+  else{
+    parentNode.replaceChild(el, dragel);
+  }
+  dragel.style.display = "none";
+}
+
+//------------------
+// threadsafe asynchronous XMLHTTPRequest code
+function executeCommand(url, callback) {
+
+
+    // we use a javascript feature here called "inner functions"
+    // using these means the local variables retain their values after the 
outer function
+    // has returned. this is useful for thread safety, so
+    // reassigning the onreadystatechange function doesn't stomp over earlier 
requests.
+  function ajaxBindCallback() {
+    if (ajaxRequest.readyState == 4) {
+      if (ajaxRequest.status == 200) {
+        if (ajaxCallback) {
+          ajaxCallback(ajaxRequest.responseText);
+        } else {
+          alert('no callback defined');
+        }
+      } else {
+        alert("There was a problem retrieving the xml data:\n" + 
ajaxRequest.status + ":\t" + ajaxRequest.statusText + "\n" + 
ajaxRequest.responseText);
+      }
+    }
+  }
+  // use a local variable to hold our request and callback until the inner 
function is called...
+  var ajaxRequest = null;
+  var ajaxCallback = callback;
+
+  // bind our callback then hit the server...
+  if (window.XMLHttpRequest) {
+    // moz et al
+    ajaxRequest = new XMLHttpRequest();
+    ajaxRequest.onreadystatechange = ajaxBindCallback;
+    ajaxRequest.open("GET", url, true);
+    ajaxRequest.send(null);
+  } else if (window.ActiveXObject) {
+    // ie
+    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
+    if (ajaxRequest) {
+      ajaxRequest.onreadystatechange = ajaxBindCallback;
+      ajaxRequest.open("GET", url, true);
+      ajaxRequest.send();
+    }
+    else{
+      alert("your browser does not support xmlhttprequest" )
+    }
+  }
+  else{
+    alert("your browser does not support xmlhttprequest" )
+  }
+}
+
+function start1() {
+  var i;
+  var j;
+  var pos;
+  //attaching events to all panels
+  var divs = document.getElementsByTagName("div");
+  for(i = 0; i < divs.length; i++) {
+    el = divs[i];
+    var id = el.id;
+    if(isPanel(el)) {
+      attachDragHandler(el);
+    }
+  }
+  //replacing used panels in the list with placeholders and attaching 
placeholders
+  window.panelsInList  = getAllPanels(allPanels);
+  window.panelsOnLeft  = getBlocList(leftPanels);
+  window.panelsOnRight = getBlocList(rightPanels);
+  //
+  var el;
+  for (i = 0; i < panelsInList.length; i++){
+    pos = window.allPanelsPlace[i]['left'];
+    if (pos != -1){
+      el = panelsOnLeft[pos];
+      el.fullname=window.allPanelsPlace[i].fullname;
+      el.placeholder = document.createElement("div");
+      el.placeholder.className="placeholder";
+      if(window.ActiveXObject) {
+        el.displayHeight = (el.offsetHeight ? (el.offsetHeight) : 0);
+      }
+      else {
+        el.displayHeight = (el.offsetHeight ? (el.offsetHeight-2) : 0);
+      }
+      el.placeholder.style.height = (el.displayHeight) +"px";
+      el.placeholder.style.display = "block";
+      panelsInList[i].parentNode.replaceChild(el.placeholder, panelsInList[i]);
+    }
+    pos = window.allPanelsPlace[i]['right'];
+    if (pos != -1){
+      el = panelsOnRight[pos];
+      el.fullname=window.allPanelsPlace[i].fullname;
+      el.placeholder = document.createElement("div");
+      el.placeholder.className="placeholder";
+      if(window.ActiveXObject) {
+        el.displayHeight = (el.offsetHeight ? (el.offsetHeight) : 0);
+      }
+      else {
+        el.displayHeight = (el.offsetHeight ? (el.offsetHeight-2) : 0);
+      }
+      el.placeholder.style.height = (el.displayHeight) +"px";
+      el.placeholder.style.display = "block";
+      if(panelsInList[i].parentNode) {
+        panelsInList[i].parentNode.replaceChild(el.placeholder, 
panelsInList[i]);
+      }
+    }
+    panelsInList[i].fullname=window.allPanelsPlace[i].fullname;
+  }
+  //this is for the "revert" button:
+  leftPanels.savedPanelList = getBlocList(leftPanels);
+  rightPanels.savedPanelList = getBlocList(rightPanels);
+  leftPanels.isVisible = window.showLeftColumn;
+  rightPanels.isVisible = window.showRightColumn;
+  if(!leftPanels.isVisible){
+    leftPanels.panels = getBlocList(leftPanels);
+  }
+  if(!rightPanels.isVisible){
+    rightPanels.panels = getBlocList(rightPanels);
+  }
+  //
+  var layoutMaquettesTD = 
document.getElementById("PageLayoutSection").getElementsByTagName("td");
+  layoutMaquettes = new Object();
+  for (i = 0; i < layoutMaquettesTD.length; i++){
+    for (j = 0; j < layoutMaquettesTD[i].childNodes.length; ++j){
+      if (layoutMaquettesTD[i].childNodes[j].tagName == "DIV"){
+        layoutMaquettes[i] = layoutMaquettesTD[i].childNodes[j];
+        break;
+      }
+    }
+  }
+  new Rico.Accordion('panellistaccordion', {panelHeight:512, backgroundColor: 
"#676D73", textColor: "#FFF", collapsedBg: "#384554", expandedBg: "#384554", 
hoverBg: "#384554", expandedTextColor: "#FFF", collapsedTextColor: "#EEE", 
hoverTextColor: "#C0D4E7"} );
+  window.activeWizardPage = document.getElementById("PanelListSection");
+  window.activeWizardTab  = document.getElementById("firstwtab");
+  document.getElementById("PageLayoutSection").style.display = "none";
+}
+
+function attachDragHandler(el){
+  el.ondblclick = function(ev) {};
+  Drag.init(el,el);
+  el.onDragStart = function (x,y) { onDragStart(this,x,y);};
+  el.onDrag = function (x,y) { 
+    onDrag(this,x,y);
+  };
+  el.onDragEnd = function (x,y) { onDragEnd(this,x,y);};
+  var titlebar = el.getElementsByTagName("h5").item(0);
+  if(titlebar){
+    titlebar.onclick=function(ev) {};
+    titlebar.onClick=function(ev) {};
+  }
+}
+
+function getBlocNameList(el) {
+  var list = "";
+  var nb = el.childNodes.length;
+  for (var i=0; i<nb; i++) {
+    var el2 = el.childNodes[i];
+    if(isPanel(el2)) {
+      if (!el2.isDragging)  {
+        if (list!="")
+          list+=",";
+          list += el2.fullname;
+      }
+    }
+  }
+  return list;
+}
+
+function save() {
+  url = window.ajaxurl;
+  var leftPanelsList = getBlocNameList(leftPanels);
+  url += "&leftPanels=" + leftPanelsList;
+  url += "&showLeftPanels=" + window.showLeftColumn;
+  var rightPanelsList = getBlocNameList(rightPanels);
+  url += "&rightPanels=" + rightPanelsList;
+  url += "&showRightPanels=" + window.showRightColumn;
+  executeCommand(url, saveResult);
+}
+
+function saveResult(html) {
+  if(html=="SUCCESS"){
+    alert(window.panelsavesuccess)
+    //this is for the "revert" button:
+    leftPanels.savedPanelList = getBlocList(leftPanels);
+    rightPanels.savedPanelList = getBlocList(rightPanels);
+    leftPanels.isVisible = window.showLeftColumn;
+    rightPanels.isVisible = window.showRightColumn;
+  }
+  else {
+    alert(window.panelsaveerror)
+    alert(html)
+  }
+}
+
+function releasePanels(column){
+  column.panels = getBlocList(column);
+  for (var i = 0; i < column.panels.length; ++i){
+    releasePanel(column.panels[i]);
+  }
+}
+
+function releasePanel(el){
+  el.parentNode.removeChild(el);
+  el.placeholder.parentNode.replaceChild(el, el.placeholder);
+  el.placeholder = undefined;
+}
+
+function restorePanels(column){
+  for (var i = 0; i < column.panels.length; ++i){
+    if (!column.panels[i].placeholder)
+      restorePanel(column.panels[i], column);
+  }
+  column.panels = undefined;
+}
+
+function revertPanels(column){
+  for (var i = 0; i < column.savedPanelList.length; ++i){
+      restorePanel(column.savedPanelList[i], column);
+  }
+}
+
+function restorePanel(el, column){
+  el.placeholder = document.createElement("div");
+  el.placeholder.className="placeholder";
+  if(window.ActiveXObject) {
+    el.placeholder.style.height = (el.offsetHeight ? (el.offsetHeight) : 0);
+  }
+  else {
+    el.placeholder.style.height = (el.offsetHeight ? (el.offsetHeight-2) : 0);
+  }
+  el.placeholder.style.display = "block";
+  el.parentNode.replaceChild(el.placeholder, el);
+  column.appendChild(el);
+}
+
+function changePreviewLayout(element, code){
+  document.getElementById("selectedoption").id = "";
+  element.id="selectedoption";
+  switch(code){
+    case 0:
+      //hide left; hide right;
+      if (window.showLeftColumn == 1){
+        window.showLeftColumn = 0;
+        leftPanels.style.display = "none";
+        releasePanels(leftPanels);
+      }
+      if (window.showRightColumn == 1){
+        window.showRightColumn = 0;
+        rightPanels.style.display = "none";
+        releasePanels(rightPanels);
+      }
+      // mainContainer.className = "contenthidelefthideright";
+      mainContainer.className = "hidelefthideright";
+      break;
+    case 1:
+      //show left; hide right;
+      if (window.showLeftColumn == 0){
+        window.showLeftColumn = 1;
+        leftPanels.style.display = "block";
+        restorePanels(leftPanels);
+      }
+      if (window.showRightColumn == 1){
+        window.showRightColumn = 0;
+        rightPanels.style.display = "none";
+        releasePanels(rightPanels);
+      }
+      // mainContainer.className = "contenthideright";
+      mainContainer.className = "hideright";
+      break;
+    case 2:
+      //hide left; show right;
+      if (window.showLeftColumn == 1){
+        window.showLeftColumn = 0;
+        leftPanels.style.display = "none";
+        releasePanels(leftPanels);
+      }
+      if (window.showRightColumn == 0){
+        window.showRightColumn = 1;
+        rightPanels.style.display = "block";
+        restorePanels(rightPanels);
+      }
+      // mainContainer.className = "contenthideleft";
+      mainContainer.className = "hideleft";
+      break;
+    case 3:
+      //show left; show right;
+      if (window.showLeftColumn == 0){
+        window.showLeftColumn = 1;
+        leftPanels.style.display = "block";
+        restorePanels(leftPanels);
+      }
+      if (window.showRightColumn == 0){
+        window.showRightColumn = 1;
+        rightPanels.style.display = "block";
+        restorePanels(rightPanels);
+      }
+      mainContainer.className = "content";
+      break;
+    default:
+      // ignore
+      break;
+  }
+  computeBounds();
+}
+
+function revert(){
+  releasePanels(leftPanels);
+  releasePanels(rightPanels);
+  revertPanels(leftPanels);
+  revertPanels(rightPanels);
+  var layoutCode = 0;
+  if (leftPanels.isVisible) layoutCode  += 1;
+  if (rightPanels.isVisible) layoutCode += 2;
+  changePreviewLayout(layoutMaquettes[layoutCode], layoutCode);
+}
+
+//----------------------------------------------------------------
+
+function switchToWizardPage(el, toShowID){
+  window.activeWizardPage.style.display="none";
+  window.activeWizardTab.className="";
+  window.activeWizardTab = el;
+  window.activeWizardTab.className="active";
+  window.activeWizardPage = document.getElementById(toShowID)
+  window.activeWizardPage.style.display = "block";
+  el.blur();
+}
+
+//----------------------------------------------------------------
+
+function panelEditorInit(){
+  tipobj = document.all? document.all["dhtmltooltip"] : 
document.getElementById? document.getElementById("dhtmltooltip") : ""
+
+  parentNode = null;
+  realParent = null;
+  dragel = document.createElement("div");
+  dragel.id = "dragbox";
+  dragel.className = "panel";
+  dragWidth = 0;
+  nb = 0;
+
+  layoutMaquetes = null;
+  window.leftPanels    = document.getElementById("leftPanels");
+  window.rightPanels   = document.getElementById("rightPanels");
+  allPanels     = document.getElementById("allviewpanels");
+mainContent   = document.getElementById("contentcolumn");
+ // mainContainer = document.getElementById("contentcontainer");
+mainContainer = document.getElementById("body");
+  leftPanelsLeft   = getX(leftPanels);
+  leftPanelsRight  = leftPanelsLeft  + leftPanels.offsetWidth;
+  rightPanelsLeft  = getX(rightPanels);
+  rightPanelsRight = rightPanelsLeft + rightPanels.offsetWidth;
+  allpanelsLeft    = getX(allPanels);
+  allpanelsTop     = getY(allPanels);
+
+  prevcolumn = allPanels;
+
+  start1();
+}
+
+if (window.addEventListener) {
+  window.addEventListener("load",panelEditorInit,false);
+}
+else if (window.attachEvent) {
+  window.attachEvent("onload",panelEditorInit);
+}
\ No newline at end of file

_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications

Reply via email to