blob: 357ea61a3aa74cf81490b851e48bb9a2a049b888 [file] [log] [blame]
///////////////////////////////////////////////////////////-*- mode: cc-mode -*-
// /
// Copyright (C) 2005-2010, Nangate Inc. /
// All rights reserved. /
// /
////////////////////////////////////////////////////////////////////////////////
// /
// Copyright Notice: /
// /
// This document contains confidential and proprietary information. /
// Reproduction or usage of this document, in part or whole, by any means, /
// electrical, mechanical, optical, chemical or otherwise is prohibited, /
// without written permission from Nangate Inc.. /
// /
// The information contained herein is protected by Danish and international /
// copyright laws. /
// /
////////////////////////////////////////////////////////////////////////////////
loadScript('resource/js/browserdetect.js', 'javascript');
loadScript('resource/js/highlight.js' , 'javascript');
loadScript('resource/js/collapse.js' , 'javascript');
loadScript('resource/js/query.js' , 'javascript');
loadScript('resource/js/tooltip.js' , 'javascript');
loadScript('resource/js/cookies.js' , 'javascript');
loadScript('resource/js/config.js' , 'javascript');
loadScript('resource/js/ctp.js' , 'javascript');
loadScript('resource/js/tables.js' , 'javascript');
function NanInit() {
verifyBrowser();
createTables();
createToolTips();
createHighlight();
queryString();
goToId();
}
function goToId() {
var url = location.href;
var fIdPos = url.search('#');
if (fIdPos > 0) {
location.href = url.substring(fIdPos);
}
}
function tablePopUp(path, id) {
var pageInfo = document.getElementById('PageInfo');
var tableNode = document.getElementById(id);
var title = "<p class=\"Subtitle\">" + tableNode.parentNode.parentNode.getAttribute('eName') + "</p>";
var ctxStr = "<br/><span class=\"weakComment\">Cell <span class=\"comment\">" + tableNode.getAttribute('t') + "</span>";
var tableHtml = tableHtmlForPopUp(tableNode, pageInfo, id);
if (tableHtml) {
var myWin = window.open(path + '/resource/js/plot.html#table&+' + title + '&+' + ctxStr + '&+' + id + '&+' + tableHtml,
'_blank',
'titlebar="no", scrollbars="no", menubar="no", location="no", directories="no", status="no", fullscreen="yes", top=100, left=100');
}
}
function tableHtmlForPopUp(tableNode, pageInfo, id) {
var tableHtml = "";
if (!tableNode || !pageInfo)
return tableHtml;
var summName = pageInfo.getAttribute('SummName');
var corner = pageInfo.getAttribute('Corner');
var refFile = pageInfo.getAttribute('RefFile');
var trgFile = pageInfo.getAttribute('TrgFile');
var cellPath = '../../Cells/';
var i1 = tableNode.getAttribute('i1');
var i2 = tableNode.getAttribute('i2');
var arc = tableNode.getAttribute('t');
var t = tableNode.getAttribute('unit');
var el = tableNode.getAttribute('el');
var trace = tableNode.getAttribute('trace');
if (i1) {
tableHtml = '<a id=\"PageInfo\" SummName=\"' + summName + '\" Corner=\"' + corner + '\" CellPath=\"' + cellPath + '\"'
+ ' RefFile=\"../../' + refFile + '\" TrgFile=\"../../' + trgFile + '\"/>'
+ '<div ngTable=\"tGr\" tGr=\"1\" ctx=\";;;;;;;\" i1=\"' + i1 + '\" ' + (i2 ? ('i2=\"' + i2 + '\" ') : '') + 'arc=\"' + arc + '\">'
+ '<div t=\"' + t + '\" id=\"' + id + '\"' + (trace ? ' trace=\"' + trace + '\"' : '') + ' el=\"' + el + '\"/>'
+ '</div>';
}
return tableHtml;
}
function showPlot(path, str, title, cell, pin, ctx, width, height, extraTitle, deckList) {
title = "<p class=\"Subtitle\">" + title + "</p>";
var ctxStr = "";
ctxStr +=
(cell ? "<br/><span class=\"weakComment\">Cell <span class=\"comment\">" + cell + "</span>" : "") +
(pin ? "<br/>Pin <span class=\"comment\">" + pin + "</span>" : "");
if (ctx)
ctxStr += "<br/><span class=\"comment\">" + ctx + "</span>";
if (extraTitle)
ctxStr = "<br/><span class=\"weakComment\">" + extraTitle + "</span>" + ctxStr;
if (deckList) {
var dlArray = deckList.split(';');
ctxStr += ";";
for (i = 0; i < dlArray.length - 1; i++)
ctxStr += dlArray[i] + "*";
}
var myWin = window.open(
path+'/resource/js/plot.html#'+str+'&+'+title+'&+'+ctxStr,'',
'width='+width+',height='+height+',top=100,left=100');
}
function readPlot() {
var params = location.hash.split('&+');
var str = params[0].substr(1, params[0].length);
var title = params[1];
var context = params[2];
if (str == 'none') {
var hri = context.split(';')[0];
var names = context.split(';')[1].split('*');
var i;
var content = '<br/>';
var tmp_name;
content += '<p>'+ hri+ '</p><ul class="TOC4">';
for (i = 0; i < names[i].length -1; i++) {
var resumed_name = '';
var full_path = '';
var path = '';
var k;
tmp_name = names[i].split('/');
for (k = 0; k < tmp_name.length - 1; k++) {
full_path += tmp_name[k] + '/';
path += tmp_name[k] + '/';
}
full_path += tmp_name[tmp_name.length-1];
var tmp = tmp_name[tmp_name.length-1].split('-');
var j;
for (j = 3; j < tmp.length; j++) {
resumed_name += tmp[j] + '-';
}
var final_name = '';
var name2 = tmp_name[tmp_name.length-1];
if ((tmp_name.length > 1) && (name2.substr(name2.length-3,3) != '.gz')) {
final_name = resumed_name.split('.')[0];
} else {
final_name = tmp_name[tmp_name.length-1];
}
if ((tmp_name.length > 1) && (name2.substr(name2.length-3,3) != '.gz')) {
content += '<li><a target="deck" href="' + full_path + '" onClick="document.getElementById(\'fullname\').innerHTML = \'Full Path:<br/> '
+ path + '<br/>' + tmp_name[tmp_name.length -1] + '\'">' + final_name + '</a></li>';
} else {
content += '<li><a target="deck">'+ final_name+'</a></li>';
}
}
content += '</ul><br/><p id="fullname"></p><br/><iframe name="deck" width="100%" height="55%" frameborder="0"></iframe>';
window.document.body.innerHTML += content;
} else if (str == 'table') {
window.document.body.innerHTML += context + '<br/>' + params[4];
createTables();
createToolTips();
var tableWidth = document.getElementById('t_' + params[3]).offsetWidth;
var tableHeight = document.getElementById('t_' + params[3]).offsetHeight;
if (!(params[5] || params[5] == 'noResize')) {
var browser = verifyBrowser();
if (browser == 'ff2')
top.resizeTo(tableWidth + 80, tableHeight + 150);
else
top.resizeTo(tableWidth + 160, tableHeight + 250);
} else if (params[6]) {
queryFromString(params[6]);
}
} else {
window.document.body.innerHTML += context + '<br/><center><img src="' + str + '"/></center>';
}
window.document.getElementById("_title").innerHTML = title;
}
function deckPage(header, human_readable_info, spice_file) {
window.document.body.innerHTML = header + human_readable_info + '<br/>' + spice_file;
window.document.getElementById("_title").innerHTML = title;
}
function showPlotList(path, str, title, cell, pin, ctx, width, height, count) {
title = "<p class=\"Subtitle\">" + title + "</p>";
var ctxStr = "<br/><span class=\"weakComment\">Cell <span class=\"comment\">" + cell + "</span><br/>Pin <span class=\"comment\">" + pin + "</span>";
if (ctx)
ctxStr += "<br/><span class=\"comment\">" + ctx + "</span>";
ctx += "</span>";
var myWin = window.open(path + '/resource/js/plot_list.html', '' , 'width=' + width + ',height=' + height + ',top=100,left=100');
myWin.mplot=str;
myWin.mtitle=title;
myWin.mctx=ctxStr;
myWin.current = 1;
myWin.plotCount = count;
}
function readPlotList() {
var str = window.mplot;
var title = window.mtitle;
var context = window.mctx;
var current = window.current;
var plotCount = window.plotCount;
baseHtml = '<table class="navigation" width="100%">' +
' <tr>' +
' <td align="left" id="_title">' + title + '</td>' +
' <td align="right">' +
' <a href="http://www.nangate.com" target="_blank"><img src="../image/Nangatelogo_small.gif" border="0"/></a>' +
' <br/><br/>' +
' <span class="comment">Copyright ® 2004-2010 Nangate Inc.</span>' +
' </td>' +
' </tr>';
if (plotCount > 1) {
baseHtml += '<tr><td>';
if (current > 1)
baseHtml += '<img src="../image/first.gif" onClick="window.current = 1; readPlotList();"/>' +
'<img src="../image/blank.gif"/>' +
'<img src="../image/previous.gif" onClick="window.current--; readPlotList();"/>';
else
baseHtml += '<img src="../image/blank.gif"/><img src="../image/blank.gif"/><img src="../image/blank.gif"/>';
baseHtml += '<img src="../image/blank.gif"/>' + current + ' of ' + plotCount + '<img src="../image/blank.gif"/>';
if (current != plotCount)
baseHtml += '<img src="../image/next.gif" onClick="window.current++; readPlotList();"/>' +
'<img src="../image/blank.gif"/>' +
'<img src="../image/last.gif" onClick="window.current = plotCount; readPlotList();"/>';
baseHtml += '</td></tr>';
}
baseHtml += '</table><hr class="navigation_tb">';
window.document.body.innerHTML = baseHtml + context + '<br/><center><img name="plot" src="' + str + window.current + '.png"/></center>';
}
function copyToClipboard() {
CopiedTxt = document.selection.createRange();
CopiedTxt.execCommand("Copy");
}
function loadScript(name,type) {
if (type == 'javascript') {
elem = 'script';
} else if (type == 'css') {
elem = 'link';
}
var script = document.createElement(elem);
script.type = 'text/'+type ;
if (type == 'javascript') {
script.src = name;
} else if (type == 'css') {
script.href = name;
script.rel = 'stylesheet';
}
document.getElementsByTagName('head')[0].appendChild(script);
name = '../'+name;
script = document.createElement(elem);
script.type = 'text/'+type ;
if (type == 'javascript') {
script.src = name;
} else if (type == 'css') {
script.href = name;
script.rel = 'stylesheet';
}
document.getElementsByTagName('head')[0].appendChild(script);
}
function oFr(str) {
var pageInfo = document.getElementById('PageInfo');
var refFile = pageInfo.getAttribute('RefFile');
var trgFile = pageInfo.getAttribute('TrgFile');
if (refFile && trgFile) {
var params = str.split("%");
myWin = window.open('','','');
myWin.document.write('<html><head></head><frameset cols="50%,50%">\n');
myWin.document.write('<frame src="' + refFile + params[0] + params[2] + '" scrolling="auto"/>\n');
myWin.document.write('<frame src="' + trgFile + params[1] + params[3] + '" scrolling="auto"/>\n');
myWin.document.write('</frameset></html>\n');
}
}
function oTraceFr(str) {
if (window.opener)
window.opener.open(str, '_blank','');
else
window.open(str, '_self','');
}
function unsupportedBrowserMsg() {
alert("Your browser does not support this feature. Please consider using one of the Nangate Liberty Analyzer recommended browsers.");
}
function oTFr(str) {
if (verifyBrowser() == 'IE') {
unsupportedBrowserMsg();
return;
}
var pageInfo = document.getElementById('PageInfo');
var pageInfoFather = pageInfo.parentNode;
var refFile = pageInfo.getAttribute('RefFile');
var trgFile = pageInfo.getAttribute('TrgFile');
// Removing pageInfo so we don't have problems with ref and trg pages
pageInfo.parentNode.removeChild(pageInfo);
if (refFile && trgFile) {
var params = str.split("%");
var myDivs = document.getElementsByTagName('div');
var refId = params[2].substring(TABLE_ID.length + 1);
var trgId = params[3].substring(TABLE_ID.length + 1);
var refHtml = getTableFromPage(refFile, refId, myDivs[0]);
var trgHtml = getTableFromPage(trgFile, trgId, myDivs[0]);
myWin = window.opener.open('', '_blank','');
myWin.document.write('<html><head></head><frameset rows="50%,50%"><frame src="" name="leftPage" scrolling="auto"/><frame src="" name="rightPage" scrolling="auto"/></frameset></html>');
myWin.leftPage.location = 'plot.html' + refHtml + '&+noResize' + '&+' + params[0];
myWin.rightPage.location = 'plot.html' + trgHtml + '&+noResize' + '&+' + params[1];
}
// Adding back original pageInfo
pageInfoFather.appendChild(pageInfo);
}
function getTableFromPage(file, elemId, fatherDiv) {
var xmlHttp;
try {
xmlHttp = new XMLHttpRequest();
} catch (e) {
}
var tableHtml = "";
if (xmlHttp) {
xmlHttp.open("GET", file, false);
xmlHttp.send(null);
var myHTML = xmlHttp.responseText;
var tempDiv = document.createElement('div');
tempDiv.innerHTML = myHTML.replace(/<script(.|\s)*?\/script>/g, '');
tempDiv.style.visibility = 'hidden';
fatherDiv.appendChild(tempDiv);
var tableNode = document.getElementById(elemId);
pageInfo = document.getElementById('PageInfo');
var title = "<p class=\"Subtitle\">" + tableNode.parentNode.parentNode.getAttribute('eName') + " [" + pageInfo.getAttribute('Corner') + "]</p>";
var ctxStr = "<br/><span class=\"weakComment\">Cell <span class=\"comment\">" + tableNode.getAttribute('t') + "</span>";
tableHtml = '#table&+' + title + '&+' + ctxStr + '&+' + elemId + '&+' + tableHtmlForPopUp(tableNode, pageInfo, elemId);
tempDiv.parentNode.removeChild(tempDiv);
} else {
unsupportedBrowserMsg();
}
return tableHtml;
}
/*
Function to change the contents of a look-up table based on a combo box selection.
*/
function updateTable(comboBox, tableId, fallCount, riseCount) {
table = document.getElementById(tableId);
unit = comboBox.options[comboBox.selectedIndex].getAttribute('unit');
if (fallCount > 0) {
fixUnit(table.rows[2].cells[1].childNodes[0], unit);
if (riseCount > 0)
fixUnit(table.rows[2 + fallCount].cells[0].childNodes[0], unit);
} else if (riseCount > 0)
fixUnit(table.rows[2].cells[1].childNodes[0], unit);
for (i in table.rows) {
cells = table.rows[i].cells;
for (j in cells) {
try {
if (cells[j].tagName == 'TD') {
cell = cells[j].getElementsByTagName('div')[0];
tolExc = cell.getAttribute('t' + comboBox.options[comboBox.selectedIndex].value);
// Fix highlight first
textNode = cell.childNodes[0];
if (textNode.nodeName == '#text') {
if (tolExc == 'up' || tolExc == 'down') {
spanNode = document.createElement('span');
attr = document.createAttribute('class');
if (tolExc == 'up')
attr.value = 'erU';
else
attr.value = 'erD';
spanNode.setAttributeNode(attr);
spanNode.appendChild(textNode.cloneNode(true));
cell.replaceChild(spanNode, textNode);
textNode = spanNode.childNodes[0];
}
} else {
spanNode = textNode;
textNode = spanNode.childNodes[0];
if (tolExc == 'up' && spanNode.getAttribute('class') == 'erD')
spanNode.setAttribute('class', 'erU');
else if (tolExc == 'down' && spanNode.getAttribute('class') == 'erU')
spanNode.setAttribute('class', 'erD');
else if (tolExc != 'up' && tolExc != 'down')
cell.replaceChild(textNode, spanNode);
}
textNode.nodeValue = cell.getAttribute(comboBox.options[comboBox.selectedIndex].value);
}
} catch(err) {}
}
}
}
/*
Helper function to set the unit information in a table header. Used only by 'updateTable'.
*/
function fixUnit(node, unit) {
if (node.nodeValue.indexOf('[') != -1)
node.nodeValue = node.nodeValue.slice(0, node.nodeValue.indexOf('['));
if (unit != '')
node.nodeValue += '[' + unit + ']';
}