Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision adf1b8cb

Von Moritz Bunkus vor fast 13 Jahren hinzugefügt

Das XUL-/XML-Menü entfernen

Das alte XUL-/XML-Menü war von der Benutzung her zwar beliebt, hatte
aber aush administrativer Sicht diverse Probleme. Früher konnte
Firefox XUL von beliebigen Webservern ausführen, heute seit Firefox 4
nicht mehr -- aus Sicherheitsgründen. Daher musste man bereits ein
Addon installieren, damit es überhaupt geht.

In späteren Firefox-Versionen gab es immer wieder noch andere
Probleme.

Insgesamt sehe ich die folgenden drei Probleme:

1. Unbedarfte Benutzer werden immer trotz der von Lx-Office
angezeigten Warnmeldung das XUL-Menü einschalten und sich dann
wundern, dass nur eine ausgesprochen verwirrende Fehlermeldung
angezeigt wird.

2. Diese Fehlermeldung wirkt extrem unprofessional.

3. Es erzeugt bei Entwicklern, Debuggern, Supporter,
Dokumentationsschreibern einen deutlich erhöhten Aufwand.

Fix für Bugs 1705 und 1706.

Unterschiede anzeigen:

DEBIAN/DEBIAN/md5sum
1776 1776
8bc701c81a0ee89fe4478ddae2ef4827  var/lib/lx-office-erp/templates/French-sales_order.html
1777 1777
6f81ff6f4639eefe6816e7288374a28b  var/lib/lx-office-erp/templates/German-check.tex
1778 1778
b064d0f07f8fd71423879e8ffe9d6be5  var/lib/lx-office-erp/templates/Default-invoice.html
1779
0eab06c10a4c76e73d23218740dd6de1  var/lib/lx-office-erp/xslt/xulmenu.xsl
1780
2f7fbf7fd0626ab4ffdedcdd8b33ccd0  var/lib/lx-office-erp/xslt/style1.css
1781 1779
947ddd3cdc8d188dce0d9b0c689f3235  etc/lx-office-erp/lx-erp.conf.default
1782 1780
ea0d4d87c77d5b69a20bcafc76c987c6  etc/lx-office-erp/lx-office-erp.cherokee
1783 1781
947ddd3cdc8d188dce0d9b0c689f3235  etc/lx-office-erp/lx-erp.conf
DEBIAN/mk_erp_deb.sh
52 52
cp -a $SRC/css var/lib/lx-office-erp
53 53
cp -a $SRC/templates var/lib/lx-office-erp
54 54
cp -a $SRC/users var/lib/lx-office-erp
55
cp -a $SRC/xslt var/lib/lx-office-erp
56 55

  
57 56
cp -a $SRC/doc/* usr/share/doc/lx-office-erp/
58 57
cp -a $SRC/image/* usr/share/lx-office-erp/
SL/Auth.pm
455 455
    @user_data{qw(id login)}    = @{$ref}{qw(id login)};
456 456
  }
457 457

  
458
  # The XUL/XML backed menu has been removed.
459
  $user_data{menustyle} = 'v3' if lc($user_data{menustyle} || '') eq 'xml';
460

  
458 461
  $sth->finish();
459 462

  
460 463
  $main::lxdebug->leave_sub();
SL/Form.pm
311 311
    <script type="text/javascript">
312 312
    <!--
313 313
    // If JavaScript is enabled, the whole thing will be reloaded.
314
    // The reason is: When one changes his menu setup (HTML / XUL / CSS ...)
314
    // The reason is: When one changes his menu setup (HTML / CSS ...)
315 315
    // it now loads the correct code into the browser instead of do nothing.
316 316
    setTimeout("top.frames.location.href='login.pl'",500);
317 317
    //-->
SL/User.pm
177 177
        $self->{"menustyle"} eq "v3" ? "menuv3.pl" :
178 178
        $self->{"menustyle"} eq "neu" ? "menunew.pl" :
179 179
        $self->{"menustyle"} eq "js" ? "menujs.pl" :
180
        $self->{"menustyle"} eq "xml" ? "menuXML.pl" :
181 180
        "menu.pl";
182 181

  
183 182
      print $form->parse_html_template("dbupgrade/footer", { "menufile" => $menufile });
bin/mozilla/login.pl
126 126
    v3  => 'v3',
127 127
    neu => 'new',
128 128
    v4  => 'v4',
129
    xml => 'XML',
130 129
  );
131 130

  
132 131
  my $menu_script = $style_to_script_map{$user->{menustyle}} || '';
bin/mozilla/menuXML.pl
1
#=====================================================================
2
# LX-Office ERP
3
# Copyright (C) 2004
4
# Based on SQL-Ledger Version 2.1.9
5
# Web http://www.lx-office.org
6
#
7
######################################################################
8
# SQL-Ledger Accounting
9
# Copyright (c) 1998-2002
10
#
11
#  Author: Dieter Simader
12
#   Email: dsimader@sql-ledger.org
13
#     Web: http://www.sql-ledger.org
14
#
15
#  Contributors: Christopher Browne
16
#
17
# This program is free software; you can redistribute it and/or modify
18
# it under the terms of the GNU General Public License as published by
19
# the Free Software Foundation; either version 2 of the License, or
20
# (at your option) any later version.
21
#
22
# This program is distributed in the hope that it will be useful,
23
# but WITHOUT ANY WARRANTY; without even the implied warranty of
24
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25
# GNU General Public License for more details.
26
# You should have received a copy of the GNU General Public License
27
# along with this program; if not, write to the Free Software
28
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29
#######################################################################
30
#
31
# three frame layout with refractured menu
32
#
33
# CHANGE LOG:
34
#   DS. 2002-03-25  Created
35
#  2004-12-14 - New Optik - Marco Welter <mawe@linux-studio.de>
36
#  2007-10-14 - XMLified  - Holger Will  <holger@treebuilder.de>
37
#######################################################################
38

  
39
use utf8;
40

  
41
use SL::Menu;
42

  
43
use CGI::Carp qw(fatalsToBrowser);
44
use Encode;
45
use URI;
46

  
47
use strict;
48

  
49
1;
50

  
51
# end of main
52

  
53
sub display {
54
  my $form     = $main::form;
55
  my %myconfig = %main::myconfig;
56

  
57
  my $charset = $::lx_office_conf{system}->{dbcharset} || 'ISO-8859-1';
58
  my $callback            = $form->unescape($form->{callback});
59
  $callback               = URI->new($callback)->rel($callback) if $callback;
60
  $callback               = "login.pl?action=company_logo"      if $callback =~ /^(\.\/)?$/;
61

  
62
  my $text    = $form->create_http_response('content_type' => 'text/xml',
63
                                            'charset'      => $charset)
64
    . qq|<?xml version="1.0" encoding="${charset}"?>
65
<?xml-stylesheet href="xslt/xulmenu.xsl" type="text/xsl"?>
66
<!DOCTYPE doc [
67
<!ENTITY szlig "| . $::locale->{iconv_utf8}->convert('ß') . qq|">
68
<!ENTITY auml "|  . $::locale->{iconv_utf8}->convert('ä') . qq|">
69
<!ENTITY ouml "|  . $::locale->{iconv_utf8}->convert('ö') . qq|">
70
<!ENTITY uuml "|  . $::locale->{iconv_utf8}->convert('ü') . qq|">
71
]>
72

  
73
<doc>
74
<name>$myconfig{name}</name>
75
<version>$form->{version}</version>
76
<callback>$callback</callback>
77
<db>$myconfig{dbname}</db>
78

  
79
<favorites>|;
80

  
81
  my $fav       = $myconfig{favorites};
82
  my @favorites = split m/;/, $fav;
83
  foreach (@favorites) {
84
    $text .= qq|<link name="$_"/>|;
85
  }
86

  
87
  $text .= qq|</favorites>\n|
88
    . qq|<menu>\n|
89
    . acc_menu()
90
    . qq|</menu>\n|
91
    . qq|</doc>\n|;
92

  
93
  print $text;
94
}
95

  
96

  
97
sub acc_menu {
98
  my $form     = $main::form;
99

  
100
  my $mainlevel = $form->{level};
101
  $mainlevel =~ s/$mainlevel--//g;
102
  my $menu = Menu->new("menu.ini");
103

  
104
  $| = 1;
105

  
106
  return print_menu($menu);
107
}
108

  
109
sub print_menu {
110
  my ($menu, $parent, $depth) = @_;
111
  my $html;
112

  
113
  my $form     = $main::form;
114
  my %myconfig = %main::myconfig;
115

  
116
  die if ($depth * 1 > 5);
117

  
118
  my @menuorder;
119

  
120
  @menuorder = $menu->access_control(\%myconfig, $parent);
121

  
122
  $parent .= "--" if ($parent);
123

  
124
  foreach my $item (@menuorder) {
125
    my $menu_item_id = $item;
126
    substr($item, 0, length($parent)) = "";
127
    next if (($item eq "") || ($item =~ /--/));
128

  
129
    my $menu_item = $menu->{"${parent}${item}"};
130
    my $menu_title = $::locale->text($item);
131
    my $menu_text = $menu_title;
132

  
133
    my $target = "main_window";
134
    $target = $menu_item->{"target"} if ($menu_item->{"target"});
135

  
136
    if ($menu_item->{"submenu"} || !defined($menu_item->{"module"}) ||
137
        ($menu_item->{"module"} eq "menu.pl")) {
138

  
139
      my $h = print_menu($menu, "${parent}${item}", $depth * 1 + 1)."\n";
140
      if (!$parent) {
141
        $html .= qq|<item name='${menu_text}' id='${menu_item_id}'>${h}</item>\n|;
142
      } else {
143
        $html .= qq|<item name='${menu_text}' id='${menu_item_id}'>${h}</item>\n|;
144
      }
145
    } else {
146
      $html .= qq|<item |;
147
      $html .= $menu->menuitem_XML(\%myconfig, $form, "${parent}$item",
148
                                  { "title" => $menu_title,
149
                                    "target" => $target });
150
      $html .= qq| name="${menu_text}" id='${menu_item_id}'/>\n|;
151
    }
152
  }
153

  
154
  return $html;
155
}
doc/languages_howto.txt
133 133

  
134 134
  HTML
135 135
  URL@HTML
136
  XUL
137 136
  Template/HTML
138 137
  Template/XML
139 138
  Template/LaTeX
locale/de/all
809 809
  'Factor'                      => 'Faktor',
810 810
  'Factor missing!'             => 'Der Faktor fehlt.',
811 811
  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
812
  'Favorites'                   => 'Favoriten (nur im XUL-Menü)',
813 812
  'Fax'                         => 'Fax',
814 813
  'Feb'                         => 'Feb',
815 814
  'February'                    => 'Februar',
......
1203 1202
  'Not done yet'                => 'Noch nicht fertig',
1204 1203
  'Not obsolete'                => 'Gültig',
1205 1204
  'Note'                        => 'Hinweis',
1206
  'Note: For Firefox 4 and later the menu XUL menu requires the addon <a href="#1">Remote XUL Manager</a> and the Lx-Office server to be white listed.' => 'Bitte beachten: Ab Firefox 4 benötigt das XUL Menü das Addon <a href="#1">Remote XUL Manager</a>, in dem der Lx-Office Server eingetragen sein muss.',
1207 1205
  'Note: Taxkeys must have a "valid from" date, and will not behave correctly without.' => 'Hinweis: Steuerschlüssel sind fehlerhaft ohne "Gültig ab" Datum',
1208 1206
  'Notes'                       => 'Bemerkungen',
1209 1207
  'Notes (translation for #1)'  => 'Bemerkungen (Übersetzung für #1)',
......
1916 1914
  'Top (CSS)'                   => 'Oben (mit CSS)',
1917 1915
  'Top (CSS) new'               => 'Oben (mit CSS, neu)',
1918 1916
  'Top (Javascript)'            => 'Oben (mit Javascript)',
1919
  'Top (XUL; only for Mozilla Firefox)' => 'Oben + links (XUL, nur Mozilla Firefox)',
1920 1917
  'Top 100'                     => 'Top 100',
1921 1918
  'Top 100 hinzufuegen'         => 'Top 100 hinzufügen',
1922 1919
  'Top Level'                   => 'Hauptartikelbezeichnung',
locale/de/special_chars
16 16
order="
17 17
"=&quot;
18 18

  
19
[XUL]
20
order=&
21
&=&quot;
22

  
23 19
[Template/HTML]
24 20
order=< > \n
25 21
<=&lt;
locale/de_DE/all
750 750
  'Factor'                      => 'Faktor',
751 751
  'Factor missing!'             => 'Der Faktor fehlt.',
752 752
  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
753
  'Favorites'                   => 'Favoriten (nur im XUL-Menü)',
754 753
  'Fax'                         => 'Fax',
755 754
  'Feb'                         => 'Feb',
756 755
  'February'                    => 'Februar',
......
1772 1771
  'Top (CSS)'                   => 'Oben (mit CSS)',
1773 1772
  'Top (CSS) new'               => 'Oben (mit CSS, neu)',
1774 1773
  'Top (Javascript)'            => 'Oben (mit Javascript)',
1775
  'Top (XUL; only for Mozilla Firefox)' => 'Oben + links (XUL, nur Mozilla Firefox)',
1776 1774
  'Top 100'                     => 'Top 100',
1777 1775
  'Top 100 hinzufuegen'         => 'Top 100 hinzufügen',
1778 1776
  'Top Level'                   => 'Hauptartikelbezeichnung',
locale/de_DE/special_chars
16 16
order="
17 17
"=&quot;
18 18

  
19
[XUL]
20
order=&
21
&=&quot;
22

  
23 19
[Template/HTML]
24 20
order=< > \n
25 21
<=&lt;
locale/en/all
754 754
  'Factor'                      => '',
755 755
  'Factor missing!'             => '',
756 756
  'Falsches Datumsformat!'      => '',
757
  'Favorites'                   => '',
758 757
  'Fax'                         => '',
759 758
  'Feb'                         => '',
760 759
  'February'                    => '',
......
1779 1778
  'Top (CSS)'                   => '',
1780 1779
  'Top (CSS) new'               => '',
1781 1780
  'Top (Javascript)'            => '',
1782
  'Top (XUL; only for Mozilla Firefox)' => '',
1783 1781
  'Top 100'                     => '',
1784 1782
  'Top 100 hinzufuegen'         => '',
1785 1783
  'Top Level'                   => '',
locale/en/special_chars
16 16
order="
17 17
"=&quot;
18 18

  
19
[XUL]
20
order=&
21
&=&quot;
22

  
23 19
[Template/HTML]
24 20
order=< > \n
25 21
<=&lt;
locale/fr/all
1702 1702
  'Top (CSS)'                   => '',
1703 1703
  'Top (CSS) new'               => '',
1704 1704
  'Top (Javascript)'            => '',
1705
  'Top (XUL; only for Mozilla Firefox)' => '',
1706 1705
  'Top 100'                     => '',
1707 1706
  'Top 100 hinzufuegen'         => '',
1708 1707
  'Top Level'                   => '',
menuXML.pl
1
am.pl
scripts/mklinks.sh
4 4
	rm $i.pl 2> /dev/null
5 5
	ln -s admin.pl $i.pl
6 6
done
7
for i in acctranscorrections amcvar amtemplates ap ar bankaccounts bp ca common cp ct datev dn do fu gl ic ir is menujs menunew menu menuv3 menuv4 menuXML oe pe projects rc rp sepa todo ustva wh vk; do
7
for i in acctranscorrections amcvar amtemplates ap ar bankaccounts bp ca common cp ct datev dn do fu gl ic ir is menujs menunew menu menuv3 menuv4 oe pe projects rc rp sepa todo ustva wh vk; do
8 8
	rm $i.pl 2> /dev/null
9 9
	ln -s am.pl $i.pl
10 10
done
sql/Pg-upgrade2-auth/remove_menustyle_xml.sql
1
-- @tag: remove_menustyle_xml
2
-- @description: Menütyp "XUL/XML" wurde entfernt; also durch v3 ersetzen
3
-- @depends:
4
-- @charset: utf-8
5
UPDATE auth.user_config
6
SET cfg_value = 'v3'
7
WHERE ((cfg_key   = 'menustyle')
8
  AND  (cfg_value = 'xml'));
templates/webpages/admin/edit_user.html
184 184
         <option value="v3"[% IF menustyle_v3 %] selected[% END %]>[% 'Top (CSS)' | $T8 %]</option>
185 185
         <option value="v4"[% IF menustyle_v4 %] selected[% END %]>[% 'Top (CSS) new' | $T8 %]</option>
186 186
         <option value="neu"[% IF menustyle_neu %] selected[% END %]>[% 'Top (Javascript)' | $T8 %]</option>
187
         <option value="xml"[% IF menustyle_xml %] selected[% END %]>[% 'Top (XUL; only for Mozilla Firefox)' | $T8 %]</option>
188 187
        </select>
189 188
       </td>
190 189
      </tr>
templates/webpages/am/config.html
133 133
        <option value="v3"[% IF myconfig_menustyle == 'v3' %] selected[% END %]>[% 'Top (CSS)' | $T8 %]</option>
134 134
        <option value="v4"[% IF myconfig_menustyle == 'v4' %] selected[% END %]>[% 'Top (CSS) new' | $T8 %]</option>
135 135
        <option value="neu"[% IF myconfig_menustyle == 'neu' %] selected[% END %]>[% 'Top (Javascript)' | $T8 %]</option>
136
        <option value="xml"[% IF myconfig_menustyle == 'xml' %] selected[% END %]>[% 'Top (XUL; only for Mozilla Firefox)' | $T8 %]</option>
137 136
       </select>
138 137
      </td>
139 138
     </tr>
140 139

  
141
     <tr valign="top">
142
      <th align="right">[% 'Favorites' | $T8 %]</th>
143
      <td><textarea name="favorites" rows="4" cols="50">[% HTML.escape(myconfig_favorites) %]</textarea></td>
144
     </tr>
145

  
146 140
     <tr>
147 141
      <th align="right">[% 'Form details (second row)' | $T8 %]</th>
148 142
      <td>
......
164 158
     </tr>
165 159
    </table>
166 160

  
167
    <p>[% LxERP.t8('Note: For Firefox 4 and later the menu XUL menu requires the addon <a href="#1">Remote XUL Manager</a> and the Lx-Office server to be white listed.', 'https://addons.mozilla.org/de/firefox/addon/remote-xul-manager/') %]</p>
168

  
169 161
    <br style="clear: left" />
170 162
   </div>
171 163

  
xslt/style1.css
1
/* toolbar style */
2
toolbar{
3
 -moz-appearance:none !important;
4
 background: url('../image/fade.png');
5
 border-bottom:1px solid #888;
6
}
7

  
8
/* sidebar styles */
9
tree{
10
 -moz-appearance: none !important;
11
 border:0px solid black;
12
 padding-top:2px;
13
 background: white url('../image/fade.png') repeat-x;
14
}
15

  
16
#sidebar{
17
 background-image: url('../image/fade.png');
18
 max-width:450px;
19
 width:150px;
20
 font:12px Arial;
21
 margin:0px;
22
 border-right:1px solid #888;
23
}
24

  
25
/* menubar styles */
26
menubar{
27
 -moz-appearance:none !important;
28
 background: url('../image/bg_titel.gif');
29
 border:0px;
30
}
31

  
32
menu, 
33
menuitem{
34
 font:12px Arial;
35
}
36

  
37
menu menu{
38
 -moz-appearance: none !important;
39
 color:white;
40
 background: #35a;
41
}
42

  
43
menubar menu{
44
 -moz-appearance: none !important;
45
 color:white;
46
}
47

  
48
menubar menu:hover{
49
 -moz-appearance:none !important;
50
 background:#46d;
51
 color:yellow;
52
}
53

  
54
/* are splitter & iframe in use currently? */
55
splitter{
56
 -moz-appearance:none !important;
57
 background:white url('../image/fade.png') no-repeat !important;
58
 border:0px;
59
}
60
iframe{
61
 border-left:1px solid #888 !important;
62
}
xslt/xulmenu.xsl
1
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
2
    xmlns:html="http://www.w3.org/1999/xhtml"
3
    xmlns:svg="http://www.w3.org/2000/svg"
4
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
5
<xsl:output media-type="application/vnd.mozilla.xul+xml"/>
6
<xsl:template match="/">
7
  <xsl:choose>
8
    <xsl:when test="system-property('xsl:vendor')='Transformiix'">
9

  
10
      <xsl:apply-templates/>
11
    </xsl:when>
12
    <xsl:otherwise>
13
      <xsl:apply-templates mode="html"/>
14
    </xsl:otherwise>
15
  </xsl:choose>
16
</xsl:template>
17

  
18
<xsl:template match="doc" mode="html">
19
  <html xmlns="http://www.w3.org/1999/xhtml">
20
    <head>
21
      <meta http-equiv="refresh" content="5;url=menu.pl?action=display"/>
22
    </head>
23
    <body style="background-color: #eee; color: #333;">
24
     <div style="margin-top: 2em; margin-left: auto; margin-right: auto; border: solid 0.1em #f88; width: 30em; background-color:#fff; font-size: 0.8em;font-family: Verdana, Arial, Helvetica; padding: 2em;">
25
      <h2>XUL-Men&#252; ist aktiviert</h2>
26
      <h3>Nur der Firefox-Browser mag das XUL-Men&#252;.</h3>
27
      Wir schalten auf die kompatiblere <a href="menu.pl?action=display">HTML-Variante</a> um.
28
      <h3>Only the Firefox-Browser likes the XUL-Menu.</h3>
29
      We switch to the <a href="menu.pl?action=display">HTML-Version</a> now.      
30
     </div>
31
    </body>
32
  </html>
33
</xsl:template>
34

  
35
<!-- main document structure -->
36
<!-- ******************************************************************* -->
37
<xsl:template match="doc">
38
<xsl:processing-instruction name="xml-stylesheet">href="xslt/style1.css" type="text/css"</xsl:processing-instruction>
39
  <xsl:variable name="callback"><xsl:value-of select='/doc/callback'/></xsl:variable>
40
  <xsl:variable name="title">
41
      LX-Office Version <xsl:value-of select='/doc/version'/>
42
      - <xsl:value-of select='/doc/name'/>
43
      - <xsl:value-of select='/doc/db'/>
44
    </xsl:variable>
45
   <!-- <xsl:call-template name="style"/>-->
46
  <window title="{$title}">
47
  <html:title/>
48
    <xsl:call-template name="script"/>
49
    <toolbox>
50
      <xsl:apply-templates select="menu"/>
51
      <xsl:apply-templates select="favorites"/>
52
    </toolbox>
53
    <hbox flex="1">
54
      <vbox id="sidebar" style="overflow:hidden">
55

  
56
        <xsl:apply-templates mode="tree" select="menu"/>
57

  
58
        <xsl:call-template name="ArtikelSuche"/>
59
        <!--<iframe src="xslt/trans.xml" flex="1" id="uhr"/>-->
60
      </vbox>
61
      <splitter state="open" collapse="before" resizeafter="farthest"><grippy/></splitter>
62
      <browser id="main_window" type="content" src="{$callback}" flex="1" style="border:0px"/>
63
    </hbox>
64
  </window>
65
</xsl:template>
66
<!-- ******************************************************************* -->
67

  
68

  
69
<!-- the top menu -->
70
<!-- ******************************************************************* -->
71
<xsl:template match="menu"><menubar id="sample-menubar" flex="1"><xsl:apply-templates/></menubar></xsl:template>
72
<!-- ******************************************************************* -->
73

  
74

  
75
<!-- favorites toolbar -->
76
<!-- ******************************************************************* -->
77
<xsl:template match="favorites">
78
  <toolbar id="favoriten" >
79
    <xsl:call-template name="specialbuttons"/>
80
    <toolbarseparator/>
81
    <xsl:for-each select="link">
82
      <xsl:variable name="name" select="@name"/>
83
      <xsl:choose>
84
        <xsl:when test="/*//item[@id=$name]/item">
85
          <toolbarbutton type="menu" label="{$name}" tooltiptext="A simple popup" link="{/*//item[@id=$name]/@link}" oncommand="openLink(event)">
86
            <image src="image/icons/24x24/{/*//item[@id=$name]/@id}.png" width="24" height="24" />
87
            <menupopup id="file-popup">
88
              <xsl:apply-templates select="/*//item[@id=$name]/*"/>
89
            </menupopup>
90
          </toolbarbutton>
91
        </xsl:when>
92
        <xsl:otherwise>
93
          <toolbarbutton label="{$name}" tooltiptext="A simple popup" link="{/*//item[@id=$name]/@link}" oncommand="openLink(event)" lxid="{/*//item[@id=$name]/@id}">
94
            <image src="image/icons/24x24/{/*//item[@id=$name]/@id}.png" width="24" height="24" />
95
          </toolbarbutton>
96
        </xsl:otherwise>
97
      </xsl:choose>
98
    </xsl:for-each>
99
    <toolbarspring flex="1"/>
100
    <xsl:call-template name="searchbox"/>
101

  
102
  </toolbar>
103
</xsl:template>
104
<!-- ******************************************************************* -->
105

  
106

  
107
<!-- template for the top menu items
108
*********************************************************************************  -->
109
<xsl:template match="item">
110
 <xsl:choose>
111
  <xsl:when test="item">
112
   <menu id="{@name}_menu" label="{@name}" class="menu-iconic" image="image/icons/16x16/{@id}.png">
113
    <menupopup id="file-popup">
114
     <xsl:apply-templates/>
115
    </menupopup>
116
   </menu>
117
  </xsl:when>
118
  <xsl:otherwise>
119
   <menuitem target="{@target}" link="{@link}" label="{@name}" oncommand="openLink(event)" class="menuitem-iconic" image="image/icons/16x16/{@id}.png" lxid="{@id}" onclick="openLinkNewTab(event)"/>
120
  </xsl:otherwise>
121
 </xsl:choose>
122
</xsl:template>
123
<!-- ***************************************************************************  -->
124

  
125

  
126
<!-- templates for the treeview
127
**********************************************************************************   -->
128
<xsl:template match="menu" mode="tree">
129
<toolbar>
130
<label value="Hauptmen&#252;"/>
131
</toolbar>
132
  <tree flex="1" onselect="openTreeLink(event)" style="margin:0px;" hidecolumnpicker="true">
133
    <treecols>
134
        <treecol hideheader="true" id="menuepunkt"  primary="true" flex="1" />
135
    </treecols>
136
    <treechildren>
137
      <xsl:apply-templates mode="tree"/>
138
    </treechildren>
139
  </tree>
140
</xsl:template>
141

  
142
<xsl:template match="item" mode="tree">
143
  <xsl:choose>
144
    <xsl:when test="item">
145
        <treeitem container="true" open="false">
146
          <treerow>
147
            <treecell label="{@name}" src="image/icons/16x16/{@id}.png"/>
148
          </treerow>
149
          <treechildren>
150
            <xsl:apply-templates mode="tree"/>
151
          </treechildren>
152
        </treeitem>
153
    </xsl:when>
154
    <xsl:otherwise>
155
    <treeitem link="{@link}">
156
      <treerow>
157
        <treecell label="{@name}" src="image/icons/16x16/{@id}.png"/>
158
      </treerow>
159
    </treeitem>
160
    </xsl:otherwise>
161
  </xsl:choose>
162
</xsl:template>
163
<!-- ***************************************************************************  -->
164

  
165

  
166
<!-- template fuer die uhr
167
********************************************************************************  -->
168
<xsl:template name="uhr">
169

  
170
</xsl:template>
171
<!-- ***************************************************************************  -->
172

  
173

  
174
<!-- scripts
175
********************************************************************************  -->
176
<xsl:template name="script">
177
  <html:script type="text/ecmascript">
178

  
179
  function openLink(event)
180
    {
181
    var path=event.target.getAttribute("link")
182
    if(event.target.getAttribute("target")=="_top")
183
      {
184
        window.location=path
185
      }
186
      else
187
      {
188
        var bf=document.getElementById("main_window")
189
        bf.setAttribute("src",path)
190
      }
191
    }
192

  
193
  function openLinkNewTab(event)
194
    {
195
    if(event.button!=1) return
196
    var path=event.target.getAttribute("link")
197
    if(event.target.getAttribute("target")=="_top")
198
      {
199
        window.location=path
200
      }
201
      else
202
      {
203
window.open(path,"_new","")
204

  
205
      }
206
    }
207

  
208

  
209
  function openLinkNewWindow(event)
210
    {
211
      var path=event.target.getAttribute("link")
212
      window.open(path,"_blank","")
213
    }
214

  
215
  function openTreeLink(event)
216
    {
217
      var tree=event.target
218
      var selIndex=tree.currentIndex
219
      var item=tree.view.getItemAtIndex(selIndex)
220
      var link=item.getAttribute("link")
221
      if(link) document.getElementById("main_window").setAttribute("src",link)
222
    }
223

  
224
  function updateClock()
225
    {
226
      var d= new Date()
227
      var sec=d.getSeconds()
228
      var min=d.getMinutes()
229
      var std=(d.getHours() % 12 ) + min/60
230
      document.getElementById("std").setAttribute("transform","rotate("+std*30+",20,20)")
231
      document.getElementById("min").setAttribute("transform","rotate("+min*6+",20,20)")
232
      document.getElementById("sec").setAttribute("transform","rotate("+sec*6+",20,20)")
233
    }
234

  
235
  function PrintW()
236
    {
237
      document.getElementById("main_window").contentWindow.print()
238
    }
239

  
240
  function doSearch(){
241
  var t=document.getElementById("searchboxtext").value
242
  document.getElementById("desc").value=t
243
  document.getElementById("sb").click()
244

  
245
  }
246
  function checkEnter(event){
247
  if(event.keyCode==13) doSearch()
248
  }
249
  //setInterval("updateClock()",1000)
250
  function MyGoBack(){
251
document.getElementById("main_window").contentWindow.history.back()
252
}
253
  function MyGoForward(){
254
document.getElementById("main_window").contentWindow.history.forward()
255
}
256
  </html:script>
257
</xsl:template>
258
<!-- ***************************************************************************  -->
259

  
260
<!-- special buttons ( logout , print, open new window )
261
The tooltips, like tooltiptext="Neues Fenster", do not appear in my Firefox/Prism browsers. Why?
262
https://developer.mozilla.org/en/XUL_Tutorial/Popup_Menus
263
https://developer.mozilla.org/en/XUL/Attribute/tooltiptext
264
****************************************************************************  -->
265
<xsl:template name="specialbuttons">
266
    <toolbarbutton image="image/icons/24x24/Batch Printing.png" oncommand="PrintW(event)" tooltiptext="Drucken"/>
267
    <toolbarbutton image="image/icons/24x24/Neues Fenster.png" tooltiptext="Neues Fenster" link="menuXML.pl?action=display" target="_top" oncommand="openLinkNewWindow(event)"/>
268
    <toolbarbutton image="image/icons/24x24/Program--Logout.png" link="{/*//item[@id='Program--Logout']/@link}" target="_top" oncommand="openLink(event)" tooltiptext="Abmelden"/>
269
  <toolbarseparator/>
270
    <toolbarbutton image="image/icons/24x24/leftarrow_24.png" tooltiptext="Schritt zurück" oncommand="MyGoBack()"/>
271
    <toolbarbutton image="image/icons/24x24/rightarrow_24.png" tooltiptext="Schritt vor" oncommand="MyGoForward()"/>
272
</xsl:template>
273
<!-- ***************************************************************************  -->
274

  
275

  
276
<!-- searchbox
277
****************************************************************************  -->
278
<xsl:template name="searchbox">
279
<vbox style="padding-top:2px">
280
  <hbox>
281
    <textbox style="font-size:11px;margin-right:0px" width="200px" id="searchboxtext" onkeypress="checkEnter(event)"/> 
282
    <toolbarbutton type="toolbar" width="20" height="20" style="padding:5px !important" image="image/icons/16x16/CRM--Schnellsuche.png" flex="0" oncommand="doSearch()"/>
283
</hbox>
284

  
285
</vbox>
286
</xsl:template>
287
<!-- ***************************************************************************  -->
288

  
289

  
290
<!-- hidden form for article search
291
****************************************************************************  -->
292
<xsl:template name="ArtikelSuche">
293
  <form id="aform" method="post" action="ic.pl" xmlns="http://www.w3.org/1999/xhtml" target="main_window" style="font-family:arial;font-size:12px;display:none">
294
  <input name="partnumber" size="20"/>
295
  <input name="description" flex="1" id="desc"/>
296
  <input name="partsgroup" size="20"/>
297
  <input name="make" size="20"/>
298
  <input class="submit" type="submit" name="action" value="Weiter" id="sb"/>
299
  <div style="display:none" >
300
  <input class="submit" type="submit" name="action" value="Top 100"/>
301
    <input type="hidden" name="serialnumber" size="20"/>
302
    <input type="hidden" name="ean" size="20"/>
303
    <input type="hidden" name="searchitems" value="part"/>
304
    <input type="hidden" name="title" value="Waren"/>
305
    <input type="hidden" name="revers" value="0"/>
306
    <input type="hidden" name="lastsort" value=""/>
307
    <input type="hidden" name="model" size="20"/>
308
    <input type="hidden" name="drawing" size="20"/>
309
    <input type="hidden" name="microfiche" size="20"/>
310
    <input  name="itemstatus" class="radio" type="radio" value="active" checked="true"/>
311
    <input name="itemstatus" class="radio" type="radio" value="onhand"/>
312
    <input  name="itemstatus" class="radio" type="radio" value="short"/>
313
    <input  name="itemstatus" class="radio" type="radio" value="obsolete"/>
314
    <input  name="itemstatus" class="radio" type="radio" value="orphaned"/>
315
    <input  name="bought" class="checkbox" type="checkbox" value="1"/>
316
    <input  name="sold" class="checkbox" type="checkbox" value="1"/>
317
    <input  name="onorder" class="checkbox" type="checkbox" value="1"/>
318
    <input  name="ordered" class="checkbox" type="checkbox" value="1"/>
319
    <input  name="rfq" class="checkbox" type="checkbox" value="1"/>Anfrage
320
    <input  name="quoted" class="checkbox" type="checkbox" value="1"/>Angeboten
321
    <input type="hidden" name="transdatefrom" id="transdatefrom" size="11" title="dd.mm.yy"/>
322
    <input  type="button" name="transdatefrom" id="trigger1" value="?"/>
323
    <input name="transdateto" id="transdateto" size="11" title="dd.mm.yy"/>
324
    <input type="button" name="transdateto" id="trigger2" value="?"/>
325
    <input name="l_partnumber" class="checkbox" type="checkbox" value="Y" checked="true"/>Artikelnummer
326
    <input name="l_description" class="checkbox" type="checkbox" value="Y" checked="true"/>Artikelbeschreibung
327
    <input name="l_serialnumber" class="checkbox" type="checkbox" value="Y"/>Seriennummer
328
    <input name="l_unit" class="checkbox" type="checkbox" value="Y" checked="true"/>Maszeinheit
329
    <input name="l_listprice" class="checkbox" type="checkbox" value="Y"/>Listenpreis
330
    <input name="l_sellprice" class="checkbox" type="checkbox" value="Y" checked="true"/>Verkaufspreis
331
    <input name="l_lastcost" class="checkbox" type="checkbox" value="Y" checked="true"/>Einkaufspreis
332
    <input name="l_linetotal" class="checkbox" type="checkbox" value="Y" checked="true"/>Zeilensumme
333
    <input name="l_priceupdate" class="checkbox" type="checkbox" value="Y"/>Erneuert am
334
    <input name="l_bin" class="checkbox" type="checkbox" value="Y"/>Lagerplatz
335
    <input name="l_rop" class="checkbox" type="checkbox" value="Y"/>Mindestlagerbestand
336
    <input name="l_weight" class="checkbox" type="checkbox" value="Y"/>Gewicht
337
    <input name="l_image" class="checkbox" type="checkbox" value="Y"/>Grafik
338
    <input name="l_drawing" class="checkbox" type="checkbox" value="Y"/>Zeichnung
339
    <input name="l_microfiche" class="checkbox" type="checkbox" value="Y"/>Mikrofilm
340
    <input name="l_partsgroup" class="checkbox" type="checkbox" value="Y"/>Warengruppe
341
    <input name="l_subtotal" class="checkbox" type="checkbox" value="Y"/>Zwischensumme
342
    <input name="l_soldtotal" class="checkbox" type="checkbox" value="Y"/>Verkaufte Anzahl
343
    <input name="l_deliverydate" class="checkbox" type="checkbox" value="Y"/>Lieferdatum
344
    <input type="hidden" name="nextsub" value="generate_report"/>
345
    <input type="hidden" name="revers" value="0"/>
346
    <input type="hidden" name="lastsort" value=""/>
347
    <input type="hidden" name="sort" value="description"/>
348
    <input type="hidden" name="ndxs_counter" value="0"/>
349
  </div>
350
  </form>
351
</xsl:template>
352
<!-- ***************************************************************************  -->
353
</xsl:stylesheet>

Auch abrufbar als: Unified diff