blob: cec14b83e74b324d60622c91b9080eb947e3b062 [file] [log] [blame]
Shawn Pearce99cdbce2015-02-10 12:05:45 -08001// Copyright 2015 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package com.google.gitiles.doc;
16
17import com.google.gitiles.GitilesView;
18import com.google.gitiles.doc.html.HtmlBuilder;
19import com.google.template.soy.shared.restricted.Sanitizers;
Shawn Pearcef75a2c62015-02-12 21:39:00 -080020import com.google.template.soy.shared.restricted.EscapingConventions.FilterImageDataUri;
Shawn Pearce99cdbce2015-02-10 12:05:45 -080021
22import org.pegdown.ast.HeaderNode;
23import org.pegdown.ast.Node;
24import org.pegdown.ast.ReferenceNode;
25import org.pegdown.ast.RootNode;
26
27import java.util.HashMap;
28import java.util.Iterator;
29import java.util.Map;
30
31class Navbar {
Shawn Pearcef75a2c62015-02-12 21:39:00 -080032 static Map<String, Object> bannerSoyData(
33 GitilesView view, ImageLoader img,
34 RootNode nav) {
Shawn Pearce99cdbce2015-02-10 12:05:45 -080035 Map<String, Object> data = new HashMap<>();
36 data.put("siteTitle", null);
37 data.put("logoUrl", null);
38 data.put("homeUrl", null);
39
40 if (nav == null) {
41 return data;
42 }
43
44 for (Iterator<Node> i = nav.getChildren().iterator(); i.hasNext();) {
45 Node n = i.next();
46 if (n instanceof HeaderNode) {
47 HeaderNode h = (HeaderNode) n;
48 if (h.getLevel() == 1) {
Shawn Pearce108599e2015-02-11 13:28:37 -080049 data.put("siteTitle", MarkdownUtil.getInnerText(h));
Shawn Pearce99cdbce2015-02-10 12:05:45 -080050 i.remove();
51 break;
52 }
53 }
54 }
55
56 for (ReferenceNode r : nav.getReferences()) {
Shawn Pearce108599e2015-02-11 13:28:37 -080057 String key = MarkdownUtil.getInnerText(r);
Shawn Pearce99cdbce2015-02-10 12:05:45 -080058 String url = r.getUrl();
59 if ("logo".equalsIgnoreCase(key)) {
60 Object src;
Shawn Pearcef75a2c62015-02-12 21:39:00 -080061 if (HtmlBuilder.isValidHttpUri(url)) {
Shawn Pearce99cdbce2015-02-10 12:05:45 -080062 src = url;
Shawn Pearcef75a2c62015-02-12 21:39:00 -080063 } else if (HtmlBuilder.isImageDataUri(url)) {
64 src = Sanitizers.filterImageDataUri(url);
65 } else if (img != null) {
66 src = img.loadImage(url);
67 } else {
68 src = FilterImageDataUri.INSTANCE.getInnocuousOutput();
Shawn Pearce99cdbce2015-02-10 12:05:45 -080069 }
70 data.put("logoUrl", src);
71 } else if ("home".equalsIgnoreCase(key)) {
Shawn Pearce108599e2015-02-11 13:28:37 -080072 if (MarkdownUtil.isAbsolutePathToMarkdown(url)) {
Shawn Pearce99cdbce2015-02-10 12:05:45 -080073 url = GitilesView.doc().copyFrom(view).setPathPart(url).toUrl();
74 }
75 data.put("homeUrl", url);
76 }
77 }
78 return data;
79 }
80
81 private Navbar() {
82 }
83}