Code

oops this was copied from the smokeping web ... bad bad bad ... now we are standalone ...
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Mon, 9 May 2005 17:42:35 +0000 (17:42 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Mon, 9 May 2005 17:42:35 +0000 (17:42 +0000)
git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.2@527 a5681a0c-68f1-0310-ab6d-d61299d08faa

18 files changed:
website/download.wml
website/inc/customtags.inc [new file with mode: 0644]
website/inc/design.css [new file with mode: 0644]
website/inc/event.js [new file with mode: 0644]
website/inc/fixed.js [new file with mode: 0644]
website/inc/html.inc [new file with mode: 0644]
website/inc/langset.inc [new file with mode: 0644]
website/inc/minmax.js [new file with mode: 0644]
website/inc/navbar-def.inc [new file with mode: 0644]
website/inc/position.js [new file with mode: 0644]
website/inc/rrdtool-design.xar [new file with mode: 0644]
website/inc/rrdtool-logo-dark.png [new file with mode: 0644]
website/inc/rrdtool-logo-light.png [new file with mode: 0644]
website/inc/rrdtool-logo.png [new file with mode: 0644]
website/inc/rrdtool-logo.xar [new file with mode: 0644]
website/inc/rrdtool-theme.png [new file with mode: 0644]
website/inc/template.inc [new file with mode: 0644]
website/rrdworld/cacti.xml

index 3667a2a4b490f94a784fed13e09648316557026d..5ce37a9e946bd3acb3e5f8b040c704df49adfe2b 100644 (file)
@@ -12,6 +12,8 @@ You can download RRD tool from several places:
  <LI><A HREF="http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/beta/?M=D">Development SnapShots</A></LI>
 </UL>
 
+<p>You might want to read the <a href="doc/rrdbuild.en.html">build instructions</a> for inspiration on where to go after downloading the source.</p>
+
 <H2>Mirror Sites</H2>
 
 <UL>
@@ -67,7 +69,7 @@ and libtool installed for this to work.</p>
 
 <p>If you fix a bug, I would love to see the output of '<b>svn diff</b>'.</p>
 
-<p>To get the latest chenges from the current 1.2 branche use this:</p>
+<p>To get the latest chenges from the current 1.2 branch use this:</p>
 <pre>
 svn checkout svn://svn.ee.ethz.ch/rrdtool/branches/1.2/program
 mv program rrdtool-1.2
diff --git a/website/inc/customtags.inc b/website/inc/customtags.inc
new file mode 100644 (file)
index 0000000..54ad7c1
--- /dev/null
@@ -0,0 +1,118 @@
+<define-tag where>\
+<perl>
+my $path=$WML_SRC_DIRNAME."/".$WML_SRC_BASENAME;
+$path =~ s|.+?website/||s;
+print "$path.en.html";
+</perl>\
+</define-tag>
+
+#
+# an rrdworld entry
+#
+#<rrdworld type="extension|application"
+#       icon="rumble.png" > <!-- Size 100x66 -->
+#
+#       <name> RRRRumble </name>
+#     <author> Peter Example </author>
+#<description> Makes rrdtool rumble when new data is added </description>
+#   <homepage> http://somesite.blabla.plac </homepage> 
+#       <year> 2005 </year><month> 4 </month>
+#    <license> GPL </license>
+#
+#   <!-- Optional -->   
+#
+#   <livesite> http://somesite.blabla.plac </livesite> 
+#      <email> max@example.com </email>
+#
+#</rrdworld>
+
+#<gallery image="graph.png" >
+#
+#      <title> Virus Graph </title>
+#     <author> Max Beispiel </author> 
+#<description> The five most common critters of the week. </description>
+#       <year> 2005 </year><month> 4 </month>
+#      
+#   <!-- Optional -->   
+#
+#   <livesite> http://somesite.blabla.plac </livesite> 
+#      <email> max@example.com </email>
+#
+#</gallery>
+
+
+
+<define-tag name        endtag=required ><set-var-x name=rwv_name><h3>%body</h3></set-var-x></define-tag>
+<define-tag title       endtag=required ><set-var-x name=rwv_title><h2>%body</h2></set-var-x></define-tag>
+<define-tag author      endtag=required ><set-var-x name=rwv_author>%body</set-var-x></define-tag>
+<define-tag description endtag=required ><set-var-x name=rwv_description>%body</set-var-x></define-tag>
+<define-tag homepage    endtag=required ><set-var-x name=rwv_homepage> ... <a href="<subst-in-string %body " " "" />">[home]</a></set-var-x></define-tag>
+<define-tag year        endtag=required ><set-var-x name=rwv_year> %body </set-var-x></define-tag>
+<define-tag month       endtag=required ><set-var-x name=rwv_month> /%body </set-var-x></define-tag>
+<define-tag license     endtag=required ><set-var-x name=rwv_license>License: %body</set-var-x></define-tag>
+<define-tag livesite    endtag=required ><set-var-x name=rwv_livesite> <a href="<subst-in-string "%body" " " "" />">[demo]</a></set-var-x></define-tag>
+<define-tag email       endtag=required ><set-var-x name=rwv_email>&lt;<subst-in-string <subst-in-string "%body" " " "" /> @ "@<span class="legacy">XYZ-</span>" />&gt;</set-var-x></define-tag>
+
+<define-tag rrdworld endtag=required>
+<preserve icon type rwv_name rwv_author rwv_description rwv_homepage rwv_year rwv_month rwv_license rwv_livesite rwv_email/>
+<set-var %attributes />
+%body
+<subst-in-var rwv_year " " ""/>
+<subst-in-var rwv_month " " ""/>
+<div class="rrdworld">
+<if <get-var icon/> <img align="right" src="<subst-in-string <get-var icon/> " " "" />"/> />
+<get-var rwv_name/>
+<div class="who"><get-var rwv_author/> <get-var rwv_email/> | Date: <get-var rwv_year/><get-var rwv_month/> | <get-var rwv_license/></div>
+<div class="desc">
+<get-var rwv_description/>
+<get-var rwv_homepage/><get-var rwv_livesite/>
+</div>
+</div>
+<restore icon type rwv_name rwv_author rwv_description rwv_homepage rwv_year rwv_month rwv_license rwv_livesite rwv_email/>
+</define-tag>
+
+<define-tag gallery endtag=required>
+<preserve image rwv_title rwv_author rwv_description rwv_year rwv_month rwv_livesite rwv_email/>
+<set-var %attributes />
+%body
+<subst-in-var rwv_year " " ""/>
+<subst-in-var rwv_month " " ""/>
+<div class="gallery">
+<get-var rwv_title/>
+<div class="image"><img src="<subst-in-string <get-var image/> " " "" />"/></div>
+<div class="caption"><get-var rwv_description/> -- <get-var rwv_author/> <get-var rwv_email/>, <get-var rwv_year/><get-var rwv_month/> <get-var rwv_livesite/></div>
+</div>
+<restore image rwv_title rwv_author rwv_description rwv_year rwv_month rwv_livesite rwv_email/>
+</define-tag>
+
+
+<define-tag lastchange>
+<perl>
+use POSIX qw(strftime); 
+use POSIX qw(locale_h); 
+  setlocale(LC_TIME,"de");
+  my $x_de = strftime "%e. %B %Y", localtime("$(WML_SRC_TIME)"); 
+  setlocale(LC_TIME,"en_US");
+  my $x_en = strftime "%B %e, %Y", localtime("$(WML_SRC_TIME)"); 
+  $x_de=~ s/\s/&nbsp;/g; 
+  $x_en=~ s/\s/&nbsp;/g; 
+</perl>
+<en>
+<perl>  
+  print $x_en;
+</perl>
+</en>
+<de>
+<perl>
+  print $x_de;
+</perl>
+</de>
+</define-tag>
+
+<define-tag picture endtag=required>
+<div class="pic"><img  src="%body" align=left/></div>
+</define-tag>
+
+
+
+# vi: ft=wml
diff --git a/website/inc/design.css b/website/inc/design.css
new file mode 100644 (file)
index 0000000..344995c
--- /dev/null
@@ -0,0 +1,251 @@
+body {
+  background-color: white;
+  color: black;
+  margin: 30px;
+  padding: 0px;
+  font-family: sans-serif;
+  line-height: 1.5em;
+}
+/* hide old stuff */
+.legacy {
+  display: none
+}
+
+/**************************
+ * layout              
+ **************************/
+table#frame  {
+        width: 100%;
+        border-collapse: collapse;
+        background-color: #1a1a1a;
+}
+
+table#frame td {
+        vertical-align: top;
+        margin: 0px;
+        padding: 0px;
+}
+
+
+/**************************
+ * body              
+ **************************/
+div#body {
+  color: white;
+  margin: 40px;
+  margin-top: 80px;
+}
+
+div#body h1 { 
+  color: #717fe5;
+  margin-top: 0px;
+  margin-bottom: 0.5em;
+  padding-bottom: 0.1em;
+  line-height: 1em;
+  font-size: 220%;
+  border-bottom-style: solid;
+  border-bottom-width: 4px;
+  border-bottom-color: #404040;
+}
+
+div#body h2 { 
+  color: white;
+  margin-top: 0.6em;
+  margin-bottom: 0.1em;
+}
+
+
+div#body a {
+  color: #4a71e4;
+}
+
+div#body a[name] {
+  color: white;
+}
+
+div#body a:hover {
+  color: #7b9dff;
+}
+
+div#body h2 a,
+div#body h3 a,
+div#body h4 a,
+div#body h5 a {
+  color: white;
+}
+
+div#body dl dd {
+  margin-left: 1.5em;
+}
+
+div#body dl dt {
+  padding-top: 1em;
+  font-weight: bold;
+}
+
+div#body dl dt a {
+  text-decoration: none;
+}
+
+div#body dl p {
+  margin-bottom: 0.2em;
+  margin-top: 0.2em;
+}
+div#body pre {
+  border-style: solid;
+  border-color: #bfbfbf;
+  border-width: 1px;  
+  background-color: #606060;
+  padding: 1em;
+}
+
+div#body pre a{
+  color: white;
+}
+
+/**************************
+ * footer
+ **************************/
+table#frame td#footcell {
+}
+
+div#address  {
+  float: right;
+  margin: 30px;
+}
+
+div#address small {
+  color: #b0b0b0;
+  font-size: 90%;
+}
+
+div#address a {
+  color: #b0b0b0;
+  text-decoration: none;
+}
+
+/**************************
+ * logo
+ **************************/
+
+div#logo {
+  position: absolute;
+  height: 62px;
+  width: 187px;
+  right: 80px;
+  top: 60px;
+  background-image: url("rrdtool-theme.png");
+}
+
+/**************************
+ * rrdworld
+ **************************/
+
+div.rrdworld h3 {
+  background: #202050;
+  margin-top: 0.1em;
+  margin-bottom: 0.3em;
+  padding: 3px;  
+}
+
+div.rrdworld {
+  border-style: solid;
+  border-color: #bfbfbf;
+  border-width: 1px;  
+  background-color: #404040;
+  padding: 1em;
+  margin-top: 0.5em;
+  margin-bottom: 1em;
+}
+
+
+/**************************
+ * mirrors
+ **************************/
+
+div#mirrors {
+  padding: 3px;
+  padding-left: 40px;
+  font-size: 10px;
+}
+
+div#mirrors,
+div#mirrors a {
+  color: #606060;
+}
+
+
+/**************************
+ * menu              
+ **************************/
+table#frame td#leftcornercell,
+table#frame td#menucell {
+  width: 10%;
+  background-color: #606060;
+}
+
+div#menu {
+  font-weight: normal;
+  color: white;
+  margin-top: 20px;
+  margin-left: 20px;
+  margin-right: 20px;
+  font-size: 14px;
+  width: 120px;
+  line-height: 1em;
+}
+
+div#menu li {
+  margin-top: 0.7em;
+  margin-bottom: 0.7em;
+}
+
+div#menu li li {
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+
+div#menu a {
+  color: black;
+  text-decoration: none;
+}
+
+div#menu ul ul a {
+  color: black;
+  text-decoration: none;
+}
+
+div#menu ul {
+  list-style: none;
+  margin-left: 0px;
+  padding-left: 0px;
+}
+
+div#menu ul ul { 
+  padding-left: 10px;
+  font-size: 12px;
+}
+
+div#menu ul a,
+div#menu ul div.selected {
+  padding-left: 0px;
+}
+
+div#menu ul ul ul li {
+  padding-left: 1em;
+}
+
+div#menu a:hover {
+  color: #a6a4f5;
+}
+
+div#menu a:active {
+  color: #7b7aba;
+}
+
+div#menu li div.selected {
+  color: white;
+  font-weight: bold;
+}
+
diff --git a/website/inc/event.js b/website/inc/event.js
new file mode 100644 (file)
index 0000000..cc99e46
--- /dev/null
@@ -0,0 +1,149 @@
+// event.js: cross-browser Listener-style event handling
+// version 0.9, 18-Apr-2001
+// written by Andrew Clover <and@doxdesk.com>, use freely
+
+event_list= new Array();
+
+event_level= 0;
+if (document.implementation)
+  if (document.implementation.hasFeature('Events', '2.0'))
+    event_level= 2;
+
+function event_addListener(esource, etype, elistener) {
+  var i;
+  var alreadyTriggering= false;
+  for (i= 0; i<event_list.length; i++) {
+    if (event_list[i][0]==esource && event_list[i][1]==etype) {
+      if (event_list[i][2]==elistener) return;
+      alreadyTriggering= true;
+  } }
+  event_list[event_list.length]= new Array(esource, etype, elistener);
+  if (!alreadyTriggering) {
+    if (event_level==2) {
+      if (esource==window && !(esource.addEventListener))
+        esource= document; // Opera 7.2
+      esource.addEventListener(etype, event_trigger_DOM2, false);
+    } else {
+      eval(event_trigger_DOM0(etype));
+      esource['on'+etype]= event_trigger;
+      if (esource.captureEvents)
+        esource.captureEvents('Event.'+etype.toUpperCase());
+  } }
+}
+
+function event_removeListener(esource, etype, elistener) {
+  var i; var e;
+  var j= 0;
+  var removedListener= false;
+  var keepTrigger= false;
+  for (i= 0; i<event_list.length; i++) {
+    if (event_list[i][0]==esource && event_list[i][1]==etype) {
+      if (event_list[i][2]==elistener) {
+        removedListener= true;
+        continue;
+      }
+      else keepTrigger= true;
+    }
+    if (i!=j) event_list[j]= event_list[i];
+    j++;
+  }
+  event_list.length= j;
+  if (removedListener && !keepTrigger) {
+    if (event_level==2)
+      esource.removeEventListener(etype, elistener, true);
+    else
+      esource['on'+etype]= window.clientInformation ? null : window.undefined;
+  }
+}
+
+function event_trigger_DOM2(e) {
+  if (event_dispatch(e.target, e.type)==false)
+    e.preventDefault();
+}
+
+function event_trigger_DOM0(t) {
+  return 'function event_trigger() {return event_dispatch(this, \''+t+'\');}';
+}
+
+function event_dispatch(esource, etype) {
+  var i; var r;
+  var elisteners= new Array();
+  var result= window.undefined;
+  for (i= 0; i<event_list.length; i++)
+    if (event_list[i][0]==esource && event_list[i][1]==etype)
+      elisteners[elisteners.length]= event_list[i][2];
+  for (i= 0; i<elisteners.length; i++) {
+    r= elisteners[i](esource, etype);
+    if (r+''!='undefined') result= r;
+  }
+  return result;
+}
+
+// convenience prevent-default-action listener
+function event_prevent(esource, etype) { return false; }
+
+// page finished loading detector for binding
+var event_loaded= false;
+function event_load(esource, etype) {
+  event_loaded= true;
+  event_removeListener(window, 'load', event_load);
+}
+event_addListener(window, 'load', event_load);
+
+// binding helper
+var event_BINDDELAY= 750;
+var event_binds= new Array();
+
+function event_addBinding(btag, blistener) {
+  event_binds[event_binds.length]= new Array(btag, 0, blistener);
+  if (event_intervalling)
+    event_bind();
+  else {
+    event_intervalling= true;
+    window.setTimeout(event_interval, 0);
+  }
+}
+
+var event_intervalling= false;
+function event_interval() {
+  event_bind();
+  if (!event_loaded)
+    window.setTimeout(event_interval, event_BINDDELAY);
+}
+
+function event_bind() {
+  var i, j, els, blistener;
+  for (i= event_binds.length; i-->0;) {
+    els= event_getElementsByTag(event_binds[i][0]);
+    blistener= event_binds[i][2];
+    for (j= event_binds[i][1]; j<els.length; j++)
+      blistener(els[j]);
+    event_binds[i][1]= event_getElementsByTag(event_binds[i][0]).length;
+  }
+}
+
+// get elements by tag name with backup for pre-DOM browsers
+var event_NIL= new Array();
+function event_getElementsByTag(tag) {
+  if (document.getElementsByTagName) {
+    var arr= document.getElementsByTagName(tag);
+    // IE5.0/Win doesn't support '*' for all tags
+    if (tag!='*' || arr.length>0) return arr;
+  }
+  if (document.all) {
+    if (tag=='*') return event_array(document.all);
+    else return event_array(document.all.tags(tag));
+  }
+  tag= tag.toLowerCase();
+  if (tag=='a') return event_array(document.links);
+  if (tag=='img') return event_array(document.images);
+  if (tag=='form') return event_array(document.forms);
+  if (document.layers && tag=='div') return event_array(document.layers);
+  return event_NIL;
+}
+function event_array(coll) {
+  var arr= new Array(coll.length);
+  for (var i= arr.length; i-->0;)
+    arr[i]= coll[i];
+  return arr;
+}
\ No newline at end of file
diff --git a/website/inc/fixed.js b/website/inc/fixed.js
new file mode 100644 (file)
index 0000000..5382876
--- /dev/null
@@ -0,0 +1,354 @@
+// fixed.js: fix fixed positioning and fixed backgrounds in IE/Win
+// version 1.8, 08-Aug-2003
+// written by Andrew Clover <and@doxdesk.com>, use freely
+
+/*@cc_on
+@if (@_win32 && @_jscript_version>4)
+
+var fixed_positions= new Array();
+var fixed_backgrounds= new Array();
+var fixed_viewport;
+
+// Initialisation. Called when the <body> tag arrives. Set up viewport so the
+// rest of the script knows we're going, and add a measurer div, used to detect
+// font size changes and measure image sizes for backgrounds later   
+
+function fixed_init() {
+  fixed_viewport= (document.compatMode=='CSS1Compat') ?
+    document.documentElement : document.body;
+  var el= document.createElement('div');
+  el.setAttribute('id', 'fixed-measure');
+  el.style.position= 'absolute';
+  el.style.top= '0'; el.style.left= '0';
+  el.style.overflow= 'hidden'; el.style.visibility= 'hidden';
+  el.style.fontSize= 'xx-large'; el.style.height= '5em';
+  el.style.setExpression('width', 'fixed_measureFont()');
+  document.body.insertBefore(el, document.body.firstChild);
+}
+
+// Binding. Called every time an element is added to the document, check it
+// for fixed features, if found add to our lists and set initial props   
+
+function fixed_bind(el) {
+  var needLayout= false;
+  var tag= el.tagName.toLowerCase();
+  var st= el.style;
+  var cst= el.currentStyle;
+  var anc;
+
+  // find fixed-position elements
+  if (cst.position=='fixed') {
+    needLayout= true;
+    fixed_positions[fixed_positions.length]= el;
+    // store original positioning as we'll overwrite it
+    st.position= 'absolute';
+    st.fixedPLeft=   cst.left;
+    st.fixedPTop=    cst.top;
+    st.fixedPRight=  cst.right;
+    st.fixedPBottom= cst.bottom;
+    st.fixedPWidth=  fixed_parseLength(cst.width);
+    st.fixedPHeight= fixed_parseLength(cst.height);
+    // find element that will act as containing box, for convenience later
+    st.fixedCB= null;
+    for (anc= el; (anc= anc.parentElement).parentElement;) {
+      if (anc.currentStyle.position!='static') {
+        st.fixedCB= anc;
+        break;
+    } }
+    // detect nested fixed positioning (only ancestor need move)
+    st.fixedNest= false;
+    for (anc= el; anc= anc.parentElement;) {
+      if (anc.style.fixedNest!=null)
+        st.fixedNest= true;
+        break;
+    }
+  }
+
+  // find fixed-background elements (not body/html which IE already gets right)
+  if (cst.backgroundAttachment=='fixed' && tag!='body' && tag!='html') {
+    needLayout= true;
+    fixed_backgrounds[fixed_backgrounds.length]= el;
+    // get background offset, converting from keyword if necessary
+    st.fixedBLeft= fixed_parseLength(cst.backgroundPositionX);
+    st.fixedBTop=  fixed_parseLength(cst.backgroundPositionY);
+    // if it's a non-zero %age, need to know size of image for layout
+    if (st.fixedBLeft[1]=='%' || st.fixedBTop[1]=='%') {
+      st.fixedBWidth= 0; st.fixedBHeight= 0;
+      fixed_measureBack(el);
+    }
+  }
+  if (needLayout) fixed_layout();
+}
+
+// Layout. On every window or font size change, recalculate positioning   
+
+// Request re-layout at next free moment
+var fixed_delaying= false;
+function fixed_delayout() {
+  if (fixed_delaying) return;
+  fixed_delaying= true;
+  window.setTimeout(fixed_layout, 0);
+}
+
+var fixed_ARBITRARY= 200;
+
+function fixed_layout() {
+  fixed_delaying= false;
+  if (!fixed_viewport) return;
+  var i, el, st, j, pr, tmp, A= 'auto';
+  var cb, cbLeft, cbTop, cbRight, cbBottom, oLeft, oTop, oRight, oBottom;
+  var vpWidth=fixed_viewport.clientWidth, vpHeight=fixed_viewport.clientHeight;
+
+  // calculate initial position for fixed-position elements [black magic]
+  for (i= fixed_positions.length; i-->0;) {
+    el= fixed_positions[i]; st= el.style;
+    // find positioning of containing block
+    cb= st.fixedCB; if (!cb) cb= fixed_viewport;
+    cbLeft= fixed_pageLeft(cb); cbTop= fixed_pageTop(cb);
+    if (cb!=fixed_viewport) { cbLeft+= cb.clientLeft; cbTop+= cb.clientTop; }
+    cbRight= fixed_viewport.clientWidth-cbLeft-cb.clientWidth;
+    cbBottom= fixed_viewport.clientHeight-cbTop-cb.clientHeight;
+    // if size is in %, must recalculate relative to viewport
+    if (st.fixedPWidth[1]=='%')
+      st.width= Math.round(vpWidth*st.fixedPWidth[0]/100)+'px';
+    if (st.fixedPHeight[1]=='%')
+      st.height= Math.round(vpHeight*st.fixedPHeight[0]/100)+'px';
+    // find out offset values at max size, to account for margins
+    st.left= A; st.right= '0'; st.top= A; st.bottom= '0';
+    oRight= el.offsetLeft+el.offsetWidth; oBottom= el.offsetTop+el.offsetHeight;
+    st.left= '0'; st.right= A; st.top= '0'; st.bottom= A;
+    oLeft= el.offsetLeft; oTop= el.offsetTop;
+    // use this to convert all edges to pixels
+    st.left= A; st.right= st.fixedPRight;
+    st.top= A; st.bottom= st.fixedPBottom;
+    oRight-= el.offsetLeft+el.offsetWidth;
+    oBottom-= el.offsetTop+el.offsetHeight;
+    st.left= st.fixedPLeft; st.top= st.fixedPTop;
+    oLeft= el.offsetLeft-oLeft; oTop= el.offsetTop-oTop;
+    // edge positioning fix
+    if (st.fixedPWidth[1]==A && st.fixedPLeft!=A && st.fixedPRight!=A) {
+      tmp= el.offsetLeft; st.left= A; st.width= fixed_ARBITRARY+'px';
+      tmp= fixed_ARBITRARY+el.offsetLeft-tmp+cbLeft+cbRight;
+      st.left= st.fixedPLeft; st.width= ((tmp<1)?1:tmp)+'px';
+    }
+    if (st.fixedPHeight[1]==A && st.fixedPTop!=A && st.fixedPBottom!=A) {
+      tmp= el.offsetTop; st.top= A; st.height= fixed_ARBITRARY+'px';
+      tmp= fixed_ARBITRARY+el.offsetTop-tmp+cbTop+cbBottom;
+      st.top= st.fixedPTop; st.height= ((tmp<1)?1:tmp)+'px';
+    }
+    // move all non-auto edges relative to the viewport
+    st.fixedCLeft= (st.fixedPLeft=='auto') ? oLeft : oLeft-cbLeft;
+    st.fixedCTop= (st.fixedPTop=='auto') ? oTop : oTop-cbTop;
+    st.fixedCRight= (st.fixedPRight=='auto') ? oRight : oRight-cbRight;
+    st.fixedCBottom= (st.fixedPBottom=='auto') ? oBottom : oBottom-cbBottom;
+    // remove left-positioning of right-positioned elements
+    if (st.fixedPLeft=='auto' && st.fixedPRight!='auto') st.fixedCLeft= 'auto';
+    if (st.fixedPTop=='auto' && st.fixedPBottom!='auto') st.fixedCTop= 'auto';
+  }
+
+
+  // calculate initial positioning of fixed backgrounds
+  for (i= fixed_backgrounds.length; i-->0;) {
+    el= fixed_backgrounds[i]; st= el.style;
+    tmp= st.fixedBImage;
+    if (tmp) {
+      if (tmp.readyState!='uninitialized') {
+        st.fixedBWidth= tmp.offsetWidth;
+        st.fixedBHeight= tmp.offsetHeight;
+        st.fixedBImage= window.undefined;
+      }
+    }
+    st.fixedBX= fixed_length(el, st.fixedBLeft, vpWidth-st.fixedBWidth);
+    st.fixedBY= fixed_length(el, st.fixedBTop, vpHeight-st.fixedBHeight);
+  }
+
+  // now call scroll() to set the positions from the values just calculated
+  fixed_scroll();
+}
+
+// Scrolling. Offset fixed elements relative to viewport scrollness
+
+var fixed_lastX, fixed_lastY;
+var fixed_PATCHDELAY= 300;
+var fixed_patching= false;
+
+// callback function after a scroll, because incorrect scroll position is
+// often reported first go!
+function fixed_patch() {
+  fixed_patching= false;
+  var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop;
+  if (scrollX!=fixed_lastX && scrollY!=fixed_lastY) fixed_scroll();
+}
+
+function fixed_scroll() {
+  if (!fixed_viewport) return;
+  var i, el, st, viewportX, viewportY;
+  var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop;
+  fixed_lastX= scrollX; fixed_lastY= scrollY;
+
+  // move non-nested fixed-position elements
+  for (i= fixed_positions.length; i-->0;) {
+    st= fixed_positions[i].style;
+    viewportX= (st.fixedNest) ? 0 : scrollX;
+    viewportY= (st.fixedNest) ? 0 : scrollY;
+    if (st.fixedCLeft!='auto') st.left= (st.fixedCLeft+viewportX)+'px';
+    if (st.fixedCTop!='auto') st.top= (st.fixedCTop+viewportY)+'px';
+    viewportX= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportX;
+    viewportY= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportY;
+    st.right= (st.fixedCRight-viewportX+1)+'px'; st.right= (st.fixedCRight-viewportX)+'px';
+    st.bottom= (st.fixedCBottom-viewportY+1)+'px'; st.bottom= (st.fixedCBottom-viewportY)+'px';
+  }
+
+  // align fixed backgrounds to viewport
+  for (i= fixed_backgrounds.length; i-->0;) {
+    el= fixed_backgrounds[i]; st= el.style;
+    viewportX= scrollX;
+    viewportY= scrollY;
+    while (el.offsetParent) {
+      viewportX-= el.offsetLeft+el.clientLeft;
+      viewportY-= el.offsetTop +el.clientTop;
+      el= el.offsetParent;
+    }
+    st.backgroundPositionX= (st.fixedBX+viewportX)+'px';
+    st.backgroundPositionY= (st.fixedBY+viewportY)+'px';
+  }
+
+  // call back again in a tic
+  if (!fixed_patching) {
+    fixed_patching= true;
+    window.setTimeout(fixed_patch, fixed_PATCHDELAY);
+  }
+}
+
+// Measurement. Load bg-image into an invisible element on the page, when
+// loaded write the width/height to an element's style for layout use; detect
+// when font size changes
+
+function fixed_measureBack(el) {
+  var measure= document.getElementById('fixed-measure');
+  var img= document.createElement('img');
+  img.setAttribute('src', fixed_parseURL(el.currentStyle.backgroundImage));
+  measure.appendChild(img);
+  el.style.fixedBImage= img;
+  if (img.readyState=='uninitialized')
+    img.attachEvent('onreadystatechange', fixed_measureBackImage_ready);
+}
+
+function fixed_measureBackImage_ready() {
+  var img= event.srcElement;
+  if (img && img.readyState!='uninitialized') {
+    img.detachEvent('onreadystatechange', fixed_measureBackImage_ready);
+    fixed_layout();
+  }
+}
+
+var fixed_fontsize= 0;
+function fixed_measureFont() {
+  var fs= document.getElementById('fixed-measure').offsetHeight;
+  if (fixed_fontsize!=fs && fixed_fontsize!=0)
+    fixed_delayout();
+  fixed_fontsize= fs;
+  return '5em';
+}
+
+// Utility. General-purpose functions
+
+// parse url() to get value inside
+
+function fixed_parseURL(v) {
+  v= v.substring(4, v.length-1);
+  if (v.charAt(0)=='"' && v.charAt(v.length-1)=='"' ||
+      v.charAt(0)=="'" && v.charAt(v.length-1)=="'")
+    return v.substring(1, v.length-1);
+  else return v;
+}
+
+// parse length or auto or background-position keyword into number and unit
+
+var fixed_numberChars= '+-0123456789.';
+var fixed_ZERO= new Array(0, 'px');
+var fixed_50PC= new Array(50, '%');
+var fixed_100PC= new Array(100, '%');
+var fixed_AUTO= new Array(0, 'auto');
+
+function fixed_parseLength(v) {
+  var num, i;
+  if (v=='left'  || v=='top')    return fixed_ZERO;
+  if (v=='right' || v=='bottom') return fixed_100PC;
+  if (v=='center') return fixed_50PC;
+  if (v=='auto')   return fixed_AUTO;
+  i= 0;
+  while (i<v.length && fixed_numberChars.indexOf(v.charAt(i))!=-1)
+    i++;
+  num= parseFloat(v.substring(0, i));
+  if (num==0) return fixed_ZERO;
+  else return new Array(num, v.substring(i));
+}
+
+// convert parsed (number, unit) into a number of pixels
+
+function fixed_length(el, l, full) {
+  var tmp, x;
+  if (l[1]=='px') return l[0];
+  if (l[1]=='%')  return Math.round(full*l[0]/100);
+  // other units - measure by setting position; this is rather inefficient
+  // but then these units are used for background-position so seldom...
+  tmp= el.currentStyle.left;
+  el.style.left= '0';
+  x= el.offsetLeft;
+  el.style.left= l[0]+l[1];
+  x= el.offsetLeft-x;
+  el.style.left= tmp;
+  return x;
+}
+
+// convert stupid IE offsetLeft/Top to page-relative values
+
+function fixed_pageLeft(el) {
+  var v= 0;
+  while (el.offsetParent) {
+    v+= el.offsetLeft;
+    el= el.offsetParent;
+  }
+  return v;
+}
+function fixed_pageTop(el) {
+  var v= 0;
+  while (el.offsetParent) {
+    v+= el.offsetTop;
+    el= el.offsetParent;
+  }
+  return v;
+}
+
+// Scanning. Check document every so often until it has finished loading. Do
+// nothing until <body> arrives, then call main init. Pass any new elements
+// found on each scan to be bound   
+
+var fixed_SCANDELAY= 500;
+
+function fixed_scan() {
+  if (!document.body) return;
+  if (!fixed_viewport) fixed_init();
+  var el;
+  for (var i= 0; i<document.all.length; i++) {
+    el= document.all[i];
+    if (!el.fixed_bound) {
+      el.fixed_bound= true;
+      fixed_bind(el);
+  } }
+}
+
+var fixed_scanner;
+function fixed_stop() {
+  window.clearInterval(fixed_scanner);
+  fixed_scan();
+}
+
+fixed_scan();
+fixed_scanner= window.setInterval(fixed_scan, fixed_SCANDELAY);
+window.attachEvent('onload', fixed_stop);
+window.attachEvent('onresize', fixed_delayout);
+window.attachEvent('onscroll', fixed_scroll);
+
+@end @*/
diff --git a/website/inc/html.inc b/website/inc/html.inc
new file mode 100644 (file)
index 0000000..0adb913
--- /dev/null
@@ -0,0 +1,21 @@
+<define-tag h1 whitespace=delete endtag=required>
+<preserve subtitle />
+<set-var %attributes />
+<h1*>%body</h1*>
+{#H1_FLAT#:<: $x = <<kjhasdflkjhasdf;
+%body
+kjhasdflkjhasdf
+$x =~ s/\\n/ /g; print $x; :>:#H1_FLAT#}
+<if <get-var title_is_set /> ""
+   {#Title#:{#H1_FLAT#}:#Title#}
+/>
+<restore subtitle />
+</define-tag>
+
+<define-tag title whitespace=delete endtag=required>
+<set-var title_is_set=1/>
+{#!Title#:<: $_ = <<kjhasdflkjhasdf;
+%body
+kjhasdflkjhasdf
+s/\\n/ /g; print :>:#Title#}
+</define-tag>
diff --git a/website/inc/langset.inc b/website/inc/langset.inc
new file mode 100644 (file)
index 0000000..bd566d6
--- /dev/null
@@ -0,0 +1,34 @@
+#
+#
+# all definitions in the include rely on the existence of $LANG 
+#
+#
+###############################################################################
+# define base languages of the document
+###############################################################################
+#use wml::std::lang
+<set-var lntmp=<downcase "$(LANGS)" /> />
+<while <match <get-var lntmp /> "[a-z][a-z]" />>
+  <set-var lan=<match <get-var lntmp /> "[a-z][a-z]" action=extract /> />
+  <set-var lntmp=<match <get-var lntmp /> "[a-z][a-z]" action=delete /> />
+  <lang:new id=<get-var lan /> short />
+</while>
+
+###############################################################################
+## creates .var file for automatic language selection 
+###############################################################################
+[LANG_VAR:
+URI: $(WML_SRC_BASENAME)
+<set-var lntmp=<downcase "$(LANGS)" /> />
+<while <match <get-var lntmp /> "[a-z][a-z]" /> >
+  <set-var lan=<match <get-var lntmp /> "[a-z][a-z]" action=extract /> />
+  <set-var lntmp=<match <get-var lntmp /> "[a-z][a-z]" action=delete /> />
+<protect></protect>
+URI: $(WML_SRC_BASENAME).<get-var lan />.html
+Content-type: text/html
+Content-language: <get-var lan />
+</while>
+<protect></protect>
+URI: $(WML_SRC_BASENAME).en.html
+Content-type: text/html
+:LANG_VAR]
diff --git a/website/inc/minmax.js b/website/inc/minmax.js
new file mode 100644 (file)
index 0000000..7ebf1f5
--- /dev/null
@@ -0,0 +1,144 @@
+// minmax.js: make IE5+/Win support CSS min/max-width/height
+// version 1.0, 08-Aug-2003
+// written by Andrew Clover <and@doxdesk.com>, use freely
+
+/*@cc_on
+@if (@_win32 && @_jscript_version>4)
+
+var minmax_elements;
+
+minmax_props= new Array(
+  new Array('min-width', 'minWidth'),
+  new Array('max-width', 'maxWidth'),
+  new Array('min-height','minHeight'),
+  new Array('max-height','maxHeight')
+);
+
+// Binding. Called on all new elements. If <body>, initialise; check all
+// elements for minmax properties
+
+function minmax_bind(el) {
+  var i, em, ms;
+  var st= el.style, cs= el.currentStyle;
+
+  if (minmax_elements==window.undefined) {
+    // initialise when body element has turned up, but only on IE
+    if (!document.body || !document.body.currentStyle) return;
+    minmax_elements= new Array();
+    window.attachEvent('onresize', minmax_delayout);
+    // make font size listener
+    em= document.createElement('div');
+    em.setAttribute('id', 'minmax_em');
+    em.style.position= 'absolute'; em.style.visibility= 'hidden';
+    em.style.fontSize= 'xx-large'; em.style.height= '5em';
+    em.style.top='-5em'; em.style.left= '0';
+    if (em.style.setExpression) {
+      em.style.setExpression('width', 'minmax_checkFont()');
+      document.body.insertBefore(em, document.body.firstChild);
+    }
+  }
+
+  // transform hyphenated properties the browser has not caught to camelCase
+  for (i= minmax_props.length; i-->0;)
+    if (cs[minmax_props[i][0]])
+      st[minmax_props[i][1]]= cs[minmax_props[i][0]];
+  // add element with properties to list, store optimal size values
+  for (i= minmax_props.length; i-->0;) {
+    ms= cs[minmax_props[i][1]];
+    if (ms && ms!='auto' && ms!='none' && ms!='0' && ms!='') {
+      st.minmaxWidth= cs.width; st.minmaxHeight= cs.height;
+      minmax_elements[minmax_elements.length]= el;
+      // will need a layout later
+      minmax_delayout();
+      break;
+  } }
+}
+
+// check for font size changes
+
+var minmax_fontsize= 0;
+function minmax_checkFont() {
+  var fs= document.getElementById('minmax_em').offsetHeight;
+  if (minmax_fontsize!=fs && minmax_fontsize!=0)
+    minmax_delayout();
+  minmax_fontsize= fs;
+  return '5em';
+}
+
+// Layout. Called after window and font size-change. Go through elements we
+// picked out earlier and set their size to the minimum, maximum and optimum,
+// choosing whichever is appropriate
+
+// Request re-layout at next available moment
+var minmax_delaying= false;
+function minmax_delayout() {
+  if (minmax_delaying) return;
+  minmax_delaying= true;
+  window.setTimeout(minmax_layout, 0);
+}
+
+function minmax_stopdelaying() {
+  minmax_delaying= false;
+}
+
+function minmax_layout() {
+  window.setTimeout(minmax_stopdelaying, 100);
+  var i, el, st, cs, optimal, inrange;
+  for (i= minmax_elements.length; i-->0;) {
+    el= minmax_elements[i]; st= el.style; cs= el.currentStyle;
+
+    // horizontal size bounding
+    st.width= st.minmaxWidth; optimal= el.offsetWidth;
+    inrange= true;
+    if (inrange && cs.minWidth && cs.minWidth!='0' && cs.minWidth!='auto' && cs.minWidth!='') {
+      st.width= cs.minWidth;
+      inrange= (el.offsetWidth<optimal);
+    }
+    if (inrange && cs.maxWidth && cs.maxWidth!='none' && cs.maxWidth!='auto' && cs.maxWidth!='') {
+      st.width= cs.maxWidth;
+      inrange= (el.offsetWidth>optimal);
+    }
+    if (inrange) st.width= st.minmaxWidth;
+
+    // vertical size bounding
+    st.height= st.minmaxHeight; optimal= el.offsetHeight;
+    inrange= true;
+    if (inrange && cs.minHeight && cs.minHeight!='0' && cs.minHeight!='auto' && cs.minHeight!='') {
+      st.height= cs.minHeight;
+      inrange= (el.offsetHeight<optimal);
+    }
+    if (inrange && cs.maxHeight && cs.maxHeight!='none' && cs.maxHeight!='auto' && cs.maxHeight!='') {
+      st.height= cs.maxHeight;
+      inrange= (el.offsetHeight>optimal);
+    }
+    if (inrange) st.height= st.minmaxHeight;
+  }
+}
+
+// Scanning. Check document every so often until it has finished loading. Do
+// nothing until <body> arrives, then call main init. Pass any new elements
+// found on each scan to be bound   
+
+var minmax_SCANDELAY= 500;
+
+function minmax_scan() {
+  var el;
+  for (var i= 0; i<document.all.length; i++) {
+    el= document.all[i];
+    if (!el.minmax_bound) {
+      el.minmax_bound= true;
+      minmax_bind(el);
+  } }
+}
+
+var minmax_scanner;
+function minmax_stop() {
+  window.clearInterval(minmax_scanner);
+  minmax_scan();
+}
+
+minmax_scan();
+minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY);
+window.attachEvent('onload', minmax_stop);
+
+@end @*/
diff --git a/website/inc/navbar-def.inc b/website/inc/navbar-def.inc
new file mode 100644 (file)
index 0000000..17a3ff8
--- /dev/null
@@ -0,0 +1,76 @@
+#
+# <ul>
+#   <li>
+#       <div><a href="../../index.de.html">Willkommen</a></div>
+#   </li>
+#   <li>
+#       <div><a href="../../events/index.de.html">Veranstaltungen</a></div>
+#   </li>
+#   <li>
+#       <div><a href="../../collegium/history.de.html">Das Collegium</a></div>
+#   </li>
+#   <li>
+#       <div class="selected_head"><a href="../../who/employee/index.de.html">Who is who</a></div>
+#       <ul>
+#         <li>
+#             <div><a href="../../who/employee/index.de.html">Mitarbeiter</a></div>
+#         </li>
+#         <li>
+#             <div class="selected">Fellows</div>
+#             <ul>
+#                <li>
+#                    <div><a href="../../who/fellows/dalferth.de.html">Dalferth</a></div>
+#                </li>
+#                <li>
+#                    <div><a href="../../who/fellows/fehr.de.html">Fehr</a></div>
+#                </li>
+#             </ul>
+#          </li>
+#       </ul>
+#   </li>
+# </ul>
+<define-tag nav:bar endtag=required>
+   <set-var __nav:level=%0 />
+   <navbar:define name="%1" urlbase="$(ROOT)/%2">
+   <navbar:header>
+      <ul*>
+   </navbar:header>
+   <navbar:footer>
+      </ul*>
+   </navbar:footer>
+   <navbar:prolog>
+     <li*><div*></navbar:prolog>
+   <navbar:epilog></div*></li*>
+   </navbar:epilog>
+   <navbar:prolog type="S"><li*><div* class="selected"></navbar:prolog>
+   <navbar:epilog type="S"></div></li*>
+   </navbar:epilog>
+   <navbar:filter>
+          <protect pass=2>
+           my ($mcode, $CFG, $select) = @_;
+          # have the top selected too
+           $mcode =~ s|<div>(.+?)</a><ul>|<div class="selected_head">$1</a></div><ul>|g;
+           $mcode =~ s|<div class="selected">([^<]+?)<ul>|<div class="selected">$1</div><ul>|g;
+           $mcode =~ s|</a><ul>|</a></div><ul>|g;
+           $mcode =~ s|</ul>\s*</div>\s*</li>|</ul></li>|g;
+           return $mcode;
+          </protect>
+   </navbar:filter>
+   %body
+   </navbar:define>
+</define-tag>
+
+<define-tag nav:but>
+   <if <match "%2" "http://|html$|\?" />
+   <navbar:button id="%0" 
+                    url="%2" 
+                    txt="%1"
+                   menu="%3"
+     />
+     <navbar:button id="%0" 
+                   url="%2.<lang:star: * />.html"
+                   txt="%1 "
+                   menu="%3"
+     />
+     />
+</define-tag>
diff --git a/website/inc/position.js b/website/inc/position.js
new file mode 100644 (file)
index 0000000..7e95b67
--- /dev/null
@@ -0,0 +1,118 @@
+// position.js: make edge-positioning work on IE/Win
+// version 0.5, 15-Jul-2003
+// written by Andrew Clover <and@doxdesk.com>, use freely
+
+/*@cc_on
+@if (@_win32 && @_jscript_version>4)
+
+var position_h= new Array();
+var position_v= new Array();
+var position_viewport;
+var position_width= 0;
+var position_height= 0;
+var position_fontsize= 0;
+var position_ARBITRARY= 200;
+
+// Binding. Called on each new element; if the it's <body>, initialise script.
+// Check all new elements to see if they need our help, make lists of them
+
+function position_bind(el) {
+  if (!position_viewport) {
+    if (!document.body) return;
+    // initialisation
+    position_viewport= (document.compatMode=='CSS1Compat') ?
+      document.documentElement : document.body;
+    window.attachEvent('onresize', position_delayout);
+    var em= document.createElement('div');
+    em.setAttribute('id', 'position_em');
+    em.style.position= 'absolute'; em.style.visibility= 'hidden';
+    em.style.fontSize= 'xx-large'; em.style.height= '5em';
+    em.style.top='-5em'; em.style.left= '0';
+    em.style.setExpression('width', 'position_checkFont()');
+    document.body.appendChild(em);
+  }
+
+  // check for absolute edge-positioned elements (ignore ones from fixed.js!)
+  var st= el.style; var cs= el.currentStyle;
+  if (cs.position=='absolute' && !st.fixedPWidth) {
+    if (cs.left!='auto' && cs.right!='auto') {
+      position_h[position_h.length]= el;
+      st.position_width= position_ARBITRARY;
+      st.width= st.position_width+'px';
+      position_delayout();
+    }
+    if (cs.top!='auto' && cs.bottom!='auto') {
+      position_v[position_v.length]= el;
+      st.position_height= position_ARBITRARY;
+      st.height= st.position_height+'px';
+      position_delayout();
+  } }
+}
+
+function position_checkFont() { position_delayout(); return '1em'; }
+
+// Layout. For each edge-positioned axis, measure difference between min-edge
+// and max-edge positioning, set size to the difference
+
+// Request re-layout at next available moment
+var position_delaying= false;
+function position_delayout() {
+  if (position_delaying) return;
+  position_delaying= true;
+  window.setTimeout(position_layout, 0);
+}
+
+function position_layout() {
+  position_delaying= false;
+  var i, el, st, pos, tmp;
+  var fs= document.all['position_em'].offsetWidth;
+  var newfs= (position_fontsize!=fs && position_fontsize!=0);
+  position_fontsize= fs;
+
+  // horizontal axis
+  if (position_viewport.clientWidth!=position_width || newfs) {
+    position_width= position_viewport.clientWidth;
+    for (i= position_h.length; i-->0;) {
+      el= position_h[i]; st= el.style; cs= el.currentStyle;
+      pos= el.offsetLeft; tmp= cs.left; st.left= 'auto';
+      st.position_width+= el.offsetLeft-pos; st.left= tmp;
+      if (st.position_width<1) st.position_width= 1;
+      st.width= st.position_width+'px';
+  } }
+  // vertical axis
+  if (position_viewport.clientHeight!=position_height || newfs) {
+    position_height= position_viewport.clientHeight;
+    for (i= position_v.length; i-->0;) {
+      el= position_v[i]; st= el.style; cs= el.currentStyle;
+      pos= el.offsetTop; tmp= cs.top; st.top= 'auto';
+      st.position_height+= el.offsetTop-pos; st.top= tmp;
+      if (st.position_height<1) st.position_height= 1;
+      st.height= st.position_height+'px';
+  } }
+}
+
+// Scanning. Check document every so often until it has finished loading. Do
+// nothing until <body> arrives, then call main init. Pass any new elements
+// found on each scan to be bound   
+
+var position_SCANDELAY= 500;
+
+var position_nscanned= 0;
+function position_scan() {
+  var nall= document.all.length;
+  for (var i= position_nscanned; i<nall; i++)
+    position_bind(document.all[i]);
+  position_nscanned= nall;
+}
+
+var position_scanner;
+function position_stop() {
+  window.clearInterval(position_scanner);
+  position_scan();
+}
+
+position_scan();
+position_scanner= window.setInterval(position_scan, position_SCANDELAY);
+window.attachEvent('onload', position_stop);
+
+@end @*/
diff --git a/website/inc/rrdtool-design.xar b/website/inc/rrdtool-design.xar
new file mode 100644 (file)
index 0000000..7f03a7c
Binary files /dev/null and b/website/inc/rrdtool-design.xar differ
diff --git a/website/inc/rrdtool-logo-dark.png b/website/inc/rrdtool-logo-dark.png
new file mode 100644 (file)
index 0000000..e9b930d
Binary files /dev/null and b/website/inc/rrdtool-logo-dark.png differ
diff --git a/website/inc/rrdtool-logo-light.png b/website/inc/rrdtool-logo-light.png
new file mode 100644 (file)
index 0000000..26a3c64
Binary files /dev/null and b/website/inc/rrdtool-logo-light.png differ
diff --git a/website/inc/rrdtool-logo.png b/website/inc/rrdtool-logo.png
new file mode 100644 (file)
index 0000000..adf2b0e
Binary files /dev/null and b/website/inc/rrdtool-logo.png differ
diff --git a/website/inc/rrdtool-logo.xar b/website/inc/rrdtool-logo.xar
new file mode 100644 (file)
index 0000000..544e5f2
Binary files /dev/null and b/website/inc/rrdtool-logo.xar differ
diff --git a/website/inc/rrdtool-theme.png b/website/inc/rrdtool-theme.png
new file mode 100644 (file)
index 0000000..e862e9e
Binary files /dev/null and b/website/inc/rrdtool-theme.png differ
diff --git a/website/inc/template.inc b/website/inc/template.inc
new file mode 100644 (file)
index 0000000..a23ba85
--- /dev/null
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="iso-8859-15"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+# this must be the very first line to make doc-type switching work on IE
+#use wml::std::logo
+#use wml::std::tags
+#use wml::des::space
+#use wml::des::imgdot
+#use wml::std::grid
+#use wml::fmt::url
+#include <inc/langset.inc>
+#include <inc/html.inc>
+#include <inc/customtags.inc>
+#use wml::des::navbar
+#include <inc/navbar-def.inc>
+#include <$(ROOT)/navbar.inc>
+<html lang="<lang:star: * />" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15" />
+<link* REL="icon" HREF="$(ROOT)/favicon.png" TYPE="image/png" />
+..Title!>>RRDtool - Page without a Title<<..
+<title*>RRDtool - {#Title#}</title*>
+<!-- Andrew Clover is THE MAN. He made internet explorer more or less
+     more css2 compliant!  http://www.doxdesk.com/software/ -->
+<script type="text/javascript" src="$(ROOT)/inc/position.js"></script> <!-- left and right -->
+<script type="text/javascript" src="$(ROOT)/inc/fixed.js"></script>    <!-- fixed positioning -->
+<style type="text/css">
+<!--/* <![CDATA[ */
+/* ie5 for mac thinks this comment does not end here because of the backslash \*/
+@import url('$(ROOT)/inc/design.css');
+## @import url('$(ROOT)/inc/design_$(TYPE).css');
+/* ]]> */-->
+</style>
+</head>
+<body>
+<table id="frame">
+<tr>
+<td valign="top" id="menucell">
+<!-- ############################# -->
+<!-- # MENU -->
+<!-- ############################# -->
+<div id="menu">
+<h2 class="legacy">Menu</h2>
+<navbar:render name=main menumode=inner nohints txtonly select=$(PAGE)/>
+</div>
+</td>
+<!-- ############################# -->
+<!-- # Logo and Body -->
+<!-- ############################# -->
+<td id="bodycell">
+# all mirrors seem dead currently
+#<div id="mirrors">
+#<A HREF="http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/<where/>">Swiss Original</A>.&nbsp;Mirrors: 
+#<A HREF="http://rrdtool.planetmirror.com/<where/>">AU</A>,<!--jason andrade <jason@dstc.edu.au>-->
+#<A HREF="http://rrdtool.cs.pu.edu.tw/<where/>">TW</A>,<!--Hsun-Chang Chang <hsunchang@gmail.com>-->
+#<A HREF="http://ftp.heanet.ie/mirrors/people.ee.ethz.ch/%257Eoetiker/webtools/rrdtool/<where/>">IE</A>,<!--Colm MacCárthaigh <colm.maccarthaigh@heanet.ie>-->
+#<A HREF="http://rrdtool.cyclone.se/<where/>">SE</A>,<!--Hans Engren <hans@cyclone.se>-->
+#<A HREF="http://rrdtool.trexle.com/<where/>">US</A>,<!--Hossam Hossny <hossam@trexle.com>-->
+#</div>
+<div id="logo">
+<div class="legacy">
+RRDtool
+<hr/>
+</div>
+</div>
+<!-- ############################# -->
+<!-- # BODY -->
+<!-- ############################# -->
+<div id="body">
+{#Body#}
+</div>
+</td>
+</tr>
+<tr>
+<td id="leftcornercell"></td>
+<td id="footcell">
+<!-- ############################# -->
+<!-- # FOOTER -->
+<!-- ############################# -->
+<div id="address">
+<small>
+<perl>
+<protect pass=2>
+use POSIX qw(strftime LC_TIME setlocale); 
+foreach my $l (qw($(LANGS))){
+       my $lang = lc($l) eq 'de' ? 'de_CH' : $l;
+       $lang =~ s/^en.*/sv/i;  
+       setlocale(LC_TIME,$lang);
+       my $year = strftime "%Y", localtime;
+       my $date = strftime "%x", localtime("$(WML_SRC_TIME)"); 
+       q{$(AUTHOR)} =~ m{(.+\S+)\s*(<.+>|http://.+)} || die q{No Match for $(AUTHOR)}."\n"; 
+       my $text=$1; my $url=$2; $url =~ s/<(\S+)(?:\@|_at_)(\S+)>/mailto:$1\@removethis.$2/;
+       my $LANG = uc("LANG_$l");
+       print <<LINE
+[$LANG:$date | <A HREF="$url">$text</A>:$LANG]
+LINE
+}
+</protect>
+</perl>
+</small>
+</div>
+</td></tr>
+</table>
+<hr class="legacy"/>
+<p class="legacy" style="border-width: 1px; border-color: red; padding: 5px;">
+<en><b>NOTE:</b> The content of this website is accessible with any browser. The graphical
+design though relies completely on CSS2 styles. If you see this text, this means
+that your browser does not support CSS2. Consider upgrading to a standard conformant
+browser like Mozilla <a href="http://www.getfirefox.com">Firefox</a> or
+<a href="http://www.opera.com">Opera</a> but also Apple's <a href="http://www.apple.com/safari/">Safari</a>
+or KDE's <a href="http://www.konqueror.org">Konqueror</a> for example.</en>
+#<de><b>HINWEIS:</b> Diese Website funktioniert mit jedem Browser. Die graphische Präsentation jedoch
+#basiert komplett auf CSS2. Beispiele für CSS2 konforme Browser sind zum Beispiel  <a href="http://www.getfirefox.com">Firefox</a>
+#<a href="http://www.opera.com">Opera</a> oder auch <a href="http://www.apple.com/safari/">Safari</a> von Apple und
+#<a href="http://www.konqueror.org">Konqueror</a> aus dem KDE Projekt.
+#</de>
+</p> 
+</body>
+</html>
+
+# All the rest goes into Body
+..Body>>
+
index 99bd7b59d450bc385529359ddaf31c0ec7ad91ec..92988fcf7715d473a30ea57f35933e9cb46d3ce4 100644 (file)
@@ -1,15 +1,10 @@
 <rrdworld type="application">
 <name>Cacti</name>
 <author>Ian Berry</author>
-
-<description>Cacti is a complete network graphing solution designed to harness the power of RRDTool's data storage and graphing functionality. Cacti provides a fast poller, advanced graph templating, multiple data acquisition methods, and user management features out of the box. All of this is wrapped in an intuitive, easy to use interface that makes sense for LAN-sized installations up to complex networks with hundreds of devices.
-Cacti's goal is to remain true to RRDTool's feature set, allowing users to create virtually any possible RRDTool graph through Cacti's interface. Most of RRDTool's functionality including graphs, data sources, RRA's, and CDEF's are fully supported. Coupled with Cacti's templating features, all of this advanced functionality can be supported with minimal overhead to the user. Creating graphs for a device is as simple as creating the device, selecting a device template, and selecting which graphs to create for that particular device type.
-In addition to creating graphs, Cacti provides numerous features to aid in displaying graphs. Some of these features include multiple display modes, a real time timespan selector, and the ability to organize graphs on a tree. The user management functionality allows for users who should only have access to view certain graphs. This is beneficial for hosting/ISP orientated users that wish to give customers access to their graphs.
-</description>
-
+<description>Cacti is a complete network graphing solution designed to harness the power of RRDTool's data storage and graphing functionality. Cacti provides a fast poller, advanced graph templating, multiple data acquisition methods, and user management features out of the box. All of this is wrapped in an intuitive, easy to use interface that makes sense for LAN-sized installations up to complex networks with hundreds of devices.</description>
 <homepage>http://www.cacti.net</homepage> 
 <year>2005</year><month>4</month>
 <license>GPL</license>
 <livesite>http://www.bigspring.k12.pa.us/cacti/graph_view.php</livesite> 
 <email>iberry@raxnet.net</email>
-</rrdworld>
+</rrdworld>
\ No newline at end of file