📄 logframe.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 + -