James Moger
2011-04-27 3e087ada55f8b0e83b146578b695552db9dc8d97
Integrated pagelinks into RepositoryPage. Fixed string encoding.
2 files deleted
1 files added
21 files modified
460 ■■■■ changed files
src/com/gitblit/utils/JGitUtils.java 7 ●●●● patch | view | raw | blame | history
src/com/gitblit/utils/StringUtils.java 24 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/RepositoryPage.html 30 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/RepositoryPage.java 139 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/BlobDiffPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/BlobPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/BranchesPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/CommitDiffPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/CommitPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/DocsPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/HistoryPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/LogPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/MarkdownPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/MarkdownPage.java 23 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/SearchPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/SummaryPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/TagPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/TagsPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/TicketPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/TicketsPage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/TreePage.html 3 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/PageLinksPanel.html 21 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/PageLinksPanel.java 150 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/resources/gitblit.css 18 ●●●● patch | view | raw | blame | history
src/com/gitblit/utils/JGitUtils.java
@@ -4,6 +4,7 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -264,12 +265,14 @@
    }
    public static String getRawContentAsString(Repository r, RevBlob blob) {
        return new String(getRawContent(r, blob));
        byte [] content = getRawContent(r, blob);
        return new String(content, Charset.forName("UTF-8"));
    }
    public static String getRawContentAsString(Repository r, RevCommit commit, String blobPath) {
        RevObject obj = getRevObject(r, commit.getTree(), blobPath);
        return new String(getRawContent(r, (RevBlob) obj));
        byte [] content = getRawContent(r, (RevBlob) obj);
        return new String(content, Charset.forName("UTF-8"));
    }
    public static List<PathModel> getFilesInPath(Repository r, String basePath, String objectId) {
src/com/gitblit/utils/StringUtils.java
@@ -1,9 +1,15 @@
package com.gitblit.utils;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import org.tautua.markdownpapers.Markdown;
import org.tautua.markdownpapers.parser.ParseException;
public class StringUtils {
    
@@ -107,4 +113,22 @@
        }
    }
    public static String transformMarkdown(String markdown) throws java.text.ParseException {
        // Read raw markdown content and transform it to html
        StringReader reader = new StringReader(markdown);
        StringWriter writer = new StringWriter();
        try {
            Markdown md = new Markdown();
            md.transform(reader, writer);
            return writer.toString();
        } catch (ParseException p) {
            throw new java.text.ParseException(p.getMessage(), 0);
        } finally {
            reader.close();
            try {
                writer.close();
            } catch (IOException e) {
            }
        }
    }
}
src/com/gitblit/wicket/RepositoryPage.html
New file
@@ -0,0 +1,30 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
      xml:lang="en"
      lang="en">
<body>
    <wicket:extend>
        <!-- page header bar -->
        <div>
            <!-- floating search form on right -->
            <form wicket:id="searchForm">
                <div class="search">
                    <select wicket:id="searchType"/>
                    <input type="text" id="searchBox" wicket:id="searchBox" size="25" value=""/>
                </div>
            </form>
            <!-- page nav links -->
            <div class="page_nav">
                <a wicket:id="summary"><wicket:message key="gb.summary"></wicket:message></a> | <a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="branches"><wicket:message key="gb.branches"></wicket:message></a> | <a wicket:id="tags"><wicket:message key="gb.tags"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> <span wicket:id="extra"><span wicket:id="extraSeparator"></span><span wicket:id="extraLink"></span></span>
            </div>
        </div>
        <!-- page content -->
        <wicket:child />
    </wicket:extend>
</body>
</html>
src/com/gitblit/wicket/RepositoryPage.java
@@ -1,5 +1,7 @@
package com.gitblit.wicket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -7,7 +9,16 @@
import org.apache.wicket.Component;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.StatelessForm;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.ListDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.eclipse.jgit.diff.DiffEntry.ChangeType;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Repository;
@@ -20,9 +31,15 @@
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.JGitUtils.SearchType;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.pages.BranchesPage;
import com.gitblit.wicket.pages.DocsPage;
import com.gitblit.wicket.pages.LogPage;
import com.gitblit.wicket.pages.RepositoriesPage;
import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.panels.PageLinksPanel;
import com.gitblit.wicket.pages.SummaryPage;
import com.gitblit.wicket.pages.TagsPage;
import com.gitblit.wicket.pages.TicketsPage;
import com.gitblit.wicket.pages.TreePage;
import com.gitblit.wicket.panels.RefsPanel;
public abstract class RepositoryPage extends BasePage {
@@ -35,6 +52,20 @@
    private final Logger logger = LoggerFactory.getLogger(RepositoryPage.class);
    
    private final Map<String, String> knownPages = new HashMap<String, String>() {
        private static final long serialVersionUID = 1L;
        {
            put("summary", "gb.summary");
            put("log", "gb.log");
            put("branches", "gb.branches");
            put("tags", "gb.tags");
            put("tree", "gb.tree");
            put("tickets", "gb.tickets");
        }
    };
    public RepositoryPage(PageParameters params) {
        super(params);
        if (!params.containsKey("r")) {
@@ -46,12 +77,69 @@
        Repository r = getRepository();
        // setup the page links and disable this page's link
        PageLinksPanel pageLinks = new PageLinksPanel("pageLinks", r, repositoryName, getPageName());
        add(pageLinks);
        pageLinks.disablePageLink(getPageName());
        // standard page links
        add(new BookmarkablePageLink<Void>("summary", SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
        add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
        add(new BookmarkablePageLink<Void>("branches", BranchesPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
        add(new BookmarkablePageLink<Void>("tags", TagsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
        add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils.newRepositoryParameter(repositoryName)));
        // per-repository extra page links
        List<String> extraPageLinks = new ArrayList<String>();
        // Conditionally add tickets page
        boolean checkTickets = JGitUtils.getRepositoryUseTickets(r);
        if (checkTickets && JGitUtils.getTicketsBranch(r) != null) {
            extraPageLinks.add("tickets");
        }
        // Conditionally add docs page
        boolean checkDocs = JGitUtils.getRepositoryUseDocs(r);
        if (checkDocs) {
            extraPageLinks.add("docs");
        }
        ListDataProvider<String> extrasDp = new ListDataProvider<String>(extraPageLinks);
        DataView<String> extrasView = new DataView<String>("extra", extrasDp) {
            private static final long serialVersionUID = 1L;
            public void populateItem(final Item<String> item) {
                String extra = item.getModelObject();
                if (extra.equals("tickets")) {
                    item.add(new Label("extraSeparator", " | "));
                    item.add(new LinkPanel("extraLink", null, getString("gb.tickets"), TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
                } else if (extra.equals("docs")) {
                    item.add(new Label("extraSeparator", " | "));
                    item.add(new LinkPanel("extraLink", null, getString("gb.docs"), DocsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
                }
            }
        };
        add(extrasView);
        // disable current page
        disablePageLink(getPageName());
        // add floating search form
        SearchForm searchForm = new SearchForm("searchForm", repositoryName);
        add(searchForm);
        searchForm.setTranslatedAttributes();
        // set stateless page preference
        setStatelessHint(true);
    }
    public void disablePageLink(String pageName) {
        for (String wicketId : knownPages.keySet()) {
            String key = knownPages.get(wicketId);
            String linkName = getString(key);
            if (linkName.equals(pageName)) {
                Component c = get(wicketId);
                if (c != null) {
                    c.setEnabled(false);
                }
                break;
            }
        }
    }
    protected Repository getRepository() {
@@ -107,7 +195,6 @@
    }
    protected abstract String getPageName();
    
    protected Component createPersonPanel(String wicketId, PersonIdent identity, SearchType searchType) {
        boolean showEmail = GitBlit.self().settings().getBoolean(Keys.web.showEmailAddresses, false);
@@ -191,4 +278,44 @@
    protected PageParameters newPathParameter(String path) {
        return WicketUtils.newPathParameter(repositoryName, objectId, path);
    }
    class SearchForm extends StatelessForm<Void> {
        private static final long serialVersionUID = 1L;
        private final String repositoryName;
        private final IModel<String> searchBoxModel = new Model<String>("");
        private final IModel<SearchType> searchTypeModel = new Model<SearchType>(SearchType.COMMIT);
        public SearchForm(String id, String repositoryName) {
            super(id);
            this.repositoryName = repositoryName;
            DropDownChoice<SearchType> searchType = new DropDownChoice<SearchType>("searchType", Arrays.asList(SearchType.values()));
            searchType.setModel(searchTypeModel);
            add(searchType.setVisible(GitBlit.self().settings().getBoolean(Keys.web.showSearchTypeSelection, false)));
            TextField<String> searchBox = new TextField<String>("searchBox", searchBoxModel);
            add(searchBox);
        }
        void setTranslatedAttributes() {
            WicketUtils.setHtmlTooltip(get("searchType"), getString("gb.searchTypeTooltip"));
            WicketUtils.setHtmlTooltip(get("searchBox"), getString("gb.searchTooltip"));
            WicketUtils.setInputPlaceholder(get("searchBox"), getString("gb.search"));
        }
        @Override
        public void onSubmit() {
            SearchType searchType = searchTypeModel.getObject();
            String searchString = searchBoxModel.getObject();
            for (SearchType type : SearchType.values()) {
                if (searchString.toLowerCase().startsWith(type.name().toLowerCase() + ":")) {
                    searchType = type;
                    searchString = searchString.substring(type.name().toLowerCase().length() + 1).trim();
                    break;
                }
            }
            setResponsePage(SearchPage.class, WicketUtils.newSearchParameter(repositoryName, null, searchString, searchType));
        }
    }
}
src/com/gitblit/wicket/pages/BlobDiffPage.html
@@ -6,9 +6,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    
    <!-- blob nav links -->    
    <div class="page_nav2">
src/com/gitblit/wicket/pages/BlobPage.html
@@ -16,9 +16,6 @@
<!-- need to specify body.onload -->
<body onload="prettyPrint()">
        <!-- page nav links -->
        <div wicket:id="pageLinks">[page links]</div>
        <!-- blob nav links -->    
        <div class="page_nav2">
            <span wicket:id="blameLink">[blame link]</span> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="rawLink"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a>
src/com/gitblit/wicket/pages/BranchesPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- branches -->    
    <div style="margin-top:5px;" wicket:id="branchesPanel">[branches panel]</div>
    
src/com/gitblit/wicket/pages/CommitDiffPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- commitdiff nav links -->    
    <div class="page_nav2">
        <wicket:message key="gb.parent"></wicket:message>: <span wicket:id="parentLink">[parent link]</span> | <a wicket:id="patchLink"><wicket:message key="gb.patch"></wicket:message></a> | <a wicket:id="commitLink"><wicket:message key="gb.commit"></wicket:message></a>
src/com/gitblit/wicket/pages/CommitPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- commit nav links -->    
    <div class="page_nav2">
        <wicket:message key="gb.parent"></wicket:message>: <span wicket:id="parentLink">[parent link]</span> | <a wicket:id="patchLink"><wicket:message key="gb.patch"></wicket:message></a> | <span wicket:id="commitdiffLink">[commitdiff link]</span>
src/com/gitblit/wicket/pages/DocsPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- header -->
    <div style="margin-top:5px;" class="header"><span wicket:id="header">[header]</span></div>
    
src/com/gitblit/wicket/pages/HistoryPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- pager links -->
    <div style="padding-top:5px;">
        <a wicket:id="firstPageTop"><wicket:message key="gb.pageFirst"></wicket:message></a> | <a wicket:id="prevPageTop"><wicket:message key="gb.pagePrevious"></wicket:message></a> | <a wicket:id="nextPageTop"><wicket:message key="gb.pageNext"></wicket:message></a> 
src/com/gitblit/wicket/pages/LogPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- pager links -->
    <div style="padding-top:5px;">
        <a wicket:id="firstPageTop"><wicket:message key="gb.pageFirst"></wicket:message></a> | <a wicket:id="prevPageTop"><wicket:message key="gb.pagePrevious"></wicket:message></a> | <a wicket:id="nextPageTop"><wicket:message key="gb.pageNext"></wicket:message></a> 
src/com/gitblit/wicket/pages/MarkdownPage.html
@@ -13,9 +13,6 @@
<body>
<wicket:extend>
        <!-- page nav links -->
        <div wicket:id="pageLinks">[page links]</div>
        <!-- markdown nav links -->    
        <div class="page_nav2">
            <span wicket:id="blameLink">[blame link]</span> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="rawLink"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a>
src/com/gitblit/wicket/pages/MarkdownPage.java
@@ -1,7 +1,6 @@
package com.gitblit.wicket.pages;
import java.io.StringReader;
import java.io.StringWriter;
import java.text.ParseException;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
@@ -9,18 +8,13 @@
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tautua.markdownpapers.Markdown;
import org.tautua.markdownpapers.parser.ParseException;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.RepositoryPage;
import com.gitblit.wicket.WicketUtils;
public class MarkdownPage extends RepositoryPage {
    private final Logger logger = LoggerFactory.getLogger(MarkdownPage.class);
    public MarkdownPage(PageParameters params) {
        super(params);
@@ -37,16 +31,13 @@
        add(new BookmarkablePageLink<Void>("headLink", MarkdownPage.class, WicketUtils.newPathParameter(repositoryName, Constants.HEAD, markdownPath)));
        // Read raw markdown content and transform it to html
        String htmlText = "";
        String markdownText = JGitUtils.getRawContentAsString(r, commit, markdownPath);
        String htmlText;
        try {
            String rawText = JGitUtils.getRawContentAsString(r, commit, markdownPath);
            StringReader reader = new StringReader(rawText);
            StringWriter writer = new StringWriter();
            Markdown md = new Markdown();
            md.transform(reader, writer);
            htmlText = writer.toString();
            htmlText = StringUtils.transformMarkdown(markdownText);
        } catch (ParseException p) {
            logger.error("Failed to parse markdown text from " + markdownPath, p);
            error(p.getMessage());
            htmlText = markdownText;
        }
        
        // Add the html to the page
src/com/gitblit/wicket/pages/SearchPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- pager links -->
    <div style="padding-top:5px;">
        <a wicket:id="firstPageTop"><wicket:message key="gb.pageFirst"></wicket:message></a> | <a wicket:id="prevPageTop"><wicket:message key="gb.pagePrevious"></wicket:message></a> | <a wicket:id="nextPageTop"><wicket:message key="gb.pageNext"></wicket:message></a> 
src/com/gitblit/wicket/pages/SummaryPage.html
@@ -6,9 +6,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    
    <div style="clear:both;">
        <!-- Repository Activity Chart -->    
src/com/gitblit/wicket/pages/TagPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- summary header -->
    <div style="margin-top: 5px;" class="header" wicket:id="commit">[shortlog header]</div>
    
src/com/gitblit/wicket/pages/TagsPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- tags panel -->
    <div style="margin-top:5px;" wicket:id="tagsPanel">[tags panel]</div>
    
src/com/gitblit/wicket/pages/TicketPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- ticket title -->
    <div style="font-size:150%;padding-top:5px;" wicket:id="ticketTitle">[ticket title]</div>
        
src/com/gitblit/wicket/pages/TicketsPage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- header -->    
    <div style="margin-top:5px;" class="header" wicket:id="header">[header]</div>
    
src/com/gitblit/wicket/pages/TreePage.html
@@ -7,9 +7,6 @@
<body>
<wicket:extend>
    <!-- page nav links -->
    <div wicket:id="pageLinks">[page links]</div>
    <!-- blob nav links -->    
    <div class="page_nav2">
        <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a>
src/com/gitblit/wicket/panels/PageLinksPanel.html
File was deleted
src/com/gitblit/wicket/panels/PageLinksPanel.java
File was deleted
src/com/gitblit/wicket/resources/gitblit.css
@@ -32,14 +32,14 @@
/* age0: age < 60*60*2 */
.age0 {
    color: #009900;
    color: #008000;
    font-style: italic;
    font-weight: bold;
}
/* age1: 60*60*2 <= age < 60*60*24*2 */
.age1 {
    color: #009900;
    color: #008000;
    font-style: italic;
}
@@ -272,7 +272,7 @@
}
span.diff.remove {
    color: #cc0000;
    color: #FFDDDD;
    font-family: inherit;
}
@@ -373,7 +373,7 @@
}
span.addition {
    background-color: #bbffbb;
    background-color: #ccffcc;
}
span.modification {
@@ -381,11 +381,11 @@
}
span.deletion {
    background-color: #ff8888;
    background-color: #f8bbbb;
}
span.rename {
    background-color: #8888ff;
    background-color: #cAc2f5;
}
div.commitLegend {
@@ -616,16 +616,16 @@
}
span .remoteRef {
    background-color: #aaaaff;
    background-color: #cAc2f5;
    border-color: #ccccff #0033cc #0033cc #ccccff;
}
span .tagRef {
    background-color: #ffffaa;
    border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
    border-color: #ffcc00 #ffcc00 #ffcc00 #ffcc00;
}
span .headRef {
    background-color: #aaffaa;
    background-color: #ccffcc;
    border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
}