diff --git a/zanata-war/src/main/java/org/zanata/action/VersionGroupHomeAction.java b/zanata-war/src/main/java/org/zanata/action/VersionGroupHomeAction.java index 707c139df4..30c51c86c6 100644 --- a/zanata-war/src/main/java/org/zanata/action/VersionGroupHomeAction.java +++ b/zanata-war/src/main/java/org/zanata/action/VersionGroupHomeAction.java @@ -21,16 +21,15 @@ package org.zanata.action; import java.io.Serializable; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; - +import org.apache.commons.lang.StringUtils; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; @@ -42,16 +41,21 @@ import org.zanata.model.HAccount; import org.zanata.model.HLocale; import org.zanata.model.HPerson; +import org.zanata.model.HProject; import org.zanata.model.HProjectIteration; import org.zanata.service.VersionGroupService; import org.zanata.service.VersionLocaleKey; import org.zanata.ui.model.statistic.WordStatistic; import org.zanata.util.StatisticsUtil; import org.zanata.util.ZanataMessages; - +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import lombok.Getter; +import lombok.Setter; + /** * @author Alex Eng aeng@redhat.com */ @@ -92,6 +96,10 @@ public class VersionGroupHomeAction extends AbstractSortAction implements @Getter private WordStatistic overallStatistic; + @Setter + @Getter + private String projectQuery; + private List activeLocales; private List projectIterations; @@ -259,6 +267,15 @@ public boolean isUserProjectMaintainer() { && authenticatedAccount.getPerson().isMaintainerOfProjects(); } + public int getFilteredProjectSize() { + if (getSelectedLocale() == null) { + return 0; + } else { + return getFilteredProjectIterations().size(); + } + + } + /** * Sort language list based on overall locale statistic for the group */ @@ -277,7 +294,7 @@ public void sortLanguageList(Long versionId) { /** * Sort project list based on selected locale - language tab - * + * * @param localeId */ public void sortProjectList(LocaleId localeId) { @@ -386,7 +403,7 @@ private Map> getMissingLocaleVersionMap() { /** * Search for locale that is not activated in given version - * + * * @param version */ public List getMissingLocale(HProjectIteration version) { @@ -411,7 +428,7 @@ public String getMissingLocaleTitle(HProjectIteration version) { /** * Search for version that doesn't activate given locale - * + * * @param localeId */ public List getMissingVersion(LocaleId localeId) { @@ -469,6 +486,25 @@ public List getProjectIterations() { return projectIterations; } + public List getFilteredProjectIterations() { + List list = getProjectIterations(); + if (StringUtils.isEmpty(projectQuery)) { + return list; + } + + Collection filtered = + Collections2.filter(list, new Predicate() { + @Override + public boolean apply(@Nullable HProjectIteration input) { + HProject project = input.getProject(); + return project.getName().toLowerCase() + .contains(projectQuery.toLowerCase()); + } + }); + + return Lists.newArrayList(filtered); + } + @Override public void resetPageData() { projectIterations = null; diff --git a/zanata-war/src/main/resources/messages.properties b/zanata-war/src/main/resources/messages.properties index 3fe391b535..b7ed2d8332 100644 --- a/zanata-war/src/main/resources/messages.properties +++ b/zanata-war/src/main/resources/messages.properties @@ -443,6 +443,8 @@ jsf.ArchiveGroupMessage=This will set the group's status to obsolete and remove jsf.ActivateGroupMessage=This will set the group's status to active and make it visible in the public groups list. jsf.Missing=missing +jsf.project.search.placeholder=Search project names +jsf.ClearSearch=Clear search #------ [home] > Groups > Create New Group ------ #------ [home] > Groups > [group-id] Edit Group ------ diff --git a/zanata-war/src/main/webapp/WEB-INF/layout/version-group/languages-tab.xhtml b/zanata-war/src/main/webapp/WEB-INF/layout/version-group/languages-tab.xhtml index 120000b8ad..75b0a0422b 100644 --- a/zanata-war/src/main/webapp/WEB-INF/layout/version-group/languages-tab.xhtml +++ b/zanata-war/src/main/webapp/WEB-INF/layout/version-group/languages-tab.xhtml @@ -4,84 +4,86 @@ xmlns:h="http://java.sun.com/jsf/html" xmlns:zanata="http://java.sun.com/jsf/composite/zanata" xmlns:a4j="http://richfaces.org/a4j" - xmlns:f="http://java.sun.com/jsf/core"> + xmlns:f="http://java.sun.com/jsf/core" + xmlns:rich="http://richfaces.org/rich"> -
-
-
-
- +
+
+
+ -

- #{messages['jsf.Languages']} -

+
+

+ #{messages['jsf.Languages']} +

+
+
+
+
+
-
-
-
- -
#{versionGroupHomeAction.activeLocales.size} -
-
- + class="txt--meta">#{versionGroupHomeAction.activeLocales.size()} +
+
+ + +
+

#{messages['jsf.NoActiveLanguages']}

-
-

#{messages['jsf.NoActiveLanguages']}

- -

- - #{messages['jsf.AddLanguages']} - -

-
-
+ rendered="#{s:hasPermission(versionGroupHome.instance, 'update')}"> +

+ + #{messages['jsf.AddLanguages']} + +

+
+
- -
    - -
  • - -
    -
    + +
      + +
    • + +
      +
      #{hLocale.retrieveDisplayName()} -
      - - +
      + + #{displayUnit.figure} @@ -104,86 +106,92 @@ #{displayUnit.unit} - -
    + +
    - + - -
    -
  • -
    -
-
-
+ + + + + + + +
+ +
+
+
+
+ + + -
-
-
- -
- - - +

+ + + #{versionGroupHomeAction.selectedLocale.retrieveDisplayName()} + + #{messages['Projects']} +

+
+ + -

- - - #{versionGroupHomeAction.selectedLocale.retrieveDisplayName()} - - #{messages['Projects']} -

+ + +
+

+ #{messages['jsf.SelectALanguageFromList']} +

- +
+ +
+

#{messages['jsf.NoProjectsInGroup']}

-
-

- #{messages['jsf.SelectALanguageFromList']} -

-
+ rendered="#{s:hasPermission(versionGroupHome.instance, 'update')}"> +

+ + #{messages['jsf.AddProjectVersions']} + +

- -
-

#{messages['jsf.NoProjectsInGroup']}

- -

- - #{messages['jsf.AddProjectVersions']} - -

-
-
-
- -
    - -
  • - - - +
+
+ +
    + +
  • + + + -
    -
    -

    #{version.project.name}

    +
    +
    +

    #{version.project.name}

    #{version.slug} @@ -194,10 +202,10 @@ class="badge--danger l--push-left-quarter">#{messages['jsf.Missing']} -
    -
    - +
    +
    + #{displayUnit.figure} @@ -206,17 +214,17 @@ #{displayUnit.unit} -
    -
    +
    +
    - -
    -
  • -
    -
-
-
-
-
+ + + + + + + +
+
diff --git a/zanata-war/src/main/webapp/resources/script/component-autocomplete.js b/zanata-war/src/main/webapp/resources/script/component-autocomplete.js index b23954ef19..0a233d1404 100644 --- a/zanata-war/src/main/webapp/resources/script/component-autocomplete.js +++ b/zanata-war/src/main/webapp/resources/script/component-autocomplete.js @@ -163,3 +163,7 @@ function clearAllSelection(resultDiv) { jQuery(resultDiv).children('.autocomplete__result') .removeClass("is-selected"); } + +function filterList(input, filterFn) { + filterFn(jQuery(input).val()); +} diff --git a/zanata-war/src/main/webapp/resources/zanata/list-filter.xhtml b/zanata-war/src/main/webapp/resources/zanata/list-filter.xhtml new file mode 100644 index 0000000000..b4f01a0d57 --- /dev/null +++ b/zanata-war/src/main/webapp/resources/zanata/list-filter.xhtml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + #{cc.attrs.getFilteredSize} + + + +
+
+
+