Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 9a2cf4dd

Von Sven Schöling vor mehr als 3 Jahren hinzugefügt

  • ID 9a2cf4ddab7b2094360c5f062ce884ef78787aed
  • Vorgänger 268ed982
  • Nachfolger 432be92f

Layout: Javascript Menü refactoring

Das Javascript Menü war noch in einem Zustand aus der Anfangszeit von
SL::Layout. Diese Änderungen teilen das in ein Main Layout (Javascript)
und ein sub layout für das DHTMLMenu.

Das DHTMLMenu Layout ist außerdem ein wenig optimiert. Es benutzt jetzt
nicht mehr ein template sondern baut das DOM direkt zusammen (spart im
hot path einen template aufruf und ist um faktor 5 schneller), und
ausserdem werden die -f checks auf die icon Dateien jetzt mit
SL::System::ResourceCache gecacht, so dass nicht für jeden Request ein
paar Duzend stat() gemacht werden müssen.

Unterschiede anzeigen:

SL/Layout/Javascript.pm
4 4
use parent qw(SL::Layout::Base);
5 5

  
6 6
use SL::Layout::None;
7
use SL::Layout::DHTMLMenu;
7 8
use SL::Layout::Top;
8 9
use SL::Layout::ActionBar;
9 10
use SL::Layout::Content;
......
17 18
  [
18 19
    SL::Layout::None->new,
19 20
    SL::Layout::Top->new,
21
    SL::Layout::DHTMLMenu->new,
22
    $_[0]->sub_layouts_by_name->{actionbar},
20 23
    SL::Layout::Content->new,
21 24
  ]
22 25
}
23 26

  
24
sub javascripts {
25
  my ($self) = @_;
26

  
27
  return uniq grep { $_ } map { $self->_find_javascript($_)  }
28
    map({ $_->javascripts } $self->sub_layouts),
29
    qw(dhtmlsuite/menu-for-applications.js),
30
    $_[0]->sub_layouts_by_name->{actionbar}->javascripts,
31
    $self->use_javascript;
32
}
33

  
34
sub javascripts_inline {
35
  $_[0]->SUPER::javascripts_inline,
36
<<'EOJS',
37
  DHTMLSuite.createStandardObjects();
38
  DHTMLSuite.configObj.setImagePath('image/dhtmlsuite/');
39
  var menu_model = new DHTMLSuite.menuModel();
40
  menu_model.addItemsFromMarkup('main_menu_model');
41
  menu_model.init();
42
  var menu_bar = new DHTMLSuite.menuBar();
43
  menu_bar.addMenuItems(menu_model);
44
  menu_bar.setTarget('main_menu_div');
45
  menu_bar.init();
46
EOJS
47
  $_[0]->sub_layouts_by_name->{actionbar}->javascripts_inline,
48
}
49

  
50
sub pre_content {
51
  $_[0]->SUPER::pre_content .
52
  $_[0]->presenter->render("menu/menunew",
53
    force_ul_width  => 1,
54
    menu            => $_[0]->menu,
55
    icon_path       => sub { my $simg = "image/icons/svg/$_[0].svg";  my $pimg="image/icons/16x16/$_[0].png"; -f $simg ? $simg : ( -f $pimg ? $pimg : ()) },
56
    max_width       => sub { 10 * max map { length $::locale->text($_->{name}) } @{ $_[0]{children} || [] } },
57
  ) .
58
  ($_[0]->sub_layouts_by_name->{actionbar}->pre_content // '');
59
}
60

  
61
sub stylesheets {
62
  my ($self) = @_;
63
  my $css_path = $self->get_stylesheet_for_user;
64

  
65
  return
66
    uniq
67
    grep { $_ }
68
    map { $self->_find_stylesheet($_, $css_path)  }
69
    qw(
70
      dhtmlsuite/menu-item.css
71
      dhtmlsuite/menu-bar.css
72
      icons16.css
73
      menu.css
74
    ),
75
    ( map { $_->stylesheets } $_[0]->sub_layouts ),
76
    $_[0]->sub_layouts_by_name->{actionbar}->stylesheets,
77
    $_[0]->use_stylesheet;
78
}
79

  
80 27
1;

Auch abrufbar als: Unified diff