Ein oben angedocktes, auf CSS basierendes Menü hinzugefügt.
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 16 Jan 2007 09:30:19 +0000 (09:30 +0000)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 16 Jan 2007 09:30:19 +0000 (09:30 +0000)
14 files changed:
SL/Form.pm
SL/Menu.pm
bin/mozilla/admin.pl
bin/mozilla/am.pl
bin/mozilla/login.pl
bin/mozilla/menuv3.pl [new file with mode: 0644]
css/csshover.htc [new file with mode: 0644]
css/menuv3.css [new file with mode: 0644]
image/expand3.gif [new file with mode: 0644]
locale/de/admin
locale/de/all
locale/de/am
locale/de/menuv3 [new file with mode: 0644]
makesymlinks

index 9b3a67c..4bea5f0 100644 (file)
@@ -349,7 +349,7 @@ sub isblank {
 sub header {
   $main::lxdebug->enter_sub();
 
-  my ($self) = @_;
+  my ($self, $extra_code) = @_;
 
   if ($self->{header}) {
     $main::lxdebug->leave_sub();
@@ -439,6 +439,7 @@ function fokus(){document.$self->{fokus}.focus();}
   
   </script>
 
+  $extra_code
 </head>
 
 |;
index 5da42e6..b3ffd0f 100644 (file)
@@ -83,7 +83,7 @@ sub menuitem {
   # add other params
   foreach my $key (keys %{ $self->{$item} }) {
     $str .= "&" . $form->escape($key, 1) . "=";
-    ($value, $conf) = split /=/, $self->{$item}{$key}, 2;
+    ($value, $conf) = split(/=/, $self->{$item}{$key}, 2);
     $value = $myconfig->{$value} . "/$conf" if ($conf);
     $str .= $form->escape($value, 1);
   }
@@ -99,6 +99,67 @@ sub menuitem {
   return $str;
 }
 
+sub menuitem_v3 {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $myconfig, $form, $item, $other) = @_;
+
+  my $module = $form->{script};
+  my $action = "section_menu";
+  my $target = "";
+
+  if ($self->{$item}{module}) {
+    $module = $self->{$item}{module};
+  }
+  if ($self->{$item}{action}) {
+    $action = $self->{$item}{action};
+  }
+  if ($self->{$item}{target}) {
+    $target = $self->{$item}{target};
+  }
+
+  my $level = $form->escape($item);
+
+  my $str = qq|<a href="$module?action=| . $form->escape($action) .
+    qq|&level=| . $form->escape($level);
+  map({ $str .= "&${_}=" . $form->escape($form->{$_}); } qw(path login password));
+
+  my @vars = qw(module action target href);
+
+  if ($self->{$item}{href}) {
+    $str  = qq|<a href=$self->{$item}{href}|;
+    @vars = qw(module target href);
+  }
+
+  map { delete $self->{$item}{$_} } @vars;
+
+  # add other params
+  foreach my $key (keys %{ $self->{$item} }) {
+    $str .= "&" . $form->escape($key, 1) . "=";
+    ($value, $conf) = split(/=/, $self->{$item}{$key}, 2);
+    $value = $myconfig->{$value} . "/$conf" if ($conf);
+    $str .= $form->escape($value, 1);
+  }
+
+  $str .= '"';
+
+  if ($target) {
+    $str .= qq| target="| . $form->quote($target) . qq|"|;
+  }
+
+  if ($other) {
+    foreach my $key (keys(%{$other})) {
+      $str .= qq| ${key}="| . $form->quote($other->{$key}) . qq|"|;
+    }
+  }
+
+  $str .= ">";
+
+  $main::lxdebug->leave_sub();
+
+  return $str;
+}
+
 sub menuitemNew {
   my ($self, $myconfig, $form, $item) = @_;
 
@@ -128,7 +189,7 @@ sub menuitemNew {
   # add other params
   foreach my $key (keys %{ $self->{$item} }) {
     $str .= "&" . $form->escape($key, 1) . "=";
-    ($value, $conf) = split /=/, $self->{$item}{$key}, 2;
+    ($value, $conf) = split(/=/, $self->{$item}{$key}, 2);
     $value = $myconfig->{$value} . "/$conf" if ($conf);
     $str .= $form->escape($value, 1);
   }
@@ -150,7 +211,7 @@ sub access_control {
     @menu = grep { /^${menulevel}--/ } @{ $self->{ORDER} };
   }
 
-  my @a    = split /;/, $myconfig->{acs};
+  my @a    = split(/;/, $myconfig->{acs});
   my $excl = ();
 
   # remove --AR, --AP from array
index cd08e3f..2eb5387 100644 (file)
@@ -601,7 +601,9 @@ sub form_header {
        </tr>
        <tr>
            <th align=right>| . $locale->text('Setup Menu') . qq|</th>
-           <td><input name=menustyle type=radio class=radio value=neu $menustyle_neu>&nbsp;| .
+           <td><input name=menustyle type=radio class=radio value=v3 $menustyle_v3>&nbsp;| .
+           $locale->text("Top (CSS)") . qq|
+           <input name=menustyle type=radio class=radio value=neu $menustyle_neu>&nbsp;| .
            $locale->text("Top (Javascript)") . qq|
            <input name=menustyle type=radio class=radio value=old $menustyle_old>&nbsp;| .
            $locale->text("Old (on the side)") . qq|
index 86b4eb2..1fe7820 100644 (file)
@@ -3074,7 +3074,9 @@ sub config {
        </tr>
        <tr>
          <th align=right>| . $locale->text('Setup Menu') . qq|</th>
-         <td><input name=menustyle type=radio class=radio value=neu $menustyle_neu>&nbsp;| .
+         <td><input name=menustyle type=radio class=radio value=v3 $menustyle_v3>&nbsp;| .
+    $locale->text("Top (CSS)") . qq|
+         <input name=menustyle type=radio class=radio value=neu $menustyle_neu>&nbsp;| .
     $locale->text("Top (Javascript)") . qq|
     <input name=menustyle type=radio class=radio value=old $menustyle_old>&nbsp;| .
     $locale->text("Old (on the side)") . qq|</td>
index 770df5c..9541684 100644 (file)
@@ -149,7 +149,10 @@ sub login {
   }
 
   # made it this far, execute the menu
-  if ($user->{menustyle} eq "neu") {
+  if ($user->{menustyle} eq "v3") {
+    $form->{callback} =
+      "menuv3.pl?login=$form->{login}&password=$form->{password}&path=$form->{path}&action=display";
+  } elsif ($user->{menustyle} eq "neu") {
     $form->{callback} =
       "menunew.pl?login=$form->{login}&password=$form->{password}&path=$form->{path}&action=display";
   } else {
diff --git a/bin/mozilla/menuv3.pl b/bin/mozilla/menuv3.pl
new file mode 100644 (file)
index 0000000..807db35
--- /dev/null
@@ -0,0 +1,250 @@
+#=====================================================================
+# LX-Office ERP
+# Copyright (C) 2004
+# Based on SQL-Ledger Version 2.1.9
+# Web http://www.lx-office.org
+#
+######################################################################
+# SQL-Ledger Accounting
+# Copyright (c) 1998-2002
+#
+#  Author: Dieter Simader
+#   Email: dsimader@sql-ledger.org
+#     Web: http://www.sql-ledger.org
+#
+#  Contributors: Christopher Browne
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#######################################################################
+#
+# thre frame layout with refractured menu
+#
+#######################################################################
+
+$menufile = "menu.ini";
+use SL::Menu;
+
+1;
+
+# end of main
+
+sub display {
+  $form->header(qq|<link rel="stylesheet" href="css/menuv3.css?id=| .
+                int(rand(100000)) . qq|" type="text/css">|);
+
+  print(qq|<body>\n|);
+
+  clock_line();
+
+  print qq|
+
+<div id="menu">
+
+| . acc_menu() . qq|
+
+</div>
+
+<div style="clear: both;"></div>
+
+<iframe id="win1" src="login.pl?login=$form->{login}&password=$form->{password}&action=company_logo&path=$form->{path}" width="100%" height="93%" name="main_window" style="position: absolute; border: 0px; z-index: 99; ">
+<p>Ihr Browser kann leider keine eingebetteten Frames anzeigen.
+</p>
+</iframe>
+</body>
+</html>
+
+|;
+
+}
+
+sub clock_line {
+
+  $login = "["
+    . $form->{login}
+    . " - <a href=\"login.pl?path="
+    . $form->{"path"}
+    . "&password="
+    . $form->{"password"}
+    . "&action=logout\" target=\"_top\">"
+    . $locale->text('Logout')
+    . "</a>] ";
+  my ($Sekunden, $Minuten,   $Stunden,   $Monatstag, $Monat,
+      $Jahr,     $Wochentag, $Jahrestag, $Sommerzeit)
+    = localtime(time);
+  my $CTIME_String = localtime(time);
+  $Monat     += 1;
+  $Jahrestag += 1;
+  $Monat     = $Monat < 10     ? $Monat     = "0" . $Monat     : $Monat;
+  $Monatstag = $Monatstag < 10 ? $Monatstag = "0" . $Monatstag : $Monatstag;
+  $Jahr += 1900;
+  my @Wochentage = ("Sonntag",    "Montag",  "Dienstag", "Mittwoch",
+                    "Donnerstag", "Freitag", "Samstag");
+  my @Monatsnamen = ("",       "Januar",    "Februar", "M&auml;rz",
+                     "April",  "Mai",       "Juni",    "Juli",
+                     "August", "September", "Oktober", "November",
+                     "Dezember");
+  $datum =
+      $Wochentage[$Wochentag] . ", der "
+    . $Monatstag . "."
+    . $Monat . "."
+    . $Jahr . " - ";
+
+  #$zeit="<div id='Uhr'>".$Stunden.":".$Minuten.":".$Sekunden."</div>";
+  $zeit = "<div id='Uhr'>" . $Stunden . ":" . $Minuten . "</div>";
+  print qq|
+<script type="text/javascript">
+<!--
+var clockid=new Array()
+var clockidoutside=new Array()
+var i_clock=-1
+var thistime= new Date()
+var hours= | . $Stunden . qq|;
+var minutes= | . $Minuten . qq|;
+var seconds= | . $Sekunden . qq|;
+if (eval(hours) <10) {hours="0"+hours}
+if (eval(minutes) < 10) {minutes="0"+minutes}
+if (seconds < 10) {seconds="0"+seconds}
+//var thistime = hours+":"+minutes+":"+seconds
+var thistime = hours+":"+minutes
+
+function writeclock() {
+       i_clock++
+       if (document.all \|\| document.getElementById \|\| document.layers) {
+               clockid[i_clock]="clock"+i_clock
+               document.write("<font family=arial size=2><span id='"+clockid[i_clock]+"' style='position:relative'>"+thistime+"</span></font>")
+       }
+}
+
+function clockon() {
+       thistime= new Date()
+       hours=thistime.getHours()
+       minutes=thistime.getMinutes()
+       seconds=thistime.getSeconds()
+       if (eval(hours) <10) {hours="0"+hours}
+       if (eval(minutes) < 10) {minutes="0"+minutes}
+       if (seconds < 10) {seconds="0"+seconds}
+       //thistime = hours+":"+minutes+":"+seconds
+       thistime = hours+":"+minutes
+
+       if (document.all) {
+               for (i=0;i<=clockid.length-1;i++) {
+                       var thisclock=eval(clockid[i])
+                       thisclock.innerHTML=thistime
+               }
+       }
+
+       if (document.getElementById) {
+               for (i=0;i<=clockid.length-1;i++) {
+                       document.getElementById(clockid[i]).innerHTML=thistime
+               }
+       }
+       var timer=setTimeout("clockon()",60000)
+}
+//window.onload=clockon
+//-->
+</script>
+<table border="0" width="100%" background="image/bg_titel.gif" cellpadding="0" cellspacing="0">
+       <tr>
+               <td  style="color:white; font-family:verdana,arial,sans-serif; font-size: 12px;"> &nbsp; [<a href="JavaScript:top.main_window.print()">drucken</a>]</td>
+               <td align="right" style="vertical-align:middle; color:white; font-family:verdana,arial,sans-serif; font-size: 12px;" nowrap>|
+    . $login . $datum . qq| <script>writeclock()</script>&nbsp;
+               </td>
+       </tr>
+</table>
+|;
+}
+
+sub acc_menu {
+  $locale = Locale->new($language, "menu");
+
+  $mainlevel = $form->{level};
+  $mainlevel =~ s/$mainlevel--//g;
+  my $menu = new Menu "$menufile";
+  $menu = new Menu "custom_$menufile" if (-f "custom_$menufile");
+  $menu = new Menu "$form->{login}_$menufile"
+    if (-f "$form->{login}_$menufile");
+
+  $| = 1;
+
+  return print_menu($menu);
+}
+
+sub my_length {
+  my ($s) = @_;
+  my $len = 0;
+  my $i;
+  my $skip = 0;
+
+  for ($i = 0; $i < length($s); $i++) {
+    my $c = substr($s, $i, 1);
+    if ($skip && ($c eq ";")) {
+      $skip = 0;
+    } elsif ($skip) {
+      next;
+    } elsif ($c eq "&") {
+      $skip = 1;
+      $len++;
+    } else {
+      $len++;
+    }
+  }
+
+  return $len;
+}
+
+sub print_menu {
+  my ($menu, $parent, $depth) = @_;
+  my $html;
+
+  die if ($depth * 1 > 5);
+
+  my @menuorder;
+
+  @menuorder = $menu->access_control(\%myconfig, $parent);
+
+  $parent .= "--" if ($parent);
+
+  foreach my $item (@menuorder) {
+    substr($item, 0, length($parent)) = "";
+    next if (($item eq "") || ($item =~ /--/));
+
+    my $menu_item = $menu->{"${parent}${item}"};
+    my $menu_title = $locale->text($item);
+    my $menu_text = $menu_title;
+
+    $menu_text =~ s/ /<br>/ if ($parent && (my_length($menu_text) >= 17));
+
+    my $target = "main_window";
+    $target = $menu_item->{"target"} if ($menu_item->{"target"});
+
+    if ($menu_item->{"submenu"} || !defined($menu_item->{"module"}) ||
+        ($menu_item->{"module"} eq "menu.pl")) {
+
+      my $h = print_menu($menu, "${parent}${item}", $depth * 1 + 1);
+      if (!$parent) {
+        $html .= qq|<ul><li><h2>${menu_text}</h2><ul>${h}</ul></li></ul>|;
+      } else {
+        $html .= qq|<li><div class="x">${menu_text}</div><ul>${h}</ul></li>|;
+      }
+    } else {
+      $html .= qq|<li>|;
+      $html .= $menu->menuitem_v3(\%myconfig, $form, "${parent}$item",
+                                  { "title" => $menu_title,
+                                    "target" => $target });
+      $html .= qq|${menu_text}</a></li>|;
+    }
+  }
+
+  return $html;
+}
diff --git a/css/csshover.htc b/css/csshover.htc
new file mode 100644 (file)
index 0000000..e2dcced
--- /dev/null
@@ -0,0 +1,121 @@
+<attach event="ondocumentready" handler="parseStylesheets" />\r
+<script>\r
+/**\r
+ *     Whatever:hover - V2.02.060206 - hover, active & focus\r
+ *     ------------------------------------------------------------\r
+ *     (c) 2005 - Peter Nederlof\r
+ *     Peterned - http://www.xs4all.nl/~peterned/\r
+ *     License  - http://creativecommons.org/licenses/LGPL/2.1/\r
+ *\r
+ *     Whatever:hover is free software; you can redistribute it and/or\r
+ *     modify it under the terms of the GNU Lesser General Public\r
+ *     License as published by the Free Software Foundation; either\r
+ *     version 2.1 of the License, or (at your option) any later version.\r
+ *\r
+ *     Whatever:hover is distributed in the hope that it will be useful,\r
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ *     Lesser General Public License for more details.\r
+ *\r
+ *     Credits and thanks to:\r
+ *     Arnoud Berendsen, Martin Reurings, Robert Hanson\r
+ *\r
+ *     howto: body { behavior:url("csshover.htc"); }\r
+ *     ------------------------------------------------------------\r
+ */\r
+\r
+var csshoverReg = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active))|((a|input|textarea)([#.][^ ]+)?:unknown)/i,\r
+currentSheet, doc = window.document, hoverEvents = [], activators = {\r
+       onhover:{on:'onmouseover', off:'onmouseout'},\r
+       onactive:{on:'onmousedown', off:'onmouseup'},\r
+       onunknown:{on:'onfocus', off:'onblur'}\r
+}\r
+\r
+function parseStylesheets() {\r
+       if(!/MSIE (5|6)/.test(navigator.userAgent)) return;\r
+       window.attachEvent('onunload', unhookHoverEvents);\r
+       var sheets = doc.styleSheets, l = sheets.length;\r
+       for(var i=0; i<l; i++) \r
+               parseStylesheet(sheets[i]);\r
+}\r
+       function parseStylesheet(sheet) {\r
+               if(sheet.imports) {\r
+                       try {\r
+                               var imports = sheet.imports, l = imports.length;\r
+                               for(var i=0; i<l; i++) parseStylesheet(sheet.imports[i]);\r
+                       } catch(securityException){}\r
+               }\r
+\r
+               try {\r
+                       var rules = (currentSheet = sheet).rules, l = rules.length;\r
+                       for(var j=0; j<l; j++) parseCSSRule(rules[j]);\r
+               } catch(securityException){}\r
+       }\r
+\r
+       function parseCSSRule(rule) {\r
+               var select = rule.selectorText, style = rule.style.cssText;\r
+               if(!csshoverReg.test(select) || !style) return;\r
+               \r
+               var pseudo = select.replace(/[^:]+:([a-z-]+).*/i, 'on$1');\r
+               var newSelect = select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2' + pseudo);\r
+               var className = (/\.([a-z0-9_-]*on(hover|active|unknown))/i).exec(newSelect)[1];\r
+               var affected = select.replace(/:(hover|active|unknown).*$/, '');\r
+               var elements = getElementsBySelect(affected);\r
+               if(elements.length == 0) return;\r
+\r
+               currentSheet.addRule(newSelect, style);\r
+               for(var i=0; i<elements.length; i++)\r
+                       new HoverElement(elements[i], className, activators[pseudo]);\r
+       }\r
+\r
+function HoverElement(node, className, events) {\r
+       if(!node.hovers) node.hovers = {};\r
+       if(node.hovers[className]) return;\r
+       node.hovers[className] = true;\r
+       hookHoverEvent(node, events.on, function() { node.className += ' ' + className; });\r
+       hookHoverEvent(node, events.off, function() { node.className = node.className.replace(new RegExp('\\s+'+className, 'g'),''); });\r
+}\r
+       function hookHoverEvent(node, type, handler) {\r
+               node.attachEvent(type, handler);\r
+               hoverEvents[hoverEvents.length] = { \r
+                       node:node, type:type, handler:handler \r
+               };\r
+       }\r
+\r
+       function unhookHoverEvents() {\r
+               for(var e,i=0; i<hoverEvents.length; i++) {\r
+                       e = hoverEvents[i]; \r
+                       e.node.detachEvent(e.type, e.handler);\r
+               }\r
+       }\r
+\r
+function getElementsBySelect(rule) {\r
+       var parts, nodes = [doc];\r
+       parts = rule.split(' ');\r
+       for(var i=0; i<parts.length; i++) {\r
+               nodes = getSelectedNodes(parts[i], nodes);\r
+       }       return nodes;\r
+}\r
+       function getSelectedNodes(select, elements) {\r
+               var result, node, nodes = [];\r
+               var identify = (/\#([a-z0-9_-]+)/i).exec(select);\r
+               if(identify) {\r
+                       var element = doc.getElementById(identify[1]);\r
+                       return element? [element]:nodes;\r
+               }\r
+               \r
+               var classname = (/\.([a-z0-9_-]+)/i).exec(select);\r
+               var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');\r
+               var classReg = classname? new RegExp('\\b' + classname[1] + '\\b'):false;\r
+               for(var i=0; i<elements.length; i++) {\r
+                       result = tagName? elements[i].all.tags(tagName):elements[i].all; \r
+                       for(var j=0; j<result.length; j++) {\r
+                               node = result[j];\r
+                               if(classReg && !classReg.test(node.className)) continue;\r
+                               nodes[nodes.length] = node;\r
+                       }\r
+               }       \r
+               \r
+               return nodes;\r
+       }\r
+</script>
\ No newline at end of file
diff --git a/css/menuv3.css b/css/menuv3.css
new file mode 100644 (file)
index 0000000..cbb2d66
--- /dev/null
@@ -0,0 +1,132 @@
+body {\r
+behavior:url("css/csshover.htc");\r
+}\r
+\r
+#menu{\r
+width:100%;\r
+float:left;\r
+}\r
+\r
+#menu a, #menu h2, #menu div.x {\r
+font:11px/16px arial,helvetica,sans-serif;\r
+display:block;\r
+border-width:1px;\r
+border-style:solid;\r
+border-color:#ccc #888 #555 #bbb;\r
+white-space:nowrap;\r
+margin:0;\r
+padding:1px 0 1px 3px;\r
+}\r
+\r
+#menu h2{\r
+color:#fff;\r
+background:#000 url(../image/expand3.gif) no-repeat 100% 100%;\r
+}\r
+\r
+#menu a{\r
+background:#eee;\r
+text-decoration:none;\r
+}\r
+\r
+#menu a, #menu a:visited{\r
+color:#000;\r
+}\r
+\r
+#menu a:hover{\r
+color:#a00;\r
+background:#ddd;\r
+}\r
+\r
+#menu a:active{\r
+color:#060;\r
+background:#ccc;\r
+}\r
+\r
+#menu ul{\r
+list-style:none;\r
+margin:0;\r
+padding:0;\r
+float:left;\r
+width:9em;\r
+}\r
+\r
+#menu li{\r
+position:relative;\r
+}\r
+\r
+#menu ul ul{\r
+position:absolute;\r
+z-index:500;\r
+top:auto;\r
+display:none;\r
+}\r
+\r
+#menu ul ul ul{\r
+top:0;\r
+left:100%;\r
+}\r
+\r
+/* Begin non-anchor hover selectors */\r
+\r
+/* Enter the more specific element (div) selector\r
+on non-anchor hovers for IE5.x to comply with the\r
+older version of csshover.htc - V1.21.041022. It\r
+improves IE's performance speed to use the older\r
+file and this method */\r
+\r
+div#menu h2:hover{\r
+background:#000 url(../image/expand3.gif) no-repeat -999px -9999px;\r
+}\r
+\r
+div#menu li:hover{\r
+cursor:pointer;\r
+z-index:100;\r
+}\r
+\r
+div#menu li:hover ul ul,\r
+div#menu li li:hover ul ul,\r
+div#menu li li li:hover ul ul,\r
+div#menu li li li li:hover ul ul\r
+{display:none;}\r
+\r
+div#menu li:hover ul,\r
+div#menu li li:hover ul,\r
+div#menu li li li:hover ul,\r
+div#menu li li li li:hover ul\r
+{display:block;}\r
+\r
+/* End of non-anchor hover selectors */\r
+\r
+/* Styling for Expand */\r
+\r
+#menu a.x, #menu a.x:visited{\r
+/*font-weight:bold;*/\r
+color:#000;\r
+background:#eee url(../image/expand3.gif) no-repeat 100% 100%;\r
+}\r
+\r
+#menu a.x:hover{\r
+color:#fff;\r
+background:#000;\r
+}\r
+\r
+#menu a.x:active{\r
+color:#060;\r
+background:#ccc;\r
+}\r
+\r
+#menu div.x, #menu div.x:visited{\r
+/*font-weight:bold;*/\r
+color:#000;\r
+background:#eee url(../image/expand3.gif) no-repeat 100% 100%;\r
+}\r
+\r
+#menu div.x:hover{\r
+color:#fff;\r
+background:#000;\r
+}\r
+\r
+#menu div.x:active{\r
+color:#060;\r
+background:#ccc;\r
+}\r
diff --git a/image/expand3.gif b/image/expand3.gif
new file mode 100644 (file)
index 0000000..2c46f4e
Binary files /dev/null and b/image/expand3.gif differ
index f49175f..cceb1f2 100644 (file)
@@ -84,6 +84,7 @@ $self->{texts} = {
   'The passwords do not match.' => 'Die Passw&ouml;rter stimmen nicht &uuml;berein.',
   'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'In diesem Schritt werden bestehende Datenbanken gesucht. Es werden noch keine Änderungen vorgenommen!',
   'To add a user to a group edit a name, change the login name and save.  A new user with the same variables will then be saved under the new login name.' => 'Um einer Gruppe einen neuen Benutzer hinzuzufügen, ändern und speichern Sie am einfachsten einen bestehen den Zugriffsnamen. Unter dem neuen Namen wird dann ein Benutzer mit denselben Einstellungen angelegt.',
+  'Top (CSS)'                   => 'Oben (mit CSS)',
   'Top (Javascript)'            => 'Oben (mit Javascript)',
   'Unknown dependency \'%s\'.'  => 'Unbekannte Abh&auml;ngigkeit \'%s\'.',
   'Unlock System'               => 'System entsperren',
index fe074be..6e6162e 100644 (file)
@@ -993,6 +993,7 @@ gestartet',
   'Title'                       => 'Titel',
   'To'                          => 'An',
   'To add a user to a group edit a name, change the login name and save.  A new user with the same variables will then be saved under the new login name.' => 'Um einer Gruppe einen neuen Benutzer hinzuzufügen, ändern und speichern Sie am einfachsten einen bestehen den Zugriffsnamen. Unter dem neuen Namen wird dann ein Benutzer mit denselben Einstellungen angelegt.',
+  'Top (CSS)'                   => 'Oben (mit CSS)',
   'Top (Javascript)'            => 'Oben (mit Javascript)',
   'Top 100'                     => 'Top 100',
   'Top 100 hinzufuegen'         => 'Top 100 hinzufügen',
index 68bfc15..eb7aef1 100644 (file)
@@ -224,6 +224,7 @@ $self->{texts} = {
   'The unit in row %d has been deleted in the meantime.' => 'Die Einheit in Zeile %d ist in der Zwischentzeit gel&ouml;scht worden.',
   'The unit in row %d has been used in the meantime and cannot be changed anymore.' => 'Die Einheit in Zeile %d wurde in der Zwischenzeit benutzt und kann nicht mehr ge&auml;ndert werden.',
   'The units have been saved.'  => 'Die Einheiten wurden gespeichert.',
+  'Top (CSS)'                   => 'Oben (mit CSS)',
   'Top (Javascript)'            => 'Oben (mit Javascript)',
   'Transaction reversal enforced for all dates' => 'Fehleintragungen müssen für jeden Zeitraum mit einer Kontraeintragung ausgebessert werden',
   'Transaction reversal enforced up to' => 'Fehleintragungen können bis zu dem angegebenen Zeitraum nur mit einer Kontraeintragung ausgebessert werden!',
diff --git a/locale/de/menuv3 b/locale/de/menuv3
new file mode 100644 (file)
index 0000000..281bb67
--- /dev/null
@@ -0,0 +1,12 @@
+$self->{texts} = {
+  'Logout'                      => 'Abmeldung',
+};
+
+$self->{subs} = {
+  'acc_menu'                    => 'acc_menu',
+  'clock_line'                  => 'clock_line',
+  'display'                     => 'display',
+  'section_menu'                => 'section_menu',
+};
+
+1;
index b5c0b04..25f95e7 100755 (executable)
@@ -3,7 +3,7 @@
 # Erstellt die benotigten Symlinks
 
 ln -vsf login.pl admin.pl
-for i in ap ar bp ca cp ct cn dn gl ic ir is menu oe pe rc rp datev licenses fa ustva menunew common; do
+for i in ap ar bp ca cp ct cn dn gl ic ir is menu oe pe rc rp datev licenses fa ustva menunew common menuv3; do
   ln -vsf am.pl $i.pl
 done