⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logframe.js

📁 Hippo CMS是一个以信息为中心的开源内容管理系统。Hippo CMS目标是供中,大型企业来管理其发布在互连网
💻 JS
字号:
/*
* Copyright 2001-2007 Hippo (www.hippo.nl)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
 * Collection of functions that provide an implementation of a dockable/undockable frame
 * which display's multiple loggers + some tool functions for every logger.
 *
 * @author	a.bogaart@hippo.nl
 */


var loggers 	  =	new Array(); 	//hashmap containing all loggers
var loggersIds    = new Array();    //array with ids
var loggersOrder  = new Array(); 	//flag's for order of loggers

var currentLogger = null; 			//reference to logger element with focus
var currentTab 	  = null;			//reference to logger-tab element of currentLogger
var openedWindow  =	null;			//reference to the opened window when logger is undocked

var showLogger    =	false;			//flag indicating if logger frame is maximized or minimized
var adapt 		  =	false;			//flag indicating if new messages must be send to undocked window 

/**
 * @final id attribute's value of logger's parent element, for DOM lookups
 */
var LOGGER_WINDOWS = 'logger-windows';
var CONTENT_CHANGED = ' *';
 
 
/**
 * Catch onload event for logger frame and load all loggers and tabs
 */ 
window.onload = function() {
  var logwindows = document.getElementById(LOGGER_WINDOWS).getElementsByTagName("div");
  for(var i=0; i<logwindows.length; i++) 
  {
  	var logId = logwindows[i].getAttribute("id")
    if(i==0) selectLogger(logId);   //set focus to the first logger
    
    loggersIds[i] = logId;
    loggers[logId] = logwindows[i]; //create 'hashmap' of all logger elements
    loggersOrder[logId] = false;    // and init order  
  }
  
  if(window.opener != null){ //when undocked load all logger data from cms logger frame
    var parentlogwindows = window.opener.document.getElementById(LOGGER_WINDOWS).getElementsByTagName("div");
    for(var i=0; i<logwindows.length; i++){
      logwindows[i].innerHTML = parentlogwindows[i].innerHTML;
    }
  }
}  

/**
 * catch onunload event for logger frame
 */
window.onunload = function() {
  if(window.opener != null) //if logger is undocked but CMS still running, dock again
    toggleUndock();
  else if(openedWindow != null) //else if CMS is closing and logger is still window, close log window
    openedWindow.close();
}

/**
 * Dock or undock logger frame
 */
function toggleUndock() {
  if(window.opener != null){ //when undocked
    window.opener.adapt = false; //stop parent adapting
    window.opener.showLogger = false; //reset view state
    window.opener.toggleDebug(); //and toggle view state
    
    //copy log data back to parent
    var logwindows = document.getElementById(LOGGER_WINDOWS).getElementsByTagName("div");
    var parentlogwindows = window.opener.document.getElementById(LOGGER_WINDOWS).getElementsByTagName("div");
    for(var i=0; i<logwindows.length; i++){
      parentlogwindows[i].innerHTML = logwindows[i].innerHTML;
    }
    
    window.close();
  } else {
    top.frames["topframe"].setFrameHeight("bottomframe", 1); //hide logger frame
    //open seperate logwindow
    openedWindow = openWindow('/workbench/bottom.html?opener=true', 'logWindow',700, 400 ,0 ,0 ,0 ,0 ,1 ,1 ,10 ,10);
  	adapt = true; //and start adapting
  }
}  

/**
 * Max or minimize logger frame
 */
function toggleDebug() {
  showLogger = !showLogger;

  if(showLogger) {    	
    top.frames["topframe"].setFrameHeight("bottomframe", 350);
    document.getElementById("showdebugtext").innerHTML = "Hide";
  }
  else {
    var myHeight = (navigator.userAgent.toLowerCase().indexOf("msie")>0) ? 20 : 34;
    top.frames["topframe"].setFrameHeight("bottomframe", myHeight);
    document.getElementById("showdebugtext").innerHTML = "Show";
  }
}  

/**
 * Add a logmessage to the specified logger
 * @param logger  id of the logger connected with the message
 * @param logMsg  LogMessage containing message info
 */
function addMessage(logger, logMsg) {

  if(logger && loggers[logger]){

    if(adapt && openedWindow.top.addMessage) //when adapting pass message on to undocked window
      openedWindow.top.addMessage(logger, logMsg);
    else
    { 
      //create message element
      var node = document.createElement("div");
      node.setAttribute("class", logMsg.style); //add style
      if(logMsg.value.length > 100) { //if msg is longer than 100 characters, contain in expandable widget
        var d = new Date();
        var unique = d.getTime() + '' + Math.floor(1000 * Math.random());
        var tmp = document.createElement("div");
        tmp.setAttribute("id", unique);
        tmp.appendChild(document.createTextNode(logMsg.value));
        tmp.className = 'hidden';
        var myLink = document.createElement("a");
        myLink.setAttribute("href", "javascript:toggleLoggerContent(" + unique + ")");
        myLink.appendChild(document.createTextNode("+"))
        node.appendChild(document.createTextNode(logMsg.prefix));
        node.appendChild(myLink);
        node.appendChild(tmp);
      } else { //else just print
        var str = logMsg.prefix + logMsg.value;
        node.appendChild(document.createTextNode(str));
      }
      if(loggersOrder[logger]) { //when sorted asc add to top
        loggers[logger].insertBefore(node, loggers[logger].firstChild);
      } else { //else to bottom
        loggers[logger].appendChild(node);
      }

      if(currentLogger != loggers[logger]) //when logger isn't focussed
        setTabChanged(loggers[logger].id + 'tab'); //tell user log message is added
      
    }
  }
}

/**
 * Notify user that content of tab has changed
 * @param strId  id attribute value of tab element 
 */
function setTabChanged(strId){
  var myTab = document.getElementById(strId);
  var myLinkNode = myTab.getElementsByTagName("a");
  
  if(myLinkNode[0].childNodes[0].nodeValue.indexOf(CONTENT_CHANGED)<0)
    myLinkNode[0].childNodes[0].nodeValue += CONTENT_CHANGED;
}

/**
 * Clear notification asterik from tab
 * @param strId  id attribute value of tab element 
 */
function clearTabChanged(strId){
  try{
    var myTab = document.getElementById(strId);
    var myLinkNode = myTab.getElementsByTagName("a");
    var myLinkValue = myLinkNode[0].childNodes[0].nodeValue;
  
    if(myLinkValue.indexOf(CONTENT_CHANGED)>0)
      myLinkNode[0].childNodes[0].nodeValue = myLinkValue.substring(0,myLinkValue.length-CONTENT_CHANGED.length);
  }
  catch(e){
  	//console.log(e)
  }
}

/**
 * convert line breaks into <br/>
 * @param message
 * @return span element containing new message
 */
function convert(message) {
  var node = document.createElement("span");
  var i = 0;
  while (i < message.length) {
    var endPos = message.indexOf("\n",i);
    if (endPos < 0) {
      endPos = message.length;
    }
    node.appendChild(document.createTextNode(message.substring(i,endPos)));
    i = endPos + 1;
    if (i < message.length) {
      node.appendChild(document.createElement("br"));
    }
  }
  return node;          
}

/**
 * Reverse current logger's list of messages
 */
function reverseList() {
  if(currentLogger){
    loggersOrder[currentLogger.getAttribute("id")] = !loggersOrder[currentLogger.getAttribute("id")];
    var tmpList = currentLogger.childNodes;   	
  	  for(i=tmpList.length-1; i >= 0; i--) {
	    currentLogger.appendChild(tmpList.item(i));
    }
  }  
}
/**
 * Copy current logger html contents into clipboard
 */
function copyList(){
  if(currentLogger)
    window.clipboardData.setData("text", currentLogger.innerHTML);
}

/**
 * clear current logger's list of messages
 */
function clearList() {
  if(currentLogger)
    currentLogger.innerHTML = '';
}

/**
 * clear all logger's list of messages
 */
function clearListAll() {
  for(var i=0; i<loggersIds.length; i++) {
  	document.getElementById(loggersIds[i]).innerHTML = '';
  	clearTabChanged(loggersIds[i] + 'tab');
  }
}

/**
 * Show or hide specified logger content
 * @param strId  id attribute value of logger content element
 * TODO: refactor function name
 */
function toggleLoggerContent(strId) {
  var el = document.getElementById(strId);
  if(el) {
    if(el.className == 'hidden')
      el.className = 'unhidden';
    else  
      el.className = 'hidden';
  }
}

/**
 * Change focus to specified logger
 * @param strId  id of logger
 */
function selectLogger(strId){
  clearTabChanged(strId+'tab');
  if(currentTab)
    currentTab.className = '';  //remove focus style
  if(currentLogger)
    currentLogger.className = 'logwindow hidden';
  
  currentLogger = document.getElementById(strId);
  currentTab = document.getElementById(strId + 'tab');

  currentLogger.className = 'logwindow visible';
  currentTab.className = 'tabIsSelected';
}

/**
 * Helper function for openeing a window
 */
function openWindow(url,nme,w,h,tb,stb,l,mb,sb,rs,x,y){
  //TODO: refactor
  var t=(document.layers)? ',screenX='+x+',screenY='+y: ',left='+x+',top='+y; //A LITTLE CROSS-BROWSER CODE FOR WINDOW POSITIONING
  tb=(tb)?'yes':'no'; stb=(stb)?'yes':'no'; l=(l)?'yes':'no'; mb=(mb)?'yes':'no'; sb=(sb)?'yes':'no'; rs=(rs)?'yes':'no';
  var x=window.open(url, nme, 'scrollbars='+sb+',width='+w+',height='+h+',toolbar='+tb+',status='+stb+',menubar='+mb+',links='+l+',resizable='+rs+t);
  x.focus();
  return x;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -