James Moger
2013-06-24 5abe3350a38b3cdfc28ac2839860d28b88f2306a
Improve time filter language and handling of daysBack parameter
10 files modified
122 ■■■■ changed files
releases.moxie 3 ●●●● patch | view | raw | blame | history
src/main/distrib/data/gitblit.properties 2 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties 5 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/PageRegistration.java 32 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/WicketUtils.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/ActivityPage.java 23 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/DashboardPage.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/ProjectPage.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/RootPage.java 19 ●●●●● patch | view | raw | blame | history
releases.moxie
@@ -127,7 +127,8 @@
    - { name: 'realm.salesforce.orgId', defaultValue: 0 }
    - { name: 'realm.windows.defaultDomain', defaultValue: ' ' }
    - { name: 'realm.windows.backingUserService', defaultValue: 'users.conf' }
    - { name: 'web.activityDurationChoices', defaultValue: '7 14 21 28' }
    - { name: 'web.activityDuration', defaultValue: 7 }
    - { name: 'web.activityDurationChoices', defaultValue: '1 3 7 14 21 28' }
    - { name: 'web.activityCacheDays', defaultValue: 14 }
    - { name: 'web.allowAppCloneLinks', defaultValue: 'true' }
    - { name: 'web.forceDefaultLocale', defaultValue: ' ' }
src/main/distrib/data/gitblit.properties
@@ -825,7 +825,7 @@
#
# SPACE-DELIMITED
# SINCE 1.3.0
web.activityDurationChoices = 7 14 21 28
web.activityDurationChoices = 1 3 7 14 21 28
# The number of days of commits to cache in memory for the dashboard, activity,
# and project pages.  A value of 0 will disable all caching and will parse commits
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
@@ -497,4 +497,7 @@
gb.starred = starred
gb.owned = owned
gb.starredAndOwned = starred & owned
gb.reviewPatchset = review {0} patchset {1}
gb.reviewPatchset = review {0} patchset {1}
gb.todaysActivityStats = today / {1} commits by {2} authors
gb.todaysActivityNone = today / none
gb.noActivityToday = there has been no activity today
src/main/java/com/gitblit/wicket/PageRegistration.java
@@ -152,13 +152,8 @@
                parameters = new PageParameters(params);
                if (parameters.containsKey(parameter)) {
                    isSelected = params.getString(parameter).equals(value);
                    if (isSelected) {
                        // already selected, so remove this enables toggling
                        parameters.remove(parameter);
                    } else {
                        // set the new selection value
                        setParameter(parameter, value);
                    }
                    // set the new selection value
                    setParameter(parameter, value);
                } else {
                    // not currently selected
                    isSelected = false;
@@ -167,7 +162,7 @@
            }
        }
        private void setParameter(String parameter, String value) {
        protected void setParameter(String parameter, String value) {
            if (!StringUtils.isEmpty(parameter)) {
                if (StringUtils.isEmpty(value)) {
                    this.parameters.remove(parameter);
@@ -224,4 +219,25 @@
            return displayText;
        }
    }
    public static class DropDownToggleItem extends DropDownMenuItem {
        private static final long serialVersionUID = 1L;
        /**
         * Toggle Menu Item constructor that preserves aggregate parameters.
         *
         * @param displayText
         * @param parameter
         * @param value
         */
        public DropDownToggleItem(String displayText, String parameter, String value,
                PageParameters params) {
            super(displayText, parameter, value, params);
            if (isSelected) {
                // already selected, so remove this enables toggling
                parameters.remove(parameter);
            }
        }
    }
}
src/main/java/com/gitblit/wicket/WicketUtils.java
@@ -431,7 +431,7 @@
    }
    public static int getDaysBack(PageParameters params) {
        return params.getInt("db", 7);
        return params.getInt("db", 0);
    }
    public static String getUsername(PageParameters params) {
src/main/java/com/gitblit/wicket/pages/ActivityPage.java
@@ -61,7 +61,7 @@
        // parameters
        int daysBack = WicketUtils.getDaysBack(params);
        if (daysBack < 1) {
            daysBack = 14;
            daysBack = GitBlit.getInteger(Keys.web.activityDuration, 7);
        }
        String objectId = WicketUtils.getObject(params);
@@ -70,9 +70,26 @@
        List<Activity> recentActivity = ActivityUtils.getRecentActivity(models, 
                daysBack, objectId, getTimeZone());
        String headerPattern;
        if (daysBack == 1) {
            // today
            if (recentActivity.size() == 0) {
                headerPattern = getString("gb.todaysActivityNone");
            } else {
                headerPattern = getString("gb.todaysActivityStats");
            }
        } else {
            // multiple days
            if (recentActivity.size() == 0) {
                headerPattern = getString("gb.recentActivityNone");
            } else {
                headerPattern = getString("gb.recentActivityStats");
            }
        }
        if (recentActivity.size() == 0) {
            // no activity, skip graphs and activity panel
            add(new Label("subheader", MessageFormat.format(getString("gb.recentActivityNone"),
            add(new Label("subheader", MessageFormat.format(headerPattern,
                    daysBack)));
            add(new Label("activityPanel"));
        } else {
@@ -86,7 +103,7 @@
            int totalAuthors = uniqueAuthors.size();
            // add the subheader with stat numbers
            add(new Label("subheader", MessageFormat.format(getString("gb.recentActivityStats"),
            add(new Label("subheader", MessageFormat.format(headerPattern,
                    daysBack, totalCommits, totalAuthors)));
            // create the activity charts
src/main/java/com/gitblit/wicket/pages/DashboardPage.java
@@ -96,12 +96,20 @@
            // quiet or no starred repositories
            if (repositories.size() == 0) {
                if (UserModel.ANONYMOUS.equals(user)) {
                    activityFragment.add(new Label("digests", MessageFormat.format(getString("gb.noActivity"), daysBack)));
                    if (daysBack == 1) {
                        activityFragment.add(new Label("digests", getString("gb.noActivityToday")));
                    } else {
                        activityFragment.add(new Label("digests", MessageFormat.format(getString("gb.noActivity"), daysBack)));
                    }
                } else {
                    activityFragment.add(new LinkPanel("digests", null, getString("gb.findSomeRepositories"), RepositoriesPage.class));
                }
            } else {
                activityFragment.add(new Label("digests", MessageFormat.format(getString("gb.noActivity"), daysBack)));
                if (daysBack == 1) {
                    activityFragment.add(new Label("digests", getString("gb.noActivityToday")));
                } else {
                    activityFragment.add(new Label("digests", MessageFormat.format(getString("gb.noActivity"), daysBack)));
                }
            }
        } else {
            // show daily commit digest feed
@@ -228,7 +236,23 @@
            }
        }
        
        frag.add(new Label("feedheader", MessageFormat.format(getString("gb.recentActivityStats"),
        String headerPattern;
        if (daysBack == 1) {
            // today
            if (totalCommits == 0) {
                headerPattern = getString("gb.todaysActivityNone");
            } else {
                headerPattern = getString("gb.todaysActivityStats");
            }
        } else {
            // multiple days
            if (totalCommits == 0) {
                headerPattern = getString("gb.recentActivityNone");
            } else {
                headerPattern = getString("gb.recentActivityStats");
            }
        }
        frag.add(new Label("feedheader", MessageFormat.format(headerPattern,
                daysBack, totalCommits, authorMetrics.size())));
        // build google charts
src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java
@@ -94,7 +94,7 @@
        // parameters
        int daysBack = params == null ? 0 : WicketUtils.getDaysBack(params);
        if (daysBack < 1) {
            daysBack = 7;
            daysBack = GitBlit.getInteger(Keys.web.activityDuration, 7);
        }
        Calendar c = Calendar.getInstance();
        c.add(Calendar.DATE, -1*daysBack);
src/main/java/com/gitblit/wicket/pages/ProjectPage.java
@@ -106,12 +106,12 @@
        }
        int daysBack = params == null ? 0 : WicketUtils.getDaysBack(params);
        if (daysBack < 1) {
            daysBack = 7;
            daysBack = GitBlit.getInteger(Keys.web.activityDuration, 7);
        }
        // reset the daysback parameter so that we have a complete project
        // repository list.  the recent activity will be built up by the
        // reflog utils.
        params.put("db", 0);
        params.remove("db");
        
        List<RepositoryModel> repositories = getRepositories(params);
        Collections.sort(repositories, new Comparator<RepositoryModel>() {
src/main/java/com/gitblit/wicket/pages/RootPage.java
@@ -52,6 +52,7 @@
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.PageRegistration;
import com.gitblit.wicket.PageRegistration.DropDownMenuItem;
import com.gitblit.wicket.PageRegistration.DropDownToggleItem;
import com.gitblit.wicket.SessionlessForm;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.GravatarImage;
@@ -256,7 +257,7 @@
            List<String> sets = new ArrayList<String>(setMap.keySet());
            Collections.sort(sets);
            for (String set : sets) {
                filters.add(new DropDownMenuItem(MessageFormat.format("{0} ({1})", set,
                filters.add(new DropDownToggleItem(MessageFormat.format("{0} ({1})", set,
                        setMap.get(set).get()), "set", set, params));
            }
            // divider
@@ -268,7 +269,7 @@
            List<TeamModel> teams = new ArrayList<TeamModel>(user.teams);
            Collections.sort(teams);
            for (TeamModel team : teams) {
                filters.add(new DropDownMenuItem(MessageFormat.format("{0} ({1})", team.name,
                filters.add(new DropDownToggleItem(MessageFormat.format("{0} ({1})", team.name,
                        team.repositories.size()), "team", team.name, params));
            }
            // divider
@@ -283,7 +284,7 @@
            for (String expression : expressions) {
                if (!StringUtils.isEmpty(expression)) {
                    addedExpression = true;
                    filters.add(new DropDownMenuItem(null, "x", expression, params));
                    filters.add(new DropDownToggleItem(null, "x", expression, params));
                }
            }
            // if we added any custom expressions, add a divider
@@ -300,7 +301,7 @@
        if (daysBack < 1) {
            daysBack = 7;
        }
        PageParameters clonedParams;;
        PageParameters clonedParams;
        if (params == null) {
            clonedParams = new PageParameters();
        } else {
@@ -314,14 +315,18 @@
        List<DropDownMenuItem> items = new ArrayList<DropDownMenuItem>();
        Set<Integer> choicesSet = new TreeSet<Integer>(GitBlit.getIntegers(Keys.web.activityDurationChoices));
        if (choicesSet.isEmpty()) {
             choicesSet.addAll(Arrays.asList(7, 14, 28, 60, 90, 180));
             choicesSet.addAll(Arrays.asList(1, 3, 7, 14, 21, 28));
        }
        List<Integer> choices = new ArrayList<Integer>(choicesSet);
        Collections.sort(choices);
        String lastDaysPattern = getString("gb.lastNDays");
        for (Integer db : choices) {
            String txt = MessageFormat.format(lastDaysPattern, db);
            items.add(new DropDownMenuItem(txt, "db", db.toString(), clonedParams));
            if (db == 1) {
                items.add(new DropDownMenuItem(getString("gb.time.today"), "db", db.toString(), clonedParams));
            } else {
                String txt = MessageFormat.format(lastDaysPattern, db);
                items.add(new DropDownMenuItem(txt, "db", db.toString(), clonedParams));
            }
        }
        items.add(new DropDownMenuItem());
        return items;