From: Norman Walsh Date: Wed, 29 May 2002 18:13:42 +0000 (+0000) Subject: This is a significant rewrite. The JavaScript is much improved (including some code... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ba4301a5ff56e96b939c6302f45ca1a870157a9f;p=docbook-dsssl This is a significant rewrite. The JavaScript is much improved (including some code borrowed from developer.netscape.com) and the whole thing should be cleaner and less idiosyncratic now. --- diff --git a/slides/browser/list.js b/slides/browser/list.js deleted file mode 100644 index ede93897f..000000000 --- a/slides/browser/list.js +++ /dev/null @@ -1,248 +0,0 @@ -var _id = 0, _pid = 0, _lid = 0, _pLayer; -var _mLists = new Array(); -document.lists = _mLists; -var isNav4, isIE4; -if (parseInt(navigator.appVersion.charAt(0)) >= 4) { - isNav4 = (navigator.appName == "Netscape") ? true : false; - isIE4 = (navigator.appName.indexOf("Microsoft") != -1) ? true : false; -} - -function List(visible, width, height, bgColor) { - this.setIndent = setIndent; - this.addItem = addItem; - this.addList = addList; - this.build = build; - this.rebuild = rebuild; - this.setFont = _listSetFont; - this._writeList = _writeList; - this._showList = _showList; - this._updateList = _updateList; - this._updateParent = _updateParent; - this.onexpand = null; this.postexpand = null; - this.lists = new Array(); // sublists - this.items = new Array(); // layers - this.types = new Array(); // type - this.strs = new Array(); // content - this.x = 0; - this.y = 0; - this.visible = visible; - this.id = _id; - this.i = 18; - this.space = true; - this.pid = 0; - this.fontIntro = false; - this.fontOutro = false; - this.width = width || 350; - this.height = height || 22; - this.parLayer = false; - this.built = false; - this.shown = false; - this.needsUpdate = false; - this.needsRewrite = false; - this.parent = null; - this.l = 0; - if(bgColor) this.bgColor = bgColor; - else this.bgColor = null; - _mLists[_id++] = this; -} - -function _listSetFont(i,j) { - this.fontIntro = i; - this.fontOutro = j; -} - -function setIndent(indent) { - this.i = indent; - if (this.i < 0) { - this.i = 0; - this.space = false; - } -} - -function setClip(layer, l, r, t, b) { - if(isNav4) { - layer.clip.left = l; layer.clip.right = r; - layer.clip.top = t; layer.clip.bottom = b; - } else { - layer.style.pixelWidth = r-l; - layer.style.pixelHeight = b-t; - layer.style.clip = "rect("+t+","+r+","+b+","+l+")"; - } -} - -function _writeList() { - self.status = "List: Writing list..."; - var layer, str, clip; - for (var i = 0; i < this.types.length; i++) { - layer = this.items[i]; - if (isNav4) layer.visibility = "hidden"; - else layer.style.visibility = "hidden"; - str = ""; - - alert(layer); - - if(isNav4) layer.document.open(); - - str += ""; - if(this.types[i] == "list") { - str += ""; - _pid++; - } else if(this.space) - str += ""; - if(this.l>0 && this.i>0) str += ""; - str += "
  "; - if(this.fontIntro) str += this.fontIntro; - str += this.strs[i]; - if(this.fontOutro) str += this.fontOutro; - str += "
"; - if(isNav4) { - layer.document.writeln(str); - layer.document.close(); - } else layer.innerHTML = str; - if(this.types[i] == "list" && this.lists[i].visible) - this.lists[i]._writeList(); - } - this.built = true; - this.needsRewrite = false; - self.status = ''; -} - -function _showList() { - var layer; - for(var i = 0; i < this.types.length; i++) { - layer = this.items[i]; - setClip(layer, 0, this.width, 0, this.height-1); - var bg = layer.oBgColor || this.bgColor; - if(isIE4) { - if((bg == null) || (bg == "null")) bg = ""; - layer.style.backgroundColor = bg; - } else layer.document.bgColor = bg; - if(this.types[i] == "list" && this.lists[i].visible) - this.lists[i]._showList(); - } - this.shown = true; - this.needsUpdate = false; -} - -function _updateList(pVis, x, y) { - var currTop = y, layer; - for(var i = 0; i < this.types.length; i++) { - layer = this.items[i]; - if(this.visible && pVis) { - if(isNav4) { - layer.visibility = "visible"; - layer.top = currTop; - layer.left = x; - } else { - layer.style.visibility = "visible"; - layer.style.pixelTop = currTop; - layer.style.pixelLeft = x; - } - currTop += this.height; - } else { - if(isNav4) layer.visibility = "hidden"; - else layer.style.visibility = "hidden"; - } - if(this.types[i] == "list") { - if(this.lists[i].visible) { - if(!this.lists[i].built || this.lists[i].needsRewrite) this.lists[i]._writeList(); - if(!this.lists[i].shown || this.lists[i].needsUpdate) this.lists[i]._showList(); - if(isNav4) layer.document.images[0].src = "../graphics/true.gif"; - else eval('document.images._img'+this.lists[i].id+'.src = "../graphics/true.gif"'); - } else { - if(isNav4) layer.document.images[0].src = "../graphics/false.gif"; - else eval('document.images._img'+this.lists[i].id+'.src = "../graphics/false.gif"'); - } - if(this.lists[i].built) - currTop = this.lists[i]._updateList(this.visible && pVis, x, currTop); - } - } - return currTop; -} - -function _updateParent(pid, l) { - var layer; - if(!l) l = 0; - this.pid = pid; - this.l = l; - for(var i = 0; i < this.types.length; i++) - if(this.types[i] == "list") - this.lists[i]._updateParent(pid, l+1); -} - -function expand(i) { - _mLists[i].visible = !_mLists[i].visible; - if(_mLists[i].onexpand != null) _mLists[i].onexpand(_mLists[i].id); - _mLists[_mLists[i].pid].rebuild(); - if(_mLists[i].postexpand != null) _mLists[i].postexpand(_mLists[i].id); -} - -function build(x, y) { - alert("got here1"); - - this._updateParent(this.id); - this._writeList(); - this._showList(); - this._updateList(true, x, y); - this.x = x; this.y = y; -} - -function rebuild() { - this._updateList(true, this.x, this.y); -} - -function addItem(str, bgColor, layer) { - var testLayer = false; - if(!document.all) document.all = document.layers; - if(!layer) { - if(isIE4 || !this.parLayer) { - alert('document.all.lItem'+_lid); - testLayer = eval('document.all.lItem'+_lid); - } else { - _pLayer = this.parLayer; - testLayer = eval('_pLayer.document.layers.lItem'+_lid); - } - if(testLayer) { - layer = testLayer; - } else { - if(isNav4) { - if(this.parLayer) layer = new Layer(this.width, this.parLayer); - else layer = new Layer(this.width); - } else { - return; - } - } - } - if(bgColor) layer.oBgColor = bgColor; - this.items[this.items.length] = layer; - this.types[this.types.length] = "item"; - this.strs[this.strs.length] = str; - _lid++; -} - -function addList(list, str, bgColor, layer) { - var testLayer = false; - if(!document.all) document.all = document.layers; - if(!layer) { - if(isIE4 || !this.parLayer) testLayer = eval('document.all.lItem'+_lid); - else { - _pLayer = this.parLayer; - testLayer = eval('_pLayer.document.layers.lItem'+_lid); - } - if(testLayer) layer = testLayer; - else { - if(isNav4) { - if(this.parLayer) layer = new Layer(this.width, this.parLayer); - else layer = new Layer(this.width); - } else return; - } - } - if(bgColor) layer.oBgColor = bgColor; - this.lists[this.items.length] = list; - this.items[this.items.length] = layer; - this.types[this.types.length] = "list"; - this.strs[this.strs.length] = str; - list.parent = this; - _lid++; -} - diff --git a/slides/browser/overlay.js b/slides/browser/overlay.js index 11cd1babd..9055edef0 100644 --- a/slides/browser/overlay.js +++ b/slides/browser/overlay.js @@ -34,6 +34,13 @@ function overlayRefresh() { if (overlayIE) { overlayLx = document.body.clientWidth; overlayLy = document.body.clientHeight; + + if (document.body.parentElement) { + // For IE6 + overlayLx = document.body.parentElement.clientWidth; + overlayLy = document.body.parentElement.clientHeight; + } + overlayH = overlayDiv.offsetHeight; overlayW = overlayDiv.offsetWidth; } else if (overlayNS4) { @@ -83,8 +90,11 @@ function overlayRefresh() { document.overlayDiv.visibility="visible"; } else if (overlayNS6) { var div = document.getElementById("overlayDiv"); - div.style.left=overlayX; - div.style.top=overlayY+window.pageYOffset; + var leftpx = overlayX; + var toppx = overlayY+window.pageYOffset; + + div.style.left = leftpx + "px"; + div.style.top = toppx + "px"; } } @@ -94,7 +104,7 @@ function onad() { function loopfunc() { overlayRefresh(); - setTimeout('loopfunc()',overlayDelay); +// setTimeout('loopfunc()',overlayDelay); } function overlaySetup(corner) { diff --git a/slides/browser/resize.js b/slides/browser/resize.js deleted file mode 100644 index 01dfc1b80..000000000 --- a/slides/browser/resize.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * resize.js 0.3 970811 - * by gary smith - * js component for "reloading page onResize" - */ - -if(!window.saveInnerWidth) { - window.onresize = resize; - window.saveInnerWidth = window.innerWidth; - window.saveInnerHeight = window.innerHeight; -} - -function resize() { - if (saveInnerWidth < window.innerWidth || - saveInnerWidth > window.innerWidth || - saveInnerHeight > window.innerHeight || - saveInnerHeight < window.innerHeight ) - { - window.history.go(0); - } -} diff --git a/slides/browser/slides.css b/slides/browser/slides.css index a17c1e2fc..e28360181 100644 --- a/slides/browser/slides.css +++ b/slides/browser/slides.css @@ -113,3 +113,21 @@ span.navfooter { font-family: sans-serif; } /* ====================================================================== */ + +body.topnavigation { margin-top: 5px; + margin-left: 10px; + margin-right: 10px; + } + +body.foil { margin-top: 5px; + margin-left: 10px; + margin-right: 10px; + } + +body.botnavigation { margin-top: 0px; + padding-top: 0px; + margin-left: 10px; + margin-right: 10px; + } + +/* ====================================================================== */ diff --git a/slides/browser/slides.js b/slides/browser/slides.js index e9a9ad896..89b706fae 100644 --- a/slides/browser/slides.js +++ b/slides/browser/slides.js @@ -1,270 +1,70 @@ // -*- Java -*- +// +// $Id$ +// +// Copyright (C) 2002 Norman Walsh +// +// You are free to use, modify and distribute this software without limitation. +// This software is provided "AS IS," without a warranty of any kind. +// +// This script assumes that the Netscape 'ua.js' module has also been loaded. + +function newPage(filename, overlay) { + divs = xbGetElementsByName("DIV"); + + if (divs) { + var xdiv = divs[0]; + + if (xdiv) { + var xid = xdiv.getAttribute("id"); + + var mytoc = window.top.frames[0]; + if (mytoc.lastUnderlined) { + mytoc.lastUnderlined.style.textDecoration = "none"; + } -function selectBrowser() { - var browserName = navigator.appName; - var browserVersion = parseFloat(navigator.appVersion); - var userAgent = navigator.userAgent;; - - if (browserName == "Netscape" && browserVersion>=5) { - // Netscape 6 is Mozilla 5 - return "ns6"; - } - - if (browserName == "Netscape" && browserVersion>=4) { - return "ns4"; - } - - if (browserName == "Microsoft Internet Explorer" - && userAgent.indexOf("MSIE 6") > 0) { - return "ie6"; - } - - if (browserName == "Microsoft Internet Explorer" - && userAgent.indexOf("MSIE 5") > 0) { - return "ie5"; - } - - return null; -} - -function newPage(filename,overlay) { - if (selectBrowser() != "ie5" - && selectBrowser() != "ie6") { - return; - } - - if (overlay != 0) { - overlaySetup('ll'); - } - - var parent = self.parent; - - var gparent = null; - if (parent != null) { - gparent = parent.parent; - } - - var filemap = null; - if (gparent != null) { - filemap = gparent.filemap; - } + var tdiv = xbGetElementById(xid, mytoc); - if (filename == "toc.html") { - if (filemap == null) { - walk_toc(); - } - } else { - if (filemap != null) { - var id = filemap[filename]; - if (id != null) { - highlight_toc(id); + if (tdiv) { + var ta = tdiv.getElementsByTagName("a").item(0); + ta.style.textDecoration = "underline"; + mytoc.lastUnderlined = ta; } } } -} - -function navigate (bk,fw,overlay) { - var frame = window; - if (frame.name != "foil") { - frame = frame.parent; - } - if (frame.name != "foil") { - frame = frame.parent; - } - kc=event.keyCode; - // [space] or [Enter] or [n] or [N] for next slide - if (((kc==32)||(kc==13)||(kc==110)||(kc==78)) && (fw != "")) { - frame.location=fw; - } - - // [P] or [p] for previous slide - if (((kc==80)||(kc==112)) && (bk != "")) { - frame.location=bk; + if (overlay != 0) { + overlaySetup('lc'); } } -function walk_toc() { - var doc = self.document; - var filemap = new Array(); - var fileidx = new Array(); - var filermap = new Array(); - var fileridx = new Array(); - var idx = 0; - var sectmap = new Array(); - var section = ""; - var title = ""; - - var parent = self.parent; - var gparent = null; - if (parent != null) { - gparent = parent.parent; - } - for (var i = 0; i < doc.all.length-2; i++) { - var div_elem = doc.all.item(i); - var img_elem = doc.all.item(i+1); - var a_elem = doc.all.item(i+2); - - if (img_elem.tagName == "A") { - a_elem = img_elem; - } - - if (div_elem.tagName == "DIV" - && a_elem.tagName == "A") { - var id = div_elem.getAttribute("ID"); - var file = a_elem.getAttribute("HREF"); - var pos = file.lastIndexOf("/"); - if (pos > 0) { - file = file.substring(pos+1); - } +function navigate (evt) { + var kc = -1; - // if (div_elem.className == "toc-section") { - // section = a_elem.innerText; - // } - - if (div_elem.className == "toc-slidesinfo") { - title = a_elem.innerText; - } - - if (id != "") { - fileidx[idx] = file; - fileridx[file] = idx; - idx++; - filemap[file] = id; - filermap[id] = file; - sectmap[file] = section; - } - } - } - - // Squirrel this away on the top frame - if (gparent != null) { - gparent.prestitle = title; - gparent.filemap = filemap; - gparent.filermap = filermap; - gparent.fileidx = fileidx; - gparent.fileridx = fileridx; - gparent.sectmap = sectmap; + if (navigator.org == 'microsoft') { + kc = window.event.keyCode; } else { - alert("Unexpected frame context in slides.js"); + kc = evt.which; } -} - -function highlight_toc(id) { - var frame = window.parent.parent.frames("toc"); - var doc = frame.document; - var div = null; - // find the div - for (var i = 0; i < doc.all.length; i++) { - if (doc.all.item(i).tagName == "DIV") { - if (doc.all.item(i).getAttribute("ID") == id) { - div = doc.all.item(i); - break; - } - } - } + var forward = (kc==32) || (kc==13) || (kc==110) || (kc==78); + var backward = (kc==80) || (kc==112); - var a = div.children(0); - if (a != null && a.tagName != "A") { - a = div.children(1); - } + var links = xbGetElementsByName("LINK"); + var count = 0; + var target = ""; - if (a != null && a.tagName == "A") { - if (frame.lastA != null) { - frame.lastA.style.textDecorationUnderline = false; + for (count = 0; count < links.length; count++) { + if (forward && (links[count].getAttribute("rel") == 'next')) { + target = links[count].getAttribute("href"); + } + if (backward && (links[count].getAttribute("rel") == 'previous')) { + target = links[count].getAttribute("href"); } - a.style.textDecorationUnderline = true; - frame.lastA = a; - } -} - -function write_nav(id) { - var frame = window.parent.frames("navbar"); - var doc = frame.document; - - if (id == null) { - id = self.parent.filemap[self.parent.fileidx[0]]; - } - - var file = self.parent.filermap[id]; - var num = self.parent.fileridx[file]; - var prev = null; - var next = null; - - if (num > 0) { - prev = self.parent.fileidx[num-1]; - } - - if (num < self.parent.fileidx.length) { - next = self.parent.fileidx[num+1]; - } - - doc.open(); - doc.close(); - doc.write("\n"); - doc.write("\n"); - doc.write("nav frame\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("
"); - if (prev != null) { - doc.write(""); - doc.write(""); - doc.write(""); - } else { - doc.write(" "); - } - doc.write(""); - if (num > 0) { - doc.write("Slide " + num + ""); - } else { - doc.write(" "); - } - doc.write(""); - if (next) { - doc.write(""); - doc.write(""); - doc.write(""); - } else { - doc.write(" "); } - doc.write("
\n"); - doc.close(); -} -function write_header(file) { - var frame = window.parent.frames("header"); - var doc = frame.document; - var title = self.parent.prestitle; - var section = self.parent.sectmap[file]; - - var bgcolor = "#8399B1"; - var header = title + ": " + section; - - if (file == 'titlefoil.html') { - header = ""; + if (target != "") { + window.location = target; } - - doc.open(); - doc.close(); - doc.write("\n"); - doc.write("\n"); - doc.write("header frame\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("\n"); - doc.write("
"); - doc.write("" + header + ""); - doc.write("
\n"); - doc.close(); } - diff --git a/slides/browser/ua.js b/slides/browser/ua.js new file mode 100644 index 000000000..7521294d3 --- /dev/null +++ b/slides/browser/ua.js @@ -0,0 +1,113 @@ +/* +ua.js revision 0.200 2001-12-03 + +Contributor(s): Bob Clary, Netscape Communications, Copyright 2001 + +Netscape grants you a royalty free license to use, modify and +distribute this software provided that this copyright notice +appears on all copies. This software is provided "AS IS," +without a warranty of any kind. +*/ + +function xbDetectBrowser() +{ + var oldOnError = window.onerror; + var element = null; + + window.onerror = null; + + // work around bug in xpcdom Mozilla 0.9.1 + window.saveNavigator = window.navigator; + + navigator.OS = ''; + navigator.version = parseFloat(navigator.appVersion); + navigator.org = ''; + navigator.family = ''; + + var platform; + if (typeof(window.navigator.platform) != 'undefined') + { + platform = window.navigator.platform.toLowerCase(); + if (platform.indexOf('win') != -1) + navigator.OS = 'win'; + else if (platform.indexOf('mac') != -1) + navigator.OS = 'mac'; + else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1) + navigator.OS = 'nix'; + } + + var i = 0; + var ua = window.navigator.userAgent.toLowerCase(); + + if (ua.indexOf('opera') != -1) + { + i = ua.indexOf('opera'); + navigator.family = 'opera'; + navigator.org = 'opera'; + navigator.version = parseFloat('0' + ua.substr(i+6), 10); + } + else if ((i = ua.indexOf('msie')) != -1) + { + navigator.org = 'microsoft'; + navigator.version = parseFloat('0' + ua.substr(i+5), 10); + + if (navigator.version < 4) + navigator.family = 'ie3'; + else + navigator.family = 'ie4' + } + else if (ua.indexOf('gecko') != -1) + { + navigator.family = 'gecko'; + var rvStart = navigator.userAgent.indexOf('rv:') + 3; + var rvEnd = navigator.userAgent.indexOf(')', rvStart); + var rv = navigator.userAgent.substring(rvStart, rvEnd); + var decIndex = rv.indexOf('.'); + if (decIndex != -1) + { + rv = rv.replace(/\./g, '') + rv = rv.substring(0, decIndex-1) + '.' + rv.substr(decIndex) + } + navigator.version = parseFloat(rv); + + if (ua.indexOf('netscape') != -1) + navigator.org = 'netscape'; + else if (ua.indexOf('compuserve') != -1) + navigator.org = 'compuserve'; + else + navigator.org = 'mozilla'; + } + else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1)) + { + var is_major = parseFloat(navigator.appVersion); + + if (is_major < 4) + navigator.version = is_major; + else + { + i = ua.lastIndexOf('/') + navigator.version = parseFloat('0' + ua.substr(i+1), 10); + } + navigator.org = 'netscape'; + navigator.family = 'nn' + parseInt(navigator.appVersion); + } + else if ((i = ua.indexOf('aol')) != -1 ) + { + // aol + navigator.family = 'aol'; + navigator.org = 'aol'; + navigator.version = parseFloat('0' + ua.substr(i+4), 10); + } + else if ((i = ua.indexOf('hotjava')) != -1 ) + { + // hotjava + navigator.family = 'hotjava'; + navigator.org = 'sun'; + navigator.version = parseFloat(navigator.appVersion); + } + + window.onerror = oldOnError; +} + +xbDetectBrowser(); + diff --git a/slides/browser/xbCollapsibleLists.js b/slides/browser/xbCollapsibleLists.js new file mode 100644 index 000000000..6a4f93c17 --- /dev/null +++ b/slides/browser/xbCollapsibleLists.js @@ -0,0 +1,537 @@ +/* +xbCollapsibleLists.js 2001-02-26 + +Contributor(s): Michael Bostock, Netscape Communications, Copyright 1997 + Bob Clary, Netscape Communications, Copyright 2001 + Seth Dillingham, Macrobyte Resources, Copyright 2001 + Mark Filanowicz, Amdahl IT Services, Copyright 2002 + +Netscape grants you a royalty free license to use, modify or +distribute this software provided that this copyright notice +appears on all copies. This software is provided "AS IS," +without a warranty of any kind. + +See xbCollapsibleLists.js.changelog.html for details of changes. +*/ + + +var xbcl__id = 0; +var xbcl_item_id = 0; +var xbcl_mLists = new Array(); +var xbcl_parentElement = null; + +document.lists = xbcl_mLists; + +function List(visible, width, height, bgColor, collapsedImageURL, expandedImageURL) +{ + this.lists = new Array(); // sublists + this.items = new Array(); // layers + this.types = new Array(); // type + this.strs = new Array(); // content + this.visible = visible; + this.id = xbcl__id; + this.width = width || 350; + this.height = height || 22; + + this.collapsedImageURL = collapsedImageURL || 'false.gif'; + this.expandedImageURL = expandedImageURL || 'true.gif'; + + if (bgColor) + this.bgColor = bgColor; + + xbcl_mLists[xbcl__id++] = this; +} + +function xbcl_SetFont(i,j) +{ + this.fontIntro = i; + this.fontOutro = j; +} + +function xbcl_GetFont() +{ + return [this.fontIntro, this.fontOutro]; +} + +function xbcl_setIndent(indent) +{ + this.i = indent; + if (this.i < 0) + { + this.i = 0; + this.space = false; + } + else + this.space = true; +} + +function xbcl_getIndent(indent) +{ + return this.i; +} + +function xbcl_writeItemDOMHTML( obj, s, flList, listObj ) +{ + var styleObj; + var outerDiv, innerLeft, innerRight; + var str; + var leftEdge = 0; + + styleObj = new xbStyle(obj); + styleObj.setVisibility('hidden'); + outerDiv = document.createElement( "DIV" ); + outerDiv.id = "DIV_" + obj.id; + styleObj = new xbStyle( outerDiv ); + styleObj.setWidth( this.width ); + + if ( flList ) + { + innerLeft = document.createElement( "DIV" ); + innerLeft.style.position = "absolute"; + innerLeft.style.valign = "middle"; + leftEdge = 15; + + styleObj = new xbStyle( innerLeft ); + styleObj.setWidth( 15 ); + styleObj.setBackgroundColor( "transparent" ); + + if ( listObj.visible ) + str = ''; + else + str = ''; + + innerLeft.innerHTML = str; + outerDiv.appendChild( innerLeft ); + } + else if ( this.space ) + leftEdge = 15; + + innerRight = document.createElement( "DIV" ); + innerRight.noWrap = true; + innerRight.style.position = "absolute"; + + styleObj = new xbStyle( innerRight ); + styleObj.setLeft( leftEdge + ( this.l * this.i ) ); + styleObj.setWidth( this.width - 15 - this.l * this.i ); + styleObj.setBackgroundColor( "transparent" ); + + // start of change by Mark Filanowicz 02-22-2002 + if ( flList ) + { + s = this.fontIntro + '' + s + this.fontOutro; + } + else + { + s = this.fontIntro + s + this.fontOutro; + } + // end of change by Mark Filanowicz 02-22-2002 + + + innerRight.innerHTML = s; + outerDiv.appendChild( innerRight ); + + obj.appendChild( outerDiv ); + + return; +} + +function xbcl_writeItem( obj, s, flList, listObj ) +{ + var cellStyle = ''; + var str = ''; + var styleObj = new xbStyle( obj ); + + styleObj.setVisibility( 'hidden' ); + + if ( document.body && document.body.style ) + cellStyle = ' style="background-color: transparent;"'; + + str += ''; + + if ( flList ) + { + str += ''; + } + else if (this.space) + str += ''; + + if (this.l>0 && this.i>0) + str += ''; + + str += '
'; + str += ''; + + if ( listObj.visible ) + str += ''; + else + str += ''; + + str += '  '; + + // start of change by Mark Filanowicz 02-22-2002 + if ( flList ) + { + str += this.fontIntro + '' + s + this.fontOutro; + } + else + { + str += this.fontIntro + s + this.fontOutro; + } + // end of change by Mark Filanowicz 02-22-2002 + + str += '
'; + + styleObj.setInnerHTML( str ); + + return; +} + +function xbcl_writeList() +{ + var item; + var i; + var flList; + + for ( i = 0; i < this.types.length; i++ ) + { + item = this.items[ i ]; + flList = ( this.types[ i ] == 'list' ); + + this._writeItem( item, this.strs[ i ], flList, this.lists[ i ] ); + + if ( flList && this.lists[ i ].visible ) + this.lists[ i ]._writeList(); + } + + this.built = true; + this.needsRewrite = false; + self.status = ''; +} + +function xbcl_showList() +{ + var item; + var styleObj; + var i; + + for (i = 0; i < this.types.length; i++) + { + item = this.items[i]; + styleObj = new xbStyle(item); + styleObj.setClipLeft(0); + styleObj.setClipRight(this.width); + styleObj.setClipTop(0); + if (item.height) + { + styleObj.setClipBottom(item.height); + styleObj.setHeight(item.height); + } + else + { + styleObj.setClipBottom(this.height); + styleObj.setHeight(this.height); + } + + if ( this.visible ) + styleObj.setVisibility( 'visible' ); + + var bg = item.oBgColor || this.bgColor; + if ((bg == null) || (bg == 'null')) + bg = ''; + + styleObj.setBackgroundColor(bg); + + if (this.types[i] == 'list' && this.lists[i].visible) + this.lists[i]._showList(); + } + this.shown = true; + this.needsUpdate = false; +} + +function xbcl_setImage(list, item, file) +{ + var id = '_img' + list.id; + var img = null; + + // for DOMHTML or IE4 use cross browser getElementById from xbStyle + // can't use it for NN4 since it only works for layers in NN4 + if (document.layers) + img = item.document.images[0]; + else + img = xbGetElementById(id); + + if (img) + img.src = file; +} + +function xbcl_getHeight() +{ + var totalHeight = 0; + var i; + + if (!this.visible) + return 0; + + for (i = 0; i < this.types.length; i++) + { + if (this.items[i].height) + totalHeight += this.items[i].height; + else + totalHeight += this.height; + + if ((this.types[i] == 'list') && this.lists[i].visible) + { + totalHeight += this.lists[i].getHeight(); + } + } + + return totalHeight; +} + +function xbcl_updateList(pVis, x, y) +{ + var currTop = y; + var item; + var styleObj; + var i; + + for (i = 0; i < this.types.length; i++) + { + item = this.items[i]; + styleObj = new xbStyle(item); + + if (this.visible && pVis) + { + styleObj.moveTo(x, currTop); + if (item.height) // allow custom heights for each item + currTop += item.height; + else + currTop += this.height; + + styleObj.setVisibility('visible'); + } + else + { + styleObj.setVisibility('hidden'); + } + + if (this.types[i] == 'list') + { + if (this.lists[i].visible) + { + if (!this.lists[i].built || this.lists[i].needsRewrite) + this.lists[i]._writeList(); + + if (!this.lists[i].shown || this.lists[i].needsUpdate) + this.lists[i]._showList(); + + xbcl_setImage(this.lists[i], item, this.expandedImageURL ); + } + else + xbcl_setImage(this.lists[i], item, this.collapsedImageURL ); + + if (this.lists[i].built) + currTop = this.lists[i]._updateList(this.visible && pVis, x, currTop); + } + } + return currTop; +} + +function xbcl_updateParent( pid, l ) +{ + var i; + + if ( !l ) + l = 0; + + this.pid = pid; + this.l = l; + + for ( i = 0; i < this.types.length; i++ ) + { + if ( this.types[ i ] == 'list' ) + { + this.lists[ i ]._updateParent( pid, l + 1 ); + } + } +} + +function xbcl_expand(i) +{ + xbcl_mLists[i].visible = !xbcl_mLists[i].visible; + + if (xbcl_mLists[i].onexpand != null) + xbcl_mLists[i].onexpand(xbcl_mLists[i].id); + + xbcl_mLists[xbcl_mLists[i].pid].rebuild(); + + if (xbcl_mLists[i].postexpand != null) + xbcl_mLists[i].postexpand(xbcl_mLists[i].id); +} + +function xbcl_build(x, y) +{ + this._updateParent(this.id); + this._writeList(); + this._showList(); + this._updateList(true, x, y); + this.x = x; + this.y = y; +} + +function xbcl_rebuild() +{ + this._updateList(true, this.x, this.y); +} + +function xbcl_getNewItem() +{ + var newItem = null; + + newItem = xbGetElementById('lItem' + xbcl_item_id); + + if (!newItem) + { + if (document.all && !document.getElementById) + { + var parentElement = this.parentElement; + if (!parentElement) + parentElement = document.body; + + parentElement.insertAdjacentHTML('beforeEnd', '
'); + newItem = xbGetElementById('lItem' + xbcl_item_id); + } + else if (document.layers) + { + if (this.parentElement) + newItem = new Layer(this.width, this.parentElement); + else + newItem = new Layer(this.width); + } + else if (document.createElement) + { + newItem = document.createElement('div'); + newItem.id= 'lItem' + xbcl_item_id; + newItem.style.position = 'absolute'; + + if (this.parentElement) + this.parentElement.appendChild(newItem); + else + document.body.appendChild(newItem); + } + } + + return newItem; +} + +function xbcl_addItem(str, bgColor, item) +{ + if (!item) + item = this._getNewItem(); + + if (!item) + return; + + if (bgColor) + item.oBgColor = bgColor; + + this.items[this.items.length] = item; + this.types[this.types.length] = 'item'; + this.strs[this.strs.length] = str; + ++xbcl_item_id; + + if ( this.built ) + { + this._writeItem( item, str, false ); + xbcl_mLists[this.pid].rebuild(); + if ( this.visible ) + this._showList(); + else + this.needsUpdate = true; + } + + return item; +} + +function xbcl_addList(list, str, bgColor, item) +{ + if (!item) + item = this._getNewItem(); + + if (!item) + return; + + if (bgColor) + item.oBgColor = bgColor; + + this.lists[this.items.length] = list; + this.items[this.items.length] = item; + this.types[this.types.length] = 'list'; + this.strs[this.strs.length] = str; + ++xbcl_item_id; + + list.parentList = this; + + list.pid = this.pid; + list.l = this.l + 1; + + if ( this.built ) + { + this._writeItem( item, str, true, list ); + xbcl_mLists[ this.pid ].rebuild(); + if ( this.visible ) + this._showList(); + else + this.needsUpdate = true; + } + + return item; +} + +List.prototype.setIndent = xbcl_setIndent; +List.prototype.getIndent = xbcl_getIndent; +List.prototype.addItem = xbcl_addItem; +List.prototype.addList = xbcl_addList; +List.prototype.build = xbcl_build; +List.prototype.rebuild = xbcl_rebuild; +List.prototype.setFont = xbcl_SetFont; +List.prototype.getFont = xbcl_GetFont; +List.prototype.getHeight = xbcl_getHeight; + +List.prototype._writeList = xbcl_writeList; +List.prototype._getNewItem = xbcl_getNewItem; + +if ( document.getElementById && document.createElement ) + List.prototype._writeItem = xbcl_writeItemDOMHTML; +else + List.prototype._writeItem = xbcl_writeItem; + +List.prototype._showList = xbcl_showList; +List.prototype._updateList = xbcl_updateList; +List.prototype._updateParent = xbcl_updateParent; + +List.prototype.onexpand = null; +List.prototype.postexpand = null; +List.prototype.lists = null; // sublists +List.prototype.items = null; // layers +List.prototype.types = null; // type +List.prototype.strs = null; // content +List.prototype.x = 0; +List.prototype.y = 0; +List.prototype.visible = false; +List.prototype.id = -1; +List.prototype.i = 18; +List.prototype.space = true; +List.prototype.pid = 0; +List.prototype.fontIntro = ''; +List.prototype.fontOutro = ''; +List.prototype.width = 350; +List.prototype.height = 22; +List.prototype.built = false; +List.prototype.shown = false; +List.prototype.needsUpdate = false; +List.prototype.needsRewrite = false; +List.prototype.l = 0; +List.prototype.bgColor = null; +List.prototype.parentList = null; +List.prototype.parentElement = null; diff --git a/slides/browser/xbDOM.js b/slides/browser/xbDOM.js new file mode 100644 index 000000000..d1a3ab374 --- /dev/null +++ b/slides/browser/xbDOM.js @@ -0,0 +1,293 @@ +/* +xbDOM.js v 0.004 2002-03-09 + +Contributor(s): Bob Clary, Netscape Communications, Copyright 2001, 2002 + +Netscape grants you a royalty free license to use, modify and +distribute this software provided that this copyright notice +appears on all copies. This software is provided "AS IS," +without a warranty of any kind. + +Change Log: + +2002-03-15: v 0.004 + bclary - + fix bug in bugfix for 0.003 in xbGetElementsByName + to not confuse elements with length properties with arrays + +2002-03-09: v 0.003 + bclary - + fix bug in xbGetElementsByName in Internet Explorer when there is + only one instance of an element with name value. + +2002-01-19: v 0.002 + bclary - + nav4FindElementsByName + removed erroneous obj and return + added search of form elements + xbFindElementsByNameAndType + renamed from FindElementsByNameAndType + removed erroneouse obj and return + xbSetInnerHTML + ported over from xbStyle since it is more + appropriate here. + +2001-11-27: v 0.01 + bclary - + removed from xbStyle +*/ + +function xbToInt(s) +{ + var i = parseInt(s, 10); + if (isNaN(i)) + i = 0; + + return i; +} + +function xbGetWindowWidth(windowRef) +{ + var width = 0; + + if (!windowRef) + windowRef = window; + + if (typeof(windowRef.innerWidth) == 'number') + width = windowRef.innerWidth; + else if (windowRef.document.body && typeof(windowRef.document.body.clientWidth) == 'number') + width = windowRef.document.body.clientWidth; + + return width; +} + +function xbGetWindowHeight(windowRef) +{ + var height = 0; + + if (!windowRef) + windowRef = window; + + if (typeof(windowRef.innerWidth) == 'number') + height = windowRef.innerHeight; + else if (windowRef.document.body && typeof(windowRef.document.body.clientWidth) == 'number') + height = windowRef.document.body.clientHeight; + + return height; +} + +function nav4FindLayer(doc, id) +{ + var i; + var subdoc; + var obj; + + for (i = 0; i < doc.layers.length; ++i) + { + if (doc.layers[i].id && id == doc.layers[i].id) + return doc.layers[i]; + + subdoc = doc.layers[i].document; + obj = nav4FindLayer(subdoc, id); + if (obj != null) + return obj; + } + return null; +} + +function nav4FindElementsByName(doc, name, elmlist) +{ + var i; + var j; + var subdoc; + + for (i = 0; i < doc.images.length; ++i) + { + if (doc.images[i].name && name == doc.images[i].name) + elmlist[elmlist.length] = doc.images[i]; + } + + for (i = 0; i < doc.forms.length; ++i) + { + for (j = 0; j < doc.forms[i].elements.length; j++) + if (doc.forms[i].elements[j].name && name == doc.forms[i].elements[j].name) + elmlist[elmlist.length] = doc.forms[i].elements[j]; + + if (doc.forms[i].name && name == doc.forms[i].name) + elmlist[elmlist.length] = doc.forms[i]; + } + + for (i = 0; i < doc.anchors.length; ++i) + { + if (doc.anchors[i].name && name == doc.anchors[i].name) + elmlist[elmlist.length] = doc.anchors[i]; + } + + for (i = 0; i < doc.links.length; ++i) + { + if (doc.links[i].name && name == doc.links[i].name) + elmlist[elmlist.length] = doc.links[i]; + } + + for (i = 0; i < doc.applets.length; ++i) + { + if (doc.applets[i].name && name == doc.applets[i].name) + elmlist[elmlist.length] = doc.applets[i]; + } + + for (i = 0; i < doc.embeds.length; ++i) + { + if (doc.embeds[i].name && name == doc.embeds[i].name) + elmlist[elmlist.length] = doc.embeds[i]; + } + + for (i = 0; i < doc.layers.length; ++i) + { + if (doc.layers[i].name && name == doc.layers[i].name) + elmlist[elmlist.length] = doc.layers[i]; + + subdoc = doc.layers[i].document; + nav4FindElementsByName(subdoc, name, elmlist); + } +} + +function xbGetElementsByNameAndType(name, type, windowRef) +{ + if (!windowRef) + windowRef = window; + + var elmlist = new Array(); + + xbFindElementsByNameAndType(windowRef.document, name, type, elmlist); + + return elmlist; +} + +function xbFindElementsByNameAndType(doc, name, type, elmlist) +{ + var i; + var subdoc; + + for (i = 0; i < doc[type].length; ++i) + { + if (doc[type][i].name && name == doc[type][i].name) + elmlist[elmlist.length] = doc[type][i]; + } + + if (doc.layers) + { + for (i = 0; i < doc.layers.length; ++i) + { + subdoc = doc.layers[i].document; + xbFindElementsByNameAndType(subdoc, name, type, elmlist); + } + } +} + +//alert("layers: " + document.layers + " all: " + document.all); + +if (document.layers) +{ + xbGetElementById = function (id, windowRef) + { + if (!windowRef) + windowRef = window; + + return nav4FindLayer(windowRef.document, id); + }; + + xbGetElementsByName = function (name, windowRef) + { + if (!windowRef) + windowRef = window; + + var elmlist = new Array(); + + nav4FindElementsByName(windowRef.document, name, elmlist); + + return elmlist; + }; + +} +else if (document.all) +{ + xbGetElementById = function (id, windowRef) + { + if (!windowRef) windowRef = window; + var elm = windowRef.document.all[id]; + if (!elm) elm = null; + return elm; + }; + + xbGetElementsByName = function (name, windowRef) + { + if (!windowRef) windowRef = window; + + var i; + var idnamelist = windowRef.document.all.tags(name); + var elmlist = new Array(); + + if (!idnamelist) { + return null; + } + + if (!idnamelist.length || idnamelist.name == name) + { + if (idnamelist) + elmlist[elmlist.length] = idnamelist; + } + else + { + for (i = 0; i < idnamelist.length; i++) + { + if (idnamelist.item(i).tagName == name) + elmlist[elmlist.length] = idnamelist[i]; + } + } + + return elmlist; + } + +} +else if (document.getElementById) +{ + xbGetElementById = function (id, windowRef) { if (!windowRef) windowRef = window; return windowRef.document.getElementById(id); }; + xbGetElementsByName = function (name, windowRef) { if (!windowRef) windowRef = window; return windowRef.document.getElementsByTagName(name); }; +} +else +{ + xbGetElementById = function (id, windowRef) { return null; } + xbGetElementsByName = function (name, windowRef) { return new Array(); } +} + +if (typeof(window.pageXOffset) == 'number') +{ + xbGetPageScrollX = function (windowRef) { if (!windowRef) windowRef = window; return windowRef.pageXOffset; }; + xbGetPageScrollY = function (windowRef) { if (!windowRef) windowRef = window; return windowRef.pageYOffset; }; +} +else if (document.all) +{ + xbGetPageScrollX = function (windowRef) { if (!windowRef) windowRef = window; return windowRef.document.body.scrollLeft; }; + xbGetPageScrollY = function (windowRef) { if (!windowRef) windowRef = window; return windowRef.document.body.scrollTop; }; +} +else +{ + xbGetPageScrollX = function (windowRef) { return 0; }; + xbGetPageScrollY = function (windowRef) { return 0; }; +} + +if (document.layers) +{ + xbSetInnerHTML = function (element, str) { element.document.write(str); element.document.close(); }; +} +else if (document.all || document.getElementById) +{ + xbSetInnerHTML = function (element, str) { if (typeof(element.innerHTML) != 'undefined') element.innerHTML = str; }; +} +else +{ + xbSetInnerHTML = function (element, str) {}; +} + + +// eof: xbDOM.js diff --git a/slides/browser/xbDebug.js b/slides/browser/xbDebug.js new file mode 100644 index 000000000..000f8c77e --- /dev/null +++ b/slides/browser/xbDebug.js @@ -0,0 +1,223 @@ +/* +xbDebug.js revision: 0.003 2002-02-26 + +Contributor(s): Bob Clary, Netscape Communications, Copyright 2001 + +Netscape grants you a royalty free license to use, modify and +distribute this software provided that this copyright notice +appears on all copies. This software is provided "AS IS," +without a warranty of any kind. + +ChangeLog: + +2002-02-25: bclary - modified xbDebugTraceOject to make sure + that original versions of wrapped functions were not + rewrapped. This had caused an infinite loop in IE. + +2002-02-07: bclary - modified xbDebug.prototype.close to not null + the debug window reference. This can cause problems with + Internet Explorer if the page is refreshed. These issues will + be addressed at a later date. +*/ + +function xbDebug() +{ + this.on = false; + this.stack = new Array(); + this.debugwindow = null; + this.execprofile = new Object(); +} + +xbDebug.prototype.push = function () +{ + this.stack[this.stack.length] = this.on; + this.on = true; +} + +xbDebug.prototype.pop = function () +{ + this.on = this.stack[this.stack.length - 1]; + --this.stack.length; +} + +xbDebug.prototype.open = function () +{ + if (this.debugwindow && !this.debugwindow.closed) + this.close(); + + this.debugwindow = window.open('about:blank', 'DEBUGWINDOW', 'height=400,width=600,resizable=yes,scrollbars=yes'); + + this.debugwindow.title = 'xbDebug Window'; + this.debugwindow.document.write('xbDebug Window

Javascript Debug Window

'); + this.debugwindow.focus(); +} + +xbDebug.prototype.close = function () +{ + if (!this.debugwindow) + return; + + if (!this.debugwindow.closed) + this.debugwindow.close(); + + // bc 2002-02-07, other windows may still hold a reference to this: this.debugwindow = null; +} + +xbDebug.prototype.dump = function (msg) +{ + if (!this.on) + return; + + if (!this.debugwindow || this.debugwindow.closed) + this.open(); + + this.debugwindow.document.write(msg + '
'); + + return; +} + +var xbDEBUG = new xbDebug(); + +window.onunload = function () { xbDEBUG.close(); } + +function xbDebugGetFunctionName(funcref) +{ + + if (funcref.name) + return funcref.name; + + var name = funcref + ''; + name = name.substring(name.indexOf(' ') + 1, name.indexOf('(')); + funcref.name = name; + + return name; +} + +function xbDebugCreateFunctionWrapper(scopename, funcname, precall, postcall) +{ + var wrappedfunc; + var scopeobject = eval(scopename); + var funcref = scopeobject[funcname]; + + scopeobject['xbDebug_orig_' + funcname] = funcref; + + wrappedfunc = function () + { + precall(scopename, funcname, arguments); + var rv = funcref.apply(this, arguments); + postcall(scopename, funcname, arguments, rv); + return rv; + }; + + if (typeof(funcref.constructor) != 'undefined') + wrappedfunc.constructor = funcref.constuctor; + + if (typeof(funcref.prototype) != 'undefined') + wrappedfunc.prototype = funcref.prototype; + + scopeobject[funcname] = wrappedfunc; +} + +function xbDebugPersistToString(obj) +{ + var s = ''; + var p; + + if (obj == null) + return 'null'; + + switch(typeof(obj)) + { + case 'number': + return obj; + case 'string': + return '"' + obj + '"'; + case 'undefined': + return 'undefined'; + case 'boolean': + return obj + ''; + } + + return '[' + xbDebugGetFunctionName(obj.constructor) + ']'; +} + +function xbDebugTraceBefore(scopename, funcname, funcarguments) +{ + var i; + var s = ''; + var execprofile = xbDEBUG.execprofile[scopename + '.' + funcname]; + if (!execprofile) + execprofile = xbDEBUG.execprofile[scopename + '.' + funcname] = { started: 0, time: 0, count: 0 }; + + for (i = 0; i < funcarguments.length; i++) + { + s += xbDebugPersistToString(funcarguments[i]); + if (i < funcarguments.length - 1) + s += ', '; + } + + xbDEBUG.dump('enter ' + scopename + '.' + funcname + '(' + s + ')'); + execprofile.started = (new Date()).getTime(); +} + +function xbDebugTraceAfter(scopename, funcname, funcarguments, rv) +{ + var i; + var s = ''; + var execprofile = xbDEBUG.execprofile[scopename + '.' + funcname]; + if (!execprofile) + xbDEBUG.dump('xbDebugTraceAfter: execprofile not created for ' + scopename + '.' + funcname); + else if (execprofile.started == 0) + xbDEBUG.dump('xbDebugTraceAfter: execprofile.started == 0 for ' + scopename + '.' + funcname); + else + { + execprofile.time += (new Date()).getTime() - execprofile.started; + execprofile.count++; + execprofile.started = 0; + } + + for (i = 0; i < funcarguments.length; i++) + { + s += xbDebugPersistToString(funcarguments[i]); + if (i < funcarguments.length - 1) + s += ', '; + } + + xbDEBUG.dump('exit ' + scopename + '.' + funcname + '(' + s + ')==' + xbDebugPersistToString(rv)); +} + +function xbDebugTraceFunction(scopename, funcname) +{ + xbDebugCreateFunctionWrapper(scopename, funcname, xbDebugTraceBefore, xbDebugTraceAfter); +} + +function xbDebugTraceObject(scopename, objname) +{ + var objref = eval(scopename + '.' + objname); + var p; + + if (!objref || !objref.prototype) + return; + + for (p in objref.prototype) + { + if (typeof(objref.prototype[p]) == 'function' && (p+'').indexOf('xbDebug_orig') == -1) + { + xbDebugCreateFunctionWrapper(scopename + '.' + objname + '.prototype', p + '', xbDebugTraceBefore, xbDebugTraceAfter); + } + } +} + +function xbDebugDumpProfile() +{ + var p; + var execprofile; + var avg; + + for (p in xbDEBUG.execprofile) + { + execprofile = xbDEBUG.execprofile[p]; + avg = Math.round ( 100 * execprofile.time/execprofile.count) /100; + xbDEBUG.dump('Execution profile ' + p + ' called ' + execprofile.count + ' times. Total time=' + execprofile.time + 'ms. Avg Time=' + avg + 'ms.'); + } +} diff --git a/slides/browser/xbStyle.js b/slides/browser/xbStyle.js new file mode 100644 index 000000000..6a4898588 --- /dev/null +++ b/slides/browser/xbStyle.js @@ -0,0 +1,1349 @@ +/* +xbStyle.js Revision: 0.202 2002-02-11 + +Contributor(s): Bob Clary, Original Work, Copyright 2000 + Bob Clary, Netscape Communications, Copyright 2001 + +Netscape grants you a royalty free license to use, modify and +distribute this software provided that this copyright notice +appears on all copies. This software is provided "AS IS," +without a warranty of any kind. + +Change Log: + +2001-07-19: bclary - fixed function cssStyleGetLeft() and cssStyleGetTop() to + correctly handle the case where the initial style.left/style.top + are not initialized. This fixes positioning for relatively positioned + DIVS and as a result fixes behavior for ILAYERs exposed as relatively + positioned divs. +2001-10-02: bclary - added missing xbClipRect.getHeight/setHeight methods. + +2001-11-20: bclary - removed use of practical browser sniffer, + added object sniffing, and limited support for opera + note opera returns ints for HTMLElement.style.[left|top|height|width] etc. + +2002-02-11: v 0.201 bclary - with the help of Rob Johnston + found that the "if (document.getElementsByName)" test excluded + IE4. Added a test for document.all to enable IE4 to fully use + xbStyle. + +2002-03-12: v 0.202 Daniel Resare contributed a patch to cssStyleSetPage[X|Y]() which + handles the case where the element has no parentNode. +*/ + +function xbStyleNotSupported() {} + +function xbStyleNotSupportStringValue(propname) { xbDEBUG.dump(propname + ' is not supported in this browser'); return '';}; + +///////////////////////////////////////////////////////////// +// xbClipRect + +function xbClipRect(a1, a2, a3, a4) +{ + this.top = 0; + this.right = 0; + this.bottom = 0; + this.left = 0; + + if (typeof(a1) == 'string') + { + var val; + var ca; + var i; + + if (a1.indexOf('rect(') == 0) + { + // I would have preferred [0-9]+[a-zA-Z]+ for a regexp + // but NN4 returns null for that. + ca = a1.substring(5, a1.length-1).match(/-?[0-9a-zA-Z]+/g); + for (i = 0; i < 4; ++i) + { + val = xbToInt(ca[i]); + if (val != 0 && ca[i].indexOf('px') == -1) + { + xbDEBUG.dump('xbClipRect: A clipping region ' + a1 + ' was detected that did not use pixels as units. Click Ok to continue, Cancel to Abort'); + return; + } + ca[i] = val; + } + this.top = ca[0]; + this.right = ca[1]; + this.bottom = ca[2]; + this.left = ca[3]; + } + } + else if (typeof(a1) == 'number' && typeof(a2) == 'number' && typeof(a3) == 'number' && typeof(a4) == 'number') + { + this.top = a1; + this.right = a2; + this.bottom = a3; + this.left = a4; + } +} + +xbClipRect.prototype.top = 0; +xbClipRect.prototype.right = 0; +xbClipRect.prototype.bottom = 0; +xbClipRect.prototype.left = 0; + + +function xbClipRectGetWidth() +{ + return this.right - this.left; +} +xbClipRect.prototype.getWidth = xbClipRectGetWidth; + +function xbClipRectSetWidth(width) +{ + this.right = this.left + width; +} +xbClipRect.prototype.setWidth = xbClipRectSetWidth; + +function xbClipRectGetHeight() +{ + return this.bottom - this.top; +} +xbClipRect.prototype.getHeight = xbClipRectGetHeight; + +function xbClipRectSetHeight(height) +{ + this.bottom = this.top + height; +} +xbClipRect.prototype.setHeight = xbClipRectSetHeight; + +function xbClipRectToString() +{ + return 'rect(' + this.top + 'px ' + this.right + 'px ' + this.bottom + 'px ' + this.left + 'px )' ; +} +xbClipRect.prototype.toString = xbClipRectToString; + +///////////////////////////////////////////////////////////// +// xbStyle +// +// Note Opera violates the standard by cascading the effective values +// into the HTMLElement.style object. We can use IE's HTMLElement.currentStyle +// to get the effective values. In Gecko we will use the W3 DOM Style Standard getComputedStyle + +function xbStyle(obj, position) +{ + if (typeof(obj) == 'object' && typeof(obj.style) != 'undefined') + this.styleObj = obj.style; + else if (document.layers) // NN4 + { + if (typeof(position) == 'undefined') + position = ''; + + this.styleObj = obj; + this.styleObj.position = position; + } + this.object = obj; +} + +xbStyle.prototype.styleObj = null; +xbStyle.prototype.object = null; + +///////////////////////////////////////////////////////////// +// xbStyle.getEffectiveValue() +// note that xbStyle's constructor uses the currentStyle object +// for IE5+ and that Opera's style object contains computed values +// already. Netscape Navigator's layer object also contains the +// computed values as well. Note that IE4 will not return the +// computed values. + +function xbStyleGetEffectiveValue(propname) +{ + var value = null; + + // W3/Gecko + if (document.defaultView && document.defaultView.getComputedStyle) + { + if (navigator.family == 'gecko') + { + // xxxHack: work around Gecko getComputedStyle bugs... + switch(propname) + { + case 'clip': + return this.styleObj[propname]; + case 'top': + if (navigator.family == 'gecko' && navigator.version < 0.96 && this.styleObj.position == 'relative') + return this.object.offsetTop; + case 'left': + if (navigator.family == 'gecko' && navigator.version < 0.96 && this.styleObj.position == 'relative') + return this.object.offsetLeft; + } + } + // Note that propname is the name of the property in the CSS Style + // Object. However the W3 method getPropertyValue takes the actual + // property name from the CSS Style rule, i.e., propname is + // 'backgroundColor' but getPropertyValue expects 'background-color'. + + var capIndex; + var cappropname = propname; + while ( (capIndex = cappropname.search(/[A-Z]/)) != -1) + { + if (capIndex != -1) + cappropname = cappropname.substring(0, capIndex) + '-' + cappropname.substring(capIndex, capIndex).toLowerCase() + cappropname.substr(capIndex+1); + } + + value = document.defaultView.getComputedStyle(this.object, '').getPropertyValue(cappropname); + + // xxxHack for Gecko: + if (!value && this.styleObj[propname]) + value = this.styleObj[propname]; + } + else if (typeof(this.styleObj[propname]) == 'undefined') + value = xbStyleNotSupportStringValue(propname); + else + { + if (navigator.family != 'ie4' || navigator.version < 5) + { + // IE4+, Opera, NN4 + value = this.styleObj[propname]; + } + else + { + // IE5+ + value = this.object.currentStyle[propname]; + if (!value) + value = this.styleObj[propname]; + } + } + + return value; +} + +///////////////////////////////////////////////////////////// +// xbStyle.getClip() + +function cssStyleGetClip() +{ + var clip = this.getEffectiveValue('clip'); + + // hack opera + if (clip == 'rect()') + clip = ''; + + if (clip == '') + clip = 'rect(0px ' + this.getWidth() + 'px ' + this.getHeight() + 'px 0px)'; + + return clip; +} + +function nsxbStyleGetClip() +{ + var clip = this.styleObj.clip; + var rect = new xbClipRect(clip.top, clip.right, clip.bottom, clip.left); + return rect.toString(); +} + +///////////////////////////////////////////////////////////// +// xbStyle.setClip() + +function cssStyleSetClip(sClipString) +{ + this.styleObj.clip = sClipString; +} + +function nsxbStyleSetClip(sClipString) +{ + var rect = new xbClipRect(sClipString); + this.styleObj.clip.top = rect.top; + this.styleObj.clip.right = rect.right; + this.styleObj.clip.bottom = rect.bottom; + this.styleObj.clip.left = rect.left; +} + +///////////////////////////////////////////////////////////// +// xbStyle.getClipTop() + +function cssStyleGetClipTop() +{ + var clip = this.getClip() + var rect = new xbClipRect(clip); + return rect.top; +} + +function nsxbStyleGetClipTop() +{ + return this.styleObj.clip.top; +} + +///////////////////////////////////////////////////////////// +// xbStyle.setClipTop() + +function cssStyleSetClipTop(top) +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + rect.top = top; + this.styleObj.clip = rect.toString(); +} + +function nsxbStyleSetClipTop(top) +{ + return this.styleObj.clip.top = top; +} + +///////////////////////////////////////////////////////////// +// xbStyle.getClipRight() + +function cssStyleGetClipRight() +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + return rect.right; +} + +function nsxbStyleGetClipRight() +{ + return this.styleObj.clip.right; +} + +///////////////////////////////////////////////////////////// +// xbStyle.setClipRight() + +function cssStyleSetClipRight(right) +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + rect.right = right; + this.styleObj.clip = rect.toString(); +} + +function nsxbStyleSetClipRight(right) +{ + return this.styleObj.clip.right = right; +} + +///////////////////////////////////////////////////////////// +// xbStyle.getClipBottom() + +function cssStyleGetClipBottom() +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + return rect.bottom; +} + +function nsxbStyleGetClipBottom() +{ + return this.styleObj.clip.bottom; +} + +///////////////////////////////////////////////////////////// +// xbStyle.setClipBottom() + +function cssStyleSetClipBottom(bottom) +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + rect.bottom = bottom; + this.styleObj.clip = rect.toString(); +} + +function nsxbStyleSetClipBottom(bottom) +{ + return this.styleObj.clip.bottom = bottom; +} + +///////////////////////////////////////////////////////////// +// xbStyle.getClipLeft() + +function cssStyleGetClipLeft() +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + return rect.left; +} + +function nsxbStyleGetClipLeft() +{ + return this.styleObj.clip.left; +} + +///////////////////////////////////////////////////////////// +// xbStyle.setClipLeft() + +function cssStyleSetClipLeft(left) +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + rect.left = left; + this.styleObj.clip = rect.toString(); +} + +function nsxbStyleSetClipLeft(left) +{ + return this.styleObj.clip.left = left; +} + +///////////////////////////////////////////////////////////// +// xbStyle.getClipWidth() + +function cssStyleGetClipWidth() +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + return rect.getWidth(); +} + +function nsxbStyleGetClipWidth() +{ + return this.styleObj.clip.width; +} + +///////////////////////////////////////////////////////////// +// xbStyle.setClipWidth() + +function cssStyleSetClipWidth(width) +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + rect.setWidth(width); + this.styleObj.clip = rect.toString(); +} + +function nsxbStyleSetClipWidth(width) +{ + return this.styleObj.clip.width = width; +} + +///////////////////////////////////////////////////////////// +// xbStyle.getClipHeight() + +function cssStyleGetClipHeight() +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + return rect.getHeight(); +} + +function nsxbStyleGetClipHeight() +{ + return this.styleObj.clip.height; +} + +///////////////////////////////////////////////////////////// +// xbStyle.setClipHeight() + +function cssStyleSetClipHeight(height) +{ + var clip = this.getClip(); + var rect = new xbClipRect(clip); + rect.setHeight(height); + this.styleObj.clip = rect.toString(); +} + +function nsxbStyleSetClipHeight(height) +{ + return this.styleObj.clip.height = height; +} + +// the CSS attributes left,top are for absolutely positioned elements +// measured relative to the containing element. for relatively positioned +// elements, left,top are measured from the element's normal inline position. +// getLeft(), setLeft() operate on this type of coordinate. +// +// to allow dynamic positioning the getOffsetXXX and setOffsetXXX methods are +// defined to return and set the position of either an absolutely or relatively +// positioned element relative to the containing element. +// +// + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getLeft() + +function cssStyleGetLeft() +{ + var left = this.getEffectiveValue('left'); + if (typeof(left) == 'number') + return left; + + if (left != '' && left.indexOf('px') == -1) + { + xbDEBUG.dump('xbStyle.getLeft: Element ID=' + this.object.id + ' does not use pixels as units. left=' + left + ' Click Ok to continue, Cancel to Abort'); + return 0; + } + + if (left == '') + left = this.styleObj.left = '0px'; + + return xbToInt(left); +} + +function nsxbStyleGetLeft() +{ + return this.styleObj.left; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setLeft() + +function cssStyleSetLeft(left) +{ + if (typeof(this.styleObj.left) == 'number') + this.styleObj.left = left; + else + this.styleObj.left = left + 'px'; +} + +function nsxbStyleSetLeft(left) +{ + this.styleObj.left = left; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getTop() + +function cssStyleGetTop() +{ + var top = this.getEffectiveValue('top'); + if (typeof(top) == 'number') + return top; + + if (top != '' && top.indexOf('px') == -1) + { + xbDEBUG.dump('xbStyle.getTop: Element ID=' + this.object.id + ' does not use pixels as units. top=' + top + ' Click Ok to continue, Cancel to Abort'); + return 0; + } + + if (top == '') + top = this.styleObj.top = '0px'; + + return xbToInt(top); +} + +function nsxbStyleGetTop() +{ + return this.styleObj.top; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setTop() + +function cssStyleSetTop(top) +{ + if (typeof(this.styleObj.top) == 'number') + this.styleObj.top = top; + else + this.styleObj.top = top + 'px'; +} + +function nsxbStyleSetTop(top) +{ + this.styleObj.top = top; +} + + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getPageX() + +function cssStyleGetPageX() +{ + var x = 0; + var elm = this.object; + var elmstyle; + var position; + + //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the + // effective position attribute , attempt to use offsetXXX + + if (typeof(elm.offsetLeft) == 'number') + { + while (elm) + { + x += elm.offsetLeft; + elm = elm.offsetParent; + } + } + else + { + while (elm) + { + if (elm.style) + { + elmstyle = new xbStyle(elm); + position = elmstyle.getEffectiveValue('position'); + if (position != '' && position != 'static') + x += elmstyle.getLeft(); + } + elm = elm.parentNode; + } + } + + return x; +} + +function nsxbStyleGetPageX() +{ + return this.styleObj.pageX; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setPageX() + +function cssStyleSetPageX(x) +{ + var xParent = 0; + var elm = this.object.parentNode; + var elmstyle; + var position; + + //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the + // effective position attribute , attempt to use offsetXXX + + if (elm && typeof(elm.offsetLeft) == 'number') + { + while (elm) + { + xParent += elm.offsetLeft; + elm = elm.offsetParent; + } + } + else + { + while (elm) + { + if (elm.style) + { + elmstyle = new xbStyle(elm); + position = elmstyle.getEffectiveValue('position'); + if (position != '' && position != 'static') + xParent += elmstyle.getLeft(); + } + elm = elm.parentNode; + } + } + + x -= xParent; + + this.setLeft(x); +} + +function nsxbStyleSetPageX(x) +{ + this.styleObj.x = this.styleObj.x + x - this.styleObj.pageX; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getPageY() + +function cssStyleGetPageY() +{ + var y = 0; + var elm = this.object; + var elmstyle; + var position; + + //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the + // effective position attribute , attempt to use offsetXXX + + if (typeof(elm.offsetTop) == 'number') + { + while (elm) + { + y += elm.offsetTop; + elm = elm.offsetParent; + } + } + else + { + while (elm) + { + if (elm.style) + { + elmstyle = new xbStyle(elm); + position = elmstyle.getEffectiveValue('position'); + if (position != '' && position != 'static') + y += elmstyle.getTop(); + } + elm = elm.parentNode; + } + } + + return y; +} + +function nsxbStyleGetPageY() +{ + return this.styleObj.pageY; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setPageY() + +function cssStyleSetPageY(y) +{ + var yParent = 0; + var elm = this.object.parentNode; + var elmstyle; + var position; + + //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the + // effective position attribute , attempt to use offsetXXX + + if (elm && typeof(elm.offsetTop) == 'number') + { + while (elm) + { + yParent += elm.offsetTop; + elm = elm.offsetParent; + } + } + else + { + while (elm) + { + if (elm.style) + { + elmstyle = new xbStyle(elm); + position = elmstyle.getEffectiveValue('position'); + if (position != '' && position != 'static') + yParent += elmstyle.getTop(); + } + elm = elm.parentNode; + } + } + + y -= yParent; + + this.setTop(y); +} + +function nsxbStyleSetPageY(y) +{ + this.styleObj.y = this.styleObj.y + y - this.styleObj.pageY; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getHeight() + +function cssStyleGetHeight() +{ + var height = this.getEffectiveValue('height'); + if (typeof(height) == 'number') + return height; + + if ((height == 'auto' || height.indexOf('%') != -1) && typeof(this.object.offsetHeight) == 'number') + height = this.object.offsetHeight + 'px'; + + if (height != '' && height != 'auto' && height.indexOf('px') == -1) + { + xbDEBUG.dump('xbStyle.getHeight: Element ID=' + this.object.id + ' does not use pixels as units. height=' + height + ' Click Ok to continue, Cancel to Abort'); + return 0; + } + + height = xbToInt(height); + + return height; +} + +function nsxbStyleGetHeight() +{ + //if (this.styleObj.document && this.styleObj.document.height) + // return this.styleObj.document.height; + + return this.styleObj.clip.height; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setHeight() + +function cssStyleSetHeight(height) +{ + if (typeof(this.styleObj.height) == 'number') + this.styleObj.height = height; + else + this.styleObj.height = height + 'px'; +} + +function nsxbStyleSetHeight(height) +{ + this.styleObj.clip.height = height; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getWidth() + +function cssStyleGetWidth() +{ + var width = this.getEffectiveValue('width'); + if (typeof(width) == 'number') + return width; + + if ((width == 'auto' || width.indexOf('%') != -1) && typeof(this.object.offsetWidth) == 'number') + width = this.object.offsetWidth + 'px'; + + if (width != '' && width != 'auto' && width.indexOf('px') == -1) + { + xbDEBUG.dump('xbStyle.getWidth: Element ID=' + this.object.id + ' does not use pixels as units. width=' + width + ' Click Ok to continue, Cancel to Abort'); + return 0; + } + + width = xbToInt(width); + + return width; +} + +function nsxbStyleGetWidth() +{ + //if (this.styleObj.document && this.styleObj.document.width) + // return this.styleObj.document.width; + + return this.styleObj.clip.width; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setWidth() + +function cssStyleSetWidth(width) +{ + if (typeof(this.styleObj.width) == 'number') + this.styleObj.width = width; + else + this.styleObj.width = width + 'px'; +} + +// netscape will not dynamically change the width of a +// layer. It will only happen upon a refresh. +function nsxbStyleSetWidth(width) +{ + this.styleObj.clip.width = width; +} + +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getVisibility() + +function cssStyleGetVisibility() +{ + return this.getEffectiveValue('visibility'); +} + +function nsxbStyleGetVisibility() +{ + switch(this.styleObj.visibility) + { + case 'hide': + return 'hidden'; + case 'show': + return 'visible'; + } + return ''; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setVisibility() + +function cssStyleSetVisibility(visibility) +{ + this.styleObj.visibility = visibility; +} + +function nsxbStyleSetVisibility(visibility) +{ + switch(visibility) + { + case 'hidden': + visibility = 'hide'; + break; + case 'visible': + visibility = 'show'; + break; + case 'inherit': + break; + default: + visibility = 'show'; + break; + } + this.styleObj.visibility = visibility; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getzIndex() + +function cssStyleGetzIndex() +{ + return xbToInt(this.getEffectiveValue('zIndex')); +} + +function nsxbStyleGetzIndex() +{ + return this.styleObj.zIndex; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setzIndex() + +function cssStyleSetzIndex(zIndex) +{ + this.styleObj.zIndex = zIndex; +} + +function nsxbStyleSetzIndex(zIndex) +{ + this.styleObj.zIndex = zIndex; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getBackgroundColor() + +function cssStyleGetBackgroundColor() +{ + return this.getEffectiveValue('backgroundColor'); +} + +function nsxbStyleGetBackgroundColor() +{ + return this.styleObj.bgColor; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setBackgroundColor() + +function cssStyleSetBackgroundColor(color) +{ + this.styleObj.backgroundColor = color; +} + +function nsxbStyleSetBackgroundColor(color) +{ + if (color) + { + this.styleObj.bgColor = color; + this.object.document.bgColor = color; + this.resizeTo(this.getWidth(), this.getHeight()); + } +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getColor() + +function cssStyleGetColor() +{ + return this.getEffectiveValue('color'); +} + +function nsxbStyleGetColor() +{ + return '#ffffff'; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setColor() + +function cssStyleSetColor(color) +{ + this.styleObj.color = color; +} + +function nsxbStyleSetColor(color) +{ + this.object.document.fgColor = color; +} + + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.moveAbove() + +function xbStyleMoveAbove(cont) +{ + this.setzIndex(cont.getzIndex()+1); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.moveBelow() + +function xbStyleMoveBelow(cont) +{ + var zindex = cont.getzIndex() - 1; + + this.setzIndex(zindex); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.moveBy() + +function xbStyleMoveBy(deltaX, deltaY) +{ + this.moveTo(this.getLeft() + deltaX, this.getTop() + deltaY); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.moveTo() + +function xbStyleMoveTo(x, y) +{ + this.setLeft(x); + this.setTop(y); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.moveToAbsolute() + +function xbStyleMoveToAbsolute(x, y) +{ + this.setPageX(x); + this.setPageY(y); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.resizeBy() + +function xbStyleResizeBy(deltaX, deltaY) +{ + this.setWidth( this.getWidth() + deltaX ); + this.setHeight( this.getHeight() + deltaY ); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.resizeTo() + +function xbStyleResizeTo(x, y) +{ + this.setWidth(x); + this.setHeight(y); +} + +//////////////////////////////////////////////////////////////////////// +// Navigator 4.x resizing... + +function nsxbStyleOnresize() +{ + if (saveInnerWidth != xbGetWindowWidth() || saveInnerHeight != xbGetWindowHeight()) + location.reload(); + + return false; +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.setInnerHTML() + +function xbSetInnerHTML(str) +{ + if (typeof(this.object.innerHTML) != 'undefined') + this.object.innerHTML = str; +} + +function nsxbSetInnerHTML(str) +{ + this.object.document.open('text/html'); + this.object.document.write(str); + this.object.document.close(); +} + +//////////////////////////////////////////////////////////////////////// +// Extensions to xbStyle that are not supported by Netscape Navigator 4 +// but that provide cross browser implementations of properties for +// Mozilla, Gecko, Netscape 6.x and Opera + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getBorderTopWidth() + +function cssStyleGetBorderTopWidth() +{ + return xbToInt(this.getEffectiveValue('borderTopWidth')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getBorderRightWidth() + +function cssStyleGetBorderRightWidth() +{ + return xbToInt(this.getEffectiveValue('borderRightWidth')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getBorderBottomWidth() + +function cssStyleGetBorderBottomWidth() +{ + return xbToInt(this.getEffectiveValue('borderLeftWidth')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getBorderLeftWidth() + +function cssStyleGetBorderLeftWidth() +{ + return xbToInt(this.getEffectiveValue('borderLeftWidth')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getMarginTop() + +function cssStyleGetMarginTop() +{ + return xbToInt(this.getEffectiveValue('marginTop')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getMarginRight() + +function cssStyleGetMarginRight() +{ + return xbToInt(this.getEffectiveValue('marginRight')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getMarginBottom() + +function cssStyleGetMarginBottom() +{ + return xbToInt(this.getEffectiveValue('marginBottom')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getMarginLeft() + +function cssStyleGetMarginLeft() +{ + return xbToInt(this.getEffectiveValue('marginLeft')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getPaddingTop() + +function cssStyleGetPaddingTop() +{ + return xbToInt(this.getEffectiveValue('paddingTop')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getPaddingRight() + +function cssStyleGetPaddingRight() +{ + return xbToInt(this.getEffectiveValue('paddingRight')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getPaddingBottom() + +function cssStyleGetPaddingBottom() +{ + return xbToInt(this.getEffectiveValue('paddingBottom')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getPaddingLeft() + +function cssStyleGetPaddingLeft() +{ + return xbToInt(this.getEffectiveValue('paddingLeft')); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getClientTop() + +function cssStyleGetClientTop() +{ + return this.getTop() - this.getMarginTop() - this.getBorderTopWidth() - this.getPaddingTop(); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getClientLeft() + +function cssStyleGetClientLeft() +{ + return this.getLeft() - this.getMarginLeft() - this.getBorderLeftWidth() - this.getPaddingLeft(); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getClientWidth() + +function cssStyleGetClientWidth() +{ + return this.getMarginLeft() + this.getBorderLeftWidth() + this.getPaddingLeft() + this.getWidth() + this.getPaddingRight() + this.getBorderRightWidth() + this.getMarginRight(); +} + +///////////////////////////////////////////////////////////////////////////// +// xbStyle.getClientHeight() + +function cssStyleGetClientHeight() +{ + return this.getMarginTop() + this.getBorderTopWidth() + this.getPaddingTop() + this.getHeight() + this.getPaddingBottom() + this.getBorderBottomWidth() + this.getMarginBottom(); +} + +//////////////////////////////////////////////////////////////////////// + +xbStyle.prototype.getEffectiveValue = xbStyleGetEffectiveValue; +xbStyle.prototype.moveAbove = xbStyleMoveAbove; +xbStyle.prototype.moveBelow = xbStyleMoveBelow; +xbStyle.prototype.moveBy = xbStyleMoveBy; +xbStyle.prototype.moveTo = xbStyleMoveTo; +xbStyle.prototype.moveToAbsolute = xbStyleMoveToAbsolute; +xbStyle.prototype.resizeBy = xbStyleResizeBy; +xbStyle.prototype.resizeTo = xbStyleResizeTo; + +if (document.all || document.getElementsByName) +{ + xbStyle.prototype.getClip = cssStyleGetClip; + xbStyle.prototype.setClip = cssStyleSetClip; + xbStyle.prototype.getClipTop = cssStyleGetClipTop; + xbStyle.prototype.setClipTop = cssStyleSetClipTop; + xbStyle.prototype.getClipRight = cssStyleGetClipRight; + xbStyle.prototype.setClipRight = cssStyleSetClipRight; + xbStyle.prototype.getClipBottom = cssStyleGetClipBottom; + xbStyle.prototype.setClipBottom = cssStyleSetClipBottom; + xbStyle.prototype.getClipLeft = cssStyleGetClipLeft; + xbStyle.prototype.setClipLeft = cssStyleSetClipLeft; + xbStyle.prototype.getClipWidth = cssStyleGetClipWidth; + xbStyle.prototype.setClipWidth = cssStyleSetClipWidth; + xbStyle.prototype.getClipHeight = cssStyleGetClipHeight; + xbStyle.prototype.setClipHeight = cssStyleSetClipHeight; + xbStyle.prototype.getLeft = cssStyleGetLeft; + xbStyle.prototype.setLeft = cssStyleSetLeft; + xbStyle.prototype.getTop = cssStyleGetTop; + xbStyle.prototype.setTop = cssStyleSetTop; + xbStyle.prototype.getPageX = cssStyleGetPageX; + xbStyle.prototype.setPageX = cssStyleSetPageX; + xbStyle.prototype.getPageY = cssStyleGetPageY; + xbStyle.prototype.setPageY = cssStyleSetPageY; + xbStyle.prototype.getVisibility = cssStyleGetVisibility; + xbStyle.prototype.setVisibility = cssStyleSetVisibility; + xbStyle.prototype.getzIndex = cssStyleGetzIndex; + xbStyle.prototype.setzIndex = cssStyleSetzIndex; + xbStyle.prototype.getHeight = cssStyleGetHeight; + xbStyle.prototype.setHeight = cssStyleSetHeight; + xbStyle.prototype.getWidth = cssStyleGetWidth; + xbStyle.prototype.setWidth = cssStyleSetWidth; + xbStyle.prototype.getBackgroundColor = cssStyleGetBackgroundColor; + xbStyle.prototype.setBackgroundColor = cssStyleSetBackgroundColor; + xbStyle.prototype.getColor = cssStyleGetColor; + xbStyle.prototype.setColor = cssStyleSetColor; + xbStyle.prototype.setInnerHTML = xbSetInnerHTML; + xbStyle.prototype.getBorderTopWidth = cssStyleGetBorderTopWidth; + xbStyle.prototype.getBorderRightWidth = cssStyleGetBorderRightWidth; + xbStyle.prototype.getBorderBottomWidth = cssStyleGetBorderBottomWidth; + xbStyle.prototype.getBorderLeftWidth = cssStyleGetBorderLeftWidth; + xbStyle.prototype.getMarginLeft = cssStyleGetMarginLeft; + xbStyle.prototype.getMarginTop = cssStyleGetMarginTop; + xbStyle.prototype.getMarginRight = cssStyleGetMarginRight; + xbStyle.prototype.getMarginBottom = cssStyleGetMarginBottom; + xbStyle.prototype.getMarginLeft = cssStyleGetMarginLeft; + xbStyle.prototype.getPaddingTop = cssStyleGetPaddingTop; + xbStyle.prototype.getPaddingRight = cssStyleGetPaddingRight; + xbStyle.prototype.getPaddingBottom = cssStyleGetPaddingBottom; + xbStyle.prototype.getPaddingLeft = cssStyleGetPaddingLeft; + xbStyle.prototype.getClientTop = cssStyleGetClientTop; + xbStyle.prototype.getClientLeft = cssStyleGetClientLeft; + xbStyle.prototype.getClientWidth = cssStyleGetClientWidth; + xbStyle.prototype.getClientHeight = cssStyleGetClientHeight; +} +else if (document.layers) +{ + xbStyle.prototype.getClip = nsxbStyleGetClip; + xbStyle.prototype.setClip = nsxbStyleSetClip; + xbStyle.prototype.getClipTop = nsxbStyleGetClipTop; + xbStyle.prototype.setClipTop = nsxbStyleSetClipTop; + xbStyle.prototype.getClipRight = nsxbStyleGetClipRight; + xbStyle.prototype.setClipRight = nsxbStyleSetClipRight; + xbStyle.prototype.getClipBottom = nsxbStyleGetClipBottom; + xbStyle.prototype.setClipBottom = nsxbStyleSetClipBottom; + xbStyle.prototype.getClipLeft = nsxbStyleGetClipLeft; + xbStyle.prototype.setClipLeft = nsxbStyleSetClipLeft; + xbStyle.prototype.getClipWidth = nsxbStyleGetClipWidth; + xbStyle.prototype.setClipWidth = nsxbStyleSetClipWidth; + xbStyle.prototype.getClipHeight = nsxbStyleGetClipHeight; + xbStyle.prototype.setClipHeight = nsxbStyleSetClipHeight; + xbStyle.prototype.getLeft = nsxbStyleGetLeft; + xbStyle.prototype.setLeft = nsxbStyleSetLeft; + xbStyle.prototype.getTop = nsxbStyleGetTop; + xbStyle.prototype.setTop = nsxbStyleSetTop; + xbStyle.prototype.getPageX = nsxbStyleGetPageX; + xbStyle.prototype.setPageX = nsxbStyleSetPageX; + xbStyle.prototype.getPageY = nsxbStyleGetPageY; + xbStyle.prototype.setPageY = nsxbStyleSetPageY; + xbStyle.prototype.getVisibility = nsxbStyleGetVisibility; + xbStyle.prototype.setVisibility = nsxbStyleSetVisibility; + xbStyle.prototype.getzIndex = nsxbStyleGetzIndex; + xbStyle.prototype.setzIndex = nsxbStyleSetzIndex; + xbStyle.prototype.getHeight = nsxbStyleGetHeight; + xbStyle.prototype.setHeight = nsxbStyleSetHeight; + xbStyle.prototype.getWidth = nsxbStyleGetWidth; + xbStyle.prototype.setWidth = nsxbStyleSetWidth; + xbStyle.prototype.getBackgroundColor = nsxbStyleGetBackgroundColor; + xbStyle.prototype.setBackgroundColor = nsxbStyleSetBackgroundColor; + xbStyle.prototype.getColor = nsxbStyleGetColor; + xbStyle.prototype.setColor = nsxbStyleSetColor; + xbStyle.prototype.setInnerHTML = nsxbSetInnerHTML; + xbStyle.prototype.getBorderTopWidth = xbStyleNotSupported; + xbStyle.prototype.getBorderRightWidth = xbStyleNotSupported; + xbStyle.prototype.getBorderBottomWidth = xbStyleNotSupported; + xbStyle.prototype.getBorderLeftWidth = xbStyleNotSupported; + xbStyle.prototype.getMarginLeft = xbStyleNotSupported; + xbStyle.prototype.getMarginTop = xbStyleNotSupported; + xbStyle.prototype.getMarginRight = xbStyleNotSupported; + xbStyle.prototype.getMarginBottom = xbStyleNotSupported; + xbStyle.prototype.getMarginLeft = xbStyleNotSupported; + xbStyle.prototype.getPaddingTop = xbStyleNotSupported; + xbStyle.prototype.getPaddingRight = xbStyleNotSupported; + xbStyle.prototype.getPaddingBottom = xbStyleNotSupported; + xbStyle.prototype.getPaddingLeft = xbStyleNotSupported; + xbStyle.prototype.getClientTop = xbStyleNotSupported; + xbStyle.prototype.getClientLeft = xbStyleNotSupported; + xbStyle.prototype.getClientWidth = xbStyleNotSupported; + xbStyle.prototype.getClientHeight = xbStyleNotSupported; + + window.saveInnerWidth = window.innerWidth; + window.saveInnerHeight = window.innerHeight; + + window.onresize = nsxbStyleOnresize; + +} +else +{ + xbStyle.prototype.toString = xbStyleNotSupported; + xbStyle.prototype.getClip = xbStyleNotSupported; + xbStyle.prototype.setClip = xbStyleNotSupported; + xbStyle.prototype.getClipTop = xbStyleNotSupported; + xbStyle.prototype.setClipTop = xbStyleNotSupported; + xbStyle.prototype.getClipRight = xbStyleNotSupported; + xbStyle.prototype.setClipRight = xbStyleNotSupported; + xbStyle.prototype.getClipBottom = xbStyleNotSupported; + xbStyle.prototype.setClipBottom = xbStyleNotSupported; + xbStyle.prototype.getClipLeft = xbStyleNotSupported; + xbStyle.prototype.setClipLeft = xbStyleNotSupported; + xbStyle.prototype.getClipWidth = xbStyleNotSupported; + xbStyle.prototype.setClipWidth = xbStyleNotSupported; + xbStyle.prototype.getClipHeight = xbStyleNotSupported; + xbStyle.prototype.setClipHeight = xbStyleNotSupported; + xbStyle.prototype.getLeft = xbStyleNotSupported; + xbStyle.prototype.setLeft = xbStyleNotSupported; + xbStyle.prototype.getTop = xbStyleNotSupported; + xbStyle.prototype.setTop = xbStyleNotSupported; + xbStyle.prototype.getVisibility = xbStyleNotSupported; + xbStyle.prototype.setVisibility = xbStyleNotSupported; + xbStyle.prototype.getzIndex = xbStyleNotSupported; + xbStyle.prototype.setzIndex = xbStyleNotSupported; + xbStyle.prototype.getHeight = xbStyleNotSupported; + xbStyle.prototype.setHeight = xbStyleNotSupported; + xbStyle.prototype.getWidth = xbStyleNotSupported; + xbStyle.prototype.setWidth = xbStyleNotSupported; + xbStyle.prototype.getBackgroundColor = xbStyleNotSupported; + xbStyle.prototype.setBackgroundColor = xbStyleNotSupported; + xbStyle.prototype.getColor = xbStyleNotSupported; + xbStyle.prototype.setColor = xbStyleNotSupported; + xbStyle.prototype.setInnerHTML = xbStyleNotSupported; + xbStyle.prototype.getBorderTopWidth = xbStyleNotSupported; + xbStyle.prototype.getBorderRightWidth = xbStyleNotSupported; + xbStyle.prototype.getBorderBottomWidth = xbStyleNotSupported; + xbStyle.prototype.getBorderLeftWidth = xbStyleNotSupported; + xbStyle.prototype.getMarginLeft = xbStyleNotSupported; + xbStyle.prototype.getMarginTop = xbStyleNotSupported; + xbStyle.prototype.getMarginRight = xbStyleNotSupported; + xbStyle.prototype.getMarginBottom = xbStyleNotSupported; + xbStyle.prototype.getMarginLeft = xbStyleNotSupported; + xbStyle.prototype.getPaddingTop = xbStyleNotSupported; + xbStyle.prototype.getPaddingRight = xbStyleNotSupported; + xbStyle.prototype.getPaddingBottom = xbStyleNotSupported; + xbStyle.prototype.getPaddingLeft = xbStyleNotSupported; + xbStyle.prototype.getClientTop = xbStyleNotSupported; + xbStyle.prototype.getClientLeft = xbStyleNotSupported; + xbStyle.prototype.getClientWidth = xbStyleNotSupported; + xbStyle.prototype.getClientHeight = xbStyleNotSupported; +} + + diff --git a/slides/doc/slides.xml b/slides/doc/slides.xml new file mode 100644 index 000000000..b9412e54b --- /dev/null +++ b/slides/doc/slides.xml @@ -0,0 +1,61 @@ + + +
+ +The Slides Document Type +$Id$ +NormanWalsh +
ndw@nwalsh.com
+
+
+ +The Slides Document Type is an XML vocabulary derived from +DocBook. It is used to create presentations (slides, foils, whatever +you call them) in HTML or print. + +Presentations are by nature visual and the Slides stylesheets +provide a wide range of options to control how the transformation from +XML to HTML is performed. + +This document is a first attempt at describing what some of +these options are and how to use them. + +
+Choose a Stylesheet + +At the highest level, you can choose one of four stylesheets: + + + +slides.xsl produces basic slides in HTML, one page +per slide. + + + + +frames.xsl produces slides in HTML using frames. + + + + +w3c.xsl produces basic slides in HTML, one +page per slide, using a navigation style similar to that of most W3C +talks. + + + + +fo-plain.xsl produces basic slides, one +page per slide, for print using XSL Formatting Objects. + + + + +
+ +
+Choose a Browser + + +
diff --git a/slides/xsl/.cvsignore b/slides/xsl/.cvsignore index ae55f4912..2be1d9fcc 100644 --- a/slides/xsl/.cvsignore +++ b/slides/xsl/.cvsignore @@ -1 +1,2 @@ titlepage-fo-plain.xsl +param.xsl diff --git a/slides/xsl/Makefile b/slides/xsl/Makefile index bb54da8ce..f419674e7 100644 --- a/slides/xsl/Makefile +++ b/slides/xsl/Makefile @@ -1,10 +1,32 @@ include ../../cvstools/Makefile.incl TTLTEMPLATEXSL=/sourceforge/docbook/xsl/template/titlepage.xsl -all: titlepage-fo-plain.xsl +PARAMPROF=.param.profiled +PARAMSTRIP=.param.stripped + +all: titlepage-fo-plain.xsl param.xsl %.xsl: %.xml $(XSLT) $< $(TTLTEMPLATEXSL) $@ +xml: param.xml + +html: param.html + +param.html: param.xml + $(XSLT) $< ../../xsl/docsrc/lrefentry.xsl $@ + +param.xml: param.xweb + $(XSLT) $< ../../xsl/profiling/profile.xsl $(PARAMPROF) profile.condition=html + $(XSLT) $(PARAMPROF) ../../xsl/profiling/strip-attributes.xsl $(PARAMSTRIP) attributes=condition + $(XSLT) $(PARAMSTRIP) ../../litprog/wdocbook.xsl $@ + $(RM) $(PARAMPROF) $(PARAMSTRIP) + +param.xsl: param.xweb + $(XSLT) $< ../../xsl/profiling/profile.xsl $(PARAMPROF) profile.condition=html + $(XSLT) $(PARAMPROF) ../../xsl/profiling/strip-attributes.xsl $(PARAMSTRIP) attributes=condition + $(XSLT) $(PARAMSTRIP) ../../litprog/xtangle.xsl $@ + $(RM) $(PARAMPROF) $(PARAMSTRIP) + clean: rm -f titlepage-fo-plain.xsl diff --git a/slides/xsl/frames.xsl b/slides/xsl/frames.xsl index eeb932e21..f479b73de 100644 --- a/slides/xsl/frames.xsl +++ b/slides/xsl/frames.xsl @@ -4,15 +4,6 @@ - - - - - - - - - @@ -34,6 +25,7 @@ + @@ -56,65 +48,44 @@ - - - - - - - TOC - <xsl:value-of select="$title"/> - - - - - - - - - - - - -
- -
- - -
-
-
+ + + + + + + TOC - <xsl:value-of select="$title"/> + + + + + - - - - - - - TOC - <xsl:value-of select="$title"/> - - - - - - - - - - - -
- -
+ + + init( + + ); + + + + + +
+ +
+
+ +
+ + @@ -202,6 +144,7 @@ if (selectBrowser() == "ie5") { + @@ -210,28 +153,58 @@ if (selectBrowser() == "ie5") { <xsl:value-of select="title"/> - + - - + + + + + + + + + + + - + newPage(' @@ -239,11 +212,6 @@ if (selectBrowser() == "ie5") { ); - - navigate('','foil01.html', - - ) - @@ -251,6 +219,13 @@ if (selectBrowser() == "ie5") { + + + + navigate(event) + + +
@@ -286,9 +261,7 @@ if (selectBrowser() == "ie5") {
Next - - / - + @@ -335,44 +308,41 @@ if (selectBrowser() == "ie5") { .html - - - - - - - - - - - - - - - + <xsl:value-of select="title"/> - + - - + + + + + + + + @@ -406,10 +376,13 @@ if (selectBrowser() == "ie5") { .html - - + + - + <body class="frameset"> <xsl:call-template name="body.attributes"/> @@ -429,6 +402,7 @@ if (selectBrowser() == "ie5") { </xsl:variable> <xsl:call-template name="write.chunk"> + <xsl:with-param name="indent" select="$output.indent"/> <xsl:with-param name="filename" select="concat($base.dir,'top-',$section)"/> <xsl:with-param name="content"> <html> @@ -436,25 +410,34 @@ if (selectBrowser() == "ie5") { <title>Navigation</title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$ie5 != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="slides.js"/> - </xsl:attribute> - </script> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0 + or $dynamic.toc != 0 or $active.toc != 0"> + <script language="JavaScript1.2"/> + </xsl:if> + + <xsl:if test="$keyboard.nav != 0 or $dynamic.toc != 0 or $active.toc != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> + <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> </head> - <body class="navigation" bgcolor="{$multiframe.top.bgcolor}"> + <body class="topnavigation" bgcolor="{$multiframe.top.bgcolor}"> <xsl:call-template name="section-top-nav"> <xsl:with-param name="prev-target" select="'foil'"/> <xsl:with-param name="next-target" select="'foil'"/> @@ -480,22 +463,8 @@ if (selectBrowser() == "ie5") { <xsl:text>.html</xsl:text> </xsl:variable> - <xsl:variable name="nextfoil"> - <xsl:apply-templates select="foil[1]" mode="filename"/> - </xsl:variable> - - <xsl:variable name="prevfoil"> - <xsl:choose> - <xsl:when test="preceding::foil"> - <xsl:apply-templates select="preceding::foil[1]" mode="filename"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$titlefoil.html"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:call-template name="write.chunk"> + <xsl:with-param name="indent" select="$output.indent"/> <xsl:with-param name="filename" select="concat($base.dir,'body-',$thissection)"/> <xsl:with-param name="content"> <html> @@ -503,22 +472,31 @@ if (selectBrowser() == "ie5") { <title>Body</title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$ie5 != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="slides.js"/> - </xsl:attribute> - </script> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0 + or $dynamic.toc != 0 or $active.toc != 0"> + <script language="JavaScript1.2"/> + </xsl:if> + + <xsl:if test="$keyboard.nav != 0 or $dynamic.toc != 0 or $active.toc != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> + <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> </head> <xsl:apply-templates select="." mode="singleframe"/> @@ -542,22 +520,8 @@ if (selectBrowser() == "ie5") { <xsl:text>.html</xsl:text> </xsl:variable> - <xsl:variable name="nextfoil"> - <xsl:apply-templates select="foil[1]" mode="filename"/> - </xsl:variable> - - <xsl:variable name="prevfoil"> - <xsl:choose> - <xsl:when test="preceding::foil"> - <xsl:apply-templates select="preceding::foil[1]" mode="filename"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$titlefoil.html"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:call-template name="write.chunk"> + <xsl:with-param name="indent" select="$output.indent"/> <xsl:with-param name="filename" select="concat($base.dir,'bot-',$thissection)"/> <xsl:with-param name="content"> <html> @@ -565,25 +529,34 @@ if (selectBrowser() == "ie5") { <title>Navigation</title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$ie5 != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="slides.js"/> - </xsl:attribute> - </script> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0 + or $dynamic.toc != 0 or $active.toc != 0"> + <script language="JavaScript1.2"/> </xsl:if> + + <xsl:if test="$keyboard.nav != 0 or $dynamic.toc != 0 or $active.toc != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> </head> - <body class="navigation" bgcolor="{$multiframe.bottom.bgcolor}"> + <body class="botnavigation" bgcolor="{$multiframe.bottom.bgcolor}"> <xsl:call-template name="section-bottom-nav"/> </body> </html> @@ -606,25 +579,10 @@ if (selectBrowser() == "ie5") { <xsl:text>.html</xsl:text> </xsl:variable> - <xsl:variable name="nextfoil"> - <xsl:apply-templates select="foil[1]" mode="filename"/> - </xsl:variable> - - <xsl:variable name="prevfoil"> - <xsl:choose> - <xsl:when test="preceding::foil"> - <xsl:apply-templates select="preceding::foil[1]" mode="filename"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$titlefoil.html"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <body class="section"> <xsl:call-template name="body.attributes"/> <xsl:choose> - <xsl:when test="$ie5 != 0"> + <xsl:when test="$active.toc != 0"> <xsl:attribute name="onload"> <xsl:text>newPage('</xsl:text> <xsl:value-of select="$thissection"/> @@ -632,15 +590,6 @@ if (selectBrowser() == "ie5") { <xsl:value-of select="$overlay"/> <xsl:text>);</xsl:text> </xsl:attribute> - <xsl:attribute name="onkeypress"> - <xsl:text>navigate('</xsl:text> - <xsl:value-of select="$prevfoil"/> - <xsl:text>','</xsl:text> - <xsl:value-of select="$nextfoil"/> - <xsl:text>',</xsl:text> - <xsl:value-of select="$overlay"/> - <xsl:text>)</xsl:text> - </xsl:attribute> </xsl:when> <xsl:when test="$overlay != 0"> <xsl:attribute name="onload"> @@ -648,11 +597,15 @@ if (selectBrowser() == "ie5") { </xsl:attribute> </xsl:when> </xsl:choose> + <xsl:if test="$keyboard.nav != 0"> + <xsl:attribute name="onkeypress"> + <xsl:text>navigate(event)</xsl:text> + </xsl:attribute> + </xsl:if> <div class="{name(.)}" id="{$id}"> <a name="{$id}"/> <xsl:if test="$multiframe=0"> <xsl:call-template name="section-top-nav"/> - <hr/> </xsl:if> <div class="{name(.)}" id="{$id}"> @@ -667,7 +620,6 @@ if (selectBrowser() == "ie5") { <xsl:text>position:absolute;visibility:visible;</xsl:text> </xsl:attribute> </xsl:if> - <hr/> <xsl:call-template name="section-bottom-nav"/> </div> </xsl:if> @@ -675,62 +627,81 @@ if (selectBrowser() == "ie5") { </body> </xsl:template> +<xsl:template name="section-links"> + <xsl:variable name="prevfoil" + select="(preceding::foil|/slides)[last()]"/> + + <xsl:variable name="nextfoil" select="foil[1]"/> + + <xsl:if test="$prevfoil"> + <link rel="previous"> + <xsl:attribute name="href"> + <xsl:apply-templates select="$prevfoil" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$prevfoil/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$nextfoil"> + <link rel="next"> + <xsl:attribute name="href"> + <xsl:apply-templates select="$nextfoil" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$nextfoil/title"/> + </xsl:attribute> + </link> + </xsl:if> +</xsl:template> + +<!-- ====================================================================== --> + <xsl:template match="foil"> <xsl:variable name="id"> <xsl:call-template name="object.id"/> </xsl:variable> - <xsl:variable name="section" select="ancestor::section"/> - <xsl:variable name="thisfoil"> <xsl:apply-templates select="." mode="filename"/> </xsl:variable> - <xsl:variable name="nextfoil"> - <xsl:apply-templates select="(following::foil - |following::section)[1]" - mode="filename"/> - </xsl:variable> - - <xsl:variable name="prevfoil"> - <xsl:choose> - <xsl:when test="preceding-sibling::foil"> - <xsl:apply-templates select="preceding-sibling::foil[1]" - mode="filename"/> - </xsl:when> - <xsl:when test="parent::section"> - <xsl:apply-templates select="parent::section[1]" - mode="filename"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$titlefoil.html"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:call-template name="write.chunk"> + <xsl:with-param name="indent" select="$output.indent"/> <xsl:with-param name="filename" select="concat($base.dir,$thisfoil)"/> <xsl:with-param name="content"> <head> <title><xsl:value-of select="title"/></title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$ie5 != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="slides.js"/> - </xsl:attribute> - </script> + + <xsl:call-template name="foil-links"/> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0 + or $dynamic.toc != 0 or $active.toc != 0"> + <script language="JavaScript1.2"/> + </xsl:if> + + <xsl:if test="$keyboard.nav != 0 or $dynamic.toc != 0 or $active.toc != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> + <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> </head> <xsl:choose> @@ -758,69 +729,23 @@ if (selectBrowser() == "ie5") { <xsl:apply-templates select="." mode="filename"/> </xsl:variable> - <xsl:variable name="nextfoil"> - <xsl:apply-templates select="(following::foil - |following::section)[1]" - mode="filename"/> - </xsl:variable> - - <xsl:variable name="prevfoil"> - <xsl:choose> - <xsl:when test="preceding-sibling::foil"> - <xsl:apply-templates select="preceding-sibling::foil[1]" - mode="filename"/> - </xsl:when> - <xsl:when test="parent::section"> - <xsl:apply-templates select="parent::section[1]" - mode="filename"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$titlefoil.html"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - - <frameset rows="25,*,25" border="0" name="foil" framespacing="0"> + <frameset rows="{$multiframe.navigation.height},*,{$multiframe.navigation.height}" border="0" name="foil" framespacing="0"> <xsl:attribute name="onkeypress"> - <xsl:text>navigate('</xsl:text> - <xsl:value-of select="$prevfoil"/> - <xsl:text>','</xsl:text> - <xsl:value-of select="$nextfoil"/> - <xsl:text>',</xsl:text> - <xsl:value-of select="$overlay"/> - <xsl:text>)</xsl:text> + <xsl:text>navigate(event)</xsl:text> </xsl:attribute> <frame src="top-{$thisfoil}" name="top" marginheight="0" scrolling="no" frameborder="0"> <xsl:attribute name="onkeypress"> - <xsl:text>navigate('</xsl:text> - <xsl:value-of select="$prevfoil"/> - <xsl:text>','</xsl:text> - <xsl:value-of select="$nextfoil"/> - <xsl:text>',</xsl:text> - <xsl:value-of select="$overlay"/> - <xsl:text>)</xsl:text> + <xsl:text>navigate(event)</xsl:text> </xsl:attribute> </frame> <frame src="body-{$thisfoil}" name="body" marginheight="0" frameborder="0"> <xsl:attribute name="onkeypress"> - <xsl:text>navigate('</xsl:text> - <xsl:value-of select="$prevfoil"/> - <xsl:text>','</xsl:text> - <xsl:value-of select="$nextfoil"/> - <xsl:text>',</xsl:text> - <xsl:value-of select="$overlay"/> - <xsl:text>)</xsl:text> + <xsl:text>navigate(event)</xsl:text> </xsl:attribute> </frame> <frame src="bot-{$thisfoil}" name="bottom" marginheight="0" scrolling="no" frameborder="0"> <xsl:attribute name="onkeypress"> - <xsl:text>navigate('</xsl:text> - <xsl:value-of select="$prevfoil"/> - <xsl:text>','</xsl:text> - <xsl:value-of select="$nextfoil"/> - <xsl:text>',</xsl:text> - <xsl:value-of select="$overlay"/> - <xsl:text>)</xsl:text> + <xsl:text>navigate(event)</xsl:text> </xsl:attribute> </frame> <noframes> @@ -840,6 +765,7 @@ if (selectBrowser() == "ie5") { </xsl:variable> <xsl:call-template name="write.chunk"> + <xsl:with-param name="indent" select="$output.indent"/> <xsl:with-param name="filename" select="concat($base.dir,'top-',$thisfoil)"/> <xsl:with-param name="content"> <html> @@ -847,25 +773,34 @@ if (selectBrowser() == "ie5") { <title>Navigation</title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$ie5 != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="slides.js"/> - </xsl:attribute> - </script> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0 + or $dynamic.toc != 0 or $active.toc != 0"> + <script language="JavaScript1.2"/> + </xsl:if> + + <xsl:if test="$keyboard.nav != 0 or $dynamic.toc != 0 or $active.toc != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> + <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> </head> - <body class="navigation" bgcolor="{$multiframe.top.bgcolor}"> + <body class="topnavigation" bgcolor="{$multiframe.top.bgcolor}"> <xsl:call-template name="foil-top-nav"> <xsl:with-param name="prev-target" select="'foil'"/> <xsl:with-param name="next-target" select="'foil'"/> @@ -882,6 +817,7 @@ if (selectBrowser() == "ie5") { </xsl:variable> <xsl:call-template name="write.chunk"> + <xsl:with-param name="indent" select="$output.indent"/> <xsl:with-param name="filename" select="concat($base.dir,'body-',$thisfoil)"/> <xsl:with-param name="content"> <html> @@ -889,22 +825,31 @@ if (selectBrowser() == "ie5") { <title>Body</title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$ie5 != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="slides.js"/> - </xsl:attribute> - </script> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0 + or $dynamic.toc != 0 or $active.toc != 0"> + <script language="JavaScript1.2"/> + </xsl:if> + + <xsl:if test="$keyboard.nav != 0 or $dynamic.toc != 0 or $active.toc != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> + <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> </head> <xsl:apply-templates select="." mode="singleframe"/> @@ -919,6 +864,7 @@ if (selectBrowser() == "ie5") { </xsl:variable> <xsl:call-template name="write.chunk"> + <xsl:with-param name="indent" select="$output.indent"/> <xsl:with-param name="filename" select="concat($base.dir,'bot-',$thisfoil)"/> <xsl:with-param name="content"> <html> @@ -926,25 +872,34 @@ if (selectBrowser() == "ie5") { <title>Navigation</title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$ie5 != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="slides.js"/> - </xsl:attribute> - </script> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0 + or $dynamic.toc != 0 or $active.toc != 0"> + <script language="JavaScript1.2"/> + </xsl:if> + + <xsl:if test="$keyboard.nav != 0 or $dynamic.toc != 0 or $active.toc != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> + <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> </head> - <body class="navigation" bgcolor="{$multiframe.bottom.bgcolor}"> + <body class="botnavigation" bgcolor="{$multiframe.bottom.bgcolor}"> <xsl:call-template name="foil-bottom-nav"/> </body> </html> @@ -963,32 +918,10 @@ if (selectBrowser() == "ie5") { <xsl:apply-templates select="." mode="filename"/> </xsl:variable> - <xsl:variable name="nextfoil"> - <xsl:apply-templates select="(following::foil - |following::section)[1]" - mode="filename"/> - </xsl:variable> - - <xsl:variable name="prevfoil"> - <xsl:choose> - <xsl:when test="preceding-sibling::foil"> - <xsl:apply-templates select="preceding-sibling::foil[1]" - mode="filename"/> - </xsl:when> - <xsl:when test="parent::section"> - <xsl:apply-templates select="parent::section[1]" - mode="filename"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$titlefoil.html"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <body class="foil"> <xsl:call-template name="body.attributes"/> <xsl:choose> - <xsl:when test="$ie5 != 0"> + <xsl:when test="$active.toc != 0"> <xsl:attribute name="onload"> <xsl:text>newPage('</xsl:text> <xsl:value-of select="$thisfoil"/> @@ -996,15 +929,6 @@ if (selectBrowser() == "ie5") { <xsl:value-of select="$overlay"/> <xsl:text>);</xsl:text> </xsl:attribute> - <xsl:attribute name="onkeypress"> - <xsl:text>navigate('</xsl:text> - <xsl:value-of select="$prevfoil"/> - <xsl:text>','</xsl:text> - <xsl:value-of select="$nextfoil"/> - <xsl:text>',</xsl:text> - <xsl:value-of select="$overlay"/> - <xsl:text>)</xsl:text> - </xsl:attribute> </xsl:when> <xsl:when test="$overlay != 0"> <xsl:attribute name="onload"> @@ -1012,12 +936,16 @@ if (selectBrowser() == "ie5") { </xsl:attribute> </xsl:when> </xsl:choose> + <xsl:if test="$keyboard.nav != 0"> + <xsl:attribute name="onkeypress"> + <xsl:text>navigate(event)</xsl:text> + </xsl:attribute> + </xsl:if> <div class="{name(.)}" id="{$id}"> <a name="{$id}"/> <xsl:if test="$multiframe=0"> <xsl:call-template name="foil-top-nav"/> - <hr/> </xsl:if> <xsl:apply-templates/> @@ -1029,7 +957,6 @@ if (selectBrowser() == "ie5") { <xsl:text>position:absolute;visibility:visible;</xsl:text> </xsl:attribute> </xsl:if> - <hr/> <xsl:call-template name="foil-bottom-nav"/> </div> </xsl:if> @@ -1037,14 +964,46 @@ if (selectBrowser() == "ie5") { </body> </xsl:template> +<xsl:template name="foil-links"> + <xsl:variable name="nextfoil" select="(following::foil + |following::section)[1]"/> + + <xsl:variable name="prevfoil" select="(preceding-sibling::foil[1] + |parent::section[1] + |/slides)[last()]"/> + + + <xsl:if test="$prevfoil"> + <link rel="previous"> + <xsl:attribute name="href"> + <xsl:apply-templates select="$prevfoil" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$prevfoil/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$nextfoil"> + <link rel="next"> + <xsl:attribute name="href"> + <xsl:apply-templates select="$nextfoil" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$nextfoil/title"/> + </xsl:attribute> + </link> + </xsl:if> +</xsl:template> + <!-- ============================================================ --> <xsl:template match="slidesinfo" mode="toc"> <xsl:variable name="id"> <xsl:call-template name="object.id"/> </xsl:variable> - <div id="{$id}" class="toc-slidesinfo"> - <a href="{$titlefoil.html}" target="foil"> + <DIV id="{$id}" class="toc-slidesinfo"> + <A href="{$titlefoil.html}" target="foil"> <xsl:choose> <xsl:when test="titleabbrev"> <xsl:apply-templates select="titleabbrev" mode="toc"/> @@ -1053,9 +1012,9 @@ if (selectBrowser() == "ie5") { <xsl:apply-templates select="title" mode="toc"/> </xsl:otherwise> </xsl:choose> - </a> + </A> <hr/> - </div> + </DIV> </xsl:template> <xsl:template match="section" mode="toc"> @@ -1070,15 +1029,13 @@ if (selectBrowser() == "ie5") { <xsl:text>.html</xsl:text> </xsl:variable> - <div class="toc-section" id="{$id}"> + <DIV class="toc-section" id="{$id}"> <img alt="-"> <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$minus.image"/> + <xsl:call-template name="minus.image"/> </xsl:attribute> </img> - <a href="{$thissection}" target="foil"> + <A href="{$thissection}" target="foil"> <xsl:choose> <xsl:when test="titleabbrev"> <xsl:apply-templates select="titleabbrev" mode="toc"/> @@ -1087,26 +1044,24 @@ if (selectBrowser() == "ie5") { <xsl:apply-templates select="title" mode="toc"/> </xsl:otherwise> </xsl:choose> - </a> + </A> <xsl:apply-templates select="foil" mode="toc"/> - </div> + </DIV> </xsl:template> <xsl:template match="foil" mode="toc"> <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> <xsl:variable name="foil"> - <xsl:apply-templates select="." mode="foil-filename"/> + <xsl:apply-templates select="." mode="filename"/> </xsl:variable> - <div id="{$id}" class="toc-foil"> + <DIV id="{$id}" class="toc-foil"> <img alt="-"> <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$bullet.image"/> + <xsl:call-template name="bullet.image"/> </xsl:attribute> </img> - <a href="{$foil}" target="foil"> + <A href="{$foil}" target="foil"> <xsl:choose> <xsl:when test="titleabbrev"> <xsl:apply-templates select="titleabbrev" mode="toc"/> @@ -1115,8 +1070,8 @@ if (selectBrowser() == "ie5") { <xsl:apply-templates select="title" mode="toc"/> </xsl:otherwise> </xsl:choose> - </a> - </div> + </A> + </DIV> </xsl:template> </xsl:stylesheet> diff --git a/slides/xsl/graphics.xsl b/slides/xsl/graphics.xsl new file mode 100644 index 000000000..84ca0baf2 --- /dev/null +++ b/slides/xsl/graphics.xsl @@ -0,0 +1,91 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version="1.0"> + +<xsl:output method="html"/> + +<xsl:param name="graphics.dir" select="''"/> + +<xsl:param name="bullet.image" select="'bullet.gif'"/> +<xsl:param name="right.image" select="'right.gif'"/> +<xsl:param name="left.image" select="'left.gif'"/> + +<xsl:param name="plus.image" select="'plus.gif'"/> +<xsl:param name="minus.image" select="'minus.gif'"/> + +<xsl:param name="hidetoc.image" select="'hidetoc.gif'"/> +<xsl:param name="showtoc.image" select="'showtoc.gif'"/> + +<xsl:template name="graphics-file"> + <xsl:param name="image" select="'bullet.gif'"/> + + <xsl:variable name="source.graphics.dir"> + <xsl:call-template name="dbhtml-attribute"> + <xsl:with-param name="pis" select="/processing-instruction('dbhtml')"/> + <xsl:with-param name="attribute" select="'graphics-dir'"/> + </xsl:call-template> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$source.graphics.dir != ''"> + <xsl:value-of select="$source.graphics.dir"/> + <xsl:text>/</xsl:text> + </xsl:when> + <xsl:when test="$graphics.dir != ''"> + <xsl:value-of select="$graphics.dir"/> + <xsl:text>/</xsl:text> + </xsl:when> + </xsl:choose> + <xsl:value-of select="$image"/> +</xsl:template> + +<xsl:template name="bullet.image"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:call-template name="graphics-file"> + <xsl:with-param name="image" select="$bullet.image"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="left.image"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:call-template name="graphics-file"> + <xsl:with-param name="image" select="$left.image"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="right.image"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:call-template name="graphics-file"> + <xsl:with-param name="image" select="$right.image"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="plus.image"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:call-template name="graphics-file"> + <xsl:with-param name="image" select="$plus.image"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="minus.image"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:call-template name="graphics-file"> + <xsl:with-param name="image" select="$minus.image"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="hidetoc.image"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:call-template name="graphics-file"> + <xsl:with-param name="image" select="$hidetoc.image"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="showtoc.image"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:call-template name="graphics-file"> + <xsl:with-param name="image" select="$showtoc.image"/> + </xsl:call-template> +</xsl:template> + +</xsl:stylesheet> diff --git a/slides/xsl/jscript.xsl b/slides/xsl/jscript.xsl new file mode 100644 index 000000000..ade1b19b7 --- /dev/null +++ b/slides/xsl/jscript.xsl @@ -0,0 +1,112 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version="1.0"> + +<xsl:output method="html"/> + +<xsl:param name="script.dir" select="''"/> + +<xsl:param name="ua.js" select="'ua.js'"/> +<xsl:param name="xbDOM.js" select="'xbDOM.js'"/> +<xsl:param name="xbStyle.js" select="'xbStyle.js'"/> +<xsl:param name="xbCollapsibleLists.js" select="'xbCollapsibleLists.js'"/> + +<xsl:param name="overlay.js" select="'overlay.js'"/> +<xsl:param name="slides.js" select="'slides.js'"/> + +<xsl:template name="script-file"> + <xsl:param name="js" select="'slides.js'"/> + + <xsl:variable name="source.script.dir"> + <xsl:call-template name="dbhtml-attribute"> + <xsl:with-param name="pis" select="/processing-instruction('dbhtml')"/> + <xsl:with-param name="attribute" select="'script-dir'"/> + </xsl:call-template> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$source.script.dir != ''"> + <xsl:value-of select="$source.script.dir"/> + <xsl:text>/</xsl:text> + </xsl:when> + <xsl:when test="$script.dir != ''"> + <xsl:value-of select="$script.dir"/> + <xsl:text>/</xsl:text> + </xsl:when> + </xsl:choose> + <xsl:value-of select="$js"/> +</xsl:template> + +<xsl:template name="ua.js"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:param name="language" select="'JavaScript1.2'"/> + <script language="{$language}"> + <xsl:attribute name="src"> + <xsl:call-template name="script-file"> + <xsl:with-param name="js" select="$ua.js"/> + </xsl:call-template> + </xsl:attribute> + </script> +</xsl:template> + +<xsl:template name="xbDOM.js"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:param name="language" select="'JavaScript1.2'"/> + <script language="{$language}"> + <xsl:attribute name="src"> + <xsl:call-template name="script-file"> + <xsl:with-param name="js" select="$xbDOM.js"/> + </xsl:call-template> + </xsl:attribute> + </script> +</xsl:template> + +<xsl:template name="xbStyle.js"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:param name="language" select="'JavaScript1.2'"/> + <script language="{$language}"> + <xsl:attribute name="src"> + <xsl:call-template name="script-file"> + <xsl:with-param name="js" select="$xbStyle.js"/> + </xsl:call-template> + </xsl:attribute> + </script> +</xsl:template> + +<xsl:template name="xbCollapsibleLists.js"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:param name="language" select="'JavaScript1.2'"/> + <script language="{$language}"> + <xsl:attribute name="src"> + <xsl:call-template name="script-file"> + <xsl:with-param name="js" select="$xbCollapsibleLists.js"/> + </xsl:call-template> + </xsl:attribute> + </script> +</xsl:template> + +<xsl:template name="overlay.js"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:param name="language" select="'JavaScript1.2'"/> + <script language="{$language}"> + <xsl:attribute name="src"> + <xsl:call-template name="script-file"> + <xsl:with-param name="js" select="$overlay.js"/> + </xsl:call-template> + </xsl:attribute> + </script> +</xsl:template> + +<xsl:template name="slides.js"> + <!-- Danger Will Robinson: template shadows parameter --> + <xsl:param name="language" select="'JavaScript1.2'"/> + <script language="{$language}"> + <xsl:attribute name="src"> + <xsl:call-template name="script-file"> + <xsl:with-param name="js" select="$slides.js"/> + </xsl:call-template> + </xsl:attribute> + </script> +</xsl:template> + +</xsl:stylesheet> diff --git a/slides/xsl/param.xweb b/slides/xsl/param.xweb new file mode 100644 index 000000000..4584dc6bc --- /dev/null +++ b/slides/xsl/param.xweb @@ -0,0 +1,871 @@ +<book xmlns:src="http://nwalsh.com/xmlns/litprog/fragment" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<bookinfo> +<title>Slides Parameter Reference</title> +<releaseinfo role="meta"> +$Id$ +</releaseinfo> +<author> + <surname>Walsh</surname> + <firstname>Norman</firstname> +</author> +<copyright> + <year>2002</year> + <holder>Norman Walsh</holder> +</copyright> +</bookinfo> + +<preface><title>Introduction</title> + +<para>This is reference documentation for the Slides stylesheet parameters. +</para> + +<para>This reference describes each of the parameters. +These are the <quote>easily customizable</quote> parts of the stylesheet. +If you want to specify an alternate value for one or more of these +parameters, you can do so in a <quote>driver</quote> stylesheet.</para> + +<para>For example, if you want to change the <literal>keyboard.nav</literal> +parameter to <filename>0</filename>, you might create a driver +stylesheet like this:</para> + +<programlisting><![CDATA[<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version='1.0'> + + <xsl:import href="http://docbook.sourceforge.net/release/slides/current/xsl/slides.xsl"/> + + <xsl:param name="keyboard.nav" select="0"/> + +</xsl:stylesheet>]]></programlisting> + +<para>Naturally, you have to change the +<sgmltag class='attribute'>href</sgmltag> attribute on +<literal>&lt;xsl:import&gt;</literal> to point to the stylesheet +on your system.</para> + +<para>This is not intended to be <quote>user</quote> documentation. +It is provided for developers writing customization layers for the +stylesheets, and for anyone who's interested in <quote>how it +works</quote>.</para> + +<para>Although I am trying to be thorough, this documentation is known +to be incomplete. Don't forget to read the source, too :-)</para> +</preface> + +<reference> +<title>General Parameters</title> + +<refentry id="keyboard.nav"> +<refmeta> +<refentrytitle>keyboard.nav</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>keyboard.nav</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='keyboard.nav.frag'> +<xsl:param name="keyboard.nav" select="1"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="css.stylesheet"> +<refmeta> +<refentrytitle>css.stylesheet</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>css.stylesheet</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='css.stylesheet.frag'> +<xsl:param name="css.stylesheet" select="'slides.css'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="titlefoil.html"> +<refmeta> +<refentrytitle>titlefoil.html</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>titlefoil.html</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='titlefoil.html.frag'> +<xsl:param name="titlefoil.html" select="'titlefoil.html'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="toc.html"> +<refmeta> +<refentrytitle>toc.html</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>toc.html</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='toc.html.frag'> +<xsl:param name="toc.html" select="'toc.html'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="output.indent"> +<refmeta> +<refentrytitle>output.indent</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>output.indent</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='output.indent.frag'> +<xsl:param name="output.indent" select="'no'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="overlay"> +<refmeta> +<refentrytitle>overlay</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>overlay</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='overlay.frag'> +<xsl:param name="overlay" select="0"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +</reference> + +<reference> +<title>Frame Parameters</title> + +<refentry id="nav.separator"> +<refmeta> +<refentrytitle>nav.separator</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>nav.separator</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='nav.separator.frag'> +<xsl:param name="nav.separator" select="1"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="toc.row.height"> +<refmeta> +<refentrytitle>toc.row.height</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>toc.row.height</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='toc.row.height.frag'> +<xsl:param name="toc.row.height" select="22"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="toc.bg.color"> +<refmeta> +<refentrytitle>toc.bg.color</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>toc.bg.color</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='toc.bg.color.frag'> +<xsl:param name="toc.bg.color" select="'#FFFFFF'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="toc.width"> +<refmeta> +<refentrytitle>toc.width</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>toc.width</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='toc.width.frag'> +<xsl:param name="toc.width" select="250"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="toc.hide.show"> +<refmeta> +<refentrytitle>toc.hide.show</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>toc.hide.show</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='toc.hide.show.frag'> +<xsl:param name="toc.hide.show" select="0"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="dynamic.toc"> +<refmeta> +<refentrytitle>dynamic.toc</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>dynamic.toc</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='dynamic.toc.frag'> +<xsl:param name="dynamic.toc" select="0"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="active.toc"> +<refmeta> +<refentrytitle>active.toc</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>active.toc</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='active.toc.frag'> +<xsl:param name="active.toc" select="0"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="multiframe"> +<refmeta> +<refentrytitle>multiframe</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>multiframe</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='multiframe.frag'> +<xsl:param name="multiframe" select="0"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="multiframe.top.bgcolor"> +<refmeta> +<refentrytitle>multiframe.top.bgcolor</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>multiframe.top.bgcolor</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='multiframe.top.bgcolor.frag'> +<xsl:param name="multiframe.top.bgcolor" select="'white'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="multiframe.bottom.bgcolor"> +<refmeta> +<refentrytitle>multiframe.bottom.bgcolor</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>multiframe.bottom.bgcolor</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='multiframe.bottom.bgcolor.frag'> +<xsl:param name="multiframe.bottom.bgcolor" select="'white'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="multiframe.navigation.height"> +<refmeta> +<refentrytitle>multiframe.navigation.height</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>multiframe.navigation.height</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='multiframe.navigation.height.frag'> +<xsl:param name="multiframe.navigation.height" select="40"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +</reference> + +<reference> +<title>Graphics Parameters</title> + +<refentry id="graphics.dir"> +<refmeta> +<refentrytitle>graphics.dir</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>graphics.dir</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='graphics.dir.frag'> +<xsl:param name="graphics.dir" select="''"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="bullet.image"> +<refmeta> +<refentrytitle>bullet.image</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>bullet.image</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='bullet.image.frag'> +<xsl:param name="bullet.image" select="'bullet.gif'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="right.image"> +<refmeta> +<refentrytitle>right.image</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>right.image</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='right.image.frag'> +<xsl:param name="right.image" select="'right.gif'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="left.image"> +<refmeta> +<refentrytitle>left.image</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>left.image</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='left.image.frag'> +<xsl:param name="left.image" select="'left.gif'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="plus.image"> +<refmeta> +<refentrytitle>plus.image</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>plus.image</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='plus.image.frag'> +<xsl:param name="plus.image" select="'plus.gif'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="minus.image"> +<refmeta> +<refentrytitle>minus.image</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>minus.image</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='minus.image.frag'> +<xsl:param name="minus.image" select="'minus.gif'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="hidetoc.image"> +<refmeta> +<refentrytitle>hidetoc.image</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>hidetoc.image</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='hidetoc.image.frag'> +<xsl:param name="hidetoc.image" select="'hidetoc.gif'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="showtoc.image"> +<refmeta> +<refentrytitle>showtoc.image</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>showtoc.image</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='showtoc.image.frag'> +<xsl:param name="showtoc.image" select="'showtoc.gif'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +</reference> + +<reference> +<title>JavaScript Parameters</title> + +<refentry id="script.dir"> +<refmeta> +<refentrytitle>script.dir</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>script.dir</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='script.dir.frag'> +<xsl:param name="script.dir" select="''"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="ua.js"> +<refmeta> +<refentrytitle>ua.js</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>ua.js</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='ua.js.frag'> +<xsl:param name="ua.js" select="'ua.js'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="xbDOM.js"> +<refmeta> +<refentrytitle>xbDOM.js</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>xbDOM.js</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='xbDOM.js.frag'> +<xsl:param name="xbDOM.js" select="'xbDOM.js'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="xbStyle.js"> +<refmeta> +<refentrytitle>xbStyle.js</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>xbStyle.js</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='xbStyle.js.frag'> +<xsl:param name="xbStyle.js" select="'xbStyle.js'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="xbCollapsibleLists.js"> +<refmeta> +<refentrytitle>xbCollapsibleLists.js</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>xbCollapsibleLists.js</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='xbCollapsibleLists.js.frag'> +<xsl:param name="xbCollapsibleLists.js" select="'xbCollapsibleLists.js'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="overlay.js"> +<refmeta> +<refentrytitle>overlay.js</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>overlay.js</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='overlay.js.frag'> +<xsl:param name="overlay.js" select="'overlay.js'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> + +<refentry id="slides.js"> +<refmeta> +<refentrytitle>slides.js</refentrytitle> +<refmiscinfo role="type"></refmiscinfo> +</refmeta> +<refnamediv> +<refname>slides.js</refname> +<refpurpose></refpurpose> +</refnamediv> + +<refsynopsisdiv> +<src:fragment id='slides.js.frag'> +<xsl:param name="slides.js" select="'slides.js'"/> +</src:fragment> +</refsynopsisdiv> + +<refsect1><title>Description</title> + +<para>FIXME:</para> + +</refsect1> +</refentry> +</reference> + +<appendix><title>The Stylesheet</title> + +<para>The <filename>param.xsl</filename> stylesheet is just a wrapper +around all these parameters.</para> + +<src:fragment id="top" mundane-result-prefixes="xsl"> + +<!-- This file is generated from param.xweb; do not edit this file! --> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + exclude-result-prefixes="src" + version='1.0'> + +<!-- ******************************************************************** + $Id$ + ******************************************************************** + + This file is part of the XSL DocBook Stylesheet distribution. + See ../README or http://nwalsh.com/docbook/xsl/ for copyright + and other information. + + ******************************************************************** --> + +<src:fragref linkend="keyboard.nav.frag"/> +<src:fragref linkend="css.stylesheet.frag"/> +<src:fragref linkend="titlefoil.html.frag"/> +<src:fragref linkend="toc.html.frag"/> +<src:fragref linkend="output.indent.frag"/> +<src:fragref linkend="overlay.frag"/> +<src:fragref linkend="nav.separator.frag"/> +<src:fragref linkend="toc.row.height.frag"/> +<src:fragref linkend="toc.bg.color.frag"/> +<src:fragref linkend="toc.width.frag"/> +<src:fragref linkend="toc.hide.show.frag"/> +<src:fragref linkend="dynamic.toc.frag"/> +<src:fragref linkend="active.toc.frag"/> +<src:fragref linkend="multiframe.frag"/> +<src:fragref linkend="multiframe.top.bgcolor.frag"/> +<src:fragref linkend="multiframe.bottom.bgcolor.frag"/> +<src:fragref linkend="multiframe.navigation.height.frag"/> +<src:fragref linkend="graphics.dir.frag"/> +<src:fragref linkend="bullet.image.frag"/> +<src:fragref linkend="right.image.frag"/> +<src:fragref linkend="left.image.frag"/> +<src:fragref linkend="plus.image.frag"/> +<src:fragref linkend="minus.image.frag"/> +<src:fragref linkend="hidetoc.image.frag"/> +<src:fragref linkend="showtoc.image.frag"/> +<src:fragref linkend="script.dir.frag"/> +<src:fragref linkend="ua.js.frag"/> +<src:fragref linkend="xbDOM.js.frag"/> +<src:fragref linkend="xbStyle.js.frag"/> +<src:fragref linkend="xbCollapsibleLists.js.frag"/> +<src:fragref linkend="overlay.js.frag"/> +<src:fragref linkend="slides.js.frag"/> + +</xsl:stylesheet> +</src:fragment> + +</appendix> + +</book> diff --git a/slides/xsl/slides.xsl b/slides/xsl/slides.xsl index a259800db..d0d39dfb0 100644 --- a/slides/xsl/slides.xsl +++ b/slides/xsl/slides.xsl @@ -2,39 +2,15 @@ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> -<xsl:import href="../../xsl/html/chunk.xsl"/> +<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"/> +<xsl:include href="jscript.xsl"/> +<xsl:include href="graphics.xsl"/> +<xsl:include href="param.xsl"/> <xsl:output method="html"/> <xsl:strip-space elements="slides foil section"/> -<xsl:param name="css-stylesheet">slides.css</xsl:param> -<xsl:param name="graphics.dir">graphics</xsl:param> -<xsl:param name="toc.row.height">22</xsl:param> -<xsl:param name="bullet.image" select="'bullet.gif'"/> -<xsl:param name="minus.image" select="'minus.gif'"/> -<xsl:param name="right.image" select="'right.gif'"/> -<xsl:param name="left.image" select="'left.gif'"/> - -<xsl:param name="script.dir" select="''"/> -<xsl:param name="overlay.js" select="'overlay.js'"/> -<xsl:param name="slides.js" select="'slides.js'"/> -<xsl:param name="list.js" select="'list.js'"/> -<xsl:param name="resize.js" select="'resize.js'"/> - -<xsl:param name="titlefoil.html" select="'index.html'"/> -<xsl:param name="toc.html" select="'toc.html'"/> - -<xsl:param name="toc.bg.color">#FFFFFF</xsl:param> -<xsl:param name="toc.width">250</xsl:param> -<xsl:param name="toc.hide.show" select="0"/> - -<xsl:param name="overlay" select="0"/> - -<xsl:param name="ie5" select="0"/> - -<xsl:param name="output.indent" select="'no'"/> - <!-- ============================================================ --> <xsl:template name="overlayDiv.attributes"> @@ -50,28 +26,9 @@ <!-- ============================================================ --> -<xsl:template name="graphics.dir"> - <!-- danger will robinson: template shadows parameter --> - <xsl:variable name="source.graphics.dir"> - <xsl:call-template name="dbhtml-attribute"> - <xsl:with-param name="pis" select="/processing-instruction('dbhtml')"/> - <xsl:with-param name="attribute" select="'graphics-dir'"/> - </xsl:call-template> - </xsl:variable> - - <xsl:choose> - <xsl:when test="$source.graphics.dir != ''"> - <xsl:value-of select="$source.graphics.dir"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$graphics.dir"/> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template name="css-stylesheet"> +<xsl:template name="css.stylesheet"> <!-- danger will robinson: template shadows parameter --> - <xsl:variable name="source.css-stylesheet"> + <xsl:variable name="source.css.stylesheet"> <xsl:call-template name="dbhtml-attribute"> <xsl:with-param name="pis" select="/processing-instruction('dbhtml')"/> <xsl:with-param name="attribute" select="'css-stylesheet'"/> @@ -79,66 +36,15 @@ </xsl:variable> <xsl:choose> - <xsl:when test="$source.css-stylesheet != ''"> - <xsl:value-of select="$source.css-stylesheet"/> + <xsl:when test="$source.css.stylesheet != ''"> + <xsl:value-of select="$source.css.stylesheet"/> </xsl:when> <xsl:otherwise> - <xsl:value-of select="$css-stylesheet"/> + <xsl:value-of select="$css.stylesheet"/> </xsl:otherwise> </xsl:choose> </xsl:template> -<xsl:template name="script-file"> - <xsl:param name="js" select="'slides.js'"/> - - <xsl:variable name="source.script.dir"> - <xsl:call-template name="dbhtml-attribute"> - <xsl:with-param name="pis" select="/processing-instruction('dbhtml')"/> - <xsl:with-param name="attribute" select="'script-dir'"/> - </xsl:call-template> - </xsl:variable> - - <xsl:choose> - <xsl:when test="$source.script.dir != ''"> - <xsl:value-of select="$source.script.dir"/> - <xsl:text>/</xsl:text> - </xsl:when> - <xsl:when test="$script.dir != ''"> - <xsl:value-of select="$script.dir"/> - <xsl:text>/</xsl:text> - </xsl:when> - </xsl:choose> - <xsl:value-of select="$js"/> -</xsl:template> - -<xsl:template name="slides.js"> - <!-- danger will robinson: template shadows parameter --> - <xsl:call-template name="script-file"> - <xsl:with-param name="js" select="$slides.js"/> - </xsl:call-template> -</xsl:template> - -<xsl:template name="list.js"> - <!-- danger will robinson: template shadows parameter --> - <xsl:call-template name="script-file"> - <xsl:with-param name="js" select="$list.js"/> - </xsl:call-template> -</xsl:template> - -<xsl:template name="resize.js"> - <!-- danger will robinson: template shadows parameter --> - <xsl:call-template name="script-file"> - <xsl:with-param name="js" select="$resize.js"/> - </xsl:call-template> -</xsl:template> - -<xsl:template name="overlay.js"> - <!-- danger will robinson: template shadows parameter --> - <xsl:call-template name="script-file"> - <xsl:with-param name="js" select="$overlay.js"/> - </xsl:call-template> -</xsl:template> - <!-- ============================================================ --> <xsl:template match="/"> @@ -155,16 +61,10 @@ <title><xsl:value-of select="slidesinfo/title"/></title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> - </xsl:if> + <link rel="top"> <xsl:attribute name="href"> <xsl:apply-templates select="/slides" mode="filename"/> @@ -173,6 +73,7 @@ <xsl:value-of select="/slides/slidesinfo/title[1]"/> </xsl:attribute> </link> + <xsl:for-each select="section"> <link rel="section"> <xsl:attribute name="href"> @@ -183,6 +84,28 @@ </xsl:attribute> </link> </xsl:for-each> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0"> + <script language="JavaScript1.2"/> + </xsl:if> + + <xsl:if test="$keyboard.nav != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + </xsl:if> + + <xsl:if test="$overlay != '0'"> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + </xsl:if> </head> <body class="tocpage"> <xsl:call-template name="body.attributes"/> @@ -191,6 +114,11 @@ <xsl:text>overlaySetup('lc')</xsl:text> </xsl:attribute> </xsl:if> + <xsl:if test="$keyboard.nav != 0"> + <xsl:attribute name="onkeypress"> + <xsl:text>navigate(event)</xsl:text> + </xsl:attribute> + </xsl:if> <h1 class="title"> <a href="{$titlefoil.html}"> @@ -220,9 +148,7 @@ <a href="{$titlefoil.html}"> <img alt="Next" border="0"> <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$right.image"/> + <xsl:call-template name="right.image"/> </xsl:attribute> </img> </a> @@ -251,21 +177,16 @@ <title><xsl:value-of select="title"/></title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> - </xsl:if> + <link rel="contents" href="{$toc.html}"> <xsl:attribute name="title"> <xsl:value-of select="(following::section|following::foil)[1]/title"/> </xsl:attribute> </link> + <link rel="next"> <xsl:attribute name="href"> <xsl:apply-templates select="(following::section|following::foil)[1]" @@ -286,6 +207,28 @@ </xsl:attribute> </link> </xsl:for-each> + + <xsl:if test="$overlay != 0 or $keyboard.nav != 0"> + <script language="JavaScript1.2"/> + </xsl:if> + + <xsl:if test="$keyboard.nav != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + </xsl:if> + + <xsl:if test="$overlay != '0'"> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + </xsl:if> </head> <body class="titlepage"> <xsl:call-template name="body.attributes"/> @@ -294,6 +237,11 @@ <xsl:text>overlaySetup('lc')</xsl:text> </xsl:attribute> </xsl:if> + <xsl:if test="$keyboard.nav != 0"> + <xsl:attribute name="onkeypress"> + <xsl:text>navigate(event)</xsl:text> + </xsl:attribute> + </xsl:if> <xsl:call-template name="slidesinfo-top-nav"/> @@ -304,9 +252,8 @@ <xsl:if test="$overlay != 0"> <hr/> </xsl:if> + <xsl:call-template name="slidesinfo-bottom-nav"/> </div> - - <xsl:call-template name="slidesinfo-bottom-nav"/> </body> </html> </xsl:with-param> @@ -360,12 +307,14 @@ </span> </td> <td align="right" width="20%" valign="top"> - <a href="foil01.html"> + <a> + <xsl:attribute name="href"> + <xsl:apply-templates select="(following::section|following::foil)[1]" + mode="filename"/> + </xsl:attribute> <img alt="Next" border="0"> <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$right.image"/> + <xsl:call-template name="right.image"/> </xsl:attribute> </img> </a> @@ -447,86 +396,33 @@ <title><xsl:value-of select="title"/></title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> - </xsl:if> - <link rel="contents" href="{$toc.html}"> - <xsl:attribute name="title"> - <xsl:value-of select="(following::section|following::foil)[1]/title"/> - </xsl:attribute> - </link> + <xsl:call-template name="section-links"/> - <link rel="top"> - <xsl:attribute name="href"> - <xsl:apply-templates select="/slides" mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="/slides/slidesinfo/title[1]"/> - </xsl:attribute> - </link> - - <xsl:if test="parent::section"> - <link rel="up"> - <xsl:attribute name="href"> - <xsl:apply-templates select="parent::section[1]" mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="parent::section[1]/title"/> - </xsl:attribute> - </link> + <xsl:if test="$overlay != 0 or $keyboard.nav != 0"> + <script language="JavaScript1.2"/> </xsl:if> - <xsl:if test="$prevfoil"> - <link rel="previous"> - <xsl:attribute name="href"> - <xsl:apply-templates select="$prevfoil" mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="$prevfoil/title"/> - </xsl:attribute> - </link> + <xsl:if test="$keyboard.nav != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> - <xsl:if test="$nextfoil"> - <link rel="next"> - <xsl:attribute name="href"> - <xsl:apply-templates select="$nextfoil" mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="$nextfoil/title"/> - </xsl:attribute> - </link> + <xsl:if test="$overlay != '0'"> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> - - <xsl:for-each select="foil"> - <link rel="slides"> - <xsl:attribute name="href"> - <xsl:apply-templates select="." mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="title[1]"/> - </xsl:attribute> - </link> - </xsl:for-each> - - <xsl:for-each select="../section"> - <link rel="section"> - <xsl:attribute name="href"> - <xsl:apply-templates select="." mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="title[1]"/> - </xsl:attribute> - </link> - </xsl:for-each> </head> <body class="section"> <xsl:call-template name="body.attributes"/> @@ -535,6 +431,12 @@ <xsl:text>overlaySetup('lc')</xsl:text> </xsl:attribute> </xsl:if> + <xsl:if test="$keyboard.nav != 0"> + <xsl:attribute name="onkeypress"> + <xsl:text>navigate(event)</xsl:text> + </xsl:attribute> + </xsl:if> + <div class="{name(.)}" id="{$id}"> <a name="{$id}"/> <xsl:call-template name="section-top-nav"/> @@ -569,6 +471,83 @@ <span class="navheader"><xsl:apply-templates/></span> </xsl:template> +<xsl:template name="section-links"> + <xsl:variable name="prevfoil" + select="(preceding::foil|/slides)[last()]"/> + + <xsl:variable name="nextfoil" select="foil[1]"/> + + <link rel="contents" href="{$toc.html}"> + <xsl:attribute name="title"> + <xsl:value-of select="(following::section|following::foil)[1]/title"/> + </xsl:attribute> + </link> + + <link rel="top"> + <xsl:attribute name="href"> + <xsl:apply-templates select="/slides" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="/slides/slidesinfo/title[1]"/> + </xsl:attribute> + </link> + + <xsl:if test="parent::section"> + <link rel="up"> + <xsl:attribute name="href"> + <xsl:apply-templates select="parent::section[1]" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="parent::section[1]/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$prevfoil"> + <link rel="previous"> + <xsl:attribute name="href"> + <xsl:apply-templates select="$prevfoil" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$prevfoil/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$nextfoil"> + <link rel="next"> + <xsl:attribute name="href"> + <xsl:apply-templates select="$nextfoil" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$nextfoil/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:for-each select="foil"> + <link rel="slides"> + <xsl:attribute name="href"> + <xsl:apply-templates select="." mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="title[1]"/> + </xsl:attribute> + </link> + </xsl:for-each> + + <xsl:for-each select="../section"> + <link rel="section"> + <xsl:attribute name="href"> + <xsl:apply-templates select="." mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="title[1]"/> + </xsl:attribute> + </link> + </xsl:for-each> +</xsl:template> + <!-- ============================================================ --> <xsl:template match="foil"> @@ -576,8 +555,6 @@ <xsl:call-template name="object.id"/> </xsl:variable> - <xsl:variable name="section" select="ancestor::section"/> - <xsl:variable name="thisfoil"> <xsl:apply-templates select="." mode="filename"/> </xsl:variable> @@ -597,110 +574,33 @@ <title><xsl:value-of select="title"/></title> <link type="text/css" rel="stylesheet"> <xsl:attribute name="href"> - <xsl:call-template name="css-stylesheet"/> - </xsl:attribute> - </link> - <xsl:if test="$overlay != '0'"> - <script type="text/javascript" language="JavaScript"> - <xsl:attribute name="src"> - <xsl:call-template name="overlay.js"/> - </xsl:attribute> - </script> - </xsl:if> - - <link rel="contents" href="{$toc.html}"> - <xsl:attribute name="title"> - <xsl:value-of select="(following::section|following::foil)[1]/title"/> + <xsl:call-template name="css.stylesheet"/> </xsl:attribute> </link> - <link rel="top"> - <xsl:attribute name="href"> - <xsl:apply-templates select="/slides" mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="/slides/slidesinfo/title[1]"/> - </xsl:attribute> - </link> - - <xsl:if test="parent::section"> - <link rel="up"> - <xsl:attribute name="href"> - <xsl:apply-templates select="parent::section[1]" mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="parent::section[1]/title"/> - </xsl:attribute> - </link> - </xsl:if> - - <xsl:if test="$prevfoil"> - <link rel="previous"> - <xsl:attribute name="href"> - <xsl:apply-templates select="$prevfoil" mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="$prevfoil/title"/> - </xsl:attribute> - </link> - </xsl:if> + <xsl:call-template name="foil-links"/> - <xsl:if test="preceding-sibling::foil"> - <link rel="first"> - <xsl:attribute name="href"> - <xsl:apply-templates select="preceding-sibling::foil[last()]" - mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="preceding-sibling::foil[last()]/title"/> - </xsl:attribute> - </link> + <xsl:if test="$overlay != 0 or $keyboard.nav != 0"> + <script language="JavaScript1.2"/> </xsl:if> - <xsl:if test="$nextfoil"> - <link rel="next"> - <xsl:attribute name="href"> - <xsl:apply-templates select="$nextfoil" mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="$nextfoil/title"/> - </xsl:attribute> - </link> + <xsl:if test="$keyboard.nav != 0"> + <xsl:call-template name="ua.js"/> + <xsl:call-template name="xbDOM.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> + <xsl:call-template name="xbStyle.js"/> + <xsl:call-template name="xbCollapsibleLists.js"/> + <xsl:call-template name="slides.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> - <xsl:if test="following-sibling::foil"> - <link rel="last"> - <xsl:attribute name="href"> - <xsl:apply-templates select="following-sibling::foil[last()]" - mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="following-sibling::foil[last()]/title"/> - </xsl:attribute> - </link> + <xsl:if test="$overlay != '0'"> + <xsl:call-template name="overlay.js"> + <xsl:with-param name="language" select="'JavaScript'"/> + </xsl:call-template> </xsl:if> - - <xsl:for-each select="../../section"> - <link rel="section"> - <xsl:attribute name="href"> - <xsl:apply-templates select="." mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="title[1]"/> - </xsl:attribute> - </link> - </xsl:for-each> - - <xsl:for-each select="../foil"> - <link rel="slides"> - <xsl:attribute name="href"> - <xsl:apply-templates select="." mode="filename"/> - </xsl:attribute> - <xsl:attribute name="title"> - <xsl:value-of select="title[1]"/> - </xsl:attribute> - </link> - </xsl:for-each> </head> <body class="foil"> <xsl:call-template name="body.attributes"/> @@ -709,6 +609,12 @@ <xsl:text>overlaySetup('lc')</xsl:text> </xsl:attribute> </xsl:if> + <xsl:if test="$keyboard.nav != 0"> + <xsl:attribute name="onkeypress"> + <xsl:text>navigate(event)</xsl:text> + </xsl:attribute> + </xsl:if> + <div class="{name(.)}" id="{$id}"> <a name="{$id}"/> <xsl:call-template name="foil-top-nav"/> @@ -751,6 +657,112 @@ </h1> </xsl:template> +<xsl:template name="foil-links"> + <xsl:variable name="nextfoil" select="(following::foil + |following::section)[1]"/> + + <xsl:variable name="prevfoil" select="(preceding-sibling::foil[1] + |parent::section[1] + |/slides)[last()]"/> + + + <link rel="contents" href="{$toc.html}"> + <xsl:attribute name="title"> + <xsl:value-of select="(following::section|following::foil)[1]/title"/> + </xsl:attribute> + </link> + + <link rel="top"> + <xsl:attribute name="href"> + <xsl:apply-templates select="/slides" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="/slides/slidesinfo/title[1]"/> + </xsl:attribute> + </link> + + <xsl:if test="parent::section"> + <link rel="up"> + <xsl:attribute name="href"> + <xsl:apply-templates select="parent::section[1]" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="parent::section[1]/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$prevfoil"> + <link rel="previous"> + <xsl:attribute name="href"> + <xsl:apply-templates select="$prevfoil" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$prevfoil/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="preceding-sibling::foil"> + <link rel="first"> + <xsl:attribute name="href"> + <xsl:apply-templates select="preceding-sibling::foil[last()]" + mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="preceding-sibling::foil[last()]/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$nextfoil"> + <link rel="next"> + <xsl:attribute name="href"> + <xsl:apply-templates select="$nextfoil" mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="$nextfoil/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="following-sibling::foil"> + <link rel="last"> + <xsl:attribute name="href"> + <xsl:apply-templates select="following-sibling::foil[last()]" + mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="following-sibling::foil[last()]/title"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:for-each select="../../section"> + <link rel="section"> + <xsl:attribute name="href"> + <xsl:apply-templates select="." mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="title[1]"/> + </xsl:attribute> + </link> + </xsl:for-each> + + <xsl:for-each select="../foil"> + <link rel="slides"> + <xsl:attribute name="href"> + <xsl:apply-templates select="." mode="filename"/> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="title[1]"/> + </xsl:attribute> + </link> + </xsl:for-each> +</xsl:template> + +<!-- ============================================================ --> + <xsl:template match="processing-instruction('Pub')"> <xsl:variable name="pidata"><xsl:value-of select="(.)"/></xsl:variable> <xsl:choose> @@ -860,14 +872,6 @@ <!-- ============================================================ --> -<xsl:template match="foil" mode="foil-filename"> - <xsl:text>foil</xsl:text> - <xsl:number count="foil" level="any" format="01"/> - <xsl:text>.html</xsl:text> -</xsl:template> - -<!-- ============================================================ --> - <xsl:template match="slides" mode="toc"> <p class="toctitle"> <b> @@ -935,11 +939,11 @@ <xsl:text>myList.addItem('</xsl:text> - <xsl:text disable-output-escaping="yes">&lt;div id="</xsl:text> + <xsl:text disable-output-escaping="yes">&lt;DIV id="</xsl:text> <xsl:value-of select="$id"/> <xsl:text disable-output-escaping="yes">" class="toc-slidesinfo"&gt;</xsl:text> - <xsl:text disable-output-escaping="yes">&lt;a href="</xsl:text> + <xsl:text disable-output-escaping="yes">&lt;A href="</xsl:text> <xsl:value-of select="$titlefoil.html"/> <xsl:text disable-output-escaping="yes">" target="foil"&gt;</xsl:text> @@ -952,13 +956,13 @@ </xsl:otherwise> </xsl:choose> - <xsl:text disable-output-escaping="yes">&lt;/a&gt;&lt;/div&gt;</xsl:text> + <xsl:text disable-output-escaping="yes">&lt;/A&gt;&lt;/DIV&gt;</xsl:text> <xsl:text>');&#10;</xsl:text> </xsl:template> <xsl:template match="section" mode="ns-toc"> - <xsl:variable name="foil"> - <xsl:apply-templates select="foil[1]" mode="foil-filename"/> + <xsl:variable name="id"> + <xsl:call-template name="object.id"/> </xsl:variable> <xsl:text>subList = new List(false, width, height, "</xsl:text> @@ -968,10 +972,13 @@ <xsl:apply-templates select="foil" mode="ns-toc"/> <xsl:text>myList.addList(subList, '</xsl:text> - <xsl:text disable-output-escaping="yes">&lt;div class="toc-section"&gt;</xsl:text> - <xsl:text disable-output-escaping="yes">&lt;a href="</xsl:text> - <xsl:value-of select="$foil"/> + <xsl:text disable-output-escaping="yes">&lt;DIV id="</xsl:text> + <xsl:value-of select="$id"/> + <xsl:text disable-output-escaping="yes">" class="toc-section"&gt;</xsl:text> + + <xsl:text disable-output-escaping="yes">&lt;A href="</xsl:text> + <xsl:apply-templates select="." mode="filename"/> <xsl:text disable-output-escaping="yes">" target="foil"&gt;</xsl:text> <xsl:choose> @@ -983,15 +990,12 @@ </xsl:otherwise> </xsl:choose> - <xsl:text disable-output-escaping="yes">&lt;/a&gt;&lt;/div&gt;</xsl:text> + <xsl:text disable-output-escaping="yes">&lt;/A&gt;&lt;/DIV&gt;</xsl:text> <xsl:text>');&#10;</xsl:text> </xsl:template> <xsl:template match="foil" mode="ns-toc"> <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> - <xsl:variable name="foil"> - <xsl:apply-templates select="." mode="foil-filename"/> - </xsl:variable> <xsl:choose> <xsl:when test="ancestor::section"> @@ -1002,18 +1006,16 @@ </xsl:otherwise> </xsl:choose> - <xsl:text disable-output-escaping="yes">&lt;div id="</xsl:text> + <xsl:text disable-output-escaping="yes">&lt;DIV id="</xsl:text> <xsl:value-of select="$id"/> <xsl:text disable-output-escaping="yes">" class="toc-foil"&gt;</xsl:text> <xsl:text disable-output-escaping="yes">&lt;img alt="-" src="</xsl:text> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$bullet.image"/> + <xsl:call-template name="bullet.image"/> <xsl:text disable-output-escaping="yes">"&gt;</xsl:text> - <xsl:text disable-output-escaping="yes">&lt;a href="</xsl:text> - <xsl:value-of select="$foil"/> + <xsl:text disable-output-escaping="yes">&lt;A href="</xsl:text> + <xsl:apply-templates select="." mode="filename"/> <xsl:text disable-output-escaping="yes">" target="foil"&gt;</xsl:text> <xsl:choose> @@ -1025,7 +1027,7 @@ </xsl:otherwise> </xsl:choose> - <xsl:text disable-output-escaping="yes">&lt;/a&gt;&lt;/div&gt;</xsl:text> + <xsl:text disable-output-escaping="yes">&lt;/A&gt;&lt;/DIV&gt;</xsl:text> <xsl:text>');&#10;</xsl:text> </xsl:template> @@ -1070,9 +1072,7 @@ </xsl:if> <img alt="Prev" border="0"> <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$left.image"/> + <xsl:call-template name="left.image"/> </xsl:attribute> </img> </a> @@ -1101,9 +1101,7 @@ </xsl:if> <img alt="Next" border="0"> <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$right.image"/> + <xsl:call-template name="right.image"/> </xsl:attribute> </img> </a> @@ -1181,9 +1179,7 @@ </xsl:if> <img alt="Prev" border="0"> <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$left.image"/> + <xsl:call-template name="left.image"/> </xsl:attribute> </img> </a> @@ -1221,9 +1217,7 @@ </xsl:if> <img alt="Next" border="0"> <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="$right.image"/> + <xsl:call-template name="right.image"/> </xsl:attribute> </img> </a> @@ -1262,29 +1256,20 @@ </xsl:template> <xsl:template name="generate.toc.hide.show"> - <xsl:if test="$toc.hide.show=1 and $ie5=1"> - <td> + <xsl:if test="$toc.hide.show != 0"> + <td> <img hspace="4"> - <xsl:attribute name="src"> - <xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="'hidetoc.gif'"/> + <xsl:attribute name="src"> + <xsl:call-template name="hidetoc.image"/> </xsl:attribute> <xsl:attribute name="onClick"> -if (parent.parent.document.all.topframe.cols=="0,*") -{ - parent.parent.document.all.topframe.cols="<xsl:value-of select="$toc.width"/>,*"; - this.src = "<xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="'hidetoc.gif'"/>"; -} -else -{ +if (parent.parent.document.all.topframe.cols=="0,*") { + parent.parent.document.all.topframe.cols="<xsl:value-of select="$toc.width"/>,*"; + this.src = "<xsl:call-template name="hidetoc.image"/>"; +} else { parent.parent.document.all.topframe.cols="0,*"; - this.src = "<xsl:call-template name="graphics.dir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="'showtoc.gif'"/>"; -}; + this.src = "<xsl:call-template name="showtoc.image"/>"; +}; </xsl:attribute> </img> </td>