diff --git a/.classpath b/.classpath index ccf6a4e03..d531303bd 100644 --- a/.classpath +++ b/.classpath @@ -1,102 +1,131 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index e268ccbc1..c7244b85d 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ tags /**/init.lua /**/session /nbproject/private +/target/ diff --git a/.project b/.project index 90c747bcb..f2e777550 100644 --- a/.project +++ b/.project @@ -15,8 +15,14 @@ + + org.eclipse.m2e.core.maven2Builder + + + + org.eclipse.m2e.core.maven2Nature org.eclipse.jdt.core.javanature net.sf.eclipsecs.core.CheckstyleNature diff --git a/build.moxie b/build.moxie index e84ab4010..65ad9535e 100644 --- a/build.moxie +++ b/build.moxie @@ -68,14 +68,14 @@ resourceDirectories: - compile 'src/main/resources' - site 'src/site/resources' -# compile for Java 7 class format +# compile for Java 8 class format tasks: { 'mx:javac' : { - source: 1.7 - target: 1.7 - compiler: javac1.7 + source: 1.8 + target: 1.8 + compiler: javac1.8 encoding: UTF-8 - # stop complaints about bootstrap classpath when compiling with Java 7 + # stop complaints about bootstrap classpath when compiling with Java 8 compilerArgs: '-Xlint:-options' } } @@ -104,7 +104,7 @@ repositories: central, eclipse-snapshots, eclipse, gitblit properties: { jetty.version : 9.2.13.v20150730 slf4j.version : 1.7.12 - wicket.version : 1.4.22 + wicket.version : 8.0.0-M2 lucene.version : 4.10.4 jgit.version : 4.1.1.201511131810-r groovy.version : 2.4.4 @@ -140,7 +140,7 @@ dependencies: - compile 'com.sun.mail:javax.mail:1.5.1' :war - compile 'javax.servlet:javax.servlet-api:3.1.0' :fedclient - compile 'org.eclipse.jetty.aggregate:jetty-all:${jetty.version}' @jar -- compile 'org.apache.wicket:wicket:${wicket.version}' :war !org.mockito +- compile 'org.apache.wicket:wicket-core:${wicket.version}' :war !org.mockito - compile 'org.apache.wicket:wicket-auth-roles:${wicket.version}' :war !org.mockito - compile 'org.apache.wicket:wicket-extensions:${wicket.version}' :war !org.mockito - compile 'org.apache.lucene:lucene-core:${lucene.version}' :war :fedclient diff --git a/gitblit.iml b/gitblit.iml index 93331b20b..ec6dc5e16 100644 --- a/gitblit.iml +++ b/gitblit.iml @@ -146,35 +146,123 @@ - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -490,7 +578,9 @@ - + + + @@ -656,17 +746,6 @@ - - - - - - - - - - - @@ -832,17 +911,6 @@ - - - - - - - - - - - diff --git a/src/main/java/com/gitblit/Constants.java b/src/main/java/com/gitblit/Constants.java index 321f84f96..1af79f094 100644 --- a/src/main/java/com/gitblit/Constants.java +++ b/src/main/java/com/gitblit/Constants.java @@ -19,6 +19,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; import java.util.jar.Attributes; @@ -89,7 +90,7 @@ public class Constants { public static final String PROPOSAL_EXT = ".json"; - public static final String ENCODING = "UTF-8"; + public static final String ENCODING = StandardCharsets.UTF_8.name(); public static final int LEN_SHORTLOG = 78; diff --git a/src/main/java/com/gitblit/models/Menu.java b/src/main/java/com/gitblit/models/Menu.java index 7c949b3fd..7fb46ddc7 100644 --- a/src/main/java/com/gitblit/models/Menu.java +++ b/src/main/java/com/gitblit/models/Menu.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.WebPage; import com.gitblit.utils.StringUtils; @@ -108,8 +108,9 @@ public ParameterMenuItem(String displayText, String parameter, String value, isSelected = false; } else { parameters = new PageParameters(params); - if (parameters.containsKey(parameter)) { - isSelected = params.getString(parameter).equals(value); +// if (parameters.containsKey(parameter)) { + if (!parameters.get(parameter).isEmpty()) { + isSelected = params.get(parameter).toString().equals(value); // set the new selection value setParameter(parameter, value); } else { @@ -125,7 +126,7 @@ protected void setParameter(String parameter, String value) { if (StringUtils.isEmpty(value)) { this.parameters.remove(parameter); } else { - this.parameters.put(parameter, value); + this.parameters.add(parameter, value); } } } diff --git a/src/main/java/com/gitblit/models/NavLink.java b/src/main/java/com/gitblit/models/NavLink.java index 993d69545..a12a37d8d 100644 --- a/src/main/java/com/gitblit/models/NavLink.java +++ b/src/main/java/com/gitblit/models/NavLink.java @@ -19,7 +19,7 @@ import java.util.ArrayList; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.WebPage; import com.gitblit.models.Menu.MenuItem; diff --git a/src/main/java/com/gitblit/utils/GitBlitRequestUtils.java b/src/main/java/com/gitblit/utils/GitBlitRequestUtils.java new file mode 100644 index 000000000..74b3854b0 --- /dev/null +++ b/src/main/java/com/gitblit/utils/GitBlitRequestUtils.java @@ -0,0 +1,47 @@ +package com.gitblit.utils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.wicket.Page; +import org.apache.wicket.protocol.http.servlet.ServletWebRequest; +import org.apache.wicket.request.Request; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.cycle.RequestCycle; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class GitBlitRequestUtils { + public static HttpServletRequest getServletRequest() { + return (HttpServletRequest) RequestCycle.get().getRequest().getContainerRequest(); + } + + public static HttpServletResponse getServletResponse() { + return (HttpServletResponse) RequestCycle.get().getResponse().getContainerResponse(); + } + + public static String toAbsoluteUrl(Class pageClass, PageParameters params) { + String relativeUrl = RequestCycle.get().urlFor(pageClass, params).toString(); + return RequestCycle.get().getUrlRenderer().renderFullUrl(Url.parse(relativeUrl)); + } + + /** + * COPIED FROM WICKET 1.3 Docs: + * + * Gets a prefix to make this relative to the context root. + * + * For example, if your context root is http://server.com/myApp/ and the + * request is for /myApp/mountedPage/, then the prefix returned might be + * "../../". + * + * For a particular technology, this might return either an absolute prefix + * or a relative one. + */ + public static String getRelativePathPrefixToContextRoot() { + // String contextUrl = + // RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot(); + // TODO: test it! i thing deeper mounted pages will not work yet + Request r = RequestCycle.get().getRequest(); + String p = r.getPrefixToContextPath(); + return p; + } +} diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java index c10d88732..0a2c90c2f 100644 --- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java +++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java @@ -15,23 +15,26 @@ */ package com.gitblit.wicket; +import java.time.Instant; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.TimeZone; -import org.apache.wicket.Application; -import org.apache.wicket.Request; -import org.apache.wicket.Response; +import org.apache.wicket.RuntimeConfigurationType; import org.apache.wicket.Session; import org.apache.wicket.application.IClassResolver; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.request.Request; +import org.apache.wicket.request.Response; +import org.apache.wicket.util.time.Duration; import ro.fortsoft.pf4j.PluginState; import ro.fortsoft.pf4j.PluginWrapper; +import com.gitblit.Constants; import com.gitblit.IStoredSettings; import com.gitblit.Keys; import com.gitblit.extensions.GitblitWicketPlugin; @@ -94,6 +97,10 @@ import com.gitblit.wicket.pages.TreePage; import com.gitblit.wicket.pages.UserPage; import com.gitblit.wicket.pages.UsersPage; +import com.gitblit.wicket.resources.StaticResources; +import com.gitblit.wicket.resources.bootstrap.Bootstrap; +import com.gitblit.wicket.resources.fontawesome.FontAwesome; +import com.gitblit.wicket.resources.octicons.Octicons; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; @@ -134,24 +141,18 @@ public class GitBlitWebApp extends WebApplication implements GitblitWicketApp { private final IGitblit gitblit; private final IServicesManager services; - + private final IFilestoreManager filestoreManager; + private static final Instant APPLICATION_STARTUP_TIME = Instant.now(); + @Inject - public GitBlitWebApp( - Provider publicKeyManagerProvider, - Provider ticketServiceProvider, - IRuntimeManager runtimeManager, - IPluginManager pluginManager, - INotificationManager notificationManager, - IUserManager userManager, - IAuthenticationManager authenticationManager, - IRepositoryManager repositoryManager, - IProjectManager projectManager, - IFederationManager federationManager, - IGitblit gitblit, - IServicesManager services, - IFilestoreManager filestoreManager) { + public GitBlitWebApp(Provider publicKeyManagerProvider, + Provider ticketServiceProvider, IRuntimeManager runtimeManager, + IPluginManager pluginManager, INotificationManager notificationManager, IUserManager userManager, + IAuthenticationManager authenticationManager, IRepositoryManager repositoryManager, + IProjectManager projectManager, IFederationManager federationManager, IGitblit gitblit, + IServicesManager services, IFilestoreManager filestoreManager) { super(); this.publicKeyManagerProvider = publicKeyManagerProvider; @@ -191,7 +192,7 @@ public void init() { // configure the resource cache duration to 90 days for deployment if (!isDebugMode()) { - getResourceSettings().setDefaultCacheDuration(90 * 86400); + getResourceSettings().setDefaultCacheDuration(Duration.days(90)); } // setup the standard gitweb-ish urls @@ -246,10 +247,14 @@ public void init() { mount("/user", UserPage.class, "user"); mount("/forks", ForksPage.class, "r"); mount("/fork", ForkPage.class, "r"); - + // filestore URL mount("/filestore", FilestorePage.class); - + Bootstrap.install(this); + FontAwesome.install(this); + Octicons.install(this); + StaticResources.install(this); + // allow started Wicket plugins to initialize for (PluginWrapper pluginWrapper : pluginManager.getPlugins()) { if (PluginState.STARTED != pluginWrapper.getPluginState()) { @@ -261,16 +266,19 @@ public void init() { } } - // customize the Wicket class resolver to load from plugins + // customize the Wicket class resolver to load from plugins IClassResolver coreResolver = getApplicationSettings().getClassResolver(); - PluginClassResolver classResolver = new PluginClassResolver(coreResolver, pluginManager); - getApplicationSettings().setClassResolver(classResolver); + PluginClassResolver classResolver = new PluginClassResolver(coreResolver, pluginManager); + getApplicationSettings().setClassResolver(classResolver); - getMarkupSettings().setDefaultMarkupEncoding("UTF-8"); + getMarkupSettings().setDefaultMarkupEncoding(Constants.ENCODING); } - /* (non-Javadoc) - * @see com.gitblit.wicket.Webapp#mount(java.lang.String, java.lang.Class, java.lang.String) + /* + * (non-Javadoc) + * + * @see com.gitblit.wicket.Webapp#mount(java.lang.String, java.lang.Class, + * java.lang.String) */ @Override public void mount(String location, Class clazz, String... parameters) { @@ -280,7 +288,10 @@ public void mount(String location, Class clazz, String... par if (!settings.getBoolean(Keys.web.mountParameters, true)) { parameters = new String[] {}; } - mount(new GitblitParamUrlCodingStrategy(settings, xssFilter, location, clazz, parameters)); + // TODO: check if needed with wichet-7 + // mount(new GitblitParamUrlCodingStrategy(settings, xssFilter, + // location, clazz, parameters)); + mountPage(location, clazz); // map the mount point to the cache control definition if (clazz.isAnnotationPresent(CacheControl.class)) { @@ -289,7 +300,9 @@ public void mount(String location, Class clazz, String... par } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#getHomePage() */ @Override @@ -301,7 +314,9 @@ public Class getNewRepositoryPage() { return newRepositoryPageClass; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#isCacheablePage(java.lang.String) */ @Override @@ -309,7 +324,9 @@ public boolean isCacheablePage(String mountPoint) { return cacheablePages.containsKey(mountPoint); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#getCacheControl(java.lang.String) */ @Override @@ -328,7 +345,9 @@ public final Session newSession(Request request, Response response) { return gitBlitWebSession; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#settings() */ @Override @@ -336,7 +355,9 @@ public IStoredSettings settings() { return settings; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#xssFilter() */ @Override @@ -344,7 +365,9 @@ public XssFilter xssFilter() { return xssFilter; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#isDebugMode() */ @Override @@ -353,10 +376,12 @@ public boolean isDebugMode() { } /* - * These methods look strange... and they are... but they are the first - * step towards modularization across multiple commits. + * These methods look strange... and they are... but they are the first step + * towards modularization across multiple commits. */ - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#getBootDate() */ @Override @@ -364,7 +389,9 @@ public Date getBootDate() { return runtimeManager.getBootDate(); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#getLastActivityDate() */ @Override @@ -372,7 +399,9 @@ public Date getLastActivityDate() { return repositoryManager.getLastActivityDate(); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#runtime() */ @Override @@ -380,7 +409,9 @@ public IRuntimeManager runtime() { return runtimeManager; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#plugins() */ @Override @@ -388,7 +419,9 @@ public IPluginManager plugins() { return pluginManager; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#notifier() */ @Override @@ -396,7 +429,9 @@ public INotificationManager notifier() { return notificationManager; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#users() */ @Override @@ -404,7 +439,9 @@ public IUserManager users() { return userManager; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#authentication() */ @Override @@ -412,7 +449,9 @@ public IAuthenticationManager authentication() { return authenticationManager; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#keys() */ @Override @@ -420,7 +459,9 @@ public IPublicKeyManager keys() { return publicKeyManagerProvider.get(); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#repositories() */ @Override @@ -428,7 +469,9 @@ public IRepositoryManager repositories() { return repositoryManager; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#projects() */ @Override @@ -436,7 +479,9 @@ public IProjectManager projects() { return projectManager; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#federation() */ @Override @@ -444,7 +489,9 @@ public IFederationManager federation() { return federationManager; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#gitblit() */ @Override @@ -452,7 +499,9 @@ public IGitblit gitblit() { return gitblit; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#services() */ @Override @@ -460,7 +509,9 @@ public IServicesManager services() { return services; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#tickets() */ @Override @@ -468,7 +519,9 @@ public ITicketService tickets() { return ticketServiceProvider.get(); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.gitblit.wicket.Webapp#getTimezone() */ @Override @@ -476,12 +529,16 @@ public TimeZone getTimezone() { return runtimeManager.getTimezone(); } + public Instant getApplicationStartupTime() { + return APPLICATION_STARTUP_TIME; + } + @Override - public final String getConfigurationType() { + public final RuntimeConfigurationType getConfigurationType() { if (runtimeManager.isDebugMode()) { - return Application.DEVELOPMENT; + return RuntimeConfigurationType.DEVELOPMENT; } - return Application.DEPLOYMENT; + return RuntimeConfigurationType.DEPLOYMENT; } public static GitBlitWebApp get() { diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebSession.java b/src/main/java/com/gitblit/wicket/GitBlitWebSession.java index 31ccf1f5a..0e53f3156 100644 --- a/src/main/java/com/gitblit/wicket/GitBlitWebSession.java +++ b/src/main/java/com/gitblit/wicket/GitBlitWebSession.java @@ -21,16 +21,20 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.apache.wicket.Page; -import org.apache.wicket.PageParameters; -import org.apache.wicket.RedirectToUrlException; -import org.apache.wicket.Request; +import org.apache.wicket.request.IRequestParameters; +import org.apache.wicket.request.Request; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.cycle.RequestCycle; +import org.apache.wicket.request.flow.RedirectToUrlException; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.Session; import org.apache.wicket.protocol.http.RequestUtils; -import org.apache.wicket.protocol.http.WebRequestCycle; import org.apache.wicket.protocol.http.WebSession; import org.apache.wicket.protocol.http.request.WebClientInfo; +import com.gitblit.GitBlitServer.Params; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; public final class GitBlitWebSession extends WebSession { @@ -64,11 +68,15 @@ public void invalidate() { */ public void cacheRequest(Class pageClass) { // build absolute url with correctly encoded parameters?! - Request req = WebRequestCycle.get().getRequest(); - Map params = req.getRequestParameters().getParameters(); - PageParameters pageParams = new PageParameters(params); - String relativeUrl = WebRequestCycle.get().urlFor(pageClass, pageParams).toString(); - requestUrl = RequestUtils.toAbsolutePath(relativeUrl); + Request req = RequestCycle.get().getRequest(); + IRequestParameters params = req.getRequestParameters(); + PageParameters pageParams = new PageParameters(); + params.getParameterNames().forEach(name->{ + pageParams.add(name, params.getParameterValue(name)); + }); + requestUrl = GitBlitRequestUtils.toAbsoluteUrl(pageClass, pageParams); + + if (isTemporary()) { // we must bind the temporary session into the session store diff --git a/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java b/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java index 536f88f4b..b87a2913d 100644 --- a/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java +++ b/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java @@ -1,221 +1,221 @@ -/* - * Copyright 2011 gitblit.com. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gitblit.wicket; - -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.apache.wicket.IRequestTarget; -import org.apache.wicket.Page; -import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy; -import org.apache.wicket.request.RequestParameters; -import org.apache.wicket.request.target.coding.MixedParamUrlCodingStrategy; -import org.apache.wicket.util.string.AppendingStringBuffer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.gitblit.IStoredSettings; -import com.gitblit.Keys; -import com.gitblit.utils.XssFilter; - -/** - * Simple subclass of mixed parameter url coding strategy that works around the - * encoded forward-slash issue that is present in some servlet containers. - * - * https://issues.apache.org/jira/browse/WICKET-1303 - * http://tomcat.apache.org/security-6.html - * - * @author James Moger - * - */ -public class GitblitParamUrlCodingStrategy extends MixedParamUrlCodingStrategy { - - private final String[] parameterNames; - - private Logger logger = LoggerFactory.getLogger(GitblitParamUrlCodingStrategy.class); - - private IStoredSettings settings; - - private XssFilter xssFilter; - - /** - * Construct. - * - * @param - * @param mountPath - * mount path (not empty) - * @param bookmarkablePageClass - * class of mounted page (not null) - * @param parameterNames - * the parameter names (not null) - */ - public GitblitParamUrlCodingStrategy( - IStoredSettings settings, - XssFilter xssFilter, - String mountPath, - Class bookmarkablePageClass, String[] parameterNames) { - - super(mountPath, bookmarkablePageClass, parameterNames); - this.parameterNames = parameterNames; - this.settings = settings; - this.xssFilter = xssFilter; - } - - /** - * Url encodes a string that is mean for a URL path (e.g., between slashes) - * - * @param string - * string to be encoded - * @return encoded string - */ - @Override - protected String urlEncodePathComponent(String string) { - char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/'); - if (altChar != '/') { - string = string.replace('/', altChar); - } - return super.urlEncodePathComponent(string); - } - - /** - * Returns a decoded value of the given value (taken from a URL path - * section) - * - * @param value - * @return Decodes the value - */ - @Override - protected String urlDecodePathComponent(String value) { - char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/'); - if (altChar != '/') { - value = value.replace(altChar, '/'); - } - return super.urlDecodePathComponent(value); - } - - /** - * Gets the decoded request target. - * - * @param requestParameters - * the request parameters - * @return the decoded request target - */ - @Override - public IRequestTarget decode(RequestParameters requestParameters) { - Map parameterMap = (Map) requestParameters.getParameters(); - for (Map.Entry entry : parameterMap.entrySet()) { - String parameter = entry.getKey(); - if (parameter.startsWith(WebRequestCodingStrategy.NAME_SPACE)) { - // ignore Wicket parameters - continue; - } - - // sanitize Gitblit request parameters - Object o = entry.getValue(); - if (o instanceof String) { - String value = o.toString(); - String safeValue = xssFilter.none(value); - if (!value.equals(safeValue)) { - logger.warn("XSS filter triggered on {} URL parameter: {}={}", - getMountPath(), parameter, value); - parameterMap.put(parameter, safeValue); - } - } else if (o instanceof String[]) { - String[] values = (String[]) o; - for (int i = 0; i < values.length; i++) { - String value = values[i].toString(); - String safeValue = xssFilter.none(value); - if (!value.equals(safeValue)) { - logger.warn("XSS filter triggered on {} URL parameter: {}={}", - getMountPath(), parameter, value); - values[i] = safeValue; - } - } - } - } - - return super.decode(requestParameters); - } - - /** - * @see org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy#appendParameters(org.apache.wicket.util.string.AppendingStringBuffer, - * java.util.Map) - */ - @Override - protected void appendParameters(AppendingStringBuffer url, Map parameters) - { - if (!url.endsWith("/")) - { - url.append("/"); - } - - Set parameterNamesToAdd = new HashSet(parameters.keySet()); - - // Find index of last specified parameter - boolean foundParameter = false; - int lastSpecifiedParameter = parameterNames.length; - while (lastSpecifiedParameter != 0 && !foundParameter) - { - foundParameter = parameters.containsKey(parameterNames[--lastSpecifiedParameter]); - } - - if (foundParameter) - { - for (int i = 0; i <= lastSpecifiedParameter; i++) - { - String parameterName = parameterNames[i]; - final Object param = parameters.get(parameterName); - String value = param instanceof String[] ? ((String[])param)[0] : ((param == null) - ? null : param.toString()); - if (value == null) - { - value = ""; - } - if (!url.endsWith("/")) - { - url.append("/"); - } - url.append(urlEncodePathComponent(value)); - parameterNamesToAdd.remove(parameterName); - } - } - - if (!parameterNamesToAdd.isEmpty()) - { - boolean first = true; - for (String parameterName : parameterNamesToAdd) - { - final Object param = parameters.get(parameterName); - if (param instanceof String[]) { - String [] values = (String[]) param; - for (String value : values) { - url.append(first ? '?' : '&'); - url.append(urlEncodeQueryComponent(parameterName)).append("=").append( - urlEncodeQueryComponent(value)); - first = false; - } - } else { - url.append(first ? '?' : '&'); - String value = String.valueOf(param); - url.append(urlEncodeQueryComponent(parameterName)).append("=").append( - urlEncodeQueryComponent(value)); - } - first = false; - } - } - } -} \ No newline at end of file +///* +// * Copyright 2011 gitblit.com. +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +// */ +//package com.gitblit.wicket; +// +//import java.util.HashSet; +//import java.util.Map; +//import java.util.Set; +// +//import org.apache.wicket.IRequestTarget; +//import org.apache.wicket.Page; +//import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy; +//import org.apache.wicket.request.RequestParameters; +//import org.apache.wicket.request.target.coding.MixedParamUrlCodingStrategy; +//import org.apache.wicket.util.string.AppendingStringBuffer; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import com.gitblit.IStoredSettings; +//import com.gitblit.Keys; +//import com.gitblit.utils.XssFilter; +// +///** +// * Simple subclass of mixed parameter url coding strategy that works around the +// * encoded forward-slash issue that is present in some servlet containers. +// * +// * https://issues.apache.org/jira/browse/WICKET-1303 +// * http://tomcat.apache.org/security-6.html +// * +// * @author James Moger +// * +// */ +//public class GitblitParamUrlCodingStrategy extends MixedParamUrlCodingStrategy { +// +// private final String[] parameterNames; +// +// private Logger logger = LoggerFactory.getLogger(GitblitParamUrlCodingStrategy.class); +// +// private IStoredSettings settings; +// +// private XssFilter xssFilter; +// +// /** +// * Construct. +// * +// * @param +// * @param mountPath +// * mount path (not empty) +// * @param bookmarkablePageClass +// * class of mounted page (not null) +// * @param parameterNames +// * the parameter names (not null) +// */ +// public GitblitParamUrlCodingStrategy( +// IStoredSettings settings, +// XssFilter xssFilter, +// String mountPath, +// Class bookmarkablePageClass, String[] parameterNames) { +// +// super(mountPath, bookmarkablePageClass, parameterNames); +// this.parameterNames = parameterNames; +// this.settings = settings; +// this.xssFilter = xssFilter; +// } +// +// /** +// * Url encodes a string that is mean for a URL path (e.g., between slashes) +// * +// * @param string +// * string to be encoded +// * @return encoded string +// */ +// @Override +// protected String urlEncodePathComponent(String string) { +// char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/'); +// if (altChar != '/') { +// string = string.replace('/', altChar); +// } +// return super.urlEncodePathComponent(string); +// } +// +// /** +// * Returns a decoded value of the given value (taken from a URL path +// * section) +// * +// * @param value +// * @return Decodes the value +// */ +// @Override +// protected String urlDecodePathComponent(String value) { +// char altChar = settings.getChar(Keys.web.forwardSlashCharacter, '/'); +// if (altChar != '/') { +// value = value.replace(altChar, '/'); +// } +// return super.urlDecodePathComponent(value); +// } +// +// /** +// * Gets the decoded request target. +// * +// * @param requestParameters +// * the request parameters +// * @return the decoded request target +// */ +// @Override +// public IRequestTarget decode(RequestParameters requestParameters) { +// Map parameterMap = (Map) requestParameters.getParameters(); +// for (Map.Entry entry : parameterMap.entrySet()) { +// String parameter = entry.getKey(); +// if (parameter.startsWith(WebRequestCodingStrategy.NAME_SPACE)) { +// // ignore Wicket parameters +// continue; +// } +// +// // sanitize Gitblit request parameters +// Object o = entry.getValue(); +// if (o instanceof String) { +// String value = o.toString(); +// String safeValue = xssFilter.none(value); +// if (!value.equals(safeValue)) { +// logger.warn("XSS filter triggered on {} URL parameter: {}={}", +// getMountPath(), parameter, value); +// parameterMap.put(parameter, safeValue); +// } +// } else if (o instanceof String[]) { +// String[] values = (String[]) o; +// for (int i = 0; i < values.length; i++) { +// String value = values[i].toString(); +// String safeValue = xssFilter.none(value); +// if (!value.equals(safeValue)) { +// logger.warn("XSS filter triggered on {} URL parameter: {}={}", +// getMountPath(), parameter, value); +// values[i] = safeValue; +// } +// } +// } +// } +// +// return super.decode(requestParameters); +// } +// +// /** +// * @see org.apache.wicket.request.target.coding.AbstractRequestTargetUrlCodingStrategy#appendParameters(org.apache.wicket.util.string.AppendingStringBuffer, +// * java.util.Map) +// */ +// @Override +// protected void appendParameters(AppendingStringBuffer url, Map parameters) +// { +// if (!url.endsWith("/")) +// { +// url.append("/"); +// } +// +// Set parameterNamesToAdd = new HashSet(parameters.keySet()); +// +// // Find index of last specified parameter +// boolean foundParameter = false; +// int lastSpecifiedParameter = parameterNames.length; +// while (lastSpecifiedParameter != 0 && !foundParameter) +// { +// foundParameter = parameters.containsKey(parameterNames[--lastSpecifiedParameter]); +// } +// +// if (foundParameter) +// { +// for (int i = 0; i <= lastSpecifiedParameter; i++) +// { +// String parameterName = parameterNames[i]; +// final Object param = parameters.get(parameterName); +// String value = param instanceof String[] ? ((String[])param)[0] : ((param == null) +// ? null : param.toString()); +// if (value == null) +// { +// value = ""; +// } +// if (!url.endsWith("/")) +// { +// url.append("/"); +// } +// url.append(urlEncodePathComponent(value)); +// parameterNamesToAdd.remove(parameterName); +// } +// } +// +// if (!parameterNamesToAdd.isEmpty()) +// { +// boolean first = true; +// for (String parameterName : parameterNamesToAdd) +// { +// final Object param = parameters.get(parameterName); +// if (param instanceof String[]) { +// String [] values = (String[]) param; +// for (String value : values) { +// url.append(first ? '?' : '&'); +// url.append(urlEncodeQueryComponent(parameterName)).append("=").append( +// urlEncodeQueryComponent(value)); +// first = false; +// } +// } else { +// url.append(first ? '?' : '&'); +// String value = String.valueOf(param); +// url.append(urlEncodeQueryComponent(parameterName)).append("=").append( +// urlEncodeQueryComponent(value)); +// } +// first = false; +// } +// } +// } +//} \ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/GitblitRedirectException.java b/src/main/java/com/gitblit/wicket/GitblitRedirectException.java index 4721f0ad7..13e246a34 100644 --- a/src/main/java/com/gitblit/wicket/GitblitRedirectException.java +++ b/src/main/java/com/gitblit/wicket/GitblitRedirectException.java @@ -15,12 +15,13 @@ */ package com.gitblit.wicket; -import org.apache.wicket.AbstractRestartResponseException; import org.apache.wicket.Page; -import org.apache.wicket.PageParameters; -import org.apache.wicket.RequestCycle; -import org.apache.wicket.protocol.http.RequestUtils; -import org.apache.wicket.request.target.basic.RedirectRequestTarget; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.request.cycle.RequestCycle; +import org.apache.wicket.request.http.handler.RedirectRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import com.gitblit.utils.GitBlitRequestUtils; /** * This exception bypasses the servlet container rewriting relative redirect @@ -31,7 +32,7 @@ * * @author James Moger */ -public class GitblitRedirectException extends AbstractRestartResponseException { +public class GitblitRedirectException extends RestartResponseException { private static final long serialVersionUID = 1L; @@ -40,10 +41,9 @@ public GitblitRedirectException(Class pageClass) { } public GitblitRedirectException(Class pageClass, PageParameters params) { + super(pageClass, params); RequestCycle cycle = RequestCycle.get(); - String relativeUrl = cycle.urlFor(pageClass, params).toString(); - String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl); - cycle.setRequestTarget(new RedirectRequestTarget(absoluteUrl)); - cycle.setRedirect(true); + String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(pageClass,params); + cycle.scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); } } diff --git a/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java b/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java index 68ad84a51..2214cbc37 100644 --- a/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java +++ b/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java @@ -81,110 +81,118 @@ protected IWebApplicationFactory getApplicationFactory() { public WebApplication createApplication(WicketFilter filter) { return webapp; } + + @Override + public void destroy(WicketFilter filter) { + // TODO Auto-generated method stub + + } }; } - + /** * Determines the last-modified date of the requested resource. + * + * TODO: check where to reimplement * * @param servletRequest * @return The last modified time stamp */ - @Override - protected long getLastModified(final HttpServletRequest servletRequest) { - final String pathInfo = getRelativePath(servletRequest); - if (Strings.isEmpty(pathInfo)) { - return -1; - } - long lastModified = super.getLastModified(servletRequest); - if (lastModified > -1) { - return lastModified; - } - - // try to match request against registered CacheControl pages - String [] paths = pathInfo.split("/"); - - String page = paths[0]; - String repo = ""; - String commitId = ""; - if (paths.length >= 2) { - repo = paths[1]; - } - if (paths.length >= 3) { - commitId = paths[2]; - } - - if (!StringUtils.isEmpty(servletRequest.getParameter("r"))) { - repo = servletRequest.getParameter("r"); - } - if (!StringUtils.isEmpty(servletRequest.getParameter("h"))) { - commitId = servletRequest.getParameter("h"); - } - - repo = repo.replace("%2f", "/").replace("%2F", "/").replace(settings.getChar(Keys.web.forwardSlashCharacter, '/'), '/'); - - GitBlitWebApp app = (GitBlitWebApp) getWebApplication(); - int expires = settings.getInteger(Keys.web.pageCacheExpires, 0); - if (!StringUtils.isEmpty(page) && app.isCacheablePage(page) && expires > 0) { - // page can be cached by the browser - CacheControl cacheControl = app.getCacheControl(page); - Date bootDate = runtimeManager.getBootDate(); - switch (cacheControl.value()) { - case ACTIVITY: - // returns the last activity date of the server - Date activityDate = repositoryManager.getLastActivityDate(); - if (activityDate != null) { - return activityDate.after(bootDate) ? activityDate.getTime() : bootDate.getTime(); - } - return bootDate.getTime(); - case BOOT: - // return the boot date of the server - return bootDate.getTime(); - case PROJECT: - // return the latest change date for the project OR the boot date - ProjectModel project = projectManager.getProjectModel(StringUtils.getRootPath(repo)); - if (project != null) { - return project.lastChange.after(bootDate) ? project.lastChange.getTime() : bootDate.getTime(); - } - break; - case REPOSITORY: - // return the lastest change date for the repository OR the boot - // date, whichever is latest - RepositoryModel repository = repositoryManager.getRepositoryModel(repo); - if (repository != null && repository.lastChange != null) { - return repository.lastChange.after(bootDate) ? repository.lastChange.getTime() : bootDate.getTime(); - } - break; - case COMMIT: - // get the date of the specified commit - if (StringUtils.isEmpty(commitId)) { - // no commit id, use boot date - return bootDate.getTime(); - } else { - // last modified date is the commit date - Repository r = null; - try { - // return the timestamp of the associated commit - r = repositoryManager.getRepository(repo); - if (r != null) { - RevCommit commit = JGitUtils.getCommit(r, commitId); - if (commit != null) { - Date date = JGitUtils.getCommitDate(commit); - return date.after(bootDate) ? date.getTime() : bootDate.getTime(); - } - } - } finally { - if (r != null) { - r.close(); - } - } - } - break; - default: - break; - } - } - - return -1; - } +// @Override +// protected long getLastModified(final HttpServletRequest servletRequest) { +// final String pathInfo = getRelativePath(servletRequest); +// if (Strings.isEmpty(pathInfo)) { +// return -1; +// } +// long lastModified = super.getLastModified(servletRequest); +// if (lastModified > -1) { +// return lastModified; +// } +// +// // try to match request against registered CacheControl pages +// String [] paths = pathInfo.split("/"); +// +// String page = paths[0]; +// String repo = ""; +// String commitId = ""; +// if (paths.length >= 2) { +// repo = paths[1]; +// } +// if (paths.length >= 3) { +// commitId = paths[2]; +// } +// +// if (!StringUtils.isEmpty(servletRequest.getParameter("r"))) { +// repo = servletRequest.getParameter("r"); +// } +// if (!StringUtils.isEmpty(servletRequest.getParameter("h"))) { +// commitId = servletRequest.getParameter("h"); +// } +// +// repo = repo.replace("%2f", "/").replace("%2F", "/").replace(settings.getChar(Keys.web.forwardSlashCharacter, '/'), '/'); +// +// GitBlitWebApp app = (GitBlitWebApp) getApplication(); +// int expires = settings.getInteger(Keys.web.pageCacheExpires, 0); +// if (!StringUtils.isEmpty(page) && app.isCacheablePage(page) && expires > 0) { +// // page can be cached by the browser +// CacheControl cacheControl = app.getCacheControl(page); +// Date bootDate = runtimeManager.getBootDate(); +// switch (cacheControl.value()) { +// case ACTIVITY: +// // returns the last activity date of the server +// Date activityDate = repositoryManager.getLastActivityDate(); +// if (activityDate != null) { +// return activityDate.after(bootDate) ? activityDate.getTime() : bootDate.getTime(); +// } +// return bootDate.getTime(); +// case BOOT: +// // return the boot date of the server +// return bootDate.getTime(); +// case PROJECT: +// // return the latest change date for the project OR the boot date +// ProjectModel project = projectManager.getProjectModel(StringUtils.getRootPath(repo)); +// if (project != null) { +// return project.lastChange.after(bootDate) ? project.lastChange.getTime() : bootDate.getTime(); +// } +// break; +// case REPOSITORY: +// // return the lastest change date for the repository OR the boot +// // date, whichever is latest +// RepositoryModel repository = repositoryManager.getRepositoryModel(repo); +// if (repository != null && repository.lastChange != null) { +// return repository.lastChange.after(bootDate) ? repository.lastChange.getTime() : bootDate.getTime(); +// } +// break; +// case COMMIT: +// // get the date of the specified commit +// if (StringUtils.isEmpty(commitId)) { +// // no commit id, use boot date +// return bootDate.getTime(); +// } else { +// // last modified date is the commit date +// Repository r = null; +// try { +// // return the timestamp of the associated commit +// r = repositoryManager.getRepository(repo); +// if (r != null) { +// RevCommit commit = JGitUtils.getCommit(r, commitId); +// if (commit != null) { +// Date date = JGitUtils.getCommitDate(commit); +// return date.after(bootDate) ? date.getTime() : bootDate.getTime(); +// } +// } +// } finally { +// if (r != null) { +// r.close(); +// } +// } +// } +// break; +// default: +// break; +// } +// } +// +// return -1; +// } } diff --git a/src/main/java/com/gitblit/wicket/Html5DateField.java b/src/main/java/com/gitblit/wicket/Html5DateField.java index 927ee46ee..e606272ad 100644 --- a/src/main/java/com/gitblit/wicket/Html5DateField.java +++ b/src/main/java/com/gitblit/wicket/Html5DateField.java @@ -10,7 +10,7 @@ import org.apache.wicket.markup.html.form.AbstractTextComponent.ITextFormatProvider; import org.apache.wicket.model.IModel; import org.apache.wicket.util.convert.IConverter; -import org.apache.wicket.util.convert.converters.DateConverter; +import org.apache.wicket.util.convert.converter.DateConverter; public class Html5DateField extends TextField implements ITextFormatProvider { @@ -105,8 +105,8 @@ public DateFormat getDateFormat(Locale locale) * @return A pattern-specific converter */ @Override - public IConverter getConverter(Class type) - { + public IConverter getConverter(Class type) { + if (converter == null) { return super.getConverter(type); @@ -148,9 +148,8 @@ private static String defaultDatePattern() } @Override - protected String getInputType() - { - return "date"; + protected String[] getInputTypes() { + return new String[]{"date"}; } } \ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/MarkupProcessor.java b/src/main/java/com/gitblit/wicket/MarkupProcessor.java index b20320499..40cf95604 100644 --- a/src/main/java/com/gitblit/wicket/MarkupProcessor.java +++ b/src/main/java/com/gitblit/wicket/MarkupProcessor.java @@ -30,7 +30,7 @@ import java.util.Map; import org.apache.wicket.Page; -import org.apache.wicket.RequestCycle; +import org.apache.wicket.request.cycle.RequestCycle; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.mylyn.wikitext.confluence.core.ConfluenceLanguage; @@ -53,10 +53,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.gitblit.Constants; import com.gitblit.IStoredSettings; import com.gitblit.Keys; import com.gitblit.models.PathModel; import com.gitblit.servlet.RawServlet; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.MarkdownUtils; import com.gitblit.utils.StringUtils; @@ -268,7 +270,7 @@ public void image(Attributes attributes, String imagePath) { if (imagePath.indexOf("://") == -1) { // relative image String path = doc.getRelativePath(imagePath); - String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot(); + String contextUrl = GitBlitRequestUtils.getRelativePathPrefixToContextRoot(); url = RawServlet.asLink(contextUrl, repositoryName, commitId, path); } else { // absolute image @@ -325,7 +327,7 @@ public Rendering render(ExpImageNode node, String text) { if (node.url.indexOf("://") == -1) { // repository-relative image link String path = doc.getRelativePath(node.url); - String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot(); + String contextUrl = GitBlitRequestUtils.getRelativePathPrefixToContextRoot(); String url = RawServlet.asLink(contextUrl, repositoryName, commitId, path); return new Rendering(url, text); } @@ -339,7 +341,7 @@ public Rendering render(RefImageNode node, String url, String title, String alt) if (url.indexOf("://") == -1) { // repository-relative image link String path = doc.getRelativePath(url); - String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot(); + String contextUrl = GitBlitRequestUtils.getRelativePathPrefixToContextRoot(); String wurl = RawServlet.asLink(contextUrl, repositoryName, commitId, path); rendering = new Rendering(wurl, alt); } else { @@ -368,7 +370,7 @@ private String getWicketUrl(Class pageClass, final String reposi String fsc = settings.getString(Keys.web.forwardSlashCharacter, "/"); String encodedPath = document.replace(' ', '-'); try { - encodedPath = URLEncoder.encode(encodedPath, "UTF-8"); + encodedPath = URLEncoder.encode(encodedPath, Constants.ENCODING); } catch (UnsupportedEncodingException e) { logger.error(null, e); } diff --git a/src/main/java/com/gitblit/wicket/PluginClassResolver.java b/src/main/java/com/gitblit/wicket/PluginClassResolver.java index 476f96118..0693891c6 100644 --- a/src/main/java/com/gitblit/wicket/PluginClassResolver.java +++ b/src/main/java/com/gitblit/wicket/PluginClassResolver.java @@ -117,4 +117,8 @@ private void loadResources(Enumeration resources, Set loadedFiles) { } } } + + @Override + public ClassLoader getClassLoader() { + return getClass().getClassLoader(); } } \ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/SessionlessForm.java b/src/main/java/com/gitblit/wicket/SessionlessForm.java index 6f7907174..d3a9c9c3a 100644 --- a/src/main/java/com/gitblit/wicket/SessionlessForm.java +++ b/src/main/java/com/gitblit/wicket/SessionlessForm.java @@ -15,21 +15,22 @@ */ package com.gitblit.wicket; +import java.nio.charset.StandardCharsets; import java.text.MessageFormat; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.markup.html.form.StatelessForm; -import org.apache.wicket.protocol.http.RequestUtils; -import org.apache.wicket.protocol.http.WicketURLDecoder; -import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy; +import org.apache.wicket.util.encoding.UrlDecoder; import org.apache.wicket.util.string.AppendingStringBuffer; import org.apache.wicket.util.string.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.gitblit.Constants; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.wicket.pages.BasePage; /** @@ -100,12 +101,12 @@ public SessionlessForm(String id, Class bookmarkablePageClas * The open tag for the body */ @Override - protected void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) + public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) { // render the hidden bookmarkable page field AppendingStringBuffer buffer = new AppendingStringBuffer(HIDDEN_DIV_START); buffer.append(""); @@ -113,7 +114,7 @@ protected void onComponentTagBody(final MarkupStream markupStream, final Compone // insert the page parameters, if any, as hidden fields as long as they // do not collide with any child wicket:id of the form. if (pageParameters != null) { - for (String key : pageParameters.keySet()) { + for (String key : pageParameters.getNamedKeys()) { Component c = get(key); if (c != null) { // this form has a field id which matches the @@ -121,7 +122,7 @@ protected void onComponentTagBody(final MarkupStream markupStream, final Compone log.warn(MessageFormat.format("Skipping page parameter \"{0}\" from sessionless form hidden fields because it collides with a form child wicket:id", key)); continue; } - String value = pageParameters.getString(key); + String value = pageParameters.get(key).toString(); buffer.append(" pageClass, PageParameters pageParameters) { - String relativeUrl = urlFor(pageClass, pageParameters).toString(); - String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl); - return absoluteUrl; + return GitBlitRequestUtils.toAbsoluteUrl(pageClass, pageParameters); } } diff --git a/src/main/java/com/gitblit/wicket/WicketUtils.java b/src/main/java/com/gitblit/wicket/WicketUtils.java index 99c1e08f0..356b35b69 100644 --- a/src/main/java/com/gitblit/wicket/WicketUtils.java +++ b/src/main/java/com/gitblit/wicket/WicketUtils.java @@ -26,19 +26,19 @@ import javax.servlet.http.HttpServletRequest; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; -import org.apache.wicket.Request; +import org.apache.wicket.request.Request; +import org.apache.wicket.request.http.WebRequest; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.request.resource.ContextRelativeResource; import org.apache.wicket.behavior.AttributeAppender; -import org.apache.wicket.behavior.HeaderContributor; -import org.apache.wicket.behavior.SimpleAttributeModifier; -import org.apache.wicket.markup.html.IHeaderContributor; -import org.apache.wicket.markup.html.IHeaderResponse; +import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.head.StringHeaderItem; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.image.ContextImage; import org.apache.wicket.model.Model; -import org.apache.wicket.protocol.http.WebRequest; -import org.apache.wicket.resource.ContextRelativeResource; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import com.gitblit.Constants; @@ -49,6 +49,7 @@ import com.gitblit.models.FederationModel; import com.gitblit.models.Metric; import com.gitblit.utils.DiffUtils.DiffComparator; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.HttpUtils; import com.gitblit.utils.StringUtils; import com.gitblit.utils.TimeUtils; @@ -56,7 +57,7 @@ public class WicketUtils { public static void setCssClass(Component container, String value) { - container.add(new SimpleAttributeModifier("class", value)); + container.add(new AttributeModifier("class", value)); } public static void addCssClass(Component container, String value) { @@ -64,21 +65,20 @@ public static void addCssClass(Component container, String value) { } public static void setCssStyle(Component container, String value) { - container.add(new SimpleAttributeModifier("style", value)); + container.add(new AttributeModifier("style", value)); } public static void setCssBackground(Component container, String value) { - String background = MessageFormat.format("background-color:{0};", - StringUtils.getColor(value)); - container.add(new SimpleAttributeModifier("style", background)); + String background = MessageFormat.format("background-color:{0};", StringUtils.getColor(value)); + container.add(new AttributeModifier("style", background)); } public static Component setHtmlTooltip(Component container, String value) { - return container.add(new SimpleAttributeModifier("title", value)); + return container.add(new AttributeModifier("title", value)); } public static void setInputPlaceholder(Component container, String value) { - container.add(new SimpleAttributeModifier("placeholder", value)); + container.add(new AttributeModifier("placeholder", value)); } public static void setChangeTypeCssClass(Component container, ChangeType type) { @@ -175,8 +175,7 @@ public static ContextImage getFileImage(String wicketId, String filename) { return newImage(wicketId, "file_h_16x16.png"); } else if (filename.endsWith(".sln")) { return newImage(wicketId, "file_vs_16x16.png"); - } else if (filename.endsWith(".csv") || filename.endsWith(".xls") - || filename.endsWith(".xlsx")) { + } else if (filename.endsWith(".csv") || filename.endsWith(".xls") || filename.endsWith(".xlsx")) { return newImage(wicketId, "file_excel_16x16.png"); } else if (filename.endsWith(".doc") || filename.endsWith(".docx")) { return newImage(wicketId, "file_doc_16x16.png"); @@ -202,14 +201,11 @@ public static ContextImage getFileImage(String wicketId, String filename) { return newImage(wicketId, "file_16x16.png"); } - public static ContextImage getRegistrationImage(String wicketId, FederationModel registration, - Component c) { + public static ContextImage getRegistrationImage(String wicketId, FederationModel registration, Component c) { if (registration.isResultData()) { - return WicketUtils.newImage(wicketId, "information_16x16.png", - c.getString("gb.federationResults")); + return WicketUtils.newImage(wicketId, "information_16x16.png", c.getString("gb.federationResults")); } else { - return WicketUtils.newImage(wicketId, "arrow_left.png", - c.getString("gb.federationRegistration")); + return WicketUtils.newImage(wicketId, "arrow_left.png", c.getString("gb.federationRegistration")); } } @@ -251,17 +247,16 @@ public static ContextRelativeResource getResource(String file) { } public static String getGitblitURL(Request request) { - HttpServletRequest req = ((WebRequest) request).getHttpServletRequest(); + HttpServletRequest req = GitBlitRequestUtils.getServletRequest(); return HttpUtils.getGitblitURL(req); } - public static HeaderContributor syndicationDiscoveryLink(final String feedTitle, - final String url) { - return new HeaderContributor(new IHeaderContributor() { + public static Behavior syndicationDiscoveryLink(final String feedTitle, final String url) { + return new Behavior() { private static final long serialVersionUID = 1L; @Override - public void renderHead(IHeaderResponse response) { + public void renderHead(Component c, IHeaderResponse response) { String contentType = "application/rss+xml"; StringBuilder buffer = new StringBuilder(); @@ -269,226 +264,154 @@ public void renderHead(IHeaderResponse response) { buffer.append("type=\"").append(contentType).append("\" "); buffer.append("title=\"").append(feedTitle).append("\" "); buffer.append("href=\"").append(url).append("\" />"); - response.renderString(buffer.toString()); + response.render(StringHeaderItem.forString(buffer.toString())); } - }); + }; } public static PageParameters newTokenParameter(String token) { - Map parameterMap = new HashMap(); - parameterMap.put("t", token); - return new PageParameters(parameterMap); + return new PageParameters().add("t", token); } - public static PageParameters newRegistrationParameter(String url, - String name) { - Map parameterMap = new HashMap(); - parameterMap.put("u", url); - parameterMap.put("n", name); - return new PageParameters(parameterMap); + public static PageParameters newRegistrationParameter(String url, String name) { + return new PageParameters().add("u", url).add("n", name); } public static PageParameters newUsernameParameter(String username) { - Map parameterMap = new HashMap(); - parameterMap.put("user", username); - return new PageParameters(parameterMap); + return new PageParameters().add("user", username); } public static PageParameters newTeamnameParameter(String teamname) { - Map parameterMap = new HashMap(); - parameterMap.put("team", teamname); - return new PageParameters(parameterMap); + return new PageParameters().add("team", teamname); } public static PageParameters newProjectParameter(String projectName) { - Map parameterMap = new HashMap(); - parameterMap.put("p", projectName); - return new PageParameters(parameterMap); + return new PageParameters().add("p", projectName); } public static PageParameters newRepositoryParameter(String repositoryName) { - Map parameterMap = new HashMap(); - if (!StringUtils.isEmpty(repositoryName)) { - parameterMap.put("r", repositoryName); - } - return new PageParameters(parameterMap); + return new PageParameters().add("r", repositoryName); } public static PageParameters newObjectParameter(String objectId) { - Map parameterMap = new HashMap(); - parameterMap.put("h", objectId); - return new PageParameters(parameterMap); + return new PageParameters().add("h", objectId); } - public static PageParameters newObjectParameter(String repositoryName, - String objectId) { - Map parameterMap = new HashMap(); + public static PageParameters newObjectParameter(String repositoryName, String objectId) { if (StringUtils.isEmpty(objectId)) { return newRepositoryParameter(repositoryName); } - parameterMap.put("r", repositoryName); - parameterMap.put("h", objectId); - return new PageParameters(parameterMap); + return new PageParameters().add("r", repositoryName).add("h", objectId); } - public static PageParameters newDiffParameter(String repositoryName, - String objectId, DiffComparator diffComparator) { - Map parameterMap = new HashMap(); + public static PageParameters newDiffParameter(String repositoryName, String objectId, + DiffComparator diffComparator) { if (StringUtils.isEmpty(objectId)) { return newRepositoryParameter(repositoryName); } - parameterMap.put("r", repositoryName); - parameterMap.put("h", objectId); - parameterMap.put("w", "" + diffComparator.ordinal()); - return new PageParameters(parameterMap); + return new PageParameters().add("r", repositoryName).add("h", objectId).add("w", "" + diffComparator.ordinal()); } - public static PageParameters newDiffParameter(String repositoryName, - String objectId, DiffComparator diffComparator, String blobPath) { - Map parameterMap = new HashMap(); + public static PageParameters newDiffParameter(String repositoryName, String objectId, DiffComparator diffComparator, + String blobPath) { if (StringUtils.isEmpty(objectId)) { return newRepositoryParameter(repositoryName); } - parameterMap.put("r", repositoryName); - parameterMap.put("h", objectId); - parameterMap.put("w", "" + diffComparator.ordinal()); - parameterMap.put("f", blobPath); - return new PageParameters(parameterMap); + return newDiffParameter(repositoryName, objectId, diffComparator).add("f", blobPath); } - public static PageParameters newRangeParameter(String repositoryName, - String startRange, String endRange) { - Map parameterMap = new HashMap(); - parameterMap.put("r", repositoryName); - parameterMap.put("h", startRange + ".." + endRange); - return new PageParameters(parameterMap); + public static PageParameters newRangeParameter(String repositoryName, String startRange, String endRange) { + return new PageParameters().add("r", repositoryName).add("h", startRange + ".." + endRange); } - public static PageParameters newPathParameter(String repositoryName, - String objectId, String path) { - Map parameterMap = new HashMap(); + public static PageParameters newPathParameter(String repositoryName, String objectId, String path) { if (StringUtils.isEmpty(path)) { return newObjectParameter(repositoryName, objectId); } if (StringUtils.isEmpty(objectId)) { - parameterMap.put("r", repositoryName); - parameterMap.put("f", path); - return new PageParameters(parameterMap); + return new PageParameters().add("r", repositoryName).add("f", path); } - parameterMap.put("r", repositoryName); - parameterMap.put("h", objectId); - parameterMap.put("f", path); - return new PageParameters(parameterMap); + return new PageParameters().add("r", repositoryName).add("h", objectId).add("f", path); } - public static PageParameters newLogPageParameter(String repositoryName, - String objectId, int pageNumber) { - Map parameterMap = new HashMap(); + public static PageParameters newLogPageParameter(String repositoryName, String objectId, int pageNumber) { if (pageNumber <= 1) { return newObjectParameter(repositoryName, objectId); } if (StringUtils.isEmpty(objectId)) { - parameterMap.put("r", repositoryName); - parameterMap.put("pg", String.valueOf(pageNumber)); - return new PageParameters(parameterMap); + return new PageParameters().add("r", repositoryName).add("pg", String.valueOf(pageNumber)); } - parameterMap.put("r", repositoryName); - parameterMap.put("h", objectId); - parameterMap.put("pg", String.valueOf(pageNumber)); - return new PageParameters(parameterMap); + return new PageParameters().add("r", repositoryName).add("h", objectId).add("pg", String.valueOf(pageNumber)); } - public static PageParameters newHistoryPageParameter(String repositoryName, - String objectId, String path, int pageNumber) { - Map parameterMap = new HashMap(); + public static PageParameters newHistoryPageParameter(String repositoryName, String objectId, String path, int pageNumber) { if (pageNumber <= 1) { return newObjectParameter(repositoryName, objectId); } - if (StringUtils.isEmpty(objectId)) { - parameterMap.put("r", repositoryName); - parameterMap.put("f", path); - parameterMap.put("pg", String.valueOf(pageNumber)); - return new PageParameters(parameterMap); + + PageParameters pp = new PageParameters(); + pp.add("r", repositoryName); + pp.add("f", path); + pp.add("pg", String.valueOf(pageNumber)); + if (!StringUtils.isEmpty(objectId)) { + pp.add("h", objectId); } - parameterMap.put("r", repositoryName); - parameterMap.put("h", objectId); - parameterMap.put("f", path); - parameterMap.put("pg", String.valueOf(pageNumber)); - return new PageParameters(parameterMap); + return pp; } public static PageParameters newFilestorePageParameter(int pageNumber, String filter) { - Map parameterMap = new HashMap(); - + PageParameters pp = new PageParameters(); if (pageNumber > 1) { - parameterMap.put("pg", String.valueOf(pageNumber)); + pp.add("pg", String.valueOf(pageNumber)); } if (filter != null) { - parameterMap.put("s", String.valueOf(filter)); + pp.add("s", String.valueOf(filter)); } - - return new PageParameters(parameterMap); - } - - public static PageParameters newBlobDiffParameter(String repositoryName, - String baseCommitId, String commitId, String path) { - Map parameterMap = new HashMap(); - if (StringUtils.isEmpty(commitId)) { - parameterMap.put("r", repositoryName); - parameterMap.put("f", path); - parameterMap.put("hb", baseCommitId); - return new PageParameters(parameterMap); - } - parameterMap.put("r", repositoryName); - parameterMap.put("h", commitId); - parameterMap.put("f", path); - parameterMap.put("hb", baseCommitId); - return new PageParameters(parameterMap); - } - - public static PageParameters newSearchParameter(String repositoryName, - String commitId, String search, Constants.SearchType type) { - Map parameterMap = new HashMap(); - if (StringUtils.isEmpty(commitId)) { - parameterMap.put("r", repositoryName); - parameterMap.put("s", search); - parameterMap.put("st", type.name()); - return new PageParameters(parameterMap); - } - parameterMap.put("r", repositoryName); - parameterMap.put("h", commitId); - parameterMap.put("s", search); - parameterMap.put("st", type.name()); - return new PageParameters(parameterMap); - } - - public static PageParameters newSearchParameter(String repositoryName, - String commitId, String search, Constants.SearchType type, - int pageNumber) { - Map parameterMap = new HashMap(); - if (StringUtils.isEmpty(commitId)) { - parameterMap.put("r", repositoryName); - parameterMap.put("s", search); - parameterMap.put("st", type.name()); - parameterMap.put("pg", String.valueOf(pageNumber)); - return new PageParameters(parameterMap); - } - parameterMap.put("r", repositoryName); - parameterMap.put("h", commitId); - parameterMap.put("s", search); - parameterMap.put("st", type.name()); - parameterMap.put("pg", String.valueOf(pageNumber)); - return new PageParameters(parameterMap); - } - - public static PageParameters newBlameTypeParameter(String repositoryName, - String commitId, String path, String blameType) { - Map parameterMap = new HashMap(); - parameterMap.put("r", repositoryName); - parameterMap.put("h", commitId); - parameterMap.put("f", path); - parameterMap.put("blametype", blameType); - return new PageParameters(parameterMap); + + return pp; + } + + public static PageParameters newBlobDiffParameter(String repositoryName, String baseCommitId, String commitId, + String path) { + PageParameters pp = new PageParameters(); + pp.add("r", repositoryName); + pp.add("f", path); + pp.add("hb", baseCommitId); + if (!StringUtils.isEmpty(commitId)) { + pp.add("h", commitId); + } + return pp; + } + + public static PageParameters newSearchParameter(String repositoryName, String commitId, String search, + Constants.SearchType type) { + PageParameters pp = new PageParameters(); + pp.add("r", repositoryName); + pp.add("s", search); + pp.add("st", type.name()); + if (!StringUtils.isEmpty(commitId)) { + pp.add("h", commitId); + } + return pp; + } + + public static PageParameters newSearchParameter(String repositoryName, String commitId, String search, + Constants.SearchType type, int pageNumber) { + PageParameters pp = new PageParameters(); + pp.add("r", repositoryName); + pp.add("s", search); + pp.add("st", type.name()); + pp.add("pg", String.valueOf(pageNumber)); + if (!StringUtils.isEmpty(commitId)) { + pp.add("h", commitId); + } + return pp; + } + + public static PageParameters newBlameTypeParameter(String repositoryName, String commitId, String path, + String blameType) { + return new PageParameters().add("r", repositoryName).add("h", commitId).add("f", path).add("blametype", + blameType); } public static PageParameters newTicketsParameters(String repositoryName, String... states) { @@ -506,84 +429,85 @@ public static PageParameters newOpenTicketsParameter(String repositoryName) { } public static String getProjectName(PageParameters params) { - return params.getString("p", ""); + return params.get("p").toString(""); } public static String getRepositoryName(PageParameters params) { - return params.getString("r", ""); + return params.get("r").toString(""); } public static String getObject(PageParameters params) { - return params.getString("h", null); + return params.get("h").toString(null); } public static String getPath(PageParameters params) { - return params.getString("f", null); + return params.get("f").toString(null); } public static String getBaseObjectId(PageParameters params) { - return params.getString("hb", null); + return params.get("hb").toString(null); } public static String getSearchString(PageParameters params) { - return params.getString("s", null); + return params.get("s").toString(null); } public static String getSearchType(PageParameters params) { - return params.getString("st", null); + return params.get("st").toString(null); } public static DiffComparator getDiffComparator(PageParameters params) { - int ordinal = params.getInt("w", 0); + int ordinal = params.get("w").toInt(0); return DiffComparator.values()[ordinal]; } public static int getPage(PageParameters params) { // index from 1 - return params.getInt("pg", 1); + return params.get("pg").toInt(1); } public static String getRegEx(PageParameters params) { - return params.getString("x", ""); + return params.get("x").toString(""); } public static String getSet(PageParameters params) { - return params.getString("set", ""); + return params.get("set").toString(""); } public static String getTeam(PageParameters params) { - return params.getString("team", ""); + return params.get("team").toString(""); } public static int getDaysBack(PageParameters params) { - return params.getInt("db", 0); + return params.get("db").toInt(0); } public static String getUsername(PageParameters params) { - return params.getString("user", ""); + return params.get("user").toString(""); } public static String getTeamname(PageParameters params) { - return params.getString("team", ""); + return params.get("team").toString(""); } public static String getToken(PageParameters params) { - return params.getString("t", ""); + return params.get("t").toString(""); } public static String getUrlParameter(PageParameters params) { - return params.getString("u", ""); + return params.get("u").toString(""); } public static String getNameParameter(PageParameters params) { - return params.getString("n", ""); + return params.get("n").toString(""); } public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) { return createDateLabel(wicketId, date, timeZone, timeUtils, true); } - public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils, boolean setCss) { + public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils, + boolean setCss) { String format = GitBlitWebApp.get().settings().getString(Keys.web.datestampShortFormat, "MM/dd/yy"); DateFormat df = new SimpleDateFormat(format); if (timeZone == null) { diff --git a/src/main/java/com/gitblit/wicket/charting/Charts.java b/src/main/java/com/gitblit/wicket/charting/Charts.java index 54a7689ba..fa765bbd1 100644 --- a/src/main/java/com/gitblit/wicket/charting/Charts.java +++ b/src/main/java/com/gitblit/wicket/charting/Charts.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; +import org.apache.wicket.behavior.Behavior; import org.apache.wicket.markup.html.IHeaderContributor; /** @@ -26,7 +27,7 @@ * @author Tim Ryan * */ -public abstract class Charts implements IHeaderContributor { +public abstract class Charts extends Behavior { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/gitblit/wicket/charting/Flotr2Charts.java b/src/main/java/com/gitblit/wicket/charting/Flotr2Charts.java index 7a8adcf21..ba31831cd 100644 --- a/src/main/java/com/gitblit/wicket/charting/Flotr2Charts.java +++ b/src/main/java/com/gitblit/wicket/charting/Flotr2Charts.java @@ -17,8 +17,12 @@ import javax.servlet.ServletContext; -import org.apache.wicket.markup.html.IHeaderResponse; -import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.Component; +import org.apache.wicket.markup.head.CssHeaderItem; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.head.JavaScriptHeaderItem; +import org.apache.wicket.markup.head.OnDomReadyHeaderItem; +import org.apache.wicket.request.resource.PackageResourceReference; /** * Concrete class for Flotr2 charts @@ -31,20 +35,15 @@ public class Flotr2Charts extends Charts { private static final long serialVersionUID = 1L; @Override - public void renderHead(IHeaderResponse response) { + public void renderHead(Component component, IHeaderResponse response) { // add Google Chart JS API reference - ServletContext servletContext = WebApplication.get().getServletContext(); - String contextPath = servletContext.getContextPath(); - - response.renderJavascriptReference(contextPath + "/bootstrap/js/jquery.js"); - response.renderJavascriptReference(contextPath + "/flotr2/flotr2.min.js"); - response.renderCSSReference(contextPath + "/flotr2/flotr2.custom.css"); + response.render(JavaScriptHeaderItem.forReference(new PackageResourceReference(Flotr2Charts.class, "flotr2.min.js"))); + response.render(CssHeaderItem.forReference(new PackageResourceReference(Flotr2Charts.class, "flotr2.custom.css"))); // prepare draw chart function StringBuilder sb = new StringBuilder(); - line(sb, "$( document ).ready(function() {"); line(sb, "try {"); // add charts to header for (Chart chart : charts) { @@ -57,8 +56,7 @@ public void renderHead(IHeaderResponse response) { line(sb, " }"); line(sb, "}"); // end draw chart function - line(sb, "});"); - response.renderJavascript(sb.toString(), null); + response.render(OnDomReadyHeaderItem.forScript(sb.toString())); } @Override diff --git a/src/main/resources/flotr2/flotr2.custom.css b/src/main/java/com/gitblit/wicket/charting/flotr2.custom.css similarity index 100% rename from src/main/resources/flotr2/flotr2.custom.css rename to src/main/java/com/gitblit/wicket/charting/flotr2.custom.css diff --git a/src/main/resources/flotr2/flotr2.min.js b/src/main/java/com/gitblit/wicket/charting/flotr2.min.js similarity index 100% rename from src/main/resources/flotr2/flotr2.min.js rename to src/main/java/com/gitblit/wicket/charting/flotr2.min.js diff --git a/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java b/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java index aaf1a1351..f5d1726d7 100644 --- a/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java +++ b/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java @@ -120,7 +120,7 @@ private Template getTemplate() * MarkupStream, org.apache.wicket.markup.ComponentTag) */ @Override - protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) + public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { if (!Strings.isEmpty(stackTraceAsString)) { diff --git a/src/main/java/com/gitblit/wicket/ng/NgController.java b/src/main/java/com/gitblit/wicket/ng/NgController.java index 19e419a02..65ba78cd3 100644 --- a/src/main/java/com/gitblit/wicket/ng/NgController.java +++ b/src/main/java/com/gitblit/wicket/ng/NgController.java @@ -17,11 +17,16 @@ import java.text.MessageFormat; import java.util.HashMap; +import java.util.List; import java.util.Map; -import org.apache.wicket.ResourceReference; -import org.apache.wicket.markup.html.IHeaderContributor; -import org.apache.wicket.markup.html.IHeaderResponse; +import org.apache.wicket.Component; +import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.markup.head.HeaderItem; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.head.JavaScriptHeaderItem; +import org.apache.wicket.request.resource.PackageResourceReference; +import org.apache.wicket.resource.JQueryResourceReference; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -34,7 +39,7 @@ * @author James Moger * */ -public class NgController implements IHeaderContributor { +public class NgController extends Behavior { private static final long serialVersionUID = 1L; @@ -52,9 +57,18 @@ public void addVariable(String name, Object o) { } @Override - public void renderHead(IHeaderResponse response) { + public void renderHead(Component component, IHeaderResponse response) { // add Google AngularJS reference - response.renderJavascriptReference(new ResourceReference(NgController.class, "angular.js")); + response.render(JavaScriptHeaderItem.forReference(new PackageResourceReference(NgController.class, "angular.js"){ + private static final long serialVersionUID = 1L; + + @Override + public List getDependencies() { + List deps = super.getDependencies(); + deps.add(JavaScriptHeaderItem.forReference(JQueryResourceReference.get())); + return deps; + } + })); Gson gson = new GsonBuilder().create(); @@ -69,7 +83,7 @@ public void renderHead(IHeaderResponse response) { } line(sb, "}"); - response.renderJavascript(sb.toString(), null); + response.render(JavaScriptHeaderItem.forScript(sb.toString(), "angularController-"+name)); } private void line(StringBuilder sb, String line) { diff --git a/src/main/java/com/gitblit/wicket/pages/ActivityPage.java b/src/main/java/com/gitblit/wicket/pages/ActivityPage.java index c505a6664..82e64c150 100644 --- a/src/main/java/com/gitblit/wicket/pages/ActivityPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ActivityPage.java @@ -24,8 +24,7 @@ import java.util.Map; import java.util.Set; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.HeaderContributor; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Fragment; @@ -118,8 +117,8 @@ public ActivityPage(PageParameters params) { // create the activity charts if (app().settings().getBoolean(Keys.web.generateActivityGraph, true)) { Charts charts = createCharts(recentActivity); - add(new HeaderContributor(charts)); - add(new Fragment("chartsPanel", "chartsFragment", this)); + add(charts); + add(new Fragment("chartsPanel", "chartsFragment", ActivityPage.this)); } else { add(new Label("chartsPanel").setVisible(false)); } @@ -141,8 +140,8 @@ protected void addDropDownMenus(List navLinks) { PageParameters currentParameters = getPageParameters(); int daysBack = app().settings().getInteger(Keys.web.activityDuration, 7); - if (currentParameters != null && !currentParameters.containsKey("db")) { - currentParameters.put("db", daysBack); + if (currentParameters != null && currentParameters.get("db").isEmpty()) { + currentParameters.add("db", daysBack); } // preserve time filter options on repository choices diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.html b/src/main/java/com/gitblit/wicket/pages/BasePage.html index 4dbc2e574..0335bfe76 100644 --- a/src/main/java/com/gitblit/wicket/pages/BasePage.html +++ b/src/main/java/com/gitblit/wicket/pages/BasePage.html @@ -7,11 +7,11 @@ - + [page title] + - @@ -50,7 +50,6 @@ - diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.java b/src/main/java/com/gitblit/wicket/pages/BasePage.java index 0d99f5e52..51e671c8e 100644 --- a/src/main/java/com/gitblit/wicket/pages/BasePage.java +++ b/src/main/java/com/gitblit/wicket/pages/BasePage.java @@ -31,23 +31,23 @@ import java.util.TimeZone; import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; - import org.apache.commons.io.IOUtils; import org.apache.wicket.Application; import org.apache.wicket.Page; -import org.apache.wicket.PageParameters; -import org.apache.wicket.RedirectToUrlException; -import org.apache.wicket.markup.html.CSSPackageResource; +import org.apache.wicket.request.flow.RedirectToUrlException; +import org.apache.wicket.request.http.WebResponse; +import org.apache.wicket.request.http.handler.RedirectRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.request.resource.ContextRelativeResourceReference; +import org.apache.wicket.request.resource.JavaScriptResourceReference; +import org.apache.wicket.resource.JQueryResourceReference; +import org.apache.wicket.markup.head.CssHeaderItem; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.ExternalLink; import org.apache.wicket.markup.html.panel.FeedbackPanel; -import org.apache.wicket.markup.html.resources.JavascriptResourceReference; import org.apache.wicket.markup.repeater.RepeatingView; -import org.apache.wicket.protocol.http.RequestUtils; -import org.apache.wicket.protocol.http.WebResponse; -import org.apache.wicket.protocol.http.servlet.ServletWebRequest; -import org.apache.wicket.request.target.basic.RedirectRequestTarget; import org.apache.wicket.util.time.Duration; import org.apache.wicket.util.time.Time; import org.slf4j.Logger; @@ -62,27 +62,31 @@ import com.gitblit.models.ProjectModel; import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.StringUtils; import com.gitblit.utils.TimeUtils; import com.gitblit.wicket.CacheControl; import com.gitblit.wicket.GitBlitWebApp; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; +import com.gitblit.wicket.resources.bootstrap.Bootstrap; public abstract class BasePage extends SessionPage { + private static final long serialVersionUID = 1L; + private transient Logger logger; private transient TimeUtils timeUtils; public BasePage() { super(); - customizeHeader(); + // customizeHeader(); } public BasePage(PageParameters params) { super(params); - customizeHeader(); + // customizeHeader(); } protected Logger logger() { @@ -92,17 +96,21 @@ protected Logger logger() { return logger; } - private void customizeHeader() { + @Override + public void renderHead(IHeaderResponse response) { + super.renderHead(response); + response.render(JavaScriptHeaderItem.forReference(JQueryResourceReference.get())); + if (app().settings().getBoolean(Keys.web.useResponsiveLayout, true)) { - add(CSSPackageResource.getHeaderContribution("bootstrap/css/bootstrap-responsive.css")); + response.render(CssHeaderItem.forReference(Application.get().getSharedResources().get(Bootstrap.BOOTSTRAP_RESPONSIVE_CSS_RESOURCE))); } if (app().settings().getBoolean(Keys.web.hideHeader, false)) { - add(CSSPackageResource.getHeaderContribution("hideheader.css")); + response.render(CssHeaderItem.forReference(new ContextRelativeResourceReference("/hideheader.css", false))); } } protected String getContextUrl() { - return getRequest().getRelativePathPrefixToContextRoot(); + return GitBlitRequestUtils.getRelativePathPrefixToContextRoot(); } protected String getCanonicalUrl() { @@ -110,9 +118,7 @@ protected String getCanonicalUrl() { } protected String getCanonicalUrl(Class clazz, PageParameters params) { - String relativeUrl = urlFor(clazz, params).toString(); - String canonicalUrl = RequestUtils.toAbsolutePath(relativeUrl); - return canonicalUrl; + return GitBlitRequestUtils.toAbsoluteUrl(clazz, params); } protected void redirectTo(Class pageClass) { @@ -121,7 +127,7 @@ protected void redirectTo(Class pageClass) { protected void redirectTo(Class pageClass, PageParameters parameters) { String absoluteUrl = getCanonicalUrl(pageClass, parameters); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); } protected String getLanguageCode() { @@ -136,7 +142,8 @@ protected TimeUtils getTimeUtils() { if (timeUtils == null) { ResourceBundle bundle; try { - bundle = ResourceBundle.getBundle("com.gitblit.wicket.GitBlitWebApp", GitBlitWebSession.get().getLocale()); + bundle = ResourceBundle.getBundle("com.gitblit.wicket.GitBlitWebApp", + GitBlitWebSession.get().getLocale()); } catch (Throwable t) { bundle = ResourceBundle.getBundle("com.gitblit.wicket.GitBlitWebApp"); } @@ -164,7 +171,7 @@ protected void onAfterRender() { } @Override - protected void setHeaders(WebResponse response) { + protected void setHeaders(WebResponse response) { // set canonical link as http header for SEO (issue-304) // https://support.google.com/webmasters/answer/139394?hl=en response.setHeader("Link", MessageFormat.format("<{0}>; rel=\"canonical\"", getCanonicalUrl())); @@ -184,7 +191,7 @@ protected void setHeaders(WebResponse response) { } /** - * Sets the last-modified header date, if appropriate, for this page. The + * Sets the last-modified header date, if appropriate, for this page. The * date used is determined by the CacheControl annotation. * */ @@ -227,7 +234,8 @@ protected final void setLastModified(Date when) { int expires = app().settings().getInteger(Keys.web.pageCacheExpires, 0); WebResponse response = (WebResponse) getResponse(); response.setLastModifiedTime(Time.valueOf(when)); - response.setDateHeader("Expires", System.currentTimeMillis() + Duration.minutes(expires).getMilliseconds()); + response.addHeader("Expires", + String.valueOf(System.currentTimeMillis() + Duration.minutes(expires).getMilliseconds())); } protected String getPageTitle(String repositoryName) { @@ -245,7 +253,8 @@ protected String getPageTitle(String repositoryName) { protected void setupPage(String repositoryName, String pageName) { add(new Label("title", getPageTitle(repositoryName))); getBottomScriptContainer(); - String rootLinkUrl = app().settings().getString(Keys.web.rootLink, urlFor(GitBlitWebApp.get().getHomePage(), null).toString()); + String rootLinkUrl = app().settings().getString(Keys.web.rootLink, + urlFor(GitBlitWebApp.get().getHomePage(), null).toString()); ExternalLink rootLink = new ExternalLink("rootLink", rootLinkUrl); WicketUtils.setHtmlTooltip(rootLink, app().settings().getString(Keys.web.siteName, Constants.NAME)); add(rootLink); @@ -347,14 +356,12 @@ protected Map getAuthorizationControls() { } protected TimeZone getTimeZone() { - return app().settings().getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get() - .getTimezone() : app().getTimezone(); + return app().settings().getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get().getTimezone() + : app().getTimezone(); } protected String getServerName() { - ServletWebRequest servletWebRequest = (ServletWebRequest) getRequest(); - HttpServletRequest req = servletWebRequest.getHttpServletRequest(); - return req.getServerName(); + return GitBlitRequestUtils.getServletRequest().getServerName(); } protected List getProjectModels() { @@ -371,7 +378,7 @@ protected List getProjects(PageParameters params) { boolean hasParameter = false; String regex = WicketUtils.getRegEx(params); String team = WicketUtils.getTeam(params); - int daysBack = params.getInt("db", 0); + int daysBack = params.get("db").toInt(0); int maxDaysBack = app().settings().getInteger(Keys.web.activityDurationMaximum, 30); List availableModels = getProjectModels(); @@ -462,14 +469,13 @@ public void error(String message, Throwable t, Class toPage) { public void error(String message, Throwable t, Class toPage, PageParameters params) { if (t == null) { - logger().error(message + " for " + GitBlitWebSession.get().getUsername()); + logger().error(message + " for " + GitBlitWebSession.get().getUsername()); } else { - logger().error(message + " for " + GitBlitWebSession.get().getUsername(), t); + logger().error(message + " for " + GitBlitWebSession.get().getUsername(), t); } if (toPage != null) { GitBlitWebSession.get().cacheErrorMessage(message); - String relativeUrl = urlFor(toPage, params).toString(); - String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl); + String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(toPage, params); throw new RedirectToUrlException(absoluteUrl); } else { super.error(message); @@ -477,7 +483,7 @@ public void error(String message, Throwable t, Class toPage, Pag } public void authenticationError(String message) { - logger().error(getRequest().getURL() + " for " + GitBlitWebSession.get().getUsername()); + logger().error(getRequest().getUrl() + " for " + GitBlitWebSession.get().getUsername()); if (!GitBlitWebSession.get().isLoggedIn()) { // cache the request if we have not authenticated. // the request will continue after authentication. @@ -519,15 +525,17 @@ private RepeatingView getBottomScriptContainer() { } /** - * Adds a HTML script element loading the javascript designated by the given path. + * Adds a HTML script element loading the javascript designated by the given + * path. * * @param scriptPath - * page-relative path to the Javascript resource; normally starts with "scripts/" + * page-relative path to the Javascript resource; normally starts + * with "scripts/" */ protected void addBottomScript(String scriptPath) { RepeatingView bottomScripts = getBottomScriptContainer(); Label script = new Label(bottomScripts.newChildId(), "\n"); + + urlFor(new JavaScriptResourceReference(this.getClass(), scriptPath), null) + "'>\n"); bottomScripts.add(script.setEscapeModelStrings(false).setRenderBodyOnly(true)); } diff --git a/src/main/java/com/gitblit/wicket/pages/BlamePage.java b/src/main/java/com/gitblit/wicket/pages/BlamePage.java index 2fcca0ae1..e9c2aca1c 100644 --- a/src/main/java/com/gitblit/wicket/pages/BlamePage.java +++ b/src/main/java/com/gitblit/wicket/pages/BlamePage.java @@ -27,9 +27,9 @@ import java.util.Set; import java.util.TreeSet; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.SimpleAttributeModifier; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; @@ -90,7 +90,7 @@ public BlamePage(PageParameters params) { final String blobPath = WicketUtils.getPath(params); - final String blameTypeParam = params.getString("blametype", BlameType.COMMIT.toString()); + final String blameTypeParam = params.get("blametype").toString(BlameType.COMMIT.toString()); final BlameType activeBlameType = BlameType.get(blameTypeParam); RevCommit commit = getCommit(); @@ -145,7 +145,7 @@ public BlamePage(PageParameters params) { new BookmarkablePageLink(blameByLinkText, BlamePage.class, blameTypePageParam); if (activeBlameType == type) { - blameByPageLink.add(new SimpleAttributeModifier("style", "font-weight:bold;")); + blameByPageLink.add(new AttributeModifier("style", "font-weight:bold;")); } add(blameByPageLink); @@ -226,7 +226,7 @@ public void populateItem(final Item item) { break; } Component data = new Label("data", StringUtils.escapeForHtml(entry.data, true, tabLength)).setEscapeModelStrings(false); - data.add(new SimpleAttributeModifier("style", "background-color: " + color + ";")); + data.add(new AttributeModifier("style", "background-color: " + color + ";")); item.add(data); } }; diff --git a/src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java b/src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java index adf815e6d..cf0413e3a 100644 --- a/src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java +++ b/src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java @@ -17,7 +17,7 @@ import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.eclipse.jgit.lib.Repository; diff --git a/src/main/java/com/gitblit/wicket/pages/BlobPage.java b/src/main/java/com/gitblit/wicket/pages/BlobPage.java index 1ef8f227b..0c9bc626d 100644 --- a/src/main/java/com/gitblit/wicket/pages/BlobPage.java +++ b/src/main/java/com/gitblit/wicket/pages/BlobPage.java @@ -20,8 +20,8 @@ import java.util.Map; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; -import org.apache.wicket.RedirectException; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -54,7 +54,7 @@ public BlobPage(PageParameters params) { String [] encodings = getEncodings(); if (StringUtils.isEmpty(objectId) && StringUtils.isEmpty(blobPath)) { - throw new RedirectException(TreePage.class, WicketUtils.newRepositoryParameter(repositoryName)); + throw new RestartResponseException(TreePage.class, WicketUtils.newRepositoryParameter(repositoryName)); } if (StringUtils.isEmpty(blobPath)) { @@ -127,7 +127,7 @@ public BlobPage(PageParameters params) { case 3: // binary blobs add(new Label("blobText", "Binary File")); - add(new Image("blobImage").setVisible(false)); + add(new Image("blobImage", "blobImage").setVisible(false)); break; default: // plain text @@ -140,7 +140,7 @@ public BlobPage(PageParameters params) { addBottomScriptInline("jQuery(prettyPrint);"); } add(new Label("blobText", table).setEscapeModelStrings(false)); - add(new Image("blobImage").setVisible(false)); + add(new Image("blobImage", "blobImage").setVisible(false)); fileExtension = extension; } } else { @@ -154,7 +154,7 @@ public BlobPage(PageParameters params) { addBottomScriptInline("jQuery(prettyPrint);"); } add(new Label("blobText", table).setEscapeModelStrings(false)); - add(new Image("blobImage").setVisible(false)); + add(new Image("blobImage", "blobImage").setVisible(false)); } } } diff --git a/src/main/java/com/gitblit/wicket/pages/BranchesPage.java b/src/main/java/com/gitblit/wicket/pages/BranchesPage.java index fe7483e4f..d30a68c7b 100644 --- a/src/main/java/com/gitblit/wicket/pages/BranchesPage.java +++ b/src/main/java/com/gitblit/wicket/pages/BranchesPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import com.gitblit.wicket.CacheControl; import com.gitblit.wicket.CacheControl.LastModified; diff --git a/src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java b/src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java index 259a4bf4f..95850c638 100644 --- a/src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java @@ -22,18 +22,19 @@ import org.apache.wicket.markup.html.form.StatelessForm; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; -import org.apache.wicket.protocol.http.WebRequest; -import org.apache.wicket.protocol.http.WebResponse; import com.gitblit.GitBlitException; import com.gitblit.Keys; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.NonTrimmedPasswordTextField; public class ChangePasswordPage extends RootSubPage { + private static final long serialVersionUID = 1L; + IModel password = new Model(""); IModel confirmPassword = new Model(""); @@ -100,16 +101,13 @@ public void onSubmit() { try { app().gitblit().reviseUser(user.username, user); if (app().settings().getBoolean(Keys.web.allowCookieAuthentication, false)) { - WebRequest request = (WebRequest) getRequestCycle().getRequest(); - WebResponse response = (WebResponse) getRequestCycle().getResponse(); - app().authentication().setCookie(request.getHttpServletRequest(), - response.getHttpServletResponse(), user); + app().authentication().setCookie(GitBlitRequestUtils.getServletRequest(), + GitBlitRequestUtils.getServletResponse(), user); } } catch (GitBlitException e) { error(e.getMessage()); return; } - setRedirect(false); info(getString("gb.passwordChanged")); setResponsePage(RepositoriesPage.class); } @@ -128,7 +126,6 @@ public void onSubmit() { @Override public void onSubmit() { - setRedirect(false); error(getString("gb.passwordChangeAborted")); setResponsePage(RepositoriesPage.class); } diff --git a/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java b/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java index f127517d0..2092bba71 100644 --- a/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java +++ b/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java @@ -20,7 +20,8 @@ import java.util.Arrays; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; @@ -28,7 +29,6 @@ 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.request.target.resource.ResourceStreamRequestTarget; import org.apache.wicket.util.resource.AbstractResourceStreamWriter; import org.apache.wicket.util.resource.IResourceStream; import org.eclipse.jgit.diff.DiffEntry.ChangeType; @@ -61,6 +61,8 @@ @CacheControl(LastModified.BOOT) public class CommitDiffPage extends RepositoryPage { + private static final long serialVersionUID = 1L; + public CommitDiffPage(PageParameters params) { super(params); @@ -191,8 +193,9 @@ public void write(OutputStream output) { } }; - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }})); + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); }})); } else { @@ -240,8 +243,9 @@ public void write(OutputStream output) { }; - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }}); + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); }}); item.add(new Link("raw", null) { @@ -264,8 +268,9 @@ public void write(OutputStream output) { }; - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }}); + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); }}); } else { item.add(new BookmarkablePageLink("view", BlobPage.class, WicketUtils .newPathParameter(repositoryName, entry.commitId, entry.path)) diff --git a/src/main/java/com/gitblit/wicket/pages/CommitPage.java b/src/main/java/com/gitblit/wicket/pages/CommitPage.java index 3998204d1..4b01fbdee 100644 --- a/src/main/java/com/gitblit/wicket/pages/CommitPage.java +++ b/src/main/java/com/gitblit/wicket/pages/CommitPage.java @@ -20,7 +20,8 @@ import java.util.Arrays; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; @@ -29,7 +30,6 @@ import org.apache.wicket.markup.repeater.data.DataView; import org.apache.wicket.markup.repeater.data.ListDataProvider; import org.apache.wicket.model.StringResourceModel; -import org.apache.wicket.request.target.resource.ResourceStreamRequestTarget; import org.apache.wicket.util.resource.AbstractResourceStreamWriter; import org.apache.wicket.util.resource.IResourceStream; import org.eclipse.jgit.diff.DiffEntry.ChangeType; @@ -58,6 +58,8 @@ @CacheControl(LastModified.BOOT) public class CommitPage extends RepositoryPage { + private static final long serialVersionUID = 1L; + public CommitPage(PageParameters params) { super(params); @@ -76,11 +78,10 @@ public CommitPage(PageParameters params) { add(new Label("parentLink", "none")); add(new Label("commitdiffLink", getString("gb.commitdiff"))); } else { - add(new LinkPanel("parentLink", null, getShortObjectId(parents.get(0)), - CommitPage.class, newCommitParameter(parents.get(0)))); - add(new LinkPanel("commitdiffLink", null, new StringResourceModel("gb.commitdiff", - this, null), CommitDiffPage.class, WicketUtils.newObjectParameter( - repositoryName, objectId))); + add(new LinkPanel("parentLink", null, getShortObjectId(parents.get(0)), CommitPage.class, + newCommitParameter(parents.get(0)))); + add(new LinkPanel("commitdiffLink", null, new StringResourceModel("gb.commitdiff", this, null), + CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, objectId))); } add(new BookmarkablePageLink("patchLink", PatchPage.class, WicketUtils.newObjectParameter(repositoryName, objectId))); @@ -91,18 +92,17 @@ public CommitPage(PageParameters params) { // author add(createPersonPanel("commitAuthor", c.getAuthorIdent(), Constants.SearchType.AUTHOR)); - add(WicketUtils.createTimestampLabel("commitAuthorDate", c.getAuthorIdent().getWhen(), - getTimeZone(), getTimeUtils())); + add(WicketUtils.createTimestampLabel("commitAuthorDate", c.getAuthorIdent().getWhen(), getTimeZone(), + getTimeUtils())); // committer add(createPersonPanel("commitCommitter", c.getCommitterIdent(), Constants.SearchType.COMMITTER)); - add(WicketUtils.createTimestampLabel("commitCommitterDate", - c.getCommitterIdent().getWhen(), getTimeZone(), getTimeUtils())); + add(WicketUtils.createTimestampLabel("commitCommitterDate", c.getCommitterIdent().getWhen(), getTimeZone(), + getTimeUtils())); add(new Label("commitId", c.getName())); - add(new LinkPanel("commitTree", "list", c.getTree().getName(), TreePage.class, - newCommitParameter())); + add(new LinkPanel("commitTree", "list", c.getTree().getName(), TreePage.class, newCommitParameter())); add(new BookmarkablePageLink("treeLink", TreePage.class, newCommitParameter())); final String baseUrl = WicketUtils.getGitblitURL(getRequest()); @@ -116,12 +116,9 @@ public CommitPage(PageParameters params) { @Override public void populateItem(final Item item) { String entry = item.getModelObject(); - item.add(new LinkPanel("commitParent", "list", entry, CommitPage.class, - newCommitParameter(entry))); - item.add(new BookmarkablePageLink("view", CommitPage.class, - newCommitParameter(entry))); - item.add(new BookmarkablePageLink("diff", CommitDiffPage.class, - newCommitParameter(entry))); + item.add(new LinkPanel("commitParent", "list", entry, CommitPage.class, newCommitParameter(entry))); + item.add(new BookmarkablePageLink("view", CommitPage.class, newCommitParameter(entry))); + item.add(new BookmarkablePageLink("diff", CommitDiffPage.class, newCommitParameter(entry))); } }; add(parentsView); @@ -138,13 +135,13 @@ public void populateItem(final Item item) { public void populateItem(final Item item) { GitNote entry = item.getModelObject(); item.add(new RefsPanel("refName", repositoryName, Arrays.asList(entry.notesRef))); - item.add(createPersonPanel("authorName", entry.notesRef.getAuthorIdent(), - Constants.SearchType.AUTHOR)); + item.add(createPersonPanel("authorName", entry.notesRef.getAuthorIdent(), Constants.SearchType.AUTHOR)); item.add(new AvatarImage("noteAuthorAvatar", entry.notesRef.getAuthorIdent())); - item.add(WicketUtils.createTimestampLabel("authorDate", entry.notesRef - .getAuthorIdent().getWhen(), getTimeZone(), getTimeUtils())); - item.add(new Label("noteContent", bugtraqProcessor().processPlainCommitMessage(getRepository(), repositoryName, - entry.content)).setEscapeModelStrings(false)); + item.add(WicketUtils.createTimestampLabel("authorDate", entry.notesRef.getAuthorIdent().getWhen(), + getTimeZone(), getTimeUtils())); + item.add(new Label("noteContent", + bugtraqProcessor().processPlainCommitMessage(getRepository(), repositoryName, entry.content)) + .setEscapeModelStrings(false)); } }; add(notesView.setVisible(notes.size() > 0)); @@ -170,22 +167,21 @@ public void populateItem(final Item item) { @Override public void populateItem(final Item item) { final PathChangeModel entry = item.getModelObject(); - + Label changeType = new Label("changeType", ""); WicketUtils.setChangeTypeCssClass(changeType, entry.changeType); setChangeTypeTooltip(changeType, entry.changeType); item.add(changeType); item.add(new DiffStatPanel("diffStat", entry.insertions, entry.deletions, true)); item.add(WicketUtils.setHtmlTooltip(new Label("filestore", ""), getString("gb.filestore")) - .setVisible(entry.isFilestoreItem())); + .setVisible(entry.isFilestoreItem())); boolean hasSubmodule = false; String submodulePath = null; if (entry.isTree()) { // tree item.add(new LinkPanel("pathName", null, entry.path, TreePage.class, - WicketUtils - .newPathParameter(repositoryName, entry.commitId, entry.path))); + WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))); } else if (entry.isSubmodule()) { // submodule String submoduleId = entry.objectId; @@ -193,9 +189,9 @@ public void populateItem(final Item item) { submodulePath = submodule.gitblitPath; hasSubmodule = submodule.hasSubmodule; - item.add(new LinkPanel("pathName", "list", entry.path + " @ " + - getShortObjectId(submoduleId), TreePage.class, - WicketUtils.newPathParameter(submodulePath, submoduleId, "")).setEnabled(hasSubmodule)); + item.add(new LinkPanel("pathName", "list", entry.path + " @ " + getShortObjectId(submoduleId), + TreePage.class, WicketUtils.newPathParameter(submodulePath, submoduleId, "")) + .setEnabled(hasSubmodule)); } else { // blob String displayPath = entry.path; @@ -204,125 +200,132 @@ public void populateItem(final Item item) { path = JGitUtils.getStringContent(getRepository(), getCommit().getTree(), path); displayPath = entry.path + " -> " + path; } - + if (entry.isFilestoreItem()) { item.add(new LinkPanel("pathName", "list", entry.path, new Link("link", null) { - + private static final long serialVersionUID = 1L; @Override - public void onClick() { - - IResourceStream resourceStream = new AbstractResourceStreamWriter() { - + public void onClick() { + + IResourceStream resourceStream = new AbstractResourceStreamWriter() { + private static final long serialVersionUID = 1L; - @Override - public void write(OutputStream output) { - UserModel user = GitBlitWebSession.get().getUser(); - user = user == null ? UserModel.ANONYMOUS : user; - - app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); - } - }; - - - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }})); - - + @Override + public void write(OutputStream output) { + UserModel user = GitBlitWebSession.get().getUser(); + user = user == null ? UserModel.ANONYMOUS : user; + + app().filestore().downloadBlob(entry.getFilestoreOid(), user, + getRepositoryModel(), output); + } + }; + + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); + } + })); + } else { item.add(new LinkPanel("pathName", "list", displayPath, BlobPage.class, - WicketUtils.newPathParameter(repositoryName, entry.commitId, path))); + WicketUtils.newPathParameter(repositoryName, entry.commitId, path))); } } - // quick links if (entry.isSubmodule()) { item.add(new ExternalLink("raw", "").setEnabled(false)); // submodule - item.add(new BookmarkablePageLink("diff", BlobDiffPage.class, WicketUtils - .newPathParameter(repositoryName, entry.commitId, entry.path)) - .setEnabled(!entry.changeType.equals(ChangeType.ADD))); - item.add(new BookmarkablePageLink("view", CommitPage.class, WicketUtils - .newObjectParameter(submodulePath, entry.objectId)).setEnabled(hasSubmodule)); + item.add(new BookmarkablePageLink("diff", BlobDiffPage.class, + WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path)) + .setEnabled(!entry.changeType.equals(ChangeType.ADD))); + item.add(new BookmarkablePageLink("view", CommitPage.class, + WicketUtils.newObjectParameter(submodulePath, entry.objectId)).setEnabled(hasSubmodule)); item.add(new ExternalLink("blame", "").setEnabled(false)); - item.add(new BookmarkablePageLink("history", HistoryPage.class, WicketUtils - .newPathParameter(repositoryName, entry.commitId, entry.path)) - .setEnabled(!entry.changeType.equals(ChangeType.ADD))); + item.add(new BookmarkablePageLink("history", HistoryPage.class, + WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path)) + .setEnabled(!entry.changeType.equals(ChangeType.ADD))); } else { // tree or blob - item.add(new BookmarkablePageLink("diff", BlobDiffPage.class, WicketUtils - .newPathParameter(repositoryName, entry.commitId, entry.path)) - .setEnabled(!entry.changeType.equals(ChangeType.ADD) - && !entry.changeType.equals(ChangeType.DELETE))); - + item.add(new BookmarkablePageLink("diff", BlobDiffPage.class, + WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path)) + .setEnabled(!entry.changeType.equals(ChangeType.ADD) + && !entry.changeType.equals(ChangeType.DELETE))); + if (entry.isFilestoreItem()) { item.add(new Link("view", null) { - + private static final long serialVersionUID = 1L; @Override - public void onClick() { - - IResourceStream resourceStream = new AbstractResourceStreamWriter() { - + public void onClick() { + + IResourceStream resourceStream = new AbstractResourceStreamWriter() { + private static final long serialVersionUID = 1L; - @Override - public void write(OutputStream output) { - UserModel user = GitBlitWebSession.get().getUser(); - user = user == null ? UserModel.ANONYMOUS : user; - - app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); - } - }; - - - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }}); - + @Override + public void write(OutputStream output) { + UserModel user = GitBlitWebSession.get().getUser(); + user = user == null ? UserModel.ANONYMOUS : user; + + app().filestore().downloadBlob(entry.getFilestoreOid(), user, + getRepositoryModel(), output); + } + }; + + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); + } + }); + item.add(new Link("raw", null) { - + private static final long serialVersionUID = 1L; @Override - public void onClick() { - - IResourceStream resourceStream = new AbstractResourceStreamWriter() { - + public void onClick() { + + IResourceStream resourceStream = new AbstractResourceStreamWriter() { + private static final long serialVersionUID = 1L; - @Override - public void write(OutputStream output) { - UserModel user = GitBlitWebSession.get().getUser(); - user = user == null ? UserModel.ANONYMOUS : user; - - app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); - } - }; - - - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }}); - + @Override + public void write(OutputStream output) { + UserModel user = GitBlitWebSession.get().getUser(); + user = user == null ? UserModel.ANONYMOUS : user; + + app().filestore().downloadBlob(entry.getFilestoreOid(), user, + getRepositoryModel(), output); + } + }; + + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); + } + }); + } else { - item.add(new BookmarkablePageLink("view", BlobPage.class, WicketUtils - .newPathParameter(repositoryName, entry.commitId, entry.path)) - .setEnabled(!entry.changeType.equals(ChangeType.DELETE))); + item.add(new BookmarkablePageLink("view", BlobPage.class, + WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path)) + .setEnabled(!entry.changeType.equals(ChangeType.DELETE))); String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, entry.commitId, entry.path); item.add(new ExternalLink("raw", rawUrl) .setEnabled(!entry.changeType.equals(ChangeType.DELETE))); } - item.add(new BookmarkablePageLink("blame", BlamePage.class, WicketUtils - .newPathParameter(repositoryName, entry.commitId, entry.path)) - .setEnabled(!entry.changeType.equals(ChangeType.ADD) - && !entry.changeType.equals(ChangeType.DELETE))); - item.add(new BookmarkablePageLink("history", HistoryPage.class, WicketUtils - .newPathParameter(repositoryName, entry.commitId, entry.path)) - .setEnabled(!entry.changeType.equals(ChangeType.ADD))); + item.add(new BookmarkablePageLink("blame", BlamePage.class, + WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path)) + .setEnabled(!entry.changeType.equals(ChangeType.ADD) + && !entry.changeType.equals(ChangeType.DELETE))); + item.add(new BookmarkablePageLink("history", HistoryPage.class, + WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path)) + .setEnabled(!entry.changeType.equals(ChangeType.ADD))); } WicketUtils.setAlternatingBackground(item, counter); diff --git a/src/main/java/com/gitblit/wicket/pages/ComparePage.java b/src/main/java/com/gitblit/wicket/pages/ComparePage.java index 7e7ac2f5d..98c5abc8e 100644 --- a/src/main/java/com/gitblit/wicket/pages/ComparePage.java +++ b/src/main/java/com/gitblit/wicket/pages/ComparePage.java @@ -19,7 +19,8 @@ import java.util.ArrayList; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.http.handler.RedirectRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.DropDownChoice; @@ -33,7 +34,6 @@ import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.protocol.http.RequestUtils; -import org.apache.wicket.request.target.basic.RedirectRequestTarget; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -45,6 +45,7 @@ import com.gitblit.models.SubmoduleModel; import com.gitblit.servlet.RawServlet; import com.gitblit.utils.DiffUtils; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.DiffUtils.DiffComparator; import com.gitblit.utils.DiffUtils.DiffOutput; import com.gitblit.utils.DiffUtils.DiffOutputType; @@ -83,7 +84,7 @@ public ComparePage(PageParameters params) { add(new Label("comparison").setVisible(false)); } else { // active comparison - Fragment comparison = new Fragment("comparison", "comparisonFragment", this); + Fragment comparison = new Fragment("comparison", "comparisonFragment", ComparePage.this); add(comparison); RevCommit fromCommit; @@ -236,12 +237,11 @@ public void onSubmit() { PageParameters params = WicketUtils.newRangeParameter(repositoryName, from, to); if (ignoreWS) { - params.put("w", 1); + params.add("w", 1); } - String relativeUrl = urlFor(ComparePage.class, params).toString(); - String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); + String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(ComparePage.class, params); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); } }; @@ -278,11 +278,10 @@ public void onSubmit() { PageParameters params = WicketUtils.newRangeParameter(repositoryName, from, to); if (ignoreWS) { - params.put("w", 1); + params.add("w", 1); } - String relativeUrl = urlFor(ComparePage.class, params).toString(); - String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); + String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(ComparePage.class, params); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); } }; diff --git a/src/main/java/com/gitblit/wicket/pages/DashboardPage.java b/src/main/java/com/gitblit/wicket/pages/DashboardPage.java index 9c10e01b2..51a73f958 100644 --- a/src/main/java/com/gitblit/wicket/pages/DashboardPage.java +++ b/src/main/java/com/gitblit/wicket/pages/DashboardPage.java @@ -28,8 +28,7 @@ import java.util.TimeZone; import java.util.TreeSet; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.HeaderContributor; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Fragment; import org.eclipse.jgit.lib.Repository; @@ -89,7 +88,7 @@ protected void addActivity(UserModel user, Collection repositor } } - Fragment activityFragment = new Fragment("activity", "activityFragment", this); + Fragment activityFragment = new Fragment("activity", "activityFragment", DashboardPage.this); add(activityFragment); activityFragment.add(new Label("feedTitle", feedTitle)); if (digests.size() == 0) { @@ -240,8 +239,8 @@ protected void addCharts(Fragment frag, List recentChanges, Set docDp = new ListDataProvider(roots); // tab titles @@ -95,7 +95,7 @@ public void populateItem(final Item item) { item.add(link); if (counter == 0) { counter++; - item.add(new SimpleAttributeModifier("class", "active")); + item.add(new AttributeModifier("class", "active")); } } }; @@ -128,13 +128,13 @@ public void populateItem(final Item item) { Component content = new Label("content", doc.html) .setEscapeModelStrings(false); if (!MarkupSyntax.PLAIN.equals(doc.syntax)) { - content.add(new SimpleAttributeModifier("class", "markdown")); + content.add(new AttributeModifier("class", "markdown")); } item.add(content); - item.add(new SimpleAttributeModifier("id", file)); + item.add(new AttributeModifier("id", file)); if (counter == 0) { counter++; - item.add(new SimpleAttributeModifier("class", "tab-pane active")); + item.add(new AttributeModifier("class", "tab-pane active")); } } }; @@ -143,7 +143,7 @@ public void populateItem(final Item item) { // document list final ByteFormat byteFormat = new ByteFormat(); - Fragment docs = new Fragment("documents", "documentsFragment", this); + Fragment docs = new Fragment("documents", "documentsFragment", DocsPage.this); ListDataProvider pathsDp = new ListDataProvider(paths); DataView pathsView = new DataView("document", pathsDp) { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/gitblit/wicket/pages/EditFilePage.java b/src/main/java/com/gitblit/wicket/pages/EditFilePage.java index dbf8a79e2..86d20d09e 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditFilePage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditFilePage.java @@ -22,7 +22,7 @@ import java.util.List; import java.util.Set; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextArea; @@ -103,7 +103,7 @@ public EditFilePage(final PageParameters params) { final Model commitMessage = new Model("Document update"); final Model commitIdAtLoad = new Model(displayedCommitId); - fragment = new Fragment("doc", "markupContent", this); + fragment = new Fragment("doc", "markupContent", EditFilePage.this); Form form = new Form("documentEditor") { @@ -182,7 +182,7 @@ protected void onSubmit() { MarkupDocument markupDoc = processor.parse(repositoryName, displayedCommitId, documentPath, markupText); final Model documentContent = new Model(markupDoc.html); - fragment = new Fragment("doc", "plainContent", this); + fragment = new Fragment("doc", "plainContent", EditFilePage.this); fragment.add(new Label("content", documentContent).setEscapeModelStrings(false)); } diff --git a/src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java b/src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java index dc3266543..5ba57b40d 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java @@ -20,7 +20,7 @@ import java.util.Date; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; @@ -120,7 +120,7 @@ public EditMilestonePage(PageParameters params) { private static final long serialVersionUID = 1L; @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + protected void onSubmit(AjaxRequestTarget target) { String name = nameModel.getObject(); if (StringUtils.isEmpty(name)) { return; @@ -180,7 +180,7 @@ public void onClick() { } }; - delete.add(new JavascriptEventConfirmation("onclick", MessageFormat.format( + delete.add(new JavascriptEventConfirmation("click", MessageFormat.format( getString("gb.deleteMilestone"), oldName))); form.add(delete); diff --git a/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java index bf3eea8ba..a68f3d3e4 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java @@ -26,10 +26,11 @@ import java.util.Map; import java.util.Set; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior; -import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.extensions.markup.html.form.palette.Palette; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; @@ -80,6 +81,8 @@ public class EditRepositoryPage extends RootSubPage { + private static final long serialVersionUID = 1L; + private final boolean isCreate; RepositoryNamePanel namePanel; @@ -367,8 +370,10 @@ protected void onSubmit() { // custom fields repositoryModel.customFields = new LinkedHashMap(); - for (int i = 0; i < customFieldsListView.size(); i++) { - ListItem child = (ListItem) customFieldsListView.get(i); + Iterator customFieldsListViewIterator = customFieldsListView.iterator(); + while(customFieldsListViewIterator.hasNext()){ + + ListItem child = (ListItem) customFieldsListViewIterator.next(); String key = child.getModelObject(); TextField field = (TextField) child.get("customFieldValue"); @@ -389,7 +394,6 @@ protected void onSubmit() { error(e.getMessage()); return; } - setRedirect(false); setResponsePage(SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryModel.name)); } }; @@ -409,7 +413,7 @@ protected void onSubmit() { } // do not let the browser pre-populate these fields - form.add(new SimpleAttributeModifier("autocomplete", "off")); + form.add(new AttributeModifier("autocomplete", "off")); // @@ -644,9 +648,9 @@ protected void onUpdate(AjaxRequestTarget target) { repositoryModel.authorizationControl = AuthorizationControl.NAMED; } - target.addComponent(verifyCommitter); - target.addComponent(usersPalette); - target.addComponent(teamsPalette); + target.add(verifyCommitter); + target.add(usersPalette); + target.add(teamsPalette); } }; @@ -708,7 +712,7 @@ public void onClick() { }; if (canDelete) { - delete.add(new JavascriptEventConfirmation("onclick", MessageFormat.format( + delete.add(new JavascriptEventConfirmation("click", MessageFormat.format( getString("gb.deleteRepository"), repositoryModel))); } form.add(delete.setVisible(canDelete)); @@ -782,6 +786,11 @@ public String getDisplayValue(FederationStrategy type) { public String getIdValue(FederationStrategy type, int index) { return Integer.toString(index); } + + @Override + public FederationStrategy getObject(String id, IModel> choices) { + return choices.getObject().get(Integer.valueOf(id)); + } } private class GCPeriodRenderer implements IChoiceRenderer { @@ -804,6 +813,11 @@ public String getDisplayValue(Integer value) { public String getIdValue(Integer value, int index) { return Integer.toString(index); } + + @Override + public Integer getObject(String id, IModel> choices) { + return choices.getObject().get(Integer.valueOf(id)); + } } private class MaxActivityCommitsRenderer implements IChoiceRenderer { @@ -828,5 +842,10 @@ public String getDisplayValue(Integer value) { public String getIdValue(Integer value, int index) { return Integer.toString(index); } + + @Override + public Integer getObject(String id, IModel> choices) { + return choices.getObject().get(Integer.valueOf(id)); + } } } diff --git a/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java b/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java index a43d8db05..2346ce138 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java @@ -24,8 +24,8 @@ import java.util.List; import java.util.Set; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.SimpleAttributeModifier; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.extensions.markup.html.form.palette.Palette; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.CheckBox; @@ -208,7 +208,6 @@ protected void onSubmit() { error(e.getMessage()); return; } - setRedirect(false); if (isCreate) { // create another team info(MessageFormat.format(getString("gb.teamCreated"), @@ -220,7 +219,7 @@ protected void onSubmit() { }; // do not let the browser pre-populate these fields - form.add(new SimpleAttributeModifier("autocomplete", "off")); + form.add(new AttributeModifier("autocomplete", "off")); // not all user providers support manipulating team memberships boolean editMemberships = app().authentication().supportsTeamMembershipChanges(teamModel); diff --git a/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java b/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java index 192b48caa..b3be019ba 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java @@ -22,7 +22,7 @@ import java.util.Set; import java.util.TreeSet; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.basic.Label; @@ -62,7 +62,9 @@ */ public class EditTicketPage extends RepositoryPage { - static final String NIL = ""; + private static final long serialVersionUID = 1L; + + static final String NIL = ""; static final String ESC_NIL = StringUtils.escapeForHtml(NIL, false); @@ -163,7 +165,7 @@ public EditTicketPage(PageParameters params) { } else { statusChoices = Arrays.asList(TicketModel.Status.requestWorkflow); } - Fragment status = new Fragment("status", "statusFragment", this); + Fragment status = new Fragment("status", "statusFragment", EditTicketPage.this); status.add(new DropDownChoice("status", statusModel, statusChoices)); form.add(status); @@ -200,7 +202,7 @@ public EditTicketPage(PageParameters params) { } Collections.sort(responsibles); responsibles.add(new TicketResponsible(NIL, "", "")); - Fragment responsible = new Fragment("responsible", "responsibleFragment", this); + Fragment responsible = new Fragment("responsible", "responsibleFragment", EditTicketPage.this); responsible.add(new DropDownChoice("responsible", responsibleModel, responsibles)); form.add(responsible.setVisible(!responsibles.isEmpty())); @@ -224,12 +226,12 @@ public EditTicketPage(PageParameters params) { } // milestone - Fragment milestone = new Fragment("milestone", "milestoneFragment", this); + Fragment milestone = new Fragment("milestone", "milestoneFragment", EditTicketPage.this); milestone.add(new DropDownChoice("milestone", milestoneModel, milestones)); form.add(milestone.setVisible(!milestones.isEmpty())); // priority - Fragment priority = new Fragment("priority", "priorityFragment", this); + Fragment priority = new Fragment("priority", "priorityFragment", EditTicketPage.this); List priorityChoices = Arrays.asList(TicketModel.Priority.choices()); priority.add(new DropDownChoice("priority", priorityModel, priorityChoices)); form.add(priority); @@ -245,7 +247,7 @@ public EditTicketPage(PageParameters params) { branches.remove(Repository.shortenRefName(getRepositoryModel().mergeTo)); branches.add(0, Repository.shortenRefName(getRepositoryModel().mergeTo)); - Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this); + Fragment mergeto = new Fragment("mergeto", "mergeToFragment", EditTicketPage.this); mergeto.add(new DropDownChoice("mergeto", mergeToModel, branches)); form.add(mergeto.setVisible(!branches.isEmpty())); } else { @@ -261,7 +263,7 @@ public EditTicketPage(PageParameters params) { private static final long serialVersionUID = 1L; @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + protected void onSubmit(AjaxRequestTarget target) { long ticketId = 0L; try { String h = WicketUtils.getObject(getPageParameters()); diff --git a/src/main/java/com/gitblit/wicket/pages/EditUserPage.java b/src/main/java/com/gitblit/wicket/pages/EditUserPage.java index 220bee3f6..9cdb4c953 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditUserPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditUserPage.java @@ -21,8 +21,8 @@ import java.util.Iterator; import java.util.List; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.SimpleAttributeModifier; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.extensions.markup.html.form.palette.Palette; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.CheckBox; @@ -203,7 +203,6 @@ protected void onSubmit() { error(e.getMessage()); return; } - setRedirect(false); if (isCreate) { // create another user info(MessageFormat.format(getString("gb.userCreated"), @@ -217,7 +216,7 @@ protected void onSubmit() { }; // do not let the browser pre-populate these fields - form.add(new SimpleAttributeModifier("autocomplete", "off")); + form.add(new AttributeModifier("autocomplete", "off")); // not all user providers support manipulating username and password boolean editCredentials = app().authentication().supportsCredentialChanges(userModel); diff --git a/src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java index 72d1e1a42..d1d77aa75 100644 --- a/src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java @@ -19,13 +19,13 @@ import javax.servlet.http.HttpServletRequest; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.protocol.http.WebRequest; import com.gitblit.models.RepositoryModel; import com.gitblit.models.RepositoryUrl; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.GitblitRedirectException; import com.gitblit.wicket.WicketUtils; @@ -33,6 +33,8 @@ public class EmptyRepositoryPage extends RepositoryPage { + private static final long serialVersionUID = 1L; + public EmptyRepositoryPage(PageParameters params) { super(params); @@ -54,7 +56,7 @@ public EmptyRepositoryPage(PageParameters params) { user = UserModel.ANONYMOUS; } - HttpServletRequest req = ((WebRequest) getRequest()).getHttpServletRequest(); + HttpServletRequest req = GitBlitRequestUtils.getServletRequest(); List repositoryUrls = app().services().getRepositoryUrls(req, user, repository); RepositoryUrl primaryUrl = repositoryUrls.size() == 0 ? null : repositoryUrls.get(0); String url = primaryUrl != null ? primaryUrl.url : ""; diff --git a/src/main/java/com/gitblit/wicket/pages/ExportTicketPage.java b/src/main/java/com/gitblit/wicket/pages/ExportTicketPage.java index 57f61f784..c60f83a39 100644 --- a/src/main/java/com/gitblit/wicket/pages/ExportTicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ExportTicketPage.java @@ -15,10 +15,10 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.IRequestTarget; -import org.apache.wicket.PageParameters; -import org.apache.wicket.RequestCycle; -import org.apache.wicket.protocol.http.WebResponse; +import org.apache.wicket.request.IRequestCycle; +import org.apache.wicket.request.IRequestHandler; +import org.apache.wicket.request.http.WebResponse; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,6 +30,8 @@ public class ExportTicketPage extends SessionPage { + private static final long serialVersionUID = 1L; + private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); String contentType; @@ -37,18 +39,15 @@ public class ExportTicketPage extends SessionPage { public ExportTicketPage(final PageParameters params) { super(params); - if (!params.containsKey("r")) { + if (params.get("r").isEmpty()) { error(getString("gb.repositoryNotSpecified")); redirectToInterceptPage(new RepositoriesPage()); } - getRequestCycle().setRequestTarget(new IRequestTarget() { - @Override - public void detach(RequestCycle requestCycle) { - } - + getRequestCycle().scheduleRequestHandlerAfterCurrent(new IRequestHandler() { + @Override - public void respond(RequestCycle requestCycle) { + public void respond(IRequestCycle requestCycle) { WebResponse response = (WebResponse) requestCycle.getResponse(); final String repositoryName = WicketUtils.getRepositoryName(params); @@ -69,6 +68,12 @@ public void respond(RequestCycle requestCycle) { logger.error("Failed to write text response", e); } } + + @Override + public void detach(IRequestCycle requestCycle) { + // TODO Auto-generated method stub + + } }); } diff --git a/src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java b/src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java index c26c9757a..7c46e6212 100644 --- a/src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java +++ b/src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java @@ -18,7 +18,7 @@ import java.util.Collections; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; diff --git a/src/main/java/com/gitblit/wicket/pages/FilestorePage.java b/src/main/java/com/gitblit/wicket/pages/FilestorePage.java index 29b3d60db..6fc7b6d7a 100644 --- a/src/main/java/com/gitblit/wicket/pages/FilestorePage.java +++ b/src/main/java/com/gitblit/wicket/pages/FilestorePage.java @@ -24,7 +24,7 @@ import java.util.List; import org.apache.commons.io.FileUtils; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -243,7 +243,7 @@ protected enum SortBy { ok, pending, inprogress, error, deleted; } - private static class SortableFilestoreProvider extends SortableDataProvider { + private static class SortableFilestoreProvider extends SortableDataProvider { private static final long serialVersionUID = 1L; @@ -254,7 +254,7 @@ protected SortableFilestoreProvider(List list) { } @Override - public int size() { + public long size() { if (list == null) { return 0; } @@ -267,15 +267,16 @@ public IModel model(FilestoreModel header) { } @Override - public Iterator iterator(int first, int count) { + public Iterator iterator(long first, long count) { Collections.sort(list, new Comparator() { @Override public int compare(FilestoreModel o1, FilestoreModel o2) { return o2.getChangedOn().compareTo(o1.getChangedOn()); } }); - return list.subList(first, first + count).iterator(); + return list.subList(Math.toIntExact(first), Math.toIntExact(first + count)).iterator(); } + } } \ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/pages/ForkPage.java b/src/main/java/com/gitblit/wicket/pages/ForkPage.java index 12020128f..90a7ee3be 100644 --- a/src/main/java/com/gitblit/wicket/pages/ForkPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ForkPage.java @@ -17,7 +17,7 @@ import java.text.MessageFormat; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/gitblit/wicket/pages/ForksPage.java b/src/main/java/com/gitblit/wicket/pages/ForksPage.java index 045f5f7e2..dbfb3d67b 100644 --- a/src/main/java/com/gitblit/wicket/pages/ForksPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ForksPage.java @@ -20,7 +20,7 @@ import java.util.List; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; diff --git a/src/main/java/com/gitblit/wicket/pages/GitSearchPage.java b/src/main/java/com/gitblit/wicket/pages/GitSearchPage.java index befa5f108..0dfae3bee 100644 --- a/src/main/java/com/gitblit/wicket/pages/GitSearchPage.java +++ b/src/main/java/com/gitblit/wicket/pages/GitSearchPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import com.gitblit.Constants; diff --git a/src/main/java/com/gitblit/wicket/pages/HistoryPage.java b/src/main/java/com/gitblit/wicket/pages/HistoryPage.java index 3021cb3c5..9b04f3bb2 100644 --- a/src/main/java/com/gitblit/wicket/pages/HistoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/HistoryPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import com.gitblit.wicket.CacheControl; diff --git a/src/main/java/com/gitblit/wicket/pages/ImageDiffHandler.java b/src/main/java/com/gitblit/wicket/pages/ImageDiffHandler.java index dc0c5ae82..29e308d58 100644 --- a/src/main/java/com/gitblit/wicket/pages/ImageDiffHandler.java +++ b/src/main/java/com/gitblit/wicket/pages/ImageDiffHandler.java @@ -15,15 +15,16 @@ */ package com.gitblit.wicket.pages; -import java.nio.charset.StandardCharsets; import java.util.List; -import org.apache.wicket.protocol.http.WebApplication; -import org.apache.wicket.protocol.http.WicketURLEncoder; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.cycle.RequestCycle; +import org.apache.wicket.util.encoding.UrlEncoder; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffEntry.Side; import org.jsoup.nodes.Element; +import com.gitblit.Constants; import com.gitblit.servlet.RawServlet; import com.gitblit.utils.DiffUtils; import com.gitblit.utils.HtmlBuilder; @@ -145,8 +146,8 @@ protected String getImageUrl(DiffEntry entry, Side side) { * Returns a URL that will fetch the designated static resource from within GitBlit. */ protected String getStaticResourceUrl(String contextRelativePath) { - return WebApplication.get().getRequestCycleProcessor().getRequestCodingStrategy().rewriteStaticRelativeUrl(contextRelativePath); - } + return RequestCycle.get().getUrlRenderer().renderFullUrl(Url.parse(contextRelativePath)); + } /** * Encode a URL component of a {@link RawServlet} URL in the special way that the servlet expects it. Note that @@ -165,6 +166,6 @@ protected String urlencode(final String component) { // Actually, this should be done in RawServlet.asLink(). As it is now, this may be incorrect if that // operation ever uses query parameters instead of paths, or if it is fixed to urlencode its path // components. But I don't want to touch that static method in RawServlet. - return WicketURLEncoder.PATH_INSTANCE.encode(component, StandardCharsets.UTF_8.name()).replaceAll("%2[fF]", "/"); + return UrlEncoder.PATH_INSTANCE.encode(component, Constants.ENCODING).replaceAll("%2[fF]", "/"); } } diff --git a/src/main/java/com/gitblit/wicket/pages/LogPage.java b/src/main/java/com/gitblit/wicket/pages/LogPage.java index 411d7edd7..9c9b7398e 100644 --- a/src/main/java/com/gitblit/wicket/pages/LogPage.java +++ b/src/main/java/com/gitblit/wicket/pages/LogPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import com.gitblit.utils.StringUtils; diff --git a/src/main/java/com/gitblit/wicket/pages/LogoutPage.java b/src/main/java/com/gitblit/wicket/pages/LogoutPage.java index a8ae7d0fe..e9f6bde3b 100644 --- a/src/main/java/com/gitblit/wicket/pages/LogoutPage.java +++ b/src/main/java/com/gitblit/wicket/pages/LogoutPage.java @@ -15,10 +15,11 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.protocol.http.WebRequest; -import org.apache.wicket.protocol.http.WebResponse; + +import org.apache.wicket.RestartResponseException; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.wicket.GitBlitWebSession; public class LogoutPage extends BasePage { @@ -27,8 +28,7 @@ public LogoutPage() { super(); GitBlitWebSession session = GitBlitWebSession.get(); UserModel user = session.getUser(); - app().authentication().logout(((WebRequest) getRequest()).getHttpServletRequest(), - ((WebResponse) getResponse()).getHttpServletResponse(), user); + app().authentication().logout(GitBlitRequestUtils.getServletRequest(), GitBlitRequestUtils.getServletResponse(), user); session.invalidate(); /* @@ -36,14 +36,14 @@ public LogoutPage() { * If so, it is likely to be cached by the browser, and cannot be undone. Effectively, this means * that you cannot log out... */ - if ( ((WebRequest)getRequest()).getHttpServletRequest().getHeader("Authorization") != null ) { + if (GitBlitRequestUtils.getServletRequest().getHeader("Authorization") != null ) { // authentication will be done via this route anyway, show a page to close the browser: // this will be done by Wicket. setupPage(null, getString("gb.logout")); } else { - setRedirect(true); - setResponsePage(getApplication().getHomePage()); +// setResponsePage(getApplication().getHomePage()); + throw new RestartResponseException(getApplication().getHomePage()); } // not via WWW-Auth } // LogoutPage } \ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java b/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java index 1d81061e5..357b5036e 100644 --- a/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java +++ b/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java @@ -22,7 +22,7 @@ import java.util.Set; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.ListMultipleChoice; @@ -88,19 +88,19 @@ private void setup(PageParameters params) { page = WicketUtils.getPage(params); - if (params.containsKey("repositories")) { - String value = params.getString("repositories", ""); + if (!params.get("repositories").isEmpty()) { + String value = params.get("repositories").toString(""); List list = StringUtils.getStringsFromValue(value); repositories.addAll(list); } - allRepos = params.getAsBoolean("allrepos", false); + allRepos = params.get("allrepos").toBoolean(false); if (allRepos) { repositories.addAll(availableRepositories); } - if (params.containsKey("query")) { - query = params.getString("query", ""); + if (!params.get("query").isEmpty()) { + query = params.get("query").toString(""); } else { String value = WicketUtils.getSearchString(params); String type = WicketUtils.getSearchType(params); @@ -153,9 +153,9 @@ public void onSubmit() { return; } PageParameters params = new PageParameters(); - params.put("repositories", StringUtils.flattenStrings(repositoriesModel.getObject())); - params.put("query", queryModel.getObject()); - params.put("allrepos", allreposModel.getObject()); + params.add("repositories", StringUtils.flattenStrings(repositoriesModel.getObject())); + params.add("query", queryModel.getObject()); + params.add("allrepos", allreposModel.getObject()); LuceneSearchPage page = new LuceneSearchPage(params); setResponsePage(page); } @@ -249,8 +249,8 @@ public void populateItem(final Item item) { add(resultsView.setVisible(results.size() > 0)); PageParameters pagerParams = new PageParameters(); - pagerParams.put("repositories", StringUtils.flattenStrings(repositoriesModel.getObject())); - pagerParams.put("query", queryModel.getObject()); + pagerParams.add("repositories", StringUtils.flattenStrings(repositoriesModel.getObject())); + pagerParams.add("query", queryModel.getObject()); boolean showPager = false; int totalPages = 0; diff --git a/src/main/java/com/gitblit/wicket/pages/MetricsPage.java b/src/main/java/com/gitblit/wicket/pages/MetricsPage.java index 96113b0f6..bf8a474aa 100644 --- a/src/main/java/com/gitblit/wicket/pages/MetricsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/MetricsPage.java @@ -25,8 +25,7 @@ import java.util.Date; import java.util.List; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.HeaderContributor; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.eclipse.jgit.lib.Repository; @@ -72,7 +71,7 @@ public MetricsPage(PageParameters params) { createBarChart(charts, "dayOfWeekChart", getDayOfWeekMetrics(r, objectId)); createPieChart(charts, "authorsChart", getAuthorMetrics(r, objectId)); - add(new HeaderContributor(charts)); + add(charts); } diff --git a/src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java b/src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java index 0f7d602bb..4f34e5da1 100644 --- a/src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java +++ b/src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java @@ -30,7 +30,7 @@ import java.util.Set; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Fragment; import org.eclipse.jgit.lib.Constants; @@ -159,9 +159,9 @@ public int compare(RepositoryModel o1, RepositoryModel o2) { Fragment repositoryTabs; if (UserModel.ANONYMOUS.equals(user)) { - repositoryTabs = new Fragment("repositoryTabs", "anonymousTabsFragment", this); + repositoryTabs = new Fragment("repositoryTabs", "anonymousTabsFragment", MyDashboardPage.this); } else { - repositoryTabs = new Fragment("repositoryTabs", "authenticatedTabsFragment", this); + repositoryTabs = new Fragment("repositoryTabs", "authenticatedTabsFragment", MyDashboardPage.this); } add(repositoryTabs); diff --git a/src/main/java/com/gitblit/wicket/pages/MyTicketsPage.java b/src/main/java/com/gitblit/wicket/pages/MyTicketsPage.java index bfcedf6e8..70ab1d2f3 100644 --- a/src/main/java/com/gitblit/wicket/pages/MyTicketsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/MyTicketsPage.java @@ -22,7 +22,8 @@ import java.util.HashMap; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.util.string.StringValue; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.repeater.Item; @@ -56,7 +57,9 @@ */ public class MyTicketsPage extends RootPage { - public MyTicketsPage() { + private static final long serialVersionUID = 1L; + + public MyTicketsPage() { this(null); } @@ -66,21 +69,20 @@ public MyTicketsPage(PageParameters params) { UserModel currentUser = GitBlitWebSession.get().getUser(); if (currentUser == null || UserModel.ANONYMOUS.equals(currentUser)) { - setRedirect(true); setResponsePage(getApplication().getHomePage()); return; } final String username = currentUser.getName(); - final String[] statiiParam = (params == null) ? TicketsUI.openStatii : params.getStringArray(Lucene.status.name()); - final String assignedToParam = (params == null) ? "" : params.getString(Lucene.responsible.name(), null); - final String milestoneParam = (params == null) ? "" : params.getString(Lucene.milestone.name(), null); - final String queryParam = (params == null) ? null : params.getString("q", null); - final String searchParam = (params == null) ? "" : params.getString("s", null); - final String sortBy = (params == null) ? "" : Lucene.fromString(params.getString("sort", Lucene.created.name())).name(); - final String repositoryId = (params == null) ? "" : params.getString(Lucene.rid.name(), null); - final boolean desc = (params == null) ? true : !"asc".equals(params.getString("direction", "desc")); + final String[] statiiParam = (params == null) ? TicketsUI.openStatii : (String[]) params.getValues(Lucene.status.name()).stream().map(StringValue::toString).toArray(); + final String assignedToParam = (params == null) ? "" : params.get(Lucene.responsible.name()).toString(); + final String milestoneParam = (params == null) ? "" : params.get(Lucene.milestone.name()).toString(); + final String queryParam = (params == null) ? null : params.get("q").toString(); + final String searchParam = (params == null) ? "" : params.get("s").toString(); + final String sortBy = (params == null) ? "" : Lucene.fromString(params.get("sort").toString(Lucene.created.name())).name(); + final String repositoryId = (params == null) ? "" : params.get(Lucene.rid.name()).toString(); + final boolean desc = (params == null) ? true : !"asc".equals(params.get("direction").toString("desc")); // add the user title panel diff --git a/src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java b/src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java index 2250f38a2..f78b1c449 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java +++ b/src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java @@ -17,7 +17,7 @@ import java.util.Date; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; @@ -87,7 +87,7 @@ public NewMilestonePage(PageParameters params) { private static final long serialVersionUID = 1L; @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + protected void onSubmit(AjaxRequestTarget target) { String name = nameModel.getObject(); if (StringUtils.isEmpty(name)) { // invalid name diff --git a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java index d2589e6fa..bf897de36 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java @@ -22,7 +22,7 @@ import java.util.Collections; import java.util.List; -import org.apache.wicket.behavior.SimpleAttributeModifier; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.CompoundPropertyModel; @@ -145,13 +145,12 @@ protected void onSubmit() { error(e.getMessage()); return; } - setRedirect(true); setResponsePage(SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryModel.name)); } }; // do not let the browser pre-populate these fields - form.add(new SimpleAttributeModifier("autocomplete", "off")); + form.add(new AttributeModifier("autocomplete", "off")); namePanel = new RepositoryNamePanel("namePanel", repositoryModel); form.add(namePanel); diff --git a/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java b/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java index 0c52505c6..45478bc8c 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java @@ -22,7 +22,7 @@ import java.util.Set; import java.util.TreeSet; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.basic.Label; @@ -149,18 +149,18 @@ public NewTicketPage(PageParameters params) { } } Collections.sort(responsibles); - Fragment responsible = new Fragment("responsible", "responsibleFragment", this); + Fragment responsible = new Fragment("responsible", "responsibleFragment", NewTicketPage.this); responsible.add(new DropDownChoice("responsible", responsibleModel, responsibles)); form.add(responsible.setVisible(!responsibles.isEmpty())); // milestone List milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open); - Fragment milestone = new Fragment("milestone", "milestoneFragment", this); + Fragment milestone = new Fragment("milestone", "milestoneFragment", NewTicketPage.this); milestone.add(new DropDownChoice("milestone", milestoneModel, milestones)); form.add(milestone.setVisible(!milestones.isEmpty())); // priority - Fragment priority = new Fragment("priority", "priorityFragment", this); + Fragment priority = new Fragment("priority", "priorityFragment", NewTicketPage.this); priority.add(new DropDownChoice("priority", priorityModel, Arrays.asList(TicketModel.Priority.choices()))); form.add(priority); @@ -175,7 +175,7 @@ public NewTicketPage(PageParameters params) { branches.remove(Repository.shortenRefName(getRepositoryModel().HEAD)); branches.add(0, Repository.shortenRefName(getRepositoryModel().HEAD)); - Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this); + Fragment mergeto = new Fragment("mergeto", "mergeToFragment", NewTicketPage.this); mergeto.add(new DropDownChoice("mergeto", mergeToModel, branches)); form.add(mergeto.setVisible(!branches.isEmpty())); } else { @@ -191,7 +191,7 @@ public NewTicketPage(PageParameters params) { private static final long serialVersionUID = 1L; @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + protected void onSubmit(AjaxRequestTarget target) { String title = titleModel.getObject(); if (StringUtils.isEmpty(title)) { return; diff --git a/src/main/java/com/gitblit/wicket/pages/NoDocsPage.java b/src/main/java/com/gitblit/wicket/pages/NoDocsPage.java index 7dcc02272..bb70294f5 100644 --- a/src/main/java/com/gitblit/wicket/pages/NoDocsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/NoDocsPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; public class NoDocsPage extends RepositoryPage { diff --git a/src/main/java/com/gitblit/wicket/pages/NoTicketsPage.java b/src/main/java/com/gitblit/wicket/pages/NoTicketsPage.java index 8e98a00f5..a1645ab1d 100644 --- a/src/main/java/com/gitblit/wicket/pages/NoTicketsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/NoTicketsPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import com.gitblit.models.UserModel; diff --git a/src/main/java/com/gitblit/wicket/pages/OverviewPage.java b/src/main/java/com/gitblit/wicket/pages/OverviewPage.java index 1979f97f3..4ec546910 100644 --- a/src/main/java/com/gitblit/wicket/pages/OverviewPage.java +++ b/src/main/java/com/gitblit/wicket/pages/OverviewPage.java @@ -19,8 +19,7 @@ import java.util.ArrayList; import java.util.List; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.HeaderContributor; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.repeater.Item; @@ -147,7 +146,7 @@ && app().settings().getBoolean(Keys.web.generateActivityGraph, true)) { chart.setHeight(150); charts.addChart(chart); - add(new HeaderContributor(charts)); + add(charts); } } } diff --git a/src/main/java/com/gitblit/wicket/pages/PatchPage.java b/src/main/java/com/gitblit/wicket/pages/PatchPage.java index bd904e1f7..384885ad1 100644 --- a/src/main/java/com/gitblit/wicket/pages/PatchPage.java +++ b/src/main/java/com/gitblit/wicket/pages/PatchPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -36,7 +36,7 @@ public class PatchPage extends SessionPage { public PatchPage(final PageParameters params) { super(params); - if (!params.containsKey("r")) { + if (params.get("r").isEmpty()) { error(getString("gb.repositoryNotSpecified")); redirectToInterceptPage(new RepositoriesPage()); } diff --git a/src/main/java/com/gitblit/wicket/pages/ProjectPage.java b/src/main/java/com/gitblit/wicket/pages/ProjectPage.java index d358b775d..101f89e1f 100644 --- a/src/main/java/com/gitblit/wicket/pages/ProjectPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ProjectPage.java @@ -21,7 +21,7 @@ import java.util.List; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.ExternalLink; @@ -35,6 +35,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.servlet.SyndicationServlet; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.MarkdownUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.CacheControl; @@ -107,7 +108,7 @@ private void setup(PageParameters params) { add(new Label("projectTitle", project.getDisplayName())); add(new Label("projectDescription", project.description)); - String feedLink = SyndicationServlet.asLink(getRequest().getRelativePathPrefixToContextRoot(), projectName, null, 0); + String feedLink = SyndicationServlet.asLink(GitBlitRequestUtils.getRelativePathPrefixToContextRoot(), projectName, null, 0); add(new ExternalLink("syndication", feedLink)); add(WicketUtils.syndicationDiscoveryLink(SyndicationServlet.getTitle(project.getDisplayName(), diff --git a/src/main/java/com/gitblit/wicket/pages/ProjectsPage.java b/src/main/java/com/gitblit/wicket/pages/ProjectsPage.java index 132a39dd7..4cdeb0090 100644 --- a/src/main/java/com/gitblit/wicket/pages/ProjectsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ProjectsPage.java @@ -18,7 +18,7 @@ import java.util.Collections; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; diff --git a/src/main/java/com/gitblit/wicket/pages/RawPage.java b/src/main/java/com/gitblit/wicket/pages/RawPage.java index c43574782..310d928bd 100644 --- a/src/main/java/com/gitblit/wicket/pages/RawPage.java +++ b/src/main/java/com/gitblit/wicket/pages/RawPage.java @@ -24,20 +24,21 @@ import javax.servlet.http.HttpServletResponse; -import org.apache.wicket.IRequestTarget; -import org.apache.wicket.PageParameters; -import org.apache.wicket.RequestCycle; -import org.apache.wicket.protocol.http.WebRequest; -import org.apache.wicket.protocol.http.WebResponse; -import org.apache.wicket.protocol.http.servlet.AbortWithWebErrorCodeException; +import org.apache.wicket.request.IRequestCycle; +import org.apache.wicket.request.IRequestHandler; +import org.apache.wicket.request.http.WebResponse; +import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.gitblit.Constants; import com.gitblit.Keys; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; @@ -45,6 +46,8 @@ public class RawPage extends SessionPage { + private static final long serialVersionUID = 1L; + private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); String contentType; @@ -52,18 +55,15 @@ public class RawPage extends SessionPage { public RawPage(final PageParameters params) { super(params); - if (!params.containsKey("r")) { + if (params.get("r").isEmpty()) { error(getString("gb.repositoryNotSpecified")); redirectToInterceptPage(new RepositoriesPage()); } - getRequestCycle().setRequestTarget(new IRequestTarget() { - @Override - public void detach(RequestCycle requestCycle) { - } + getRequestCycle().scheduleRequestHandlerAfterCurrent(new IRequestHandler() { @Override - public void respond(RequestCycle requestCycle) { + public void respond(IRequestCycle requestCycle) { WebResponse response = (WebResponse) requestCycle.getResponse(); final String repositoryName = WicketUtils.getRepositoryName(params); @@ -96,7 +96,7 @@ public void respond(RequestCycle requestCycle) { final String objectNotFound = MessageFormat.format("Raw page failed to find object {0} in {1}", objectId, repositoryName); logger.error(objectNotFound); - throw new AbortWithWebErrorCodeException(HttpServletResponse.SC_NOT_FOUND, objectNotFound); + throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, objectNotFound); } contentType = "application/octet-stream"; response.setContentType(contentType); @@ -113,7 +113,7 @@ public void respond(RequestCycle requestCycle) { final String commitNotFound = MessageFormat.format("Raw page failed to find commit {0} in {1}", objectId, repositoryName); logger.error(commitNotFound); - throw new AbortWithWebErrorCodeException(HttpServletResponse.SC_NOT_FOUND, commitNotFound); + throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, commitNotFound); } String filename = blobPath; @@ -149,7 +149,7 @@ public void respond(RequestCycle requestCycle) { byte[] image = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true); if (image == null) { logger.error(blobNotFound); - throw new AbortWithWebErrorCodeException(HttpServletResponse.SC_NOT_FOUND, blobNotFound); + throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, blobNotFound); } contentType = "image/" + extension.toLowerCase(); response.setContentType(contentType); @@ -165,25 +165,24 @@ public void respond(RequestCycle requestCycle) { byte[] binary = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true); if (binary == null) { logger.error(blobNotFound); - throw new AbortWithWebErrorCodeException(HttpServletResponse.SC_NOT_FOUND, blobNotFound); + throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, blobNotFound); } contentType = "application/octet-stream"; response.setContentLength(binary.length); response.setContentType(contentType); try { - WebRequest request = (WebRequest) requestCycle.getRequest(); - String userAgent = request.getHttpServletRequest().getHeader("User-Agent"); + String userAgent = GitBlitRequestUtils.getServletRequest().getHeader("User-Agent"); if (userAgent != null && userAgent.indexOf("MSIE 5.5") > -1) { response.setHeader("Content-Disposition", "filename=\"" - + URLEncoder.encode(filename, "UTF-8") + "\""); + + URLEncoder.encode(filename, Constants.ENCODING) + "\""); } else if (userAgent != null && userAgent.indexOf("MSIE") > -1) { response.setHeader("Content-Disposition", "attachment; filename=\"" - + URLEncoder.encode(filename, "UTF-8") + "\""); + + URLEncoder.encode(filename, Constants.ENCODING) + "\""); } else { response.setHeader("Content-Disposition", "attachment; filename=\"" - + new String(filename.getBytes("UTF-8"), "latin1") + "\""); + + new String(filename.getBytes(Constants.ENCODING), "latin1") + "\""); } } catch (UnsupportedEncodingException e) { @@ -202,7 +201,7 @@ public void respond(RequestCycle requestCycle) { blobPath, encodings); if (content == null) { logger.error(blobNotFound); - throw new AbortWithWebErrorCodeException(HttpServletResponse.SC_NOT_FOUND, blobNotFound); + throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, blobNotFound); } contentType = "text/plain; charset=UTF-8"; response.setContentType(contentType); @@ -219,7 +218,7 @@ public void respond(RequestCycle requestCycle) { encodings); if (content == null) { logger.error(blobNotFound); - throw new AbortWithWebErrorCodeException(HttpServletResponse.SC_NOT_FOUND, blobNotFound); + throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, blobNotFound); } contentType = "text/plain; charset=UTF-8"; response.setContentType(contentType); @@ -232,7 +231,15 @@ public void respond(RequestCycle requestCycle) { } r.close(); } + + @Override + public void detach(IRequestCycle requestCycle) { + // TODO Auto-generated method stub + + } + }); + } @Override diff --git a/src/main/java/com/gitblit/wicket/pages/ReflogPage.java b/src/main/java/com/gitblit/wicket/pages/ReflogPage.java index 44fb2227b..3c89e65e4 100644 --- a/src/main/java/com/gitblit/wicket/pages/ReflogPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ReflogPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import com.gitblit.wicket.CacheControl; diff --git a/src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java b/src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java index 660b4ed1a..06df01399 100644 --- a/src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java +++ b/src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java @@ -25,7 +25,7 @@ import java.util.List; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.eclipse.jgit.lib.Constants; diff --git a/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java index 36c5ae16c..00d75590a 100644 --- a/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java @@ -26,10 +26,11 @@ import java.util.Map; import java.util.Set; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.http.handler.RedirectRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.RestartResponseException; -import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.TextField; @@ -37,7 +38,6 @@ import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; -import org.apache.wicket.request.target.basic.RedirectRequestTarget; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Repository; @@ -63,6 +63,7 @@ import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.BugtraqProcessor; import com.gitblit.utils.DeepCopier; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.RefLogUtils; @@ -134,9 +135,9 @@ public RepositoryPage(PageParameters params) { } } - if (params.containsKey(PARAM_STAR)) { + if (!params.get(PARAM_STAR).isEmpty()) { // set starred state - boolean star = params.getBoolean(PARAM_STAR); + boolean star = params.get(PARAM_STAR).toBoolean(); UserModel user = GitBlitWebSession.get().getUser(); if (user != null && user.isAuthenticated) { UserRepositoryPreferences prefs = user.getPreferences().getRepositoryPreferences(getRepositoryModel().name); @@ -167,7 +168,7 @@ public RepositoryPage(PageParameters params) { NavigationPanel navigationPanel = new NavigationPanel("repositoryNavPanel", getRepoNavPageClass(), navLinks); add(navigationPanel); - add(new ExternalLink("syndication", SyndicationServlet.asLink(getRequest() + add(new ExternalLink("syndication", SyndicationServlet.asLink(GitBlitRequestUtils .getRelativePathPrefixToContextRoot(), getRepositoryName(), null, 0))); // add floating search form @@ -245,7 +246,7 @@ private List registerNavLinks() { // per-repository extra navlinks if (JGitUtils.getPagesBranch(r) != null) { ExternalNavLink pagesLink = new ExternalNavLink("gb.pages", PagesServlet.asLink( - getRequest().getRelativePathPrefixToContextRoot(), getRepositoryName(), null), true); + GitBlitRequestUtils.getRelativePathPrefixToContextRoot(), getRepositoryName(), null), true); navLinks.add(pagesLink); } @@ -304,16 +305,16 @@ protected void setupPage(String repositoryName, String pageName) { RepositoryModel model = getRepositoryModel(); if (StringUtils.isEmpty(model.originRepository)) { if (model.isMirror) { - add(new Fragment("repoIcon", "mirrorIconFragment", this)); - Fragment mirrorFrag = new Fragment("originRepository", "mirrorFragment", this); + add(new Fragment("repoIcon", "mirrorIconFragment", RepositoryPage.this)); + Fragment mirrorFrag = new Fragment("originRepository", "mirrorFragment", RepositoryPage.this); Label lbl = new Label("originRepository", MessageFormat.format(getString("gb.mirrorOf"), "" + model.origin + "")); mirrorFrag.add(lbl.setEscapeModelStrings(false)); add(mirrorFrag); } else { if (model.isBare) { - add(new Fragment("repoIcon", "repoIconFragment", this)); + add(new Fragment("repoIcon", "repoIconFragment", RepositoryPage.this)); } else { - add(new Fragment("repoIcon", "cloneIconFragment", this)); + add(new Fragment("repoIcon", "cloneIconFragment", RepositoryPage.this)); } add(new Label("originRepository", Optional.of(model.description).or(""))); } @@ -322,21 +323,21 @@ protected void setupPage(String repositoryName, String pageName) { if (origin == null) { // no origin repository, show description if available if (model.isBare) { - add(new Fragment("repoIcon", "repoIconFragment", this)); + add(new Fragment("repoIcon", "repoIconFragment", RepositoryPage.this)); } else { - add(new Fragment("repoIcon", "cloneIconFragment", this)); + add(new Fragment("repoIcon", "cloneIconFragment", RepositoryPage.this)); } add(new Label("originRepository", Optional.of(model.description).or(""))); } else if (!user.canView(origin)) { // show origin repository without link - add(new Fragment("repoIcon", "forkIconFragment", this)); - Fragment forkFrag = new Fragment("originRepository", "originFragment", this); + add(new Fragment("repoIcon", "forkIconFragment", RepositoryPage.this)); + Fragment forkFrag = new Fragment("originRepository", "originFragment", RepositoryPage.this); forkFrag.add(new Label("originRepository", StringUtils.stripDotGit(model.originRepository))); add(forkFrag); } else { // link to origin repository - add(new Fragment("repoIcon", "forkIconFragment", this)); - Fragment forkFrag = new Fragment("originRepository", "originFragment", this); + add(new Fragment("repoIcon", "forkIconFragment", RepositoryPage.this)); + Fragment forkFrag = new Fragment("originRepository", "originFragment", RepositoryPage.this); forkFrag.add(new LinkPanel("originRepository", null, StringUtils.stripDotGit(model.originRepository), SummaryPage.class, WicketUtils.newRepositoryParameter(model.originRepository))); add(forkFrag); @@ -354,7 +355,7 @@ protected void setupPage(String repositoryName, String pageName) { // (un)star link allows a user to star a repository if (user.isAuthenticated && model.hasCommits) { PageParameters starParams = DeepCopier.copy(getPageParameters()); - starParams.put(PARAM_STAR, !user.getPreferences().isStarredRepository(model.name)); + starParams.add(PARAM_STAR, !user.getPreferences().isStarredRepository(model.name)); String toggleStarUrl = getRequestCycle().urlFor(getClass(), starParams).toString(); if (user.getPreferences().isStarredRepository(model.name)) { // show unstar button @@ -414,18 +415,18 @@ protected void setupPage(String repositoryName, String pageName) { } protected void addToolbarButton(String wicketId, String iconClass, String label, String url) { - Fragment button = new Fragment(wicketId, "toolbarLinkFragment", this); + Fragment button = new Fragment(wicketId, "toolbarLinkFragment", RepositoryPage.this); Label icon = new Label("icon"); WicketUtils.setCssClass(icon, iconClass); button.add(icon); button.add(new Label("label", label)); - button.add(new SimpleAttributeModifier("href", url)); + button.add(new AttributeModifier("href", url)); add(button); } protected void addSyndicationDiscoveryLink() { add(WicketUtils.syndicationDiscoveryLink(SyndicationServlet.getTitle(repositoryName, - objectId), SyndicationServlet.asLink(getRequest() + objectId), SyndicationServlet.asLink(GitBlitRequestUtils .getRelativePathPrefixToContextRoot(), repositoryName, objectId, 0))); } @@ -620,14 +621,14 @@ protected Component createPersonPanel(String wicketId, PersonIdent identity, value = getString("gb.missingUsername"); } } - Fragment partial = new Fragment(wicketId, "partialPersonIdent", this); + Fragment partial = new Fragment(wicketId, "partialPersonIdent", RepositoryPage.this); LinkPanel link = new LinkPanel("personName", "list", value, GitSearchPage.class, WicketUtils.newSearchParameter(repositoryName, objectId, value, searchType)); setPersonSearchTooltip(link, value, searchType); partial.add(link); return partial; } else { - Fragment fullPerson = new Fragment(wicketId, "fullPersonIdent", this); + Fragment fullPerson = new Fragment(wicketId, "fullPersonIdent", RepositoryPage.this); LinkPanel nameLink = new LinkPanel("personName", "list", name, GitSearchPage.class, WicketUtils.newSearchParameter(repositoryName, objectId, name, searchType)); setPersonSearchTooltip(nameLink, name, searchType); @@ -763,7 +764,7 @@ public void onSubmit() { if (StringUtils.isEmpty(searchString)) { // redirect to self to avoid wicket page update bug String absoluteUrl = getCanonicalUrl(); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); return; } for (Constants.SearchType type : Constants.SearchType.values()) { @@ -785,7 +786,7 @@ public void onSubmit() { // mounted url parameters (issue-111) PageParameters params = WicketUtils.newSearchParameter(repositoryName, null, searchString, searchType); String absoluteUrl = getCanonicalUrl(searchPageClass, params); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); } } } diff --git a/src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java b/src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java index ceca1ec22..ec785eafd 100644 --- a/src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java +++ b/src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java @@ -19,7 +19,7 @@ import java.util.ArrayList; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import com.gitblit.Constants.FederationToken; diff --git a/src/main/java/com/gitblit/wicket/pages/RootPage.java b/src/main/java/com/gitblit/wicket/pages/RootPage.java index 12779ca26..0d802816c 100644 --- a/src/main/java/com/gitblit/wicket/pages/RootPage.java +++ b/src/main/java/com/gitblit/wicket/pages/RootPage.java @@ -34,12 +34,16 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; -import org.apache.wicket.PageParameters; -import org.apache.wicket.RequestCycle; -import org.apache.wicket.behavior.HeaderContributor; +import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.request.cycle.RequestCycle; +import org.apache.wicket.request.http.WebRequest; +import org.apache.wicket.request.http.WebResponse; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.markup.head.CssHeaderItem; +import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.html.IHeaderContributor; -import org.apache.wicket.markup.html.IHeaderResponse; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -49,8 +53,6 @@ import org.apache.wicket.markup.repeater.data.ListDataProvider; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; -import org.apache.wicket.protocol.http.WebRequest; -import org.apache.wicket.protocol.http.WebResponse; import com.gitblit.Constants; import com.gitblit.Constants.AuthenticationType; @@ -68,6 +70,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.ModelUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; @@ -87,6 +90,8 @@ */ public abstract class RootPage extends BasePage { + private static final long serialVersionUID = 1L; + boolean showAdmin; IModel username = new Model(""); @@ -105,13 +110,13 @@ public RootPage(PageParameters params) { protected void setupPage(String repositoryName, String pageName) { // CSS header overrides - add(new HeaderContributor(new IHeaderContributor() { + add(new Behavior() { private static final long serialVersionUID = 1L; @Override - public void renderHead(IHeaderResponse response) { + public void renderHead(Component component, IHeaderResponse response) { StringBuilder buffer = new StringBuilder(); - buffer.append("\n"); - response.renderString(buffer.toString()); +// buffer.append("\n"); + response.render(CssHeaderItem.forCSS(buffer.toString(), "rootCss")); } - })); + }); boolean authenticateView = app().settings().getBoolean(Keys.web.authenticateViewPages, false); boolean authenticateAdmin = app().settings().getBoolean(Keys.web.authenticateAdminPages, true); @@ -255,8 +260,8 @@ private PageParameters getRootPageParameters() { params.remove("user"); // remove days back parameter if it is the default value - if (params.containsKey("db") - && params.getInt("db") == app().settings().getInteger(Keys.web.activityDuration, 7)) { + if (!params.get("db").isEmpty() + && params.get("db").toInt() == app().settings().getInteger(Keys.web.activityDuration, 7)) { params.remove("db"); } return params; @@ -271,8 +276,8 @@ protected boolean reusePageParameters() { private void loginUser(UserModel user) { if (user != null) { - HttpServletRequest request = ((WebRequest) getRequest()).getHttpServletRequest(); - HttpServletResponse response = ((WebResponse) getResponse()).getHttpServletResponse(); + HttpServletRequest request = GitBlitRequestUtils.getServletRequest(); + HttpServletResponse response = GitBlitRequestUtils.getServletResponse(); // Set the user into the session GitBlitWebSession session = GitBlitWebSession.get(); @@ -281,8 +286,8 @@ private void loginUser(UserModel user) { session.replaceSession(); session.setUser(user); - request = ((WebRequest) getRequest()).getHttpServletRequest(); - response = ((WebResponse) getResponse()).getHttpServletResponse(); + request = GitBlitRequestUtils.getServletRequest(); + response = GitBlitRequestUtils.getServletResponse(); request.getSession().setAttribute(Constants.ATTRIB_AUTHTYPE, AuthenticationType.CREDENTIALS); // Set Cookie @@ -393,8 +398,8 @@ protected List getTimeFilterItems(PageParameters params) { clonedParams = new PageParameters(params); } - if (!clonedParams.containsKey("db")) { - clonedParams.put("db", daysBack); + if (clonedParams.get("db").isEmpty()) { + clonedParams.add("db", daysBack); } List items = new ArrayList(); @@ -434,7 +439,7 @@ protected List getRepositories(PageParameters params) { String set = WicketUtils.getSet(params); String regex = WicketUtils.getRegEx(params); String team = WicketUtils.getTeam(params); - int daysBack = params.getInt("db", 0); + int daysBack = params.get("db").toInt(0); int maxDaysBack = app().settings().getInteger(Keys.web.activityDurationMaximum, 30); List availableModels = getRepositoryModels(); @@ -569,7 +574,7 @@ public void onSubmit() { String username = RootPage.this.username.getObject(); char[] password = RootPage.this.password.getObject().toCharArray(); - HttpServletRequest request = ((WebRequest)RequestCycle.get().getRequest()).getHttpServletRequest(); + HttpServletRequest request = GitBlitRequestUtils.getServletRequest(); UserModel user = app().authentication().authenticate(username, password, request.getRemoteAddr()); if (user == null) { @@ -613,7 +618,7 @@ protected void onInitialize() { GitBlitWebSession session = GitBlitWebSession.get(); UserModel user = session.getUser(); boolean editCredentials = app().authentication().supportsCredentialChanges(user); - HttpServletRequest request = ((WebRequest) getRequest()).getHttpServletRequest(); + HttpServletRequest request = GitBlitRequestUtils.getServletRequest(); AuthenticationType authenticationType = (AuthenticationType) request.getAttribute(Constants.ATTRIB_AUTHTYPE); boolean standardLogin = (null != authenticationType) ? authenticationType.isStandard() : true; @@ -687,7 +692,7 @@ protected void onInitialize() { * @return a submenu fragment */ private Fragment newSubmenu(String wicketId, String submenuTitle, List menuItems) { - Fragment submenu = new Fragment(wicketId, "submenuFragment", this); + Fragment submenu = new Fragment(wicketId, "submenuFragment", RootPage.this); submenu.add(new Label("submenuTitle", submenuTitle).setRenderBodyOnly(true)); ListDataProvider menuItemsDp = new ListDataProvider(menuItems); DataView submenuItems = new DataView("submenuItem", menuItemsDp) { diff --git a/src/main/java/com/gitblit/wicket/pages/RootSubPage.java b/src/main/java/com/gitblit/wicket/pages/RootSubPage.java index 62d07a7f8..76111dbac 100644 --- a/src/main/java/com/gitblit/wicket/pages/RootSubPage.java +++ b/src/main/java/com/gitblit/wicket/pages/RootSubPage.java @@ -18,7 +18,7 @@ import java.util.ArrayList; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.Session; import org.apache.wicket.markup.html.basic.Label; @@ -57,7 +57,8 @@ protected void createPageMapIfNeeded() { // Wicket seems to get confused as to when it really should // generate a page map for complex pages. Conditionally ensure we // have a page map for complex AJAX pages like the EditNNN pages. - Session.get().pageMapForName(null, true); + //TODO: check if no longer needed +// Session.get().pageMapForName(null, true); setVersioned(true); } } diff --git a/src/main/java/com/gitblit/wicket/pages/SendProposalPage.java b/src/main/java/com/gitblit/wicket/pages/SendProposalPage.java index 9ccf1aa2e..aa073cf77 100644 --- a/src/main/java/com/gitblit/wicket/pages/SendProposalPage.java +++ b/src/main/java/com/gitblit/wicket/pages/SendProposalPage.java @@ -19,7 +19,7 @@ import java.util.ArrayList; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; diff --git a/src/main/java/com/gitblit/wicket/pages/SessionPage.java b/src/main/java/com/gitblit/wicket/pages/SessionPage.java index d715aaeef..cb3a9bae1 100644 --- a/src/main/java/com/gitblit/wicket/pages/SessionPage.java +++ b/src/main/java/com/gitblit/wicket/pages/SessionPage.java @@ -18,15 +18,16 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.http.WebRequest; +import org.apache.wicket.request.http.WebResponse; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.protocol.http.WebRequest; -import org.apache.wicket.protocol.http.WebResponse; import com.gitblit.Constants; import com.gitblit.Constants.AuthenticationType; import com.gitblit.Keys; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebApp; import com.gitblit.wicket.GitBlitWebSession; @@ -53,8 +54,8 @@ protected GitBlitWebApp app() { private void login() { GitBlitWebSession session = GitBlitWebSession.get(); - HttpServletRequest request = ((WebRequest) getRequest()).getHttpServletRequest(); - HttpServletResponse response = ((WebResponse) getResponse()).getHttpServletResponse(); + HttpServletRequest request = GitBlitRequestUtils.getServletRequest(); + HttpServletResponse response = GitBlitRequestUtils.getServletResponse(); // If using container/external servlet authentication, use request attribute String authedUser = (String) request.getAttribute(Constants.ATTRIB_AUTHUSER); diff --git a/src/main/java/com/gitblit/wicket/pages/SummaryPage.java b/src/main/java/com/gitblit/wicket/pages/SummaryPage.java index 3cfa152e8..485f4d0aa 100644 --- a/src/main/java/com/gitblit/wicket/pages/SummaryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/SummaryPage.java @@ -23,8 +23,7 @@ import java.util.List; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.HeaderContributor; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.Fragment; @@ -144,7 +143,7 @@ public void populateItem(final Item item) { if (markupDoc == null || markupDoc.markup == null) { add(new Label("readme").setVisible(false)); } else { - Fragment fragment = new Fragment("readme", MarkupSyntax.PLAIN.equals(markupDoc.syntax) ? "plaintextPanel" : "markdownPanel", this); + Fragment fragment = new Fragment("readme", MarkupSyntax.PLAIN.equals(markupDoc.syntax) ? "plaintextPanel" : "markdownPanel", SummaryPage.this); fragment.add(new Label("readmeFile", markupDoc.documentPath)); // Add the html to the page Component content = new Label("readmeContent", markupDoc.html).setEscapeModelStrings(false); @@ -160,7 +159,7 @@ public void populateItem(final Item item) { add(new Label("commitsChart").setVisible(false)); } else { Charts charts = createCharts(metrics); - add(new HeaderContributor(charts)); + add(charts); } } diff --git a/src/main/java/com/gitblit/wicket/pages/TagPage.java b/src/main/java/com/gitblit/wicket/pages/TagPage.java index ffeea6f23..1aa6c15d7 100644 --- a/src/main/java/com/gitblit/wicket/pages/TagPage.java +++ b/src/main/java/com/gitblit/wicket/pages/TagPage.java @@ -20,7 +20,7 @@ import java.util.Date; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.eclipse.jgit.lib.Constants; diff --git a/src/main/java/com/gitblit/wicket/pages/TagsPage.java b/src/main/java/com/gitblit/wicket/pages/TagsPage.java index d6b8abb26..367cd54e5 100644 --- a/src/main/java/com/gitblit/wicket/pages/TagsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/TagsPage.java @@ -15,7 +15,7 @@ */ package com.gitblit.wicket.pages; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import com.gitblit.wicket.CacheControl; import com.gitblit.wicket.CacheControl.LastModified; diff --git a/src/main/java/com/gitblit/wicket/pages/TicketPage.java b/src/main/java/com/gitblit/wicket/pages/TicketPage.java index e2133966a..77d2236a5 100644 --- a/src/main/java/com/gitblit/wicket/pages/TicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/TicketPage.java @@ -35,10 +35,9 @@ import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.image.ContextImage; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -51,7 +50,6 @@ import org.apache.wicket.markup.repeater.data.ListDataProvider; import org.apache.wicket.model.Model; import org.apache.wicket.protocol.http.RequestUtils; -import org.apache.wicket.protocol.http.WebRequest; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Ref; @@ -87,6 +85,7 @@ import com.gitblit.utils.JGitUtils; import com.gitblit.utils.JGitUtils.MergeStatus; import com.gitblit.utils.CommitCache; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.MarkdownUtils; import com.gitblit.utils.RefLogUtils; import com.gitblit.utils.StringUtils; @@ -265,7 +264,7 @@ public TicketPage(PageParameters params) { } else { milestoneParameters = WicketUtils.newRepositoryParameter(repositoryName); } - milestoneParameters.put(Lucene.milestone.name(), ticket.milestone); + milestoneParameters.add(Lucene.milestone.name(), ticket.milestone); int progress = 0; int open = 0; int closed = 0; @@ -275,7 +274,7 @@ public TicketPage(PageParameters params) { closed = tm.getClosedTickets(); } - Fragment milestoneProgress = new Fragment("milestone", "milestoneProgressFragment", this); + Fragment milestoneProgress = new Fragment("milestone", "milestoneProgressFragment", TicketPage.this); milestoneProgress.add(new LinkPanel("link", null, ticket.milestone, TicketsPage.class, milestoneParameters)); Label label = new Label("progress"); WicketUtils.setCssStyle(label, "width:" + progress + "%;"); @@ -334,7 +333,7 @@ public void populateItem(final Item item) { /* * LARGE STATUS INDICATOR WITH ICON (DISCUSSION TAB->SIDE BAR) */ - Fragment ticketStatus = new Fragment("ticketStatus", "ticketStatusFragment", this); + Fragment ticketStatus = new Fragment("ticketStatus", "ticketStatusFragment", TicketPage.this); Label ticketIcon = TicketsUI.getStateIcon("ticketIcon", ticket); ticketStatus.add(ticketIcon); ticketStatus.add(new Label("ticketStatus", ticket.status.toString())); @@ -350,7 +349,7 @@ public void populateItem(final Item item) { /* * OPEN TICKET */ - Fragment controls = new Fragment("controls", "openControlsFragment", this); + Fragment controls = new Fragment("controls", "openControlsFragment", TicketPage.this); /* * STATUS @@ -510,7 +509,7 @@ public void onClick(AjaxRequestTarget target) { /* * CLOSED TICKET */ - Fragment controls = new Fragment("controls", "closedControlsFragment", this); + Fragment controls = new Fragment("controls", "closedControlsFragment", TicketPage.this); String editHref = urlFor(EditTicketPage.class, params).toString(); controls.add(new ExternalLink("editLink", editHref, getString("gb.edit"))); @@ -635,7 +634,7 @@ public void populateItem(final Item item) { Label label = new Label("label", value); TicketLabel tLabel = app().tickets().getLabel(repository, value); String background = MessageFormat.format("background-color:{0};", tLabel.color); - label.add(new SimpleAttributeModifier("style", background)); + label.add(new AttributeModifier("style", background)); item.add(label); } }; @@ -649,7 +648,7 @@ public void populateItem(final Item item) { if (comments.size() == 0) { add(new Label("discussion").setVisible(false)); } else { - Fragment discussionFragment = new Fragment("discussion", "discussionFragment", this); + Fragment discussionFragment = new Fragment("discussion", "discussionFragment", TicketPage.this); ListDataProvider discussionDp = new ListDataProvider(discussion); DataView discussionView = new DataView("discussion", discussionDp) { private static final long serialVersionUID = 1L; @@ -682,7 +681,7 @@ public void populateItem(final Item item) { commitLink = mergedPatch.toString(); } - Fragment mergeFragment = new Fragment("entry", "mergeFragment", this); + Fragment mergeFragment = new Fragment("entry", "mergeFragment", TicketPage.this); mergeFragment.add(new LinkPanel("commitLink", null, commitLink, CommitPage.class, WicketUtils.newObjectParameter(repositoryName, resolvedBy))); mergeFragment.add(new Label("toBranch", MessageFormat.format(getString("gb.toBranch"), @@ -695,7 +694,7 @@ public void populateItem(final Item item) { /* * STATUS CHANGE */ - Fragment frag = new Fragment("entry", "statusFragment", this); + Fragment frag = new Fragment("entry", "statusFragment", TicketPage.this); Label status = new Label("statusChange", entry.getStatus().toString()); String css = TicketsUI.getLozengeClass(entry.getStatus(), false); WicketUtils.setCssClass(status, css); @@ -710,7 +709,7 @@ public void populateItem(final Item item) { String bugtraq = bugtraqProcessor().processText(getRepository(), repositoryName, entry.comment.text); String comment = MarkdownUtils.transformGFM(app().settings(), bugtraq, repositoryName); String safeComment = app().xssFilter().relaxed(comment); - Fragment frag = new Fragment("entry", "commentFragment", this); + Fragment frag = new Fragment("entry", "commentFragment", TicketPage.this); Label commentIcon = new Label("commentIcon"); if (entry.comment.src == CommentSource.Email) { WicketUtils.setCssClass(commentIcon, "iconic-mail"); @@ -742,7 +741,7 @@ public void populateItem(final Item item) { add(new Label("newComment").setVisible(false)); } else { // permit user to comment - Fragment newComment = new Fragment("newComment", "newCommentFragment", this); + Fragment newComment = new Fragment("newComment", "newCommentFragment", TicketPage.this); AvatarImage img = new AvatarImage("newCommentAvatar", user.username, user.emailAddress, "gravatar-round", avatarWidth, true); newComment.add(img); @@ -763,7 +762,7 @@ public void populateItem(final Item item) { if (ticket.isOpen() && app().tickets().isAcceptingNewPatchsets(repository) && canPropose) { // ticket & repo will accept a proposal patchset // show the instructions for proposing a patchset - Fragment changeIdFrag = new Fragment("patchset", "proposeFragment", this); + Fragment changeIdFrag = new Fragment("patchset", "proposeFragment", TicketPage.this); changeIdFrag.add(new Label("proposeInstructions", MarkdownUtils.transformMarkdown(getString("gb.proposeInstructions"))).setEscapeModelStrings(false)); changeIdFrag.add(new Label("ptWorkflow", MessageFormat.format(getString("gb.proposeWith"), "Barnum"))); changeIdFrag.add(new Label("ptWorkflowSteps", getProposeWorkflow("propose_pt.md", repoUrl.url, ticket.number)).setEscapeModelStrings(false)); @@ -772,7 +771,7 @@ public void populateItem(final Item item) { add(changeIdFrag); } else { // explain why you can't propose a patchset - Fragment fragment = new Fragment("patchset", "canNotProposeFragment", this); + Fragment fragment = new Fragment("patchset", "canNotProposeFragment", TicketPage.this); String reason = ""; if (ticket.isClosed()) { reason = getString("gb.ticketIsClosed"); @@ -796,7 +795,7 @@ public void populateItem(final Item item) { } } else { // show current patchset - Fragment patchsetFrag = new Fragment("patchset", "patchsetFragment", this); + Fragment patchsetFrag = new Fragment("patchset", "patchsetFragment", TicketPage.this); patchsetFrag.add(new Label("commitsInPatchset", MessageFormat.format(getString("gb.commitsInPatchsetN"), currentPatchset.number))); patchsetFrag.add(createMergePanel(user, repository)); @@ -843,7 +842,7 @@ public void populateItem(final Item item) { /* * ACTIVITY TAB */ - Fragment revisionHistory = new Fragment("activity", "activityFragment", this); + Fragment revisionHistory = new Fragment("activity", "activityFragment", TicketPage.this); List events = new ArrayList(ticket.changes); Collections.sort(events); Collections.reverse(events); @@ -1091,7 +1090,7 @@ protected Fragment createPatchsetPanel(String wicketId, RepositoryModel reposito patchsets.remove(currentPatchset); Collections.reverse(patchsets); - Fragment panel = new Fragment(wicketId, "collapsiblePatchsetFragment", this); + Fragment panel = new Fragment(wicketId, "collapsiblePatchsetFragment", TicketPage.this); // patchset header String ps = "" + currentPatchset.number + ""; @@ -1168,7 +1167,7 @@ public void populateItem(final Item item) { } // user can review, add review controls - Fragment reviewControls = new Fragment("reviewControls", "reviewControlsFragment", this); + Fragment reviewControls = new Fragment("reviewControls", "reviewControlsFragment", TicketPage.this); // show "approve" button if no review OR not current score if (user.canApprovePatchset(repository) && (myReview == null || Score.approved != myReview.score)) { @@ -1362,7 +1361,7 @@ protected void review(Score score) { } protected X setNewTarget(X x) { - x.add(new SimpleAttributeModifier("target", "_blank")); + x.add(new AttributeModifier("target", "_blank")); return x; } @@ -1416,7 +1415,7 @@ protected Component createMergePanel(UserModel user, RepositoryModel repository) if (allowMerge) { if (MergeStatus.MERGEABLE == mergeStatus) { // patchset can be cleanly merged to integration branch OR has already been merged - Fragment mergePanel = new Fragment("mergePanel", "mergeableFragment", this); + Fragment mergePanel = new Fragment("mergePanel", "mergeableFragment", TicketPage.this); mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetMergeable"), ticket.mergeTo))); if (user.canPush(repository)) { // user can merge locally @@ -1483,18 +1482,18 @@ public void run() { return mergePanel; } else if (MergeStatus.ALREADY_MERGED == mergeStatus) { // patchset already merged - Fragment mergePanel = new Fragment("mergePanel", "alreadyMergedFragment", this); + Fragment mergePanel = new Fragment("mergePanel", "alreadyMergedFragment", TicketPage.this); mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetAlreadyMerged"), ticket.mergeTo))); return mergePanel; } else if (MergeStatus.MISSING_INTEGRATION_BRANCH == mergeStatus) { // target/integration branch is missing - Fragment mergePanel = new Fragment("mergePanel", "notMergeableFragment", this); + Fragment mergePanel = new Fragment("mergePanel", "notMergeableFragment", TicketPage.this); mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetNotMergeable"), ticket.mergeTo))); mergePanel.add(new Label("mergeMore", MessageFormat.format(getString("gb.missingIntegrationBranchMore"), ticket.mergeTo))); return mergePanel; } else { // patchset can not be cleanly merged - Fragment mergePanel = new Fragment("mergePanel", "notMergeableFragment", this); + Fragment mergePanel = new Fragment("mergePanel", "notMergeableFragment", TicketPage.this); mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetNotMergeable"), ticket.mergeTo))); if (user.canPush(repository)) { // user can merge locally @@ -1509,17 +1508,17 @@ public void run() { // merge not allowed if (MergeStatus.ALREADY_MERGED == mergeStatus) { // patchset already merged - Fragment mergePanel = new Fragment("mergePanel", "alreadyMergedFragment", this); + Fragment mergePanel = new Fragment("mergePanel", "alreadyMergedFragment", TicketPage.this); mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetAlreadyMerged"), ticket.mergeTo))); return mergePanel; } else if (ticket.isVetoed(patchset)) { // patchset has been vetoed - Fragment mergePanel = new Fragment("mergePanel", "vetoedFragment", this); + Fragment mergePanel = new Fragment("mergePanel", "vetoedFragment", TicketPage.this); mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetNotMergeable"), ticket.mergeTo))); return mergePanel; } else if (repository.requireApproval) { // patchset has been not been approved for merge - Fragment mergePanel = new Fragment("mergePanel", "notApprovedFragment", this); + Fragment mergePanel = new Fragment("mergePanel", "notApprovedFragment", TicketPage.this); mergePanel.add(new Label("mergeTitle", MessageFormat.format(getString("gb.patchsetNotApproved"), ticket.mergeTo))); mergePanel.add(new Label("mergeMore", MessageFormat.format(getString("gb.patchsetNotApprovedMore"), ticket.mergeTo))); return mergePanel; @@ -1531,7 +1530,7 @@ public void run() { } protected Component getMergeInstructions(UserModel user, RepositoryModel repository, String markupId, String infoKey) { - Fragment cmd = new Fragment(markupId, "commandlineMergeFragment", this); + Fragment cmd = new Fragment(markupId, "commandlineMergeFragment", TicketPage.this); cmd.add(new Label("instructions", MessageFormat.format(getString(infoKey), ticket.mergeTo))); // git instructions @@ -1569,7 +1568,7 @@ protected Component getMergeInstructions(UserModel user, RepositoryModel reposit * @return the primary repository url */ protected RepositoryUrl getRepositoryUrl(UserModel user, RepositoryModel repository) { - HttpServletRequest req = ((WebRequest) getRequest()).getHttpServletRequest(); + HttpServletRequest req = GitBlitRequestUtils.getServletRequest(); List urls = app().services().getRepositoryUrls(req, user, repository); if (ArrayUtils.isEmpty(urls)) { return null; @@ -1640,7 +1639,7 @@ protected String getPageTitle(String repositoryName) { protected Fragment createCopyFragment(String wicketId, String text) { if (app().settings().getBoolean(Keys.web.allowFlashCopyToClipboard, true)) { // clippy: flash-based copy & paste - Fragment copyFragment = new Fragment(wicketId, "clippyPanel", this); + Fragment copyFragment = new Fragment(wicketId, "clippyPanel", TicketPage.this); String baseUrl = WicketUtils.getGitblitURL(getRequest()); ShockWaveComponent clippy = new ShockWaveComponent("clippy", baseUrl + "/clippy.swf"); clippy.setValue("flashVars", "text=" + StringUtils.encodeURL(text)); @@ -1648,9 +1647,9 @@ protected Fragment createCopyFragment(String wicketId, String text) { return copyFragment; } else { // javascript: manual copy & paste with modal browser prompt dialog - Fragment copyFragment = new Fragment(wicketId, "jsPanel", this); + Fragment copyFragment = new Fragment(wicketId, "jsPanel", TicketPage.this); ContextImage img = WicketUtils.newImage("copyIcon", "clippy.png"); - img.add(new JavascriptTextPrompt("onclick", "Copy to Clipboard (Ctrl+C, Enter)", text)); + img.add(new JavascriptTextPrompt("click", "Copy to Clipboard (Ctrl+C, Enter)", text)); copyFragment.add(img); return copyFragment; } @@ -1723,15 +1722,14 @@ public void onClick() { } //Force reload of the page to rebuild ticket change cache - String relativeUrl = urlFor(TicketsPage.class, getPageParameters()).toString(); - String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl); + String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(TicketsPage.class, getPageParameters()); setResponsePage(new RedirectPage(absoluteUrl)); } }; WicketUtils.setHtmlTooltip(deleteLink, MessageFormat.format(getString("gb.deletePatchset"), patchset.number)); - deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(getString("gb.deletePatchset"), patchset.number))); + deleteLink.add(new JavascriptEventConfirmation("click", MessageFormat.format(getString("gb.deletePatchset"), patchset.number))); return deleteLink; } diff --git a/src/main/java/com/gitblit/wicket/pages/TicketsPage.java b/src/main/java/com/gitblit/wicket/pages/TicketsPage.java index ecfed250f..560cd40d9 100644 --- a/src/main/java/com/gitblit/wicket/pages/TicketsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/TicketsPage.java @@ -24,9 +24,10 @@ import java.util.Set; import java.util.TreeSet; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.SimpleAttributeModifier; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.util.string.StringValue; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.Fragment; @@ -87,13 +88,13 @@ public TicketsPage(PageParameters params) { UserModel user = GitBlitWebSession.get().getUser(); boolean isAuthenticated = user != null && user.isAuthenticated; - final String [] statiiParam = params.getStringArray(Lucene.status.name()); - final String assignedToParam = params.getString(Lucene.responsible.name(), null); - final String milestoneParam = params.getString(Lucene.milestone.name(), null); - final String queryParam = params.getString("q", null); - final String searchParam = params.getString("s", null); - final String sortBy = Lucene.fromString(params.getString("sort", Lucene.created.name())).name(); - final boolean desc = !"asc".equals(params.getString("direction", "desc")); + final String [] statiiParam = (String[]) params.getValues(Lucene.status.name()).stream().map(StringValue::toString).toArray(); + final String assignedToParam = params.get(Lucene.responsible.name()).toString(null); + final String milestoneParam = params.get(Lucene.milestone.name()).toString(null); + final String queryParam = params.get("q").toString(null); + final String searchParam = params.get("s").toString(null); + final String sortBy = Lucene.fromString(params.get("sort").toString( Lucene.created.name())).name(); + final boolean desc = !"asc".equals(params.get("direction").toString("desc")); // add search form add(new TicketSearchForm("ticketSearchForm", repositoryName, searchParam, getClass(), params)); @@ -164,10 +165,10 @@ public TicketsPage(PageParameters params) { Fragment milestonePanel; if (currentMilestone == null) { - milestonePanel = new Fragment("milestonePanel", "noMilestoneFragment", this); + milestonePanel = new Fragment("milestonePanel", "noMilestoneFragment", TicketsPage.this); add(milestonePanel); } else { - milestonePanel = new Fragment("milestonePanel", "milestoneProgressFragment", this); + milestonePanel = new Fragment("milestonePanel", "milestoneProgressFragment", TicketsPage.this); milestonePanel.add(new Label("currentMilestone", currentMilestone.name)); if (currentMilestone.due == null) { milestonePanel.add(new Label("currentDueDate", getString("gb.notSpecified"))); @@ -193,7 +194,7 @@ public TicketsPage(PageParameters params) { add(milestonePanel); } - Fragment milestoneDropdown = new Fragment("milestoneDropdown", "milestoneDropdownFragment", this); + Fragment milestoneDropdown = new Fragment("milestoneDropdown", "milestoneDropdownFragment", TicketsPage.this); PageParameters resetMilestone = queryParameters(queryParam, null, statiiParam, assignedToParam, sortBy, desc, 1); milestoneDropdown.add(new BookmarkablePageLink("resetMilestone", TicketsPage.class, resetMilestone)); @@ -353,7 +354,7 @@ public void populateItem(final Item item) { if (dynamicQueries.size() == 0) { add(new Label("dynamicQueries").setVisible(false)); } else { - Fragment fragment = new Fragment("dynamicQueries", "dynamicQueriesFragment", this); + Fragment fragment = new Fragment("dynamicQueries", "dynamicQueriesFragment", TicketsPage.this); ListDataProvider dynamicQueriesDp = new ListDataProvider(new ArrayList(dynamicQueries)); DataView dynamicQueriesList = new DataView("dynamicQuery", dynamicQueriesDp) { private static final long serialVersionUID = 1L; @@ -367,7 +368,7 @@ public void populateItem(final Item item) { tq.color = StringUtils.getColor(tq.name); } String background = MessageFormat.format("background-color:{0};", tq.color); - swatch.add(new SimpleAttributeModifier("style", background)); + swatch.add(new AttributeModifier("style", background)); item.add(swatch); if (activeQuery.contains(tq.query)) { // selected @@ -377,7 +378,7 @@ public void populateItem(final Item item) { Label checked = new Label("checked"); WicketUtils.setCssClass(checked, "iconic-o-x"); item.add(checked); - item.add(new SimpleAttributeModifier("style", background)); + item.add(new AttributeModifier("style", background)); } else { // unselected String q = QueryBuilder.q(queryParam).toSubquery().and(tq.query).build(); @@ -546,7 +547,7 @@ protected DataView milestoneList(String wicketId, List item) { - Fragment entryPanel = new Fragment("entryPanel", "milestoneListFragment", this); + Fragment entryPanel = new Fragment("entryPanel", "milestoneListFragment", TicketsPage.this); item.add(entryPanel); final TicketMilestone tm = item.getModelObject(); @@ -594,7 +595,7 @@ public void populateItem(final Item item) { // re-load milestone with query results TicketMilestone m = app().tickets().getMilestone(getRepositoryModel(), tm.name); - Fragment milestonePanel = new Fragment("milestonePanel", "openMilestoneFragment", this); + Fragment milestonePanel = new Fragment("milestonePanel", "openMilestoneFragment", TicketsPage.this); Label label = new Label("progress"); WicketUtils.setCssStyle(label, "width:" + m.getProgress() + "%;"); milestonePanel.add(label); diff --git a/src/main/java/com/gitblit/wicket/pages/TreePage.java b/src/main/java/com/gitblit/wicket/pages/TreePage.java index eecad26e0..98bb1d7ac 100644 --- a/src/main/java/com/gitblit/wicket/pages/TreePage.java +++ b/src/main/java/com/gitblit/wicket/pages/TreePage.java @@ -18,7 +18,8 @@ import java.io.OutputStream; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; @@ -27,7 +28,6 @@ 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.request.target.resource.ResourceStreamRequestTarget; import org.apache.wicket.util.resource.AbstractResourceStreamWriter; import org.apache.wicket.util.resource.IResourceStream; import org.eclipse.jgit.lib.FileMode; @@ -39,6 +39,7 @@ import com.gitblit.models.UserModel; import com.gitblit.servlet.RawServlet; import com.gitblit.utils.ByteFormat; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.JGitUtils; import com.gitblit.wicket.CacheControl; import com.gitblit.wicket.GitBlitWebSession; @@ -52,6 +53,8 @@ @CacheControl(LastModified.BOOT) public class TreePage extends RepositoryPage { + private static final long serialVersionUID = 1L; + public TreePage(PageParameters params) { super(params); @@ -64,8 +67,8 @@ public TreePage(PageParameters params) { // tree page links add(new BookmarkablePageLink("historyLink", HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, path))); - add(new CompressedDownloadsPanel("compressedLinks", getRequest() - .getRelativePathPrefixToContextRoot(), repositoryName, objectId, path)); + add(new CompressedDownloadsPanel("compressedLinks", GitBlitRequestUtils.getRelativePathPrefixToContextRoot(), + repositoryName, objectId, path)); add(new CommitHeaderPanel("commitHeader", repositoryName, commit)); @@ -83,7 +86,7 @@ public TreePage(PageParameters params) { } final String id = getBestCommitId(commit); - + final ByteFormat byteFormat = new ByteFormat(); final String baseUrl = WicketUtils.getGitblitURL(getRequest()); @@ -96,10 +99,10 @@ public TreePage(PageParameters params) { @Override public void populateItem(final Item item) { final PathModel entry = item.getModelObject(); - + item.add(new Label("pathPermissions", JGitUtils.getPermissionsFromMode(entry.mode))); item.add(WicketUtils.setHtmlTooltip(new Label("filestore", ""), getString("gb.filestore")) - .setVisible(entry.isFilestoreItem())); + .setVisible(entry.isFilestoreItem())); if (entry.isParentPath) { // parent .. path @@ -114,19 +117,16 @@ public void populateItem(final Item item) { item.add(WicketUtils.newImage("pathIcon", "folder_16x16.png")); item.add(new Label("pathSize", "")); item.add(new LinkPanel("pathName", "list", entry.name, TreePage.class, - WicketUtils.newPathParameter(repositoryName, id, - entry.path))); + WicketUtils.newPathParameter(repositoryName, id, entry.path))); // links - Fragment links = new Fragment("pathLinks", "treeLinks", this); + Fragment links = new Fragment("pathLinks", "treeLinks", TreePage.this); links.add(new BookmarkablePageLink("tree", TreePage.class, - WicketUtils.newPathParameter(repositoryName, id, - entry.path))); + WicketUtils.newPathParameter(repositoryName, id, entry.path))); links.add(new BookmarkablePageLink("history", HistoryPage.class, - WicketUtils.newPathParameter(repositoryName, id, - entry.path))); - links.add(new CompressedDownloadsPanel("compressedLinks", baseUrl, - repositoryName, objectId, entry.path)); + WicketUtils.newPathParameter(repositoryName, id, entry.path))); + links.add(new CompressedDownloadsPanel("compressedLinks", baseUrl, repositoryName, objectId, + entry.path)); item.add(links); } else if (entry.isSubmodule()) { @@ -140,21 +140,20 @@ public void populateItem(final Item item) { item.add(WicketUtils.newImage("pathIcon", "git-orange-16x16.png")); item.add(new Label("pathSize", "")); - item.add(new LinkPanel("pathName", "list", entry.name + " @ " + - getShortObjectId(submoduleId), TreePage.class, - WicketUtils.newPathParameter(submodulePath, submoduleId, "")).setEnabled(hasSubmodule)); + item.add(new LinkPanel("pathName", "list", entry.name + " @ " + getShortObjectId(submoduleId), + TreePage.class, WicketUtils.newPathParameter(submodulePath, submoduleId, "")) + .setEnabled(hasSubmodule)); - Fragment links = new Fragment("pathLinks", "submoduleLinks", this); + Fragment links = new Fragment("pathLinks", "submoduleLinks", TreePage.this); links.add(new BookmarkablePageLink("view", SummaryPage.class, WicketUtils.newRepositoryParameter(submodulePath)).setEnabled(hasSubmodule)); links.add(new BookmarkablePageLink("tree", TreePage.class, - WicketUtils.newPathParameter(submodulePath, submoduleId, - "")).setEnabled(hasSubmodule)); + WicketUtils.newPathParameter(submodulePath, submoduleId, "")).setEnabled(hasSubmodule)); links.add(new BookmarkablePageLink("history", HistoryPage.class, - WicketUtils.newPathParameter(repositoryName, id, - entry.path))); - links.add(new CompressedDownloadsPanel("compressedLinks", baseUrl, - submodulePath, submoduleId, "").setEnabled(hasSubmodule)); + WicketUtils.newPathParameter(repositoryName, id, entry.path))); + links.add( + new CompressedDownloadsPanel("compressedLinks", baseUrl, submodulePath, submoduleId, "") + .setEnabled(hasSubmodule)); item.add(links); } else { // blob link @@ -166,101 +165,107 @@ public void populateItem(final Item item) { } item.add(WicketUtils.getFileImage("pathIcon", entry.name)); item.add(new Label("pathSize", byteFormat.format(entry.size))); - + // links - Fragment links = new Fragment("pathLinks", "blobLinks", this); - + Fragment links = new Fragment("pathLinks", "blobLinks", TreePage.this); + if (entry.isFilestoreItem()) { item.add(new LinkPanel("pathName", "list", displayPath, new Link("link", null) { - + private static final long serialVersionUID = 1L; @Override - public void onClick() { - - IResourceStream resourceStream = new AbstractResourceStreamWriter() { - + public void onClick() { + + IResourceStream resourceStream = new AbstractResourceStreamWriter() { + private static final long serialVersionUID = 1L; - @Override - public void write(OutputStream output) { - UserModel user = GitBlitWebSession.get().getUser(); - user = user == null ? UserModel.ANONYMOUS : user; - - app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); - } - }; - - - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }})); - + @Override + public void write(OutputStream output) { + UserModel user = GitBlitWebSession.get().getUser(); + user = user == null ? UserModel.ANONYMOUS : user; + + app().filestore().downloadBlob(entry.getFilestoreOid(), user, + getRepositoryModel(), output); + } + }; + + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); + + } + })); + links.add(new Link("view", null) { - + private static final long serialVersionUID = 1L; @Override - public void onClick() { - - IResourceStream resourceStream = new AbstractResourceStreamWriter() { - + public void onClick() { + + IResourceStream resourceStream = new AbstractResourceStreamWriter() { + private static final long serialVersionUID = 1L; - @Override - public void write(OutputStream output) { - UserModel user = GitBlitWebSession.get().getUser(); - user = user == null ? UserModel.ANONYMOUS : user; - - app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); - } - }; - - - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }}); - + @Override + public void write(OutputStream output) { + UserModel user = GitBlitWebSession.get().getUser(); + user = user == null ? UserModel.ANONYMOUS : user; + + app().filestore().downloadBlob(entry.getFilestoreOid(), user, + getRepositoryModel(), output); + } + }; + + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); + } + }); + links.add(new Link("raw", null) { - + private static final long serialVersionUID = 1L; @Override - public void onClick() { - - IResourceStream resourceStream = new AbstractResourceStreamWriter() { - + public void onClick() { + + IResourceStream resourceStream = new AbstractResourceStreamWriter() { + private static final long serialVersionUID = 1L; - @Override - public void write(OutputStream output) { - UserModel user = GitBlitWebSession.get().getUser(); - user = user == null ? UserModel.ANONYMOUS : user; - - app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); - } - }; - - - getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); - }}); - + @Override + public void write(OutputStream output) { + UserModel user = GitBlitWebSession.get().getUser(); + user = user == null ? UserModel.ANONYMOUS : user; + + app().filestore().downloadBlob(entry.getFilestoreOid(), user, + getRepositoryModel(), output); + } + }; + + ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler( + resourceStream, entry.path); + getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler); + } + }); + } else { item.add(new LinkPanel("pathName", "list", displayPath, BlobPage.class, - WicketUtils.newPathParameter(repositoryName, id, - path))); - + WicketUtils.newPathParameter(repositoryName, id, path))); + links.add(new BookmarkablePageLink("view", BlobPage.class, - WicketUtils.newPathParameter(repositoryName, id, - path))); + WicketUtils.newPathParameter(repositoryName, id, path))); String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, id, path); links.add(new ExternalLink("raw", rawUrl)); } - + links.add(new BookmarkablePageLink("blame", BlamePage.class, - WicketUtils.newPathParameter(repositoryName, id, - path))); + WicketUtils.newPathParameter(repositoryName, id, path))); links.add(new BookmarkablePageLink("history", HistoryPage.class, - WicketUtils.newPathParameter(repositoryName, id, - path))); + WicketUtils.newPathParameter(repositoryName, id, path))); item.add(links); } } diff --git a/src/main/java/com/gitblit/wicket/pages/UserPage.java b/src/main/java/com/gitblit/wicket/pages/UserPage.java index ea68f25b1..8908016cf 100644 --- a/src/main/java/com/gitblit/wicket/pages/UserPage.java +++ b/src/main/java/com/gitblit/wicket/pages/UserPage.java @@ -23,7 +23,7 @@ import java.util.List; import java.util.Locale; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.basic.Label; @@ -273,7 +273,7 @@ private void addPreferences(UserModel user) { private static final long serialVersionUID = 1L; @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + protected void onSubmit(AjaxRequestTarget target) { UserModel user = GitBlitWebSession.get().getUser(); @@ -291,7 +291,6 @@ protected void onSubmit(AjaxRequestTarget target, Form form) { try { app().gitblit().reviseUser(user.username, user); - setRedirect(true); setResponsePage(UserPage.class, WicketUtils.newUsernameParameter(user.username)); } catch (GitBlitException e) { // logger.error("Failed to update user " + user.username, e); @@ -302,17 +301,17 @@ protected void onSubmit(AjaxRequestTarget target, Form form) { // add the preferences tab add(new Fragment("preferencesLink", "preferencesLinkFragment", this).setRenderBodyOnly(true)); - Fragment fragment = new Fragment("preferencesTab", "preferencesTabFragment", this); + Fragment fragment = new Fragment("preferencesTab", "preferencesTabFragment", UserPage.this); fragment.add(prefs); add(fragment.setRenderBodyOnly(true)); } private void addSshKeys(final UserModel user) { - Fragment keysTab = new Fragment("sshKeysTab", "sshKeysTabFragment", this); + Fragment keysTab = new Fragment("sshKeysTab", "sshKeysTabFragment", UserPage.this); keysTab.add(new SshKeysPanel("sshKeysPanel", user)); // add the SSH keys tab - add(new Fragment("sshKeysLink", "sshKeysLinkFragment", this).setRenderBodyOnly(true)); + add(new Fragment("sshKeysLink", "sshKeysLinkFragment", UserPage.this).setRenderBodyOnly(true)); add(keysTab.setRenderBodyOnly(true)); } diff --git a/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java b/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java index 2c880247f..25895ec85 100644 --- a/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java @@ -145,7 +145,7 @@ protected void populateItem(ListItem item) { add(policiesGroup); if (app().settings().getBoolean(Keys.web.allowForking, true)) { - Fragment fragment = new Fragment("allowForks", "allowForksFragment", this); + Fragment fragment = new Fragment("allowForks", "allowForksFragment", AccessPolicyPanel.this); fragment.add(new BooleanOption("allowForks", getString("gb.allowForks"), getString("gb.allowForksDescription"), diff --git a/src/main/java/com/gitblit/wicket/panels/BasePanel.java b/src/main/java/com/gitblit/wicket/panels/BasePanel.java index 73f8e4717..f46e10b38 100644 --- a/src/main/java/com/gitblit/wicket/panels/BasePanel.java +++ b/src/main/java/com/gitblit/wicket/panels/BasePanel.java @@ -27,6 +27,7 @@ import com.gitblit.Constants; import com.gitblit.Keys; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.TimeUtils; import com.gitblit.wicket.GitBlitWebApp; import com.gitblit.wicket.GitBlitWebSession; @@ -56,7 +57,7 @@ protected Logger logger() { } protected String getContextUrl() { - return getRequest().getRelativePathPrefixToContextRoot(); + return GitBlitRequestUtils.getRelativePathPrefixToContextRoot(); } protected TimeZone getTimeZone() { @@ -90,7 +91,7 @@ public static class JavascriptEventConfirmation extends AttributeModifier { private static final long serialVersionUID = 1L; public JavascriptEventConfirmation(String event, String msg) { - super(event, true, new Model(msg)); + super(event, new Model(msg)); } @Override @@ -112,7 +113,7 @@ public static class JavascriptTextPrompt extends AttributeModifier { private String initialValue = ""; public JavascriptTextPrompt(String event, String msg, String value) { - super(event, true, new Model(msg)); + super(event, new Model(msg)); initialValue = value; } diff --git a/src/main/java/com/gitblit/wicket/panels/BooleanChoiceOption.java b/src/main/java/com/gitblit/wicket/panels/BooleanChoiceOption.java index 98a700b76..9c87a2a9e 100644 --- a/src/main/java/com/gitblit/wicket/panels/BooleanChoiceOption.java +++ b/src/main/java/com/gitblit/wicket/panels/BooleanChoiceOption.java @@ -61,14 +61,14 @@ private void setup() { add(choice.setMarkupId("choice").setEnabled(choice.getChoices().size() > 0)); choice.setEnabled(checkbox.getModelObject()); - checkbox.add(new AjaxFormComponentUpdatingBehavior("onchange") { + checkbox.add(new AjaxFormComponentUpdatingBehavior("change") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { choice.setEnabled(checkbox.getModelObject()); - target.addComponent(choice); + target.add(choice); if (!choice.isEnabled()) { choice.setModelObject(null); } diff --git a/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java b/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java index 7a564aa59..a6ff921da 100644 --- a/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java @@ -21,7 +21,8 @@ import java.util.Collections; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.http.handler.RedirectRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; @@ -31,8 +32,6 @@ import org.apache.wicket.markup.repeater.data.DataView; import org.apache.wicket.markup.repeater.data.ListDataProvider; import org.apache.wicket.model.StringResourceModel; -import org.apache.wicket.protocol.http.RequestUtils; -import org.apache.wicket.request.target.basic.RedirectRequestTarget; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; @@ -43,6 +42,7 @@ import com.gitblit.servlet.RawServlet; import com.gitblit.servlet.SyndicationServlet; import com.gitblit.utils.CommitCache; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.RefLogUtils; import com.gitblit.utils.StringUtils; @@ -140,21 +140,21 @@ public void populateItem(final Item item) { item.add(shortlog); if (maxCount <= 0) { - Fragment fragment = new Fragment("branchLinks", showDelete? "branchPageAdminLinks" : "branchPageLinks", this); + Fragment fragment = new Fragment("branchLinks", showDelete? "branchPageAdminLinks" : "branchPageLinks", BranchesPanel.this); fragment.add(new BookmarkablePageLink("log", LogPage.class, shortUniqRef)); fragment.add(new BookmarkablePageLink("tree", TreePage.class, shortUniqRef)); String rawUrl = RawServlet.asLink(getContextUrl(), model.name, Repository.shortenRefName(entry.getName()), null); fragment.add(new ExternalLink("raw", rawUrl)); fragment.add(new BookmarkablePageLink("metrics", MetricsPage.class, shortUniqRef)); fragment.add(new ExternalLink("syndication", SyndicationServlet.asLink( - getRequest().getRelativePathPrefixToContextRoot(), model.name, + GitBlitRequestUtils.getRelativePathPrefixToContextRoot(), model.name, Repository.shortenRefName(entry.getName()), 0))); if (showDelete) { fragment.add(createDeleteBranchLink(model, entry)); } item.add(fragment); } else { - Fragment fragment = new Fragment("branchLinks", "branchPanelLinks", this); + Fragment fragment = new Fragment("branchLinks", "branchPanelLinks", BranchesPanel.this); fragment.add(new BookmarkablePageLink("log", LogPage.class, shortUniqRef)); fragment.add(new BookmarkablePageLink("tree", TreePage.class, shortUniqRef)); String rawUrl = RawServlet.asLink(getContextUrl(), model.name, Repository.shortenRefName(entry.getName()), null); @@ -231,13 +231,12 @@ public void onClick() { // redirect to the owning page PageParameters params = WicketUtils.newRepositoryParameter(repositoryModel.name); - String relativeUrl = urlFor(getPage().getClass(), params).toString(); - String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); + String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(getPage().getClass(), params); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); } }; - deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format( + deleteLink.add(new JavascriptEventConfirmation("click", MessageFormat.format( "Delete branch \"{0}\"?", entry.displayName ))); return deleteLink; } diff --git a/src/main/java/com/gitblit/wicket/panels/CommentPanel.java b/src/main/java/com/gitblit/wicket/panels/CommentPanel.java index 2bc088998..4740130ae 100644 --- a/src/main/java/com/gitblit/wicket/panels/CommentPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/CommentPanel.java @@ -15,19 +15,19 @@ */ package com.gitblit.wicket.panels; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.http.handler.RedirectRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; -import org.apache.wicket.protocol.http.RequestUtils; -import org.apache.wicket.request.target.basic.RedirectRequestTarget; import com.gitblit.models.RepositoryModel; import com.gitblit.models.TicketModel; import com.gitblit.models.TicketModel.Change; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.models.UserModel; import com.gitblit.wicket.WicketUtils; import com.gitblit.wicket.pages.BasePage; @@ -69,7 +69,7 @@ protected void onInitialize() { private static final long serialVersionUID = 1L; @Override - public void onSubmit(AjaxRequestTarget target, Form form) { + public void onSubmit(AjaxRequestTarget target) { String txt = markdownEditor.getText(); if (change == null) { // new comment @@ -103,9 +103,8 @@ public void onSubmit(AjaxRequestTarget target, Form form) { */ private void redirectTo(Class pageClass, PageParameters parameters) { - String relativeUrl = urlFor(pageClass, parameters).toString(); - String canonicalUrl = RequestUtils.toAbsolutePath(relativeUrl); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(canonicalUrl)); + String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(pageClass, parameters); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); } }.setVisible(ticket != null && ticket.number > 0)); diff --git a/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java b/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java index b02e848ea..20d8a43c8 100644 --- a/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java @@ -76,7 +76,7 @@ public void onClick() { } } }; - deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format( + deleteLink.add(new JavascriptEventConfirmation("click", MessageFormat.format( "Delete proposal \"{0}\"?", entry.name))); item.add(deleteLink); WicketUtils.setAlternatingBackground(item, counter); diff --git a/src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java b/src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java index 3a269a939..952fba349 100644 --- a/src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java +++ b/src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; -import org.apache.wicket.behavior.HeaderContributor; import org.apache.wicket.markup.html.basic.Label; import com.gitblit.Keys; @@ -121,7 +120,7 @@ public int compare(ProjectModel o1, ProjectModel o2) { // inject an AngularJS controller with static data NgController ctrl = new NgController(ngCtrl); ctrl.addVariable(ngList, list); - add(new HeaderContributor(ctrl)); + add(ctrl); } protected class ProjectListItem implements Serializable { diff --git a/src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java b/src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java index e4ce5ced6..bf97d4f1b 100644 --- a/src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java +++ b/src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.Map; -import org.apache.wicket.behavior.HeaderContributor; import org.apache.wicket.markup.html.basic.Label; import com.gitblit.Keys; @@ -140,7 +139,7 @@ protected void onInitialize() { // inject an AngularJS controller with static data NgController ctrl = new NgController(ngCtrl); ctrl.addVariable(ngList, list); - add(new HeaderContributor(ctrl)); + add(ctrl); } protected class RepoListItem implements Serializable { diff --git a/src/main/java/com/gitblit/wicket/panels/HistoryPanel.java b/src/main/java/com/gitblit/wicket/panels/HistoryPanel.java index 75fd70e76..cf5854e1c 100644 --- a/src/main/java/com/gitblit/wicket/panels/HistoryPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/HistoryPanel.java @@ -207,7 +207,7 @@ public void populateItem(final Item item) { WicketUtils.setHtmlTooltip(commitHash, entry.getName()); item.add(commitHash); - Fragment links = new Fragment("historyLinks", "treeLinks", this); + Fragment links = new Fragment("historyLinks", "treeLinks", HistoryPanel.this); links.add(new BookmarkablePageLink("commitdiff", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); item.add(links); @@ -230,7 +230,7 @@ public void populateItem(final Item item) { WicketUtils.setHtmlTooltip(commitHash, submoduleId); item.add(commitHash.setEnabled(hasSubmodule)); } - Fragment links = new Fragment("historyLinks", "treeLinks", this); + Fragment links = new Fragment("historyLinks", "treeLinks", HistoryPanel.this); links.add(new BookmarkablePageLink("commitdiff", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); item.add(links); @@ -244,7 +244,7 @@ public void populateItem(final Item item) { WicketUtils.setHtmlTooltip(commitHash, entry.getName()); item.add(commitHash); - Fragment links = new Fragment("historyLinks", "blobLinks", this); + Fragment links = new Fragment("historyLinks", "blobLinks", HistoryPanel.this); links.add(new BookmarkablePageLink("commitdiff", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); links.add(new BookmarkablePageLink("difftocurrent", BlobDiffPage.class, diff --git a/src/main/java/com/gitblit/wicket/panels/IconAjaxLink.java b/src/main/java/com/gitblit/wicket/panels/IconAjaxLink.java index eb2288baa..a496db3b2 100644 --- a/src/main/java/com/gitblit/wicket/panels/IconAjaxLink.java +++ b/src/main/java/com/gitblit/wicket/panels/IconAjaxLink.java @@ -17,9 +17,9 @@ import java.text.MessageFormat; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.ajax.markup.html.AjaxLink; -import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.model.IModel; @@ -36,12 +36,12 @@ public IconAjaxLink(String wicketId, String iconClass, IModel model) { } @Override - protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { + public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { replaceComponentTagBody(markupStream, openTag, MessageFormat.format(" {1}", iconClass, getModelObject().toString())); } public void setNoFollow() { Component c = get("link"); - c.add(new SimpleAttributeModifier("rel", "nofollow")); + c.add(new AttributeModifier("rel", "nofollow")); } } diff --git a/src/main/java/com/gitblit/wicket/panels/LinkPanel.java b/src/main/java/com/gitblit/wicket/panels/LinkPanel.java index aa09be093..609a1e13e 100644 --- a/src/main/java/com/gitblit/wicket/panels/LinkPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/LinkPanel.java @@ -15,12 +15,9 @@ */ package com.gitblit.wicket.panels; -import java.io.OutputStream; -import java.util.concurrent.Callable; - +import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.SimpleAttributeModifier; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -29,13 +26,8 @@ import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; -import org.apache.wicket.request.target.resource.ResourceStreamRequestTarget; -import org.apache.wicket.util.resource.AbstractResourceStreamWriter; -import org.apache.wicket.util.resource.IResourceStream; -import com.gitblit.models.UserModel; import com.gitblit.utils.StringUtils; -import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; public class LinkPanel extends Panel { @@ -80,10 +72,10 @@ public LinkPanel(String wicketId, String bootstrapIcon, String linkCssClass, IMo link = new BookmarkablePageLink("link", clazz, parameters); } if (newWindow) { - link.add(new SimpleAttributeModifier("target", "_blank")); + link.add(new AttributeModifier("target", "_blank")); } if (linkCssClass != null) { - link.add(new SimpleAttributeModifier("class", linkCssClass)); + link.add(new AttributeModifier("class", linkCssClass)); } Label icon = new Label("icon"); if (StringUtils.isEmpty(bootstrapIcon)) { @@ -106,10 +98,10 @@ public LinkPanel(String wicketId, String linkCssClass, String label, String href this.labelModel = new Model(label); ExternalLink link = new ExternalLink("link", href); if (newWindow) { - link.add(new SimpleAttributeModifier("target", "_blank")); + link.add(new AttributeModifier("target", "_blank")); } if (linkCssClass != null) { - link.add(new SimpleAttributeModifier("class", linkCssClass)); + link.add(new AttributeModifier("class", linkCssClass)); } link.add(new Label("icon").setVisible(false)); link.add(new Label("label", labelModel)); @@ -122,7 +114,7 @@ public LinkPanel(String wicketId, String linkCssClass, String label, Link lin this.labelModel = new Model(label); if (linkCssClass != null) { - link.add(new SimpleAttributeModifier("class", linkCssClass)); + link.add(new AttributeModifier("class", linkCssClass)); } link.add(new Label("icon").setVisible(false)); @@ -132,12 +124,12 @@ public LinkPanel(String wicketId, String linkCssClass, String label, Link lin public void setNoFollow() { Component c = get("link"); - c.add(new SimpleAttributeModifier("rel", "nofollow")); + c.add(new AttributeModifier("rel", "nofollow")); } public void setTooltip(String tooltip) { Component c = get("link"); - c.add(new SimpleAttributeModifier("title", tooltip)); + c.add(new AttributeModifier("title", tooltip)); } } diff --git a/src/main/java/com/gitblit/wicket/panels/LogPanel.java b/src/main/java/com/gitblit/wicket/panels/LogPanel.java index e9d240d09..fe9f4d7c5 100644 --- a/src/main/java/com/gitblit/wicket/panels/LogPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/LogPanel.java @@ -19,8 +19,8 @@ import java.util.List; import java.util.Map; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.MarkupContainer; -import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -85,7 +85,7 @@ public LogPanel(String wicketId, final String repositoryName, final String objec graph.setVisible(false); } else { // set the rowspan on the graph row and +1 for the graph row itself - graph.add(new SimpleAttributeModifier("rowspan", "" + (commits.size() + 1))); + graph.add(new AttributeModifier("rowspan", "" + (commits.size() + 1))); graph.add(new ExternalImage("image", BranchGraphServlet.asLink(baseUrl, repositoryName, commits.get(0).name(), commits.size()))); } diff --git a/src/main/java/com/gitblit/wicket/panels/MarkdownTextArea.java b/src/main/java/com/gitblit/wicket/panels/MarkdownTextArea.java index ade92c090..c3fce626f 100644 --- a/src/main/java/com/gitblit/wicket/panels/MarkdownTextArea.java +++ b/src/main/java/com/gitblit/wicket/panels/MarkdownTextArea.java @@ -38,25 +38,25 @@ public class MarkdownTextArea extends TextArea { public MarkdownTextArea(String id, final IModel previewModel, final Label previewLabel) { super(id); setModel(new PropertyModel(this, "text")); - add(new AjaxFormComponentUpdatingBehavior("onblur") { + add(new AjaxFormComponentUpdatingBehavior("blur") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { renderPreview(previewModel); if (target != null) { - target.addComponent(previewLabel); + target.add(previewLabel); } } }); - add(new AjaxFormComponentUpdatingBehavior("onchange") { + add(new AjaxFormComponentUpdatingBehavior("change") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { renderPreview(previewModel); if (target != null) { - target.addComponent(previewLabel); + target.add(previewLabel); } } }); @@ -97,7 +97,7 @@ public void setRepository(String repositoryName) { // private static final long serialVersionUID = 1L; // // public RichTextSetActiveTextFieldAttributeModifier(String markupId) { -// super("onClick", true, new Model("richTextSetActiveTextField('" + markupId + "');")); +// super("Click", true, new Model("richTextSetActiveTextField('" + markupId + "');")); // } // } diff --git a/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java b/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java index 3c09e7c72..02aada593 100644 --- a/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java +++ b/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java @@ -19,17 +19,17 @@ import java.util.List; import org.apache.wicket.Component; -import org.apache.wicket.ResourceReference; -import org.apache.wicket.Response; +//import org.apache.wicket.ResourceReference; +import org.apache.wicket.core.request.ClientInfo; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.protocol.http.ClientProperties; -import org.apache.wicket.protocol.http.WebRequestCycle; import org.apache.wicket.protocol.http.WebSession; import org.apache.wicket.protocol.http.request.WebClientInfo; -import org.apache.wicket.request.ClientInfo; +import org.apache.wicket.request.Response; +import org.apache.wicket.request.resource.PackageResourceReference; import org.apache.wicket.util.value.IValueMap; /** @@ -85,8 +85,8 @@ protected String resolveResource(String src) { parent = parent.getParent(); } if (parent != null) { - ResourceReference resRef = new ResourceReference(parent.getClass(), src, false); - return (urlFor(resRef).toString()); + PackageResourceReference resRef = new PackageResourceReference(parent.getClass(), src); + return (urlFor(resRef, getPage().getPageParameters()).toString()); } return (src); @@ -149,7 +149,7 @@ protected ClientProperties getClientProperties() { ClientInfo clientInfo = WebSession.get().getClientInfo(); if (clientInfo == null || !(clientInfo instanceof WebClientInfo)) { - clientInfo = new WebClientInfo((WebRequestCycle) getRequestCycle()); + clientInfo = new WebClientInfo(getRequestCycle()); WebSession.get().setClientInfo(clientInfo); } diff --git a/src/main/java/com/gitblit/wicket/panels/PagerPanel.java b/src/main/java/com/gitblit/wicket/panels/PagerPanel.java index d1214cae8..3a136f03d 100644 --- a/src/main/java/com/gitblit/wicket/panels/PagerPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/PagerPanel.java @@ -19,7 +19,7 @@ import java.util.ArrayList; import java.util.List; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; @@ -69,7 +69,7 @@ public PagerPanel(String wicketId, final int currentPage, final int totalPages, public void populateItem(final Item item) { PageObject pageItem = item.getModelObject(); PageParameters pageParams = new PageParameters(baseParams); - pageParams.put("pg", pageItem.page); + pageParams.add("pg", pageItem.page); LinkPanel link = new LinkPanel("pageLink", null, pageItem.text, pageClass, pageParams); link.setRenderBodyOnly(true); item.add(link); diff --git a/src/main/java/com/gitblit/wicket/panels/ProjectRepositoryPanel.java b/src/main/java/com/gitblit/wicket/panels/ProjectRepositoryPanel.java index efcb1cb6a..6c0d1c67a 100644 --- a/src/main/java/com/gitblit/wicket/panels/ProjectRepositoryPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/ProjectRepositoryPanel.java @@ -19,7 +19,7 @@ import org.apache.wicket.Component; import org.apache.wicket.Localizer; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; @@ -31,6 +31,7 @@ import com.gitblit.models.UserModel; import com.gitblit.servlet.SyndicationServlet; import com.gitblit.utils.ArrayUtils; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; @@ -59,13 +60,13 @@ public ProjectRepositoryPanel(String wicketId, Localizer localizer, Component pa Fragment iconFragment; if (entry.isMirror) { - iconFragment = new Fragment("repoIcon", "mirrorIconFragment", this); + iconFragment = new Fragment("repoIcon", "mirrorIconFragment", ProjectRepositoryPanel.this); } else if (entry.isFork()) { - iconFragment = new Fragment("repoIcon", "forkIconFragment", this); + iconFragment = new Fragment("repoIcon", "forkIconFragment", ProjectRepositoryPanel.this); } else if (entry.isBare) { - iconFragment = new Fragment("repoIcon", "repoIconFragment", this); + iconFragment = new Fragment("repoIcon", "repoIconFragment", ProjectRepositoryPanel.this); } else { - iconFragment = new Fragment("repoIcon", "cloneIconFragment", this); + iconFragment = new Fragment("repoIcon", "cloneIconFragment", ProjectRepositoryPanel.this); } if (showSwatch) { WicketUtils.setCssStyle(iconFragment, "color:" + StringUtils.getColor(entry.toString())); @@ -75,7 +76,7 @@ public ProjectRepositoryPanel(String wicketId, Localizer localizer, Component pa if (StringUtils.isEmpty(entry.originRepository)) { add(new Label("originRepository").setVisible(false)); } else { - Fragment forkFrag = new Fragment("originRepository", "originFragment", this); + Fragment forkFrag = new Fragment("originRepository", "originFragment", ProjectRepositoryPanel.this); forkFrag.add(new LinkPanel("originRepository", null, StringUtils.stripDotGit(entry.originRepository), SummaryPage.class, WicketUtils.newRepositoryParameter(entry.originRepository))); add(forkFrag); @@ -125,11 +126,11 @@ public ProjectRepositoryPanel(String wicketId, Localizer localizer, Component pa } Fragment repositoryLinks; if (user.canAdmin(entry)) { - repositoryLinks = new Fragment("repositoryLinks", "repositoryOwnerLinks", this); + repositoryLinks = new Fragment("repositoryLinks", "repositoryOwnerLinks", ProjectRepositoryPanel.this); repositoryLinks.add(new BookmarkablePageLink("editRepository", EditRepositoryPage.class, WicketUtils.newRepositoryParameter(entry.name))); } else { - repositoryLinks = new Fragment("repositoryLinks", "repositoryUserLinks", this); + repositoryLinks = new Fragment("repositoryLinks", "repositoryUserLinks", ProjectRepositoryPanel.this); } repositoryLinks.add(new BookmarkablePageLink("tree", TreePage.class, WicketUtils @@ -158,7 +159,7 @@ public ProjectRepositoryPanel(String wicketId, Localizer localizer, Component pa add(new Label("repositorySize", localizer.getString("gb.empty", parent)).setEscapeModelStrings(false)); } - add(new ExternalLink("syndication", SyndicationServlet.asLink(getRequest() + add(new ExternalLink("syndication", SyndicationServlet.asLink(GitBlitRequestUtils .getRelativePathPrefixToContextRoot(), entry.name, null, 0))); } } diff --git a/src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java b/src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java index 447e17895..ce288a841 100644 --- a/src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java @@ -208,13 +208,13 @@ public void populateItem(final Item item) { permissionChoice.setEnabled(entry.mutable); permissionChoice.setOutputMarkupId(true); if (entry.mutable) { - permissionChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") { + permissionChoice.add(new AjaxFormComponentUpdatingBehavior("change") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { - target.addComponent(permissionChoice); + target.add(permissionChoice); } }); } @@ -254,9 +254,9 @@ protected void onUpdate(AjaxRequestTarget target) { private static final long serialVersionUID = 1L; @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + protected void onSubmit(AjaxRequestTarget target) { // add permission to our list - RegistrantAccessPermission rp = (RegistrantAccessPermission) form.getModel().getObject(); + RegistrantAccessPermission rp = (RegistrantAccessPermission) getForm().getModel().getObject(); if (rp.permission == null) { return; } @@ -277,7 +277,7 @@ protected void onSubmit(AjaxRequestTarget target, Form form) { registrants.remove(rp.registrant); // force the panel to refresh - target.addComponent(RegistrantPermissionsPanel.this); + target.add(RegistrantPermissionsPanel.this); } }; addPermissionForm.add(button); @@ -312,6 +312,11 @@ public String getDisplayValue(AccessPermission type) { public String getIdValue(AccessPermission type, int index) { return Integer.toString(index); } + + @Override + public AccessPermission getObject(String id, IModel> choices) { + return choices.getObject().get(Integer.valueOf(id)); + } } private class ShowStateButton extends AjaxButton { @@ -337,9 +342,9 @@ protected void onBeforeRender() } @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + protected void onSubmit(AjaxRequestTarget target) { RegistrantPermissionsPanel.this.activeState = buttonState; - target.addComponent(RegistrantPermissionsPanel.this); + target.add(RegistrantPermissionsPanel.this); } }; } diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java b/src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java index c3f07099d..57ae12709 100644 --- a/src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java @@ -24,8 +24,9 @@ import java.util.List; import java.util.Map; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder; +import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.markup.html.basic.Label; @@ -74,7 +75,7 @@ public RepositoriesPanel(String wicketId, final boolean showAdmin, final boolean Fragment managementLinks; if (showAdmin) { // user is admin - managementLinks = new Fragment("managementPanel", "adminLinks", this); + managementLinks = new Fragment("managementPanel", "adminLinks", RepositoriesPanel.this); managementLinks.add(new Link("clearCache") { private static final long serialVersionUID = 1L; @@ -89,7 +90,7 @@ public void onClick() { add(managementLinks); } else if (showManagement && user != null && user.canCreate()) { // user can create personal repositories - managementLinks = new Fragment("managementPanel", "personalLinks", this); + managementLinks = new Fragment("managementPanel", "personalLinks", RepositoriesPanel.this); managementLinks.add(new BookmarkablePageLink("newRepository", app().getNewRepositoryPage())); add(managementLinks); } else { @@ -159,7 +160,7 @@ public void populateItem(final Item item) { if (entry instanceof GroupRepositoryModel) { GroupRepositoryModel groupRow = (GroupRepositoryModel) entry; currGroupName = entry.name; - Fragment row = new Fragment("rowContent", "groupRepositoryRow", this); + Fragment row = new Fragment("rowContent", "groupRepositoryRow", RepositoriesPanel.this); item.add(row); String name = groupRow.name; @@ -179,19 +180,19 @@ public void populateItem(final Item item) { counter = 0; return; } - Fragment row = new Fragment("rowContent", "repositoryRow", this); + Fragment row = new Fragment("rowContent", "repositoryRow", RepositoriesPanel.this); item.add(row); // show colored repository type icon Fragment iconFragment; if (entry.isMirror) { - iconFragment = new Fragment("repoIcon", "mirrorIconFragment", this); + iconFragment = new Fragment("repoIcon", "mirrorIconFragment", RepositoriesPanel.this); } else if (entry.isFork()) { - iconFragment = new Fragment("repoIcon", "forkIconFragment", this); + iconFragment = new Fragment("repoIcon", "forkIconFragment", RepositoriesPanel.this); } else if (entry.isBare) { - iconFragment = new Fragment("repoIcon", "repoIconFragment", this); + iconFragment = new Fragment("repoIcon", "repoIconFragment", RepositoriesPanel.this); } else { - iconFragment = new Fragment("repoIcon", "cloneIconFragment", this); + iconFragment = new Fragment("repoIcon", "cloneIconFragment", RepositoriesPanel.this); } if (showSwatch) { WicketUtils.setCssStyle(iconFragment, "color:" + StringUtils.getColor(entry.toString())); @@ -307,10 +308,10 @@ public void populateItem(final Item item) { }; add(dataView); - if (dp instanceof SortableDataProvider) { + if (dp instanceof SortableDataProvider) { // add sortable header - SortableDataProvider sdp = (SortableDataProvider) dp; - Fragment fragment = new Fragment("headerContent", "flatRepositoryHeader", this); + SortableDataProvider sdp = (SortableDataProvider) dp; + Fragment fragment = new Fragment("headerContent", "flatRepositoryHeader", RepositoriesPanel.this); fragment.add(newSort("orderByRepository", SortBy.repository, sdp, dataView)); fragment.add(newSort("orderByDescription", SortBy.description, sdp, dataView)); fragment.add(newSort("orderByOwner", SortBy.owner, sdp, dataView)); @@ -318,7 +319,7 @@ public void populateItem(final Item item) { add(fragment); } else { // not sortable - Fragment fragment = new Fragment("headerContent", "groupRepositoryHeader", this); + Fragment fragment = new Fragment("headerContent", "groupRepositoryHeader", RepositoriesPanel.this); add(fragment); } } @@ -345,7 +346,7 @@ protected enum SortBy { repository, description, owner, date; } - protected OrderByBorder newSort(String wicketId, SortBy field, SortableDataProvider dp, + protected OrderByBorder newSort(String wicketId, SortBy field, SortableDataProvider dp, final DataView dataView) { return new OrderByBorder(wicketId, field.name(), dp) { private static final long serialVersionUID = 1L; @@ -357,7 +358,7 @@ protected void onSortChanged() { }; } - private static class SortableRepositoriesProvider extends SortableDataProvider { + private static class SortableRepositoriesProvider extends SortableDataProvider { private static final long serialVersionUID = 1L; @@ -365,11 +366,11 @@ private static class SortableRepositoriesProvider extends SortableDataProvider list) { this.list = list; - setSort(SortBy.date.name(), false); + setSort(SortBy.date.name(), SortOrder.DESCENDING); } @Override - public int size() { + public long size() { if (list == null) { return 0; } @@ -382,8 +383,8 @@ public IModel model(RepositoryModel header) { } @Override - public Iterator iterator(int first, int count) { - SortParam sp = getSort(); + public Iterator iterator(long first, long count) { + SortParam sp = getSort(); String prop = sp.getProperty(); final boolean asc = sp.isAscending(); @@ -430,7 +431,8 @@ public int compare(RepositoryModel o1, RepositoryModel o2) { } }); } - return list.subList(first, first + count).iterator(); + return list.subList(Math.toIntExact(first), Math.toIntExact(first + count)).iterator(); } + } } diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java b/src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java index 207f12508..262aa61a4 100644 --- a/src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java @@ -24,15 +24,14 @@ import javax.servlet.http.HttpServletRequest; import org.apache.wicket.Component; -import org.apache.wicket.RequestCycle; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.image.ContextImage; 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.protocol.http.WebRequest; import org.apache.wicket.protocol.http.request.WebClientInfo; +import org.apache.wicket.request.cycle.RequestCycle; import com.gitblit.Constants.AccessPermission; import com.gitblit.Constants.AccessRestrictionType; @@ -41,6 +40,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.RepositoryUrl; import com.gitblit.models.UserModel; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.ExternalImage; import com.gitblit.wicket.GitBlitWebSession; @@ -78,7 +78,7 @@ public RepositoryUrlPanel(String wicketId, boolean onlyUrls, UserModel user, Rep protected void onInitialize() { super.onInitialize(); - HttpServletRequest req = ((WebRequest) getRequest()).getHttpServletRequest(); + HttpServletRequest req = GitBlitRequestUtils.getServletRequest(); List repositoryUrls = app().services().getRepositoryUrls(req, user, repository); // grab primary url from the top of the list @@ -119,7 +119,7 @@ public String getPrimaryUrl() { protected Fragment createPrimaryUrlPanel(String wicketId, final RepositoryModel repository, List repositoryUrls) { - Fragment urlPanel = new Fragment(wicketId, "repositoryUrlFragment", this); + Fragment urlPanel = new Fragment(wicketId, "repositoryUrlFragment", RepositoryUrlPanel.this); urlPanel.setRenderBodyOnly(true); if (repositoryUrls.size() == 1) { @@ -139,7 +139,7 @@ protected Fragment createPrimaryUrlPanel(String wicketId, final RepositoryModel public void populateItem(final Item item) { RepositoryUrl repoUrl = item.getModelObject(); // repository url - Fragment fragment = new Fragment("repoUrl", "actionFragment", this); + Fragment fragment = new Fragment("repoUrl", "actionFragment", RepositoryUrlPanel.this); Component content = new Label("content", repoUrl.url).setRenderBodyOnly(true); WicketUtils.setCssClass(content, "commandMenuItem"); fragment.add(content); @@ -154,7 +154,7 @@ public void populateItem(final Item item) { } }; - Fragment urlMenuFragment = new Fragment("menu", "urlProtocolMenuFragment", this); + Fragment urlMenuFragment = new Fragment("menu", "urlProtocolMenuFragment", RepositoryUrlPanel.this); urlMenuFragment.setRenderBodyOnly(true); urlMenuFragment.add(new Label("menuText", getString("gb.url"))); urlMenuFragment.add(repoUrlMenuItems); @@ -253,7 +253,7 @@ public void populateItem(final Item item) { return; } - Fragment appMenu = new Fragment("appMenu", "appMenuFragment", this); + Fragment appMenu = new Fragment("appMenu", "appMenuFragment", RepositoryUrlPanel.this); appMenu.setRenderBodyOnly(true); item.add(appMenu); @@ -304,7 +304,7 @@ public void populateItem(final Item item) { @Override public void populateItem(final Item repoLinkItem) { RepositoryUrl repoUrl = repoLinkItem.getModelObject(); - Fragment fragment = new Fragment("actionItem", "actionFragment", this); + Fragment fragment = new Fragment("actionItem", "actionFragment", RepositoryUrlPanel.this); fragment.add(createPermissionBadge("permission", repoUrl)); if (!StringUtils.isEmpty(clientApp.cloneUrl)) { @@ -329,7 +329,7 @@ public void populateItem(final Item repoLinkItem) { } }; - Fragment applicationMenus = new Fragment(wicketId, "applicationMenusFragment", this); + Fragment applicationMenus = new Fragment(wicketId, "applicationMenusFragment", RepositoryUrlPanel.this); applicationMenus.add(appMenus); return applicationMenus; } @@ -349,7 +349,7 @@ protected Label createPermissionBadge(String wicketId, RepositoryUrl repoUrl) { protected Fragment createCopyFragment(String text) { if (app().settings().getBoolean(Keys.web.allowFlashCopyToClipboard, true)) { // clippy: flash-based copy & paste - Fragment copyFragment = new Fragment("copyFunction", "clippyPanel", this); + Fragment copyFragment = new Fragment("copyFunction", "clippyPanel", RepositoryUrlPanel.this); String baseUrl = WicketUtils.getGitblitURL(getRequest()); ShockWaveComponent clippy = new ShockWaveComponent("clippy", baseUrl + "/clippy.swf"); clippy.setValue("flashVars", "text=" + StringUtils.encodeURL(text)); @@ -357,9 +357,9 @@ protected Fragment createCopyFragment(String text) { return copyFragment; } else { // javascript: manual copy & paste with modal browser prompt dialog - Fragment copyFragment = new Fragment("copyFunction", "jsPanel", this); + Fragment copyFragment = new Fragment("copyFunction", "jsPanel", RepositoryUrlPanel.this); ContextImage img = WicketUtils.newImage("copyIcon", "clippy.png"); - img.add(new JavascriptTextPrompt("onclick", "Copy to Clipboard (Ctrl+C, Enter)", text)); + img.add(new JavascriptTextPrompt("click", "Copy to Clipboard (Ctrl+C, Enter)", text)); copyFragment.add(img); return copyFragment; } @@ -441,11 +441,11 @@ protected Map getAccessRestrictions() { } protected Component createRepositoryIndicators(RepositoryModel repository) { - Fragment fragment = new Fragment("repositoryIndicators", "indicatorsFragment", this); + Fragment fragment = new Fragment("repositoryIndicators", "indicatorsFragment", RepositoryUrlPanel.this); if (repository.isBare) { fragment.add(new Label("workingCopyIndicator").setVisible(false)); } else { - Fragment wc = new Fragment("workingCopyIndicator", "workingCopyFragment", this); + Fragment wc = new Fragment("workingCopyIndicator", "workingCopyFragment", RepositoryUrlPanel.this); Label lbl = new Label("workingCopy", getString("gb.workingCopy")); WicketUtils.setHtmlTooltip(lbl, getString("gb.workingCopyWarning")); wc.add(lbl); @@ -464,7 +464,7 @@ protected Component createRepositoryIndicators(RepositoryModel repository) { if (hasFork || !canFork) { if (user.canFork() && !repository.allowForks) { // show forks prohibited indicator - Fragment wc = new Fragment("forksProhibitedIndicator", "forksProhibitedFragment", this); + Fragment wc = new Fragment("forksProhibitedIndicator", "forksProhibitedFragment", RepositoryUrlPanel.this); Label lbl = new Label("forksProhibited", getString("gb.forksProhibited")); WicketUtils.setHtmlTooltip(lbl, getString("gb.forksProhibitedWarning")); wc.add(lbl); diff --git a/src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java b/src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java index 78822c6df..416337f4e 100644 --- a/src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java +++ b/src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java @@ -22,9 +22,9 @@ import java.util.List; import java.util.Map; -import org.apache.wicket.Response; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupStream; +import org.apache.wicket.request.Response; import org.apache.wicket.util.value.IValueMap; /** diff --git a/src/main/java/com/gitblit/wicket/panels/SimpleAjaxLink.java b/src/main/java/com/gitblit/wicket/panels/SimpleAjaxLink.java index d74665226..6a3cca061 100644 --- a/src/main/java/com/gitblit/wicket/panels/SimpleAjaxLink.java +++ b/src/main/java/com/gitblit/wicket/panels/SimpleAjaxLink.java @@ -15,9 +15,9 @@ */ package com.gitblit.wicket.panels; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.ajax.markup.html.AjaxLink; -import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.model.IModel; @@ -31,12 +31,12 @@ public SimpleAjaxLink(String wicketId, IModel model) { } @Override - protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { + public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { replaceComponentTagBody(markupStream, openTag, getModelObject().toString()); } public void setNoFollow() { Component c = get("link"); - c.add(new SimpleAttributeModifier("rel", "nofollow")); + c.add(new AttributeModifier("rel", "nofollow")); } } diff --git a/src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java b/src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java index 15ebd67b7..1ca3bb8a8 100644 --- a/src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java @@ -86,7 +86,7 @@ public void onClick(AjaxRequestTarget target) { keys.addAll(app().keys().getKeys(user.username)); // update the panel - target.addComponent(SshKeysPanel.this); + target.add(SshKeysPanel.this); } } }; @@ -123,7 +123,7 @@ public void onClick(AjaxRequestTarget target) { private static final long serialVersionUID = 1L; @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + protected void onSubmit(AjaxRequestTarget target) { UserModel user = GitBlitWebSession.get().getUser(); String data = keyData.getObject(); @@ -159,7 +159,7 @@ protected void onSubmit(AjaxRequestTarget target, Form form) { keys.addAll(app().keys().getKeys(user.username)); // update the panel - target.addComponent(SshKeysPanel.this); + target.add(SshKeysPanel.this); } } }); diff --git a/src/main/java/com/gitblit/wicket/panels/TagsPanel.java b/src/main/java/com/gitblit/wicket/panels/TagsPanel.java index f1f827399..85a50139d 100644 --- a/src/main/java/com/gitblit/wicket/panels/TagsPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/TagsPanel.java @@ -17,7 +17,6 @@ import java.util.List; -import org.apache.wicket.RequestCycle; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -32,6 +31,7 @@ import com.gitblit.models.RefModel; import com.gitblit.servlet.RawServlet; +import com.gitblit.utils.GitBlitRequestUtils; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.WicketUtils; @@ -106,7 +106,7 @@ public void populateItem(final Item item) { } item.add(messageLink); - Fragment fragment = new Fragment("tagLinks", "blobLinks", this); + Fragment fragment = new Fragment("tagLinks", "blobLinks", TagsPanel.this); fragment.add(new BookmarkablePageLink("tag", TagPage.class, WicketUtils .newObjectParameter(repositoryName, entry.getObjectId().getName())) .setEnabled(entry.isAnnotatedTag())); @@ -115,7 +115,7 @@ public void populateItem(final Item item) { .newObjectParameter(repositoryName, entry.getReferencedObjectId() .getName()))); - String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot(); + String contextUrl = GitBlitRequestUtils.getRelativePathPrefixToContextRoot(); String rawUrl = RawServlet.asLink(contextUrl, repositoryName, entry.displayName, entry.getReferencedObjectId().getName()); fragment.add(new ExternalLink("raw", rawUrl)); @@ -133,7 +133,7 @@ public void populateItem(final Item item) { } item.add(messageLink); - Fragment fragment = new Fragment("tagLinks", "annotatedLinks", this); + Fragment fragment = new Fragment("tagLinks", "annotatedLinks", TagsPanel.this); fragment.add(new BookmarkablePageLink("tag", TagPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getObjectId() .getName())).setEnabled(entry.isAnnotatedTag())); @@ -150,7 +150,7 @@ public void populateItem(final Item item) { item.add(new LinkPanel("tagDescription", "list", message, CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getObjectId() .getName()))); - Fragment fragment = new Fragment("tagLinks", "lightweightLinks", this); + Fragment fragment = new Fragment("tagLinks", "lightweightLinks", TagsPanel.this); fragment.add(new BookmarkablePageLink("commit", CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry .getReferencedObjectId().getName()))); diff --git a/src/main/java/com/gitblit/wicket/panels/TeamsPanel.java b/src/main/java/com/gitblit/wicket/panels/TeamsPanel.java index 7f3fd9a23..87e93e890 100644 --- a/src/main/java/com/gitblit/wicket/panels/TeamsPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/TeamsPanel.java @@ -37,7 +37,7 @@ public class TeamsPanel extends BasePanel { public TeamsPanel(String wicketId, final boolean showAdmin) { super(wicketId); - Fragment adminLinks = new Fragment("adminPanel", "adminLinks", this); + Fragment adminLinks = new Fragment("adminPanel", "adminLinks", TeamsPanel.this); adminLinks.add(new BookmarkablePageLink("newTeam", EditTeamPage.class)); add(adminLinks.setVisible(showAdmin)); @@ -65,7 +65,7 @@ public void populateItem(final Item item) { : "")); item.add(new Label("repositories", entry.repositories.size() > 0 ? ("" + entry.repositories.size()) : "")); - Fragment teamLinks = new Fragment("teamLinks", "teamAdminLinks", this); + Fragment teamLinks = new Fragment("teamLinks", "teamAdminLinks", TeamsPanel.this); teamLinks.add(new BookmarkablePageLink("editTeam", EditTeamPage.class, WicketUtils.newTeamnameParameter(entry.name))); Link deleteLink = new Link("deleteTeam") { @@ -83,7 +83,7 @@ public void onClick() { } } }; - deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format( + deleteLink.add(new JavascriptEventConfirmation("click", MessageFormat.format( "Delete team \"{0}\"?", entry.name))); teamLinks.add(deleteLink); item.add(teamLinks); diff --git a/src/main/java/com/gitblit/wicket/panels/TicketListPanel.java b/src/main/java/com/gitblit/wicket/panels/TicketListPanel.java index 1fbe87cd9..6c6435bb5 100644 --- a/src/main/java/com/gitblit/wicket/panels/TicketListPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/TicketListPanel.java @@ -19,8 +19,8 @@ import java.util.ArrayList; import java.util.List; -import org.apache.wicket.PageParameters; -import org.apache.wicket.behavior.SimpleAttributeModifier; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.repeater.Item; @@ -101,7 +101,7 @@ protected void populateItem(Item item) { if (ticket.updatedAt == null) { item.add(new Label("updated").setVisible(false)); } else { - Fragment updated = new Fragment("updated", "updatedFragment", this); + Fragment updated = new Fragment("updated", "updatedFragment", TicketListPanel.this); UserModel updater = app().users().getUserModel(ticket.updatedBy); if (updater != null) { updated.add(new LinkPanel("updatedBy", null, updater.getDisplayName(), @@ -143,7 +143,7 @@ public void populateItem(final Item labelItem) { } String background = MessageFormat.format("background-color:{0};", tLabel.color); - label.add(new SimpleAttributeModifier("style", background)); + label.add(new AttributeModifier("style", background)); labelItem.add(label); } }; diff --git a/src/main/java/com/gitblit/wicket/panels/TicketSearchForm.java b/src/main/java/com/gitblit/wicket/panels/TicketSearchForm.java index 21bf1bab3..75a12dc5e 100644 --- a/src/main/java/com/gitblit/wicket/panels/TicketSearchForm.java +++ b/src/main/java/com/gitblit/wicket/panels/TicketSearchForm.java @@ -18,11 +18,11 @@ import java.io.Serializable; import java.text.MessageFormat; -import org.apache.wicket.PageParameters; +import org.apache.wicket.request.http.handler.RedirectRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; -import org.apache.wicket.request.target.basic.RedirectRequestTarget; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.SessionlessForm; @@ -64,7 +64,7 @@ public void onSubmit() { if (StringUtils.isEmpty(searchString)) { // redirect to self to avoid wicket page update bug String absoluteUrl = getAbsoluteUrl(); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); return; } @@ -73,6 +73,6 @@ public void onSubmit() { PageParameters params = WicketUtils.newRepositoryParameter(repositoryName); params.add("s", searchString); String absoluteUrl = getAbsoluteUrl(pageClass, params); - getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); + getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl)); } } diff --git a/src/main/java/com/gitblit/wicket/panels/UsersPanel.java b/src/main/java/com/gitblit/wicket/panels/UsersPanel.java index 5d6265525..1a67bcb2a 100644 --- a/src/main/java/com/gitblit/wicket/panels/UsersPanel.java +++ b/src/main/java/com/gitblit/wicket/panels/UsersPanel.java @@ -38,7 +38,7 @@ public class UsersPanel extends BasePanel { public UsersPanel(String wicketId, final boolean showAdmin) { super(wicketId); - Fragment adminLinks = new Fragment("adminPanel", "adminLinks", this); + Fragment adminLinks = new Fragment("adminPanel", "adminLinks", UsersPanel.this); adminLinks.add(new BookmarkablePageLink("newUser", EditUserPage.class)); add(adminLinks.setVisible(showAdmin)); @@ -85,7 +85,7 @@ public void populateItem(final Item item) { item.add(new Label("teams", entry.teams.size() > 0 ? ("" + entry.teams.size()) : "")); item.add(new Label("repositories", entry.permissions.size() > 0 ? ("" + entry.permissions.size()) : "")); - Fragment userLinks = new Fragment("userLinks", "userAdminLinks", this); + Fragment userLinks = new Fragment("userLinks", "userAdminLinks", UsersPanel.this); userLinks.add(new BookmarkablePageLink("editUser", EditUserPage.class, WicketUtils.newUsernameParameter(entry.username))); Link deleteLink = new Link("deleteUser") { @@ -103,7 +103,7 @@ public void onClick() { } } }; - deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format( + deleteLink.add(new JavascriptEventConfirmation("click", MessageFormat.format( getString("gb.deleteUser"), entry.username))); userLinks.add(deleteLink); item.add(userLinks); diff --git a/src/main/java/com/gitblit/wicket/resources/StaticResources.java b/src/main/java/com/gitblit/wicket/resources/StaticResources.java new file mode 100644 index 000000000..a93d31d38 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/resources/StaticResources.java @@ -0,0 +1,43 @@ +package com.gitblit.wicket.resources; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.request.resource.PackageResourceReference; + +public class StaticResources { + + public static void install(WebApplication app) { + try { + List names = getResourceFiles(); + for (String res : names) { + app.mountResource("/" + res, new PackageResourceReference(StaticResources.class, res)); + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + + private static List getResourceFiles() throws IOException { + List filenames = new ArrayList<>(); + + try (InputStream in = StaticResources.class.getResourceAsStream(""); + BufferedReader br = new BufferedReader(new InputStreamReader(in))) { + String resource; + + while ((resource = br.readLine()) != null) { + if (!resource.equals("StaticResources.class")){ + filenames.add(resource); + } + } + } + + return filenames; + } +} \ No newline at end of file diff --git a/src/main/resources/add_16x16.png b/src/main/java/com/gitblit/wicket/resources/add_16x16.png similarity index 100% rename from src/main/resources/add_16x16.png rename to src/main/java/com/gitblit/wicket/resources/add_16x16.png diff --git a/src/main/resources/arrow_down.png b/src/main/java/com/gitblit/wicket/resources/arrow_down.png similarity index 100% rename from src/main/resources/arrow_down.png rename to src/main/java/com/gitblit/wicket/resources/arrow_down.png diff --git a/src/main/resources/arrow_left.png b/src/main/java/com/gitblit/wicket/resources/arrow_left.png similarity index 100% rename from src/main/resources/arrow_left.png rename to src/main/java/com/gitblit/wicket/resources/arrow_left.png diff --git a/src/main/resources/arrow_line.png b/src/main/java/com/gitblit/wicket/resources/arrow_line.png similarity index 100% rename from src/main/resources/arrow_line.png rename to src/main/java/com/gitblit/wicket/resources/arrow_line.png diff --git a/src/main/resources/arrow_off.png b/src/main/java/com/gitblit/wicket/resources/arrow_off.png similarity index 100% rename from src/main/resources/arrow_off.png rename to src/main/java/com/gitblit/wicket/resources/arrow_off.png diff --git a/src/main/resources/arrow_page.png b/src/main/java/com/gitblit/wicket/resources/arrow_page.png similarity index 100% rename from src/main/resources/arrow_page.png rename to src/main/java/com/gitblit/wicket/resources/arrow_page.png diff --git a/src/main/resources/arrow_project.png b/src/main/java/com/gitblit/wicket/resources/arrow_project.png similarity index 100% rename from src/main/resources/arrow_project.png rename to src/main/java/com/gitblit/wicket/resources/arrow_project.png diff --git a/src/main/resources/arrow_up.png b/src/main/java/com/gitblit/wicket/resources/arrow_up.png similarity index 100% rename from src/main/resources/arrow_up.png rename to src/main/java/com/gitblit/wicket/resources/arrow_up.png diff --git a/src/main/resources/background.png b/src/main/java/com/gitblit/wicket/resources/background.png similarity index 100% rename from src/main/resources/background.png rename to src/main/java/com/gitblit/wicket/resources/background.png diff --git a/src/main/resources/barnum_32x32.png b/src/main/java/com/gitblit/wicket/resources/barnum_32x32.png similarity index 100% rename from src/main/resources/barnum_32x32.png rename to src/main/java/com/gitblit/wicket/resources/barnum_32x32.png diff --git a/src/main/resources/blank.png b/src/main/java/com/gitblit/wicket/resources/blank.png similarity index 100% rename from src/main/resources/blank.png rename to src/main/java/com/gitblit/wicket/resources/blank.png diff --git a/src/main/resources/blink32.png b/src/main/java/com/gitblit/wicket/resources/blink32.png similarity index 100% rename from src/main/resources/blink32.png rename to src/main/java/com/gitblit/wicket/resources/blink32.png diff --git a/src/main/resources/book_16x16.png b/src/main/java/com/gitblit/wicket/resources/book_16x16.png similarity index 100% rename from src/main/resources/book_16x16.png rename to src/main/java/com/gitblit/wicket/resources/book_16x16.png diff --git a/src/main/java/com/gitblit/wicket/resources/bootstrap/Bootstrap.java b/src/main/java/com/gitblit/wicket/resources/bootstrap/Bootstrap.java new file mode 100644 index 000000000..0d0778d20 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/resources/bootstrap/Bootstrap.java @@ -0,0 +1,58 @@ +package com.gitblit.wicket.resources.bootstrap; + +import java.util.List; + +import org.apache.wicket.markup.head.HeaderItem; +import org.apache.wicket.markup.head.JavaScriptHeaderItem; +import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.request.resource.CssPackageResource; +import org.apache.wicket.request.resource.IResource; +import org.apache.wicket.request.resource.PackageResourceReference; +import org.apache.wicket.request.resource.SharedResourceReference; +import org.apache.wicket.resource.JQueryResourceReference; + + +public class Bootstrap { + + public static final String BOOTSTRAP_RESPONSIVE_CSS_RESOURCE = "bootstrap:responsiveCss"; + + public static void install(WebApplication app) { + app.mountResource("/bootstrap/css/bootstrap.css", new PackageResourceReference(Bootstrap.class, "css/bootstrap.css")); + + app.getSharedResources().add(BOOTSTRAP_RESPONSIVE_CSS_RESOURCE, new CssPackageResource(Bootstrap.class, "css/bootstrap-responsive.css", null, null, null)); + app.mountResource("/bootstrap/css/bootstrap-responsive.css", app.getSharedResources().get(BOOTSTRAP_RESPONSIVE_CSS_RESOURCE)); + + app.mountResource("/bootstrap/css/iconic.css", new PackageResourceReference(Bootstrap.class, "css/iconic.css")); + + app.mountResource("/bootstrap/font/iconic_fill.afm", new PackageResourceReference(Bootstrap.class, "font/iconic_fill.afm")); + app.mountResource("/bootstrap/font/iconic_fill.css", new PackageResourceReference(Bootstrap.class, "font/iconic_fill.css")); + app.mountResource("/bootstrap/font/iconic_fill.eot", new PackageResourceReference(Bootstrap.class, "font/iconic_fill.eot")); + app.mountResource("/bootstrap/font/iconic_fill.otf", new PackageResourceReference(Bootstrap.class, "font/iconic_fill.otf")); + app.mountResource("/bootstrap/font/iconic_fill.svg", new PackageResourceReference(Bootstrap.class, "font/iconic_fill.svg")); + app.mountResource("/bootstrap/font/iconic_fill.ttf", new PackageResourceReference(Bootstrap.class, "font/iconic_fill.ttf")); + app.mountResource("/bootstrap/font/iconic_fill.woff", new PackageResourceReference(Bootstrap.class, "font/iconic_fill.woff")); + + app.mountResource("/bootstrap/font/iconic_stroke.afm", new PackageResourceReference(Bootstrap.class, "font/iconic_stroke.afm")); + app.mountResource("/bootstrap/font/iconic_stroke.css", new PackageResourceReference(Bootstrap.class, "font/iconic_stroke.css")); + app.mountResource("/bootstrap/font/iconic_stroke.eot", new PackageResourceReference(Bootstrap.class, "font/iconic_stroke.eot")); + app.mountResource("/bootstrap/font/iconic_stroke.otf", new PackageResourceReference(Bootstrap.class, "font/iconic_stroke.otf")); + app.mountResource("/bootstrap/font/iconic_stroke.svg", new PackageResourceReference(Bootstrap.class, "font/iconic_stroke.svg")); + app.mountResource("/bootstrap/font/iconic_stroke.ttf", new PackageResourceReference(Bootstrap.class, "font/iconic_stroke.ttf")); + app.mountResource("/bootstrap/font/iconic_stroke.woff", new PackageResourceReference(Bootstrap.class, "font/iconic_stroke.woff")); + + app.mountResource("/bootstrap/img/glyphicons-halflings-white.png", new PackageResourceReference(Bootstrap.class, "img/glyphicons-halflings-white.png")); + app.mountResource("/bootstrap/img/glyphicons-halflings.png", new PackageResourceReference(Bootstrap.class, "img/glyphicons-halflings.png")); + + app.mountResource("/bootstrap/js/bootstrap.js", new PackageResourceReference(Bootstrap.class, "js/bootstrap.js"){ + private static final long serialVersionUID = 1L; + + @Override + public List getDependencies() { + List deps = super.getDependencies(); + deps.add(JavaScriptHeaderItem.forReference(JQueryResourceReference.get())); + return deps; + } + }); + } + +} diff --git a/src/main/resources/bootstrap/css/bootstrap-responsive.css b/src/main/java/com/gitblit/wicket/resources/bootstrap/css/bootstrap-responsive.css similarity index 100% rename from src/main/resources/bootstrap/css/bootstrap-responsive.css rename to src/main/java/com/gitblit/wicket/resources/bootstrap/css/bootstrap-responsive.css diff --git a/src/main/resources/bootstrap/css/bootstrap.css b/src/main/java/com/gitblit/wicket/resources/bootstrap/css/bootstrap.css similarity index 100% rename from src/main/resources/bootstrap/css/bootstrap.css rename to src/main/java/com/gitblit/wicket/resources/bootstrap/css/bootstrap.css diff --git a/src/main/resources/bootstrap/css/iconic.css b/src/main/java/com/gitblit/wicket/resources/bootstrap/css/iconic.css similarity index 100% rename from src/main/resources/bootstrap/css/iconic.css rename to src/main/java/com/gitblit/wicket/resources/bootstrap/css/iconic.css diff --git a/src/main/resources/bootstrap/font/iconic_fill.afm b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.afm similarity index 100% rename from src/main/resources/bootstrap/font/iconic_fill.afm rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.afm diff --git a/src/main/resources/bootstrap/font/iconic_fill.css b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.css similarity index 100% rename from src/main/resources/bootstrap/font/iconic_fill.css rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.css diff --git a/src/main/resources/bootstrap/font/iconic_fill.eot b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.eot similarity index 100% rename from src/main/resources/bootstrap/font/iconic_fill.eot rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.eot diff --git a/src/main/resources/bootstrap/font/iconic_fill.otf b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.otf similarity index 100% rename from src/main/resources/bootstrap/font/iconic_fill.otf rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.otf diff --git a/src/main/resources/bootstrap/font/iconic_fill.svg b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.svg similarity index 100% rename from src/main/resources/bootstrap/font/iconic_fill.svg rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.svg diff --git a/src/main/resources/bootstrap/font/iconic_fill.ttf b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.ttf similarity index 100% rename from src/main/resources/bootstrap/font/iconic_fill.ttf rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.ttf diff --git a/src/main/resources/bootstrap/font/iconic_fill.woff b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.woff similarity index 100% rename from src/main/resources/bootstrap/font/iconic_fill.woff rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_fill.woff diff --git a/src/main/resources/bootstrap/font/iconic_stroke.afm b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.afm similarity index 100% rename from src/main/resources/bootstrap/font/iconic_stroke.afm rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.afm diff --git a/src/main/resources/bootstrap/font/iconic_stroke.css b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.css similarity index 100% rename from src/main/resources/bootstrap/font/iconic_stroke.css rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.css diff --git a/src/main/resources/bootstrap/font/iconic_stroke.eot b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.eot similarity index 100% rename from src/main/resources/bootstrap/font/iconic_stroke.eot rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.eot diff --git a/src/main/resources/bootstrap/font/iconic_stroke.otf b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.otf similarity index 100% rename from src/main/resources/bootstrap/font/iconic_stroke.otf rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.otf diff --git a/src/main/resources/bootstrap/font/iconic_stroke.svg b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.svg similarity index 100% rename from src/main/resources/bootstrap/font/iconic_stroke.svg rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.svg diff --git a/src/main/resources/bootstrap/font/iconic_stroke.ttf b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.ttf similarity index 100% rename from src/main/resources/bootstrap/font/iconic_stroke.ttf rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.ttf diff --git a/src/main/resources/bootstrap/font/iconic_stroke.woff b/src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.woff similarity index 100% rename from src/main/resources/bootstrap/font/iconic_stroke.woff rename to src/main/java/com/gitblit/wicket/resources/bootstrap/font/iconic_stroke.woff diff --git a/src/main/resources/bootstrap/img/glyphicons-halflings-white.png b/src/main/java/com/gitblit/wicket/resources/bootstrap/img/glyphicons-halflings-white.png similarity index 100% rename from src/main/resources/bootstrap/img/glyphicons-halflings-white.png rename to src/main/java/com/gitblit/wicket/resources/bootstrap/img/glyphicons-halflings-white.png diff --git a/src/main/resources/bootstrap/img/glyphicons-halflings.png b/src/main/java/com/gitblit/wicket/resources/bootstrap/img/glyphicons-halflings.png similarity index 100% rename from src/main/resources/bootstrap/img/glyphicons-halflings.png rename to src/main/java/com/gitblit/wicket/resources/bootstrap/img/glyphicons-halflings.png diff --git a/src/main/resources/bootstrap/js/bootstrap.js b/src/main/java/com/gitblit/wicket/resources/bootstrap/js/bootstrap.js similarity index 100% rename from src/main/resources/bootstrap/js/bootstrap.js rename to src/main/java/com/gitblit/wicket/resources/bootstrap/js/bootstrap.js diff --git a/src/main/resources/bug_16x16.png b/src/main/java/com/gitblit/wicket/resources/bug_16x16.png similarity index 100% rename from src/main/resources/bug_16x16.png rename to src/main/java/com/gitblit/wicket/resources/bug_16x16.png diff --git a/src/main/resources/bullet_black.png b/src/main/java/com/gitblit/wicket/resources/bullet_black.png similarity index 100% rename from src/main/resources/bullet_black.png rename to src/main/java/com/gitblit/wicket/resources/bullet_black.png diff --git a/src/main/resources/bullet_blue.png b/src/main/java/com/gitblit/wicket/resources/bullet_blue.png similarity index 100% rename from src/main/resources/bullet_blue.png rename to src/main/java/com/gitblit/wicket/resources/bullet_blue.png diff --git a/src/main/resources/bullet_delete.png b/src/main/java/com/gitblit/wicket/resources/bullet_delete.png similarity index 100% rename from src/main/resources/bullet_delete.png rename to src/main/java/com/gitblit/wicket/resources/bullet_delete.png diff --git a/src/main/resources/bullet_error.png b/src/main/java/com/gitblit/wicket/resources/bullet_error.png similarity index 100% rename from src/main/resources/bullet_error.png rename to src/main/java/com/gitblit/wicket/resources/bullet_error.png diff --git a/src/main/resources/bullet_feed.png b/src/main/java/com/gitblit/wicket/resources/bullet_feed.png similarity index 100% rename from src/main/resources/bullet_feed.png rename to src/main/java/com/gitblit/wicket/resources/bullet_feed.png diff --git a/src/main/resources/bullet_green.png b/src/main/java/com/gitblit/wicket/resources/bullet_green.png similarity index 100% rename from src/main/resources/bullet_green.png rename to src/main/java/com/gitblit/wicket/resources/bullet_green.png diff --git a/src/main/resources/bullet_key.png b/src/main/java/com/gitblit/wicket/resources/bullet_key.png similarity index 100% rename from src/main/resources/bullet_key.png rename to src/main/java/com/gitblit/wicket/resources/bullet_key.png diff --git a/src/main/resources/bullet_orange.png b/src/main/java/com/gitblit/wicket/resources/bullet_orange.png similarity index 100% rename from src/main/resources/bullet_orange.png rename to src/main/java/com/gitblit/wicket/resources/bullet_orange.png diff --git a/src/main/resources/bullet_red.png b/src/main/java/com/gitblit/wicket/resources/bullet_red.png similarity index 100% rename from src/main/resources/bullet_red.png rename to src/main/java/com/gitblit/wicket/resources/bullet_red.png diff --git a/src/main/resources/bullet_white.png b/src/main/java/com/gitblit/wicket/resources/bullet_white.png similarity index 100% rename from src/main/resources/bullet_white.png rename to src/main/java/com/gitblit/wicket/resources/bullet_white.png diff --git a/src/main/resources/bullet_yellow.png b/src/main/java/com/gitblit/wicket/resources/bullet_yellow.png similarity index 100% rename from src/main/resources/bullet_yellow.png rename to src/main/java/com/gitblit/wicket/resources/bullet_yellow.png diff --git a/src/main/resources/clipboard_13x13.png b/src/main/java/com/gitblit/wicket/resources/clipboard_13x13.png similarity index 100% rename from src/main/resources/clipboard_13x13.png rename to src/main/java/com/gitblit/wicket/resources/clipboard_13x13.png diff --git a/src/main/resources/clipboard_16x16.png b/src/main/java/com/gitblit/wicket/resources/clipboard_16x16.png similarity index 100% rename from src/main/resources/clipboard_16x16.png rename to src/main/java/com/gitblit/wicket/resources/clipboard_16x16.png diff --git a/src/main/resources/clippy.png b/src/main/java/com/gitblit/wicket/resources/clippy.png similarity index 100% rename from src/main/resources/clippy.png rename to src/main/java/com/gitblit/wicket/resources/clippy.png diff --git a/src/main/resources/clippy.swf b/src/main/java/com/gitblit/wicket/resources/clippy.swf similarity index 100% rename from src/main/resources/clippy.swf rename to src/main/java/com/gitblit/wicket/resources/clippy.swf diff --git a/src/main/resources/cold_16x16.png b/src/main/java/com/gitblit/wicket/resources/cold_16x16.png similarity index 100% rename from src/main/resources/cold_16x16.png rename to src/main/java/com/gitblit/wicket/resources/cold_16x16.png diff --git a/src/main/resources/commit_branch_16x16.png b/src/main/java/com/gitblit/wicket/resources/commit_branch_16x16.png similarity index 100% rename from src/main/resources/commit_branch_16x16.png rename to src/main/java/com/gitblit/wicket/resources/commit_branch_16x16.png diff --git a/src/main/resources/commit_changes_16x16.png b/src/main/java/com/gitblit/wicket/resources/commit_changes_16x16.png similarity index 100% rename from src/main/resources/commit_changes_16x16.png rename to src/main/java/com/gitblit/wicket/resources/commit_changes_16x16.png diff --git a/src/main/resources/commit_divide_16x16.png b/src/main/java/com/gitblit/wicket/resources/commit_divide_16x16.png similarity index 100% rename from src/main/resources/commit_divide_16x16.png rename to src/main/java/com/gitblit/wicket/resources/commit_divide_16x16.png diff --git a/src/main/resources/commit_join_16x16.png b/src/main/java/com/gitblit/wicket/resources/commit_join_16x16.png similarity index 100% rename from src/main/resources/commit_join_16x16.png rename to src/main/java/com/gitblit/wicket/resources/commit_join_16x16.png diff --git a/src/main/resources/commit_merge_16x16.png b/src/main/java/com/gitblit/wicket/resources/commit_merge_16x16.png similarity index 100% rename from src/main/resources/commit_merge_16x16.png rename to src/main/java/com/gitblit/wicket/resources/commit_merge_16x16.png diff --git a/src/main/resources/commit_up_16x16.png b/src/main/java/com/gitblit/wicket/resources/commit_up_16x16.png similarity index 100% rename from src/main/resources/commit_up_16x16.png rename to src/main/java/com/gitblit/wicket/resources/commit_up_16x16.png diff --git a/src/main/resources/federated_16x16.png b/src/main/java/com/gitblit/wicket/resources/federated_16x16.png similarity index 100% rename from src/main/resources/federated_16x16.png rename to src/main/java/com/gitblit/wicket/resources/federated_16x16.png diff --git a/src/main/resources/feed_16x16.png b/src/main/java/com/gitblit/wicket/resources/feed_16x16.png similarity index 100% rename from src/main/resources/feed_16x16.png rename to src/main/java/com/gitblit/wicket/resources/feed_16x16.png diff --git a/src/main/resources/file_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_16x16.png similarity index 100% rename from src/main/resources/file_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_16x16.png diff --git a/src/main/resources/file_acrobat_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_acrobat_16x16.png similarity index 100% rename from src/main/resources/file_acrobat_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_acrobat_16x16.png diff --git a/src/main/resources/file_c_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_c_16x16.png similarity index 100% rename from src/main/resources/file_c_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_c_16x16.png diff --git a/src/main/resources/file_code_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_code_16x16.png similarity index 100% rename from src/main/resources/file_code_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_code_16x16.png diff --git a/src/main/resources/file_cpp_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_cpp_16x16.png similarity index 100% rename from src/main/resources/file_cpp_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_cpp_16x16.png diff --git a/src/main/resources/file_cs_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_cs_16x16.png similarity index 100% rename from src/main/resources/file_cs_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_cs_16x16.png diff --git a/src/main/resources/file_doc_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_doc_16x16.png similarity index 100% rename from src/main/resources/file_doc_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_doc_16x16.png diff --git a/src/main/resources/file_excel_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_excel_16x16.png similarity index 100% rename from src/main/resources/file_excel_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_excel_16x16.png diff --git a/src/main/resources/file_h_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_h_16x16.png similarity index 100% rename from src/main/resources/file_h_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_h_16x16.png diff --git a/src/main/resources/file_java_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_java_16x16.png similarity index 100% rename from src/main/resources/file_java_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_java_16x16.png diff --git a/src/main/resources/file_php_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_php_16x16.png similarity index 100% rename from src/main/resources/file_php_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_php_16x16.png diff --git a/src/main/resources/file_ppt_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_ppt_16x16.png similarity index 100% rename from src/main/resources/file_ppt_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_ppt_16x16.png diff --git a/src/main/resources/file_ruby_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_ruby_16x16.png similarity index 100% rename from src/main/resources/file_ruby_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_ruby_16x16.png diff --git a/src/main/resources/file_settings_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_settings_16x16.png similarity index 100% rename from src/main/resources/file_settings_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_settings_16x16.png diff --git a/src/main/resources/file_vs_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_vs_16x16.png similarity index 100% rename from src/main/resources/file_vs_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_vs_16x16.png diff --git a/src/main/resources/file_world_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_world_16x16.png similarity index 100% rename from src/main/resources/file_world_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_world_16x16.png diff --git a/src/main/resources/file_zip_16x16.png b/src/main/java/com/gitblit/wicket/resources/file_zip_16x16.png similarity index 100% rename from src/main/resources/file_zip_16x16.png rename to src/main/java/com/gitblit/wicket/resources/file_zip_16x16.png diff --git a/src/main/resources/folder_16x16.png b/src/main/java/com/gitblit/wicket/resources/folder_16x16.png similarity index 100% rename from src/main/resources/folder_16x16.png rename to src/main/java/com/gitblit/wicket/resources/folder_16x16.png diff --git a/src/main/resources/folder_star_16x16.png b/src/main/java/com/gitblit/wicket/resources/folder_star_16x16.png similarity index 100% rename from src/main/resources/folder_star_16x16.png rename to src/main/java/com/gitblit/wicket/resources/folder_star_16x16.png diff --git a/src/main/resources/folder_star_32x32.png b/src/main/java/com/gitblit/wicket/resources/folder_star_32x32.png similarity index 100% rename from src/main/resources/folder_star_32x32.png rename to src/main/java/com/gitblit/wicket/resources/folder_star_32x32.png diff --git a/src/main/java/com/gitblit/wicket/resources/fontawesome/FontAwesome.java b/src/main/java/com/gitblit/wicket/resources/fontawesome/FontAwesome.java new file mode 100644 index 000000000..8f3188a75 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/resources/fontawesome/FontAwesome.java @@ -0,0 +1,18 @@ +package com.gitblit.wicket.resources.fontawesome; + +import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.request.resource.PackageResourceReference; + +public class FontAwesome { + public static void install(WebApplication app) { + app.mountResource("/fontawesome/css/font-awesome.min.css", new PackageResourceReference(FontAwesome.class, "css/font-awesome.min.css")); + + app.mountResource("/fontawesome/fonts/fontawesome-webfont.eot", new PackageResourceReference(FontAwesome.class, "fonts/fontawesome-webfont.eot")); + app.mountResource("/fontawesome/fonts/fontawesome-webfont.svg", new PackageResourceReference(FontAwesome.class, "fonts/fontawesome-webfont.svg")); + app.mountResource("/fontawesome/fonts/fontawesome-webfont.ttf", new PackageResourceReference(FontAwesome.class, "fonts/fontawesome-webfont.ttf")); + app.mountResource("/fontawesome/fonts/fontawesome-webfont.woff", new PackageResourceReference(FontAwesome.class, "fonts/fontawesome-webfont.woff")); + app.mountResource("/fontawesome/fonts/fontawesome-webfont.woff2", new PackageResourceReference(FontAwesome.class, "fonts/fontawesome-webfont.woff2")); + app.mountResource("/fontawesome/fonts/FontAwesome.otf", new PackageResourceReference(FontAwesome.class, "fonts/FontAwesome.otf")); + + } +} diff --git a/src/main/resources/fontawesome/css/font-awesome.min.css b/src/main/java/com/gitblit/wicket/resources/fontawesome/css/font-awesome.min.css similarity index 100% rename from src/main/resources/fontawesome/css/font-awesome.min.css rename to src/main/java/com/gitblit/wicket/resources/fontawesome/css/font-awesome.min.css diff --git a/src/main/resources/fontawesome/fonts/FontAwesome.otf b/src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/FontAwesome.otf similarity index 100% rename from src/main/resources/fontawesome/fonts/FontAwesome.otf rename to src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/FontAwesome.otf diff --git a/src/main/resources/fontawesome/fonts/fontawesome-webfont.eot b/src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.eot similarity index 100% rename from src/main/resources/fontawesome/fonts/fontawesome-webfont.eot rename to src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.eot diff --git a/src/main/resources/fontawesome/fonts/fontawesome-webfont.svg b/src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.svg similarity index 100% rename from src/main/resources/fontawesome/fonts/fontawesome-webfont.svg rename to src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.svg diff --git a/src/main/resources/fontawesome/fonts/fontawesome-webfont.ttf b/src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.ttf similarity index 100% rename from src/main/resources/fontawesome/fonts/fontawesome-webfont.ttf rename to src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.ttf diff --git a/src/main/resources/fontawesome/fonts/fontawesome-webfont.woff b/src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.woff similarity index 100% rename from src/main/resources/fontawesome/fonts/fontawesome-webfont.woff rename to src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.woff diff --git a/src/main/resources/fontawesome/fonts/fontawesome-webfont.woff2 b/src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.woff2 similarity index 100% rename from src/main/resources/fontawesome/fonts/fontawesome-webfont.woff2 rename to src/main/java/com/gitblit/wicket/resources/fontawesome/fonts/fontawesome-webfont.woff2 diff --git a/src/main/resources/fork-black_16x16.png b/src/main/java/com/gitblit/wicket/resources/fork-black_16x16.png similarity index 100% rename from src/main/resources/fork-black_16x16.png rename to src/main/java/com/gitblit/wicket/resources/fork-black_16x16.png diff --git a/src/main/resources/fork_16x16.png b/src/main/java/com/gitblit/wicket/resources/fork_16x16.png similarity index 100% rename from src/main/resources/fork_16x16.png rename to src/main/java/com/gitblit/wicket/resources/fork_16x16.png diff --git a/src/main/resources/git-black-16x16.png b/src/main/java/com/gitblit/wicket/resources/git-black-16x16.png similarity index 100% rename from src/main/resources/git-black-16x16.png rename to src/main/java/com/gitblit/wicket/resources/git-black-16x16.png diff --git a/src/main/resources/git-black.png b/src/main/java/com/gitblit/wicket/resources/git-black.png similarity index 100% rename from src/main/resources/git-black.png rename to src/main/java/com/gitblit/wicket/resources/git-black.png diff --git a/src/main/resources/git-black_210x210.png b/src/main/java/com/gitblit/wicket/resources/git-black_210x210.png similarity index 100% rename from src/main/resources/git-black_210x210.png rename to src/main/java/com/gitblit/wicket/resources/git-black_210x210.png diff --git a/src/main/resources/git-black_32x32.png b/src/main/java/com/gitblit/wicket/resources/git-black_32x32.png similarity index 100% rename from src/main/resources/git-black_32x32.png rename to src/main/java/com/gitblit/wicket/resources/git-black_32x32.png diff --git a/src/main/resources/git-orange-16x16.png b/src/main/java/com/gitblit/wicket/resources/git-orange-16x16.png similarity index 100% rename from src/main/resources/git-orange-16x16.png rename to src/main/java/com/gitblit/wicket/resources/git-orange-16x16.png diff --git a/src/main/resources/gitblit-editor.min.css b/src/main/java/com/gitblit/wicket/resources/gitblit-editor.min.css similarity index 100% rename from src/main/resources/gitblit-editor.min.css rename to src/main/java/com/gitblit/wicket/resources/gitblit-editor.min.css diff --git a/src/main/resources/gitblit-editor.min.js b/src/main/java/com/gitblit/wicket/resources/gitblit-editor.min.js similarity index 100% rename from src/main/resources/gitblit-editor.min.js rename to src/main/java/com/gitblit/wicket/resources/gitblit-editor.min.js diff --git a/src/main/resources/gitblit.css b/src/main/java/com/gitblit/wicket/resources/gitblit.css similarity index 100% rename from src/main/resources/gitblit.css rename to src/main/java/com/gitblit/wicket/resources/gitblit.css diff --git a/src/main/resources/gitblt-favicon.png b/src/main/java/com/gitblit/wicket/resources/gitblt-favicon.png similarity index 100% rename from src/main/resources/gitblt-favicon.png rename to src/main/java/com/gitblit/wicket/resources/gitblt-favicon.png diff --git a/src/main/resources/gitblt-logo.png b/src/main/java/com/gitblit/wicket/resources/gitblt-logo.png similarity index 100% rename from src/main/resources/gitblt-logo.png rename to src/main/java/com/gitblit/wicket/resources/gitblt-logo.png diff --git a/src/main/resources/gitblt2.png b/src/main/java/com/gitblit/wicket/resources/gitblt2.png similarity index 100% rename from src/main/resources/gitblt2.png rename to src/main/java/com/gitblit/wicket/resources/gitblt2.png diff --git a/src/main/resources/gitblt2_white.png b/src/main/java/com/gitblit/wicket/resources/gitblt2_white.png similarity index 100% rename from src/main/resources/gitblt2_white.png rename to src/main/java/com/gitblit/wicket/resources/gitblt2_white.png diff --git a/src/main/resources/gitblt_25.png b/src/main/java/com/gitblit/wicket/resources/gitblt_25.png similarity index 100% rename from src/main/resources/gitblt_25.png rename to src/main/java/com/gitblit/wicket/resources/gitblt_25.png diff --git a/src/main/resources/gitblt_25_white.png b/src/main/java/com/gitblit/wicket/resources/gitblt_25_white.png similarity index 100% rename from src/main/resources/gitblt_25_white.png rename to src/main/java/com/gitblit/wicket/resources/gitblt_25_white.png diff --git a/src/main/resources/github_32x32.png b/src/main/java/com/gitblit/wicket/resources/github_32x32.png similarity index 100% rename from src/main/resources/github_32x32.png rename to src/main/java/com/gitblit/wicket/resources/github_32x32.png diff --git a/src/main/resources/gitweb-favicon.png b/src/main/java/com/gitblit/wicket/resources/gitweb-favicon.png similarity index 100% rename from src/main/resources/gitweb-favicon.png rename to src/main/java/com/gitblit/wicket/resources/gitweb-favicon.png diff --git a/src/main/resources/health_16x16.png b/src/main/java/com/gitblit/wicket/resources/health_16x16.png similarity index 100% rename from src/main/resources/health_16x16.png rename to src/main/java/com/gitblit/wicket/resources/health_16x16.png diff --git a/src/main/resources/heart_16x16.png b/src/main/java/com/gitblit/wicket/resources/heart_16x16.png similarity index 100% rename from src/main/resources/heart_16x16.png rename to src/main/java/com/gitblit/wicket/resources/heart_16x16.png diff --git a/src/main/resources/hideheader.css b/src/main/java/com/gitblit/wicket/resources/hideheader.css similarity index 100% rename from src/main/resources/hideheader.css rename to src/main/java/com/gitblit/wicket/resources/hideheader.css diff --git a/src/main/resources/information_16x16.png b/src/main/java/com/gitblit/wicket/resources/information_16x16.png similarity index 100% rename from src/main/resources/information_16x16.png rename to src/main/java/com/gitblit/wicket/resources/information_16x16.png diff --git a/src/main/resources/lock_16x16.png b/src/main/java/com/gitblit/wicket/resources/lock_16x16.png similarity index 100% rename from src/main/resources/lock_16x16.png rename to src/main/java/com/gitblit/wicket/resources/lock_16x16.png diff --git a/src/main/resources/lock_go_16x16.png b/src/main/java/com/gitblit/wicket/resources/lock_go_16x16.png similarity index 100% rename from src/main/resources/lock_go_16x16.png rename to src/main/java/com/gitblit/wicket/resources/lock_go_16x16.png diff --git a/src/main/resources/lock_pull_16x16.png b/src/main/java/com/gitblit/wicket/resources/lock_pull_16x16.png similarity index 100% rename from src/main/resources/lock_pull_16x16.png rename to src/main/java/com/gitblit/wicket/resources/lock_pull_16x16.png diff --git a/src/main/resources/mail_16x16.png b/src/main/java/com/gitblit/wicket/resources/mail_16x16.png similarity index 100% rename from src/main/resources/mail_16x16.png rename to src/main/java/com/gitblit/wicket/resources/mail_16x16.png diff --git a/src/main/resources/mirror_16x16.png b/src/main/java/com/gitblit/wicket/resources/mirror_16x16.png similarity index 100% rename from src/main/resources/mirror_16x16.png rename to src/main/java/com/gitblit/wicket/resources/mirror_16x16.png diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/Octicons.java b/src/main/java/com/gitblit/wicket/resources/octicons/Octicons.java new file mode 100644 index 000000000..773574db9 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/resources/octicons/Octicons.java @@ -0,0 +1,19 @@ +package com.gitblit.wicket.resources.octicons; + +import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.request.resource.PackageResourceReference; + + +public class Octicons { + public static void install(WebApplication app) { + app.mountResource("/octicons/octicons.css", new PackageResourceReference(Octicons.class, "octicons.css")); + app.mountResource("/octicons/octicons-local.ttf", new PackageResourceReference(Octicons.class, "octicons-local.ttf")); + app.mountResource("/octicons/octicons.eot", new PackageResourceReference(Octicons.class, "octicons.eot")); + app.mountResource("/octicons/octicons.less", new PackageResourceReference(Octicons.class, "octicons.less")); + app.mountResource("/octicons/octicons.svg", new PackageResourceReference(Octicons.class, "octicons.svg")); + app.mountResource("/octicons/octicons.ttf", new PackageResourceReference(Octicons.class, "octicons.ttf")); + app.mountResource("/octicons/octicons.woff", new PackageResourceReference(Octicons.class, "octicons.woff")); + app.mountResource("/octicons/sprockets-octicons.scss", new PackageResourceReference(Octicons.class, "sprockets-octicons.scss")); + + } +} diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/octicons-local.ttf b/src/main/java/com/gitblit/wicket/resources/octicons/octicons-local.ttf new file mode 100644 index 000000000..03d78cca5 Binary files /dev/null and b/src/main/java/com/gitblit/wicket/resources/octicons/octicons-local.ttf differ diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/octicons.css b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.css new file mode 100644 index 000000000..a5dcd153a --- /dev/null +++ b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.css @@ -0,0 +1,235 @@ +@font-face { + font-family: 'octicons'; + src: url('octicons.eot?#iefix') format('embedded-opentype'), + url('octicons.woff') format('woff'), + url('octicons.ttf') format('truetype'), + url('octicons.svg#octicons') format('svg'); + font-weight: normal; + font-style: normal; +} + +/* + +.octicon is optimized for 16px. +.mega-octicon is optimized for 32px but can be used larger. + +*/ +.octicon, .mega-octicon { + font: normal normal normal 16px/1 octicons; + display: inline-block; + text-decoration: none; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.mega-octicon { font-size: 32px; } + + +.octicon-alert:before { content: '\f02d'} /*  */ +.octicon-alignment-align:before { content: '\f08a'} /*  */ +.octicon-alignment-aligned-to:before { content: '\f08e'} /*  */ +.octicon-alignment-unalign:before { content: '\f08b'} /*  */ +.octicon-arrow-down:before { content: '\f03f'} /*  */ +.octicon-arrow-left:before { content: '\f040'} /*  */ +.octicon-arrow-right:before { content: '\f03e'} /*  */ +.octicon-arrow-small-down:before { content: '\f0a0'} /*  */ +.octicon-arrow-small-left:before { content: '\f0a1'} /*  */ +.octicon-arrow-small-right:before { content: '\f071'} /*  */ +.octicon-arrow-small-up:before { content: '\f09f'} /*  */ +.octicon-arrow-up:before { content: '\f03d'} /*  */ +.octicon-beer:before { content: '\f069'} /*  */ +.octicon-book:before { content: '\f007'} /*  */ +.octicon-bookmark:before { content: '\f07b'} /*  */ +.octicon-briefcase:before { content: '\f0d3'} /*  */ +.octicon-broadcast:before { content: '\f048'} /*  */ +.octicon-browser:before { content: '\f0c5'} /*  */ +.octicon-bug:before { content: '\f091'} /*  */ +.octicon-calendar:before { content: '\f068'} /*  */ +.octicon-check:before { content: '\f03a'} /*  */ +.octicon-checklist:before { content: '\f076'} /*  */ +.octicon-chevron-down:before { content: '\f0a3'} /*  */ +.octicon-chevron-left:before { content: '\f0a4'} /*  */ +.octicon-chevron-right:before { content: '\f078'} /*  */ +.octicon-chevron-up:before { content: '\f0a2'} /*  */ +.octicon-circle-slash:before { content: '\f084'} /*  */ +.octicon-circuit-board:before { content: '\f0d6'} /*  */ +.octicon-clippy:before { content: '\f035'} /*  */ +.octicon-clock:before { content: '\f046'} /*  */ +.octicon-cloud-download:before { content: '\f00b'} /*  */ +.octicon-cloud-upload:before { content: '\f00c'} /*  */ +.octicon-code:before { content: '\f05f'} /*  */ +.octicon-color-mode:before { content: '\f065'} /*  */ +.octicon-comment-add:before, +.octicon-comment:before { content: '\f02b'} /*  */ +.octicon-comment-discussion:before { content: '\f04f'} /*  */ +.octicon-credit-card:before { content: '\f045'} /*  */ +.octicon-dash:before { content: '\f0ca'} /*  */ +.octicon-dashboard:before { content: '\f07d'} /*  */ +.octicon-database:before { content: '\f096'} /*  */ +.octicon-device-camera:before { content: '\f056'} /*  */ +.octicon-device-camera-video:before { content: '\f057'} /*  */ +.octicon-device-desktop:before { content: '\f27c'} /*  */ +.octicon-device-mobile:before { content: '\f038'} /*  */ +.octicon-diff:before { content: '\f04d'} /*  */ +.octicon-diff-added:before { content: '\f06b'} /*  */ +.octicon-diff-ignored:before { content: '\f099'} /*  */ +.octicon-diff-modified:before { content: '\f06d'} /*  */ +.octicon-diff-removed:before { content: '\f06c'} /*  */ +.octicon-diff-renamed:before { content: '\f06e'} /*  */ +.octicon-ellipsis:before { content: '\f09a'} /*  */ +.octicon-eye-unwatch:before, +.octicon-eye-watch:before, +.octicon-eye:before { content: '\f04e'} /*  */ +.octicon-file-binary:before { content: '\f094'} /*  */ +.octicon-file-code:before { content: '\f010'} /*  */ +.octicon-file-directory:before { content: '\f016'} /*  */ +.octicon-file-media:before { content: '\f012'} /*  */ +.octicon-file-pdf:before { content: '\f014'} /*  */ +.octicon-file-submodule:before { content: '\f017'} /*  */ +.octicon-file-symlink-directory:before { content: '\f0b1'} /*  */ +.octicon-file-symlink-file:before { content: '\f0b0'} /*  */ +.octicon-file-text:before { content: '\f011'} /*  */ +.octicon-file-zip:before { content: '\f013'} /*  */ +.octicon-flame:before { content: '\f0d2'} /*  */ +.octicon-fold:before { content: '\f0cc'} /*  */ +.octicon-gear:before { content: '\f02f'} /*  */ +.octicon-gift:before { content: '\f042'} /*  */ +.octicon-gist:before { content: '\f00e'} /*  */ +.octicon-gist-secret:before { content: '\f08c'} /*  */ +.octicon-git-branch-create:before, +.octicon-git-branch-delete:before, +.octicon-git-branch:before { content: '\f020'} /*  */ +.octicon-git-commit:before { content: '\f01f'} /*  */ +.octicon-git-compare:before { content: '\f0ac'} /*  */ +.octicon-git-merge:before { content: '\f023'} /*  */ +.octicon-git-pull-request-abandoned:before, +.octicon-git-pull-request:before { content: '\f009'} /*  */ +.octicon-globe:before { content: '\f0b6'} /*  */ +.octicon-graph:before { content: '\f043'} /*  */ +.octicon-heart:before { content: '\2665'} /* ♥ */ +.octicon-history:before { content: '\f07e'} /*  */ +.octicon-home:before { content: '\f08d'} /*  */ +.octicon-horizontal-rule:before { content: '\f070'} /*  */ +.octicon-hourglass:before { content: '\f09e'} /*  */ +.octicon-hubot:before { content: '\f09d'} /*  */ +.octicon-inbox:before { content: '\f0cf'} /*  */ +.octicon-info:before { content: '\f059'} /*  */ +.octicon-issue-closed:before { content: '\f028'} /*  */ +.octicon-issue-opened:before { content: '\f026'} /*  */ +.octicon-issue-reopened:before { content: '\f027'} /*  */ +.octicon-jersey:before { content: '\f019'} /*  */ +.octicon-jump-down:before { content: '\f072'} /*  */ +.octicon-jump-left:before { content: '\f0a5'} /*  */ +.octicon-jump-right:before { content: '\f0a6'} /*  */ +.octicon-jump-up:before { content: '\f073'} /*  */ +.octicon-key:before { content: '\f049'} /*  */ +.octicon-keyboard:before { content: '\f00d'} /*  */ +.octicon-law:before { content: '\f0d8'} /* */ +.octicon-light-bulb:before { content: '\f000'} /*  */ +.octicon-link:before { content: '\f05c'} /*  */ +.octicon-link-external:before { content: '\f07f'} /*  */ +.octicon-list-ordered:before { content: '\f062'} /*  */ +.octicon-list-unordered:before { content: '\f061'} /*  */ +.octicon-location:before { content: '\f060'} /*  */ +.octicon-gist-private:before, +.octicon-mirror-private:before, +.octicon-git-fork-private:before, +.octicon-lock:before { content: '\f06a'} /*  */ +.octicon-logo-github:before { content: '\f092'} /*  */ +.octicon-mail:before { content: '\f03b'} /*  */ +.octicon-mail-read:before { content: '\f03c'} /*  */ +.octicon-mail-reply:before { content: '\f051'} /*  */ +.octicon-mark-github:before { content: '\f00a'} /*  */ +.octicon-markdown:before { content: '\f0c9'} /*  */ +.octicon-megaphone:before { content: '\f077'} /*  */ +.octicon-mention:before { content: '\f0be'} /*  */ +.octicon-microscope:before { content: '\f089'} /*  */ +.octicon-milestone:before { content: '\f075'} /*  */ +.octicon-mirror-public:before, +.octicon-mirror:before { content: '\f024'} /*  */ +.octicon-mortar-board:before { content: '\f0d7'} /* */ +.octicon-move-down:before { content: '\f0a8'} /*  */ +.octicon-move-left:before { content: '\f074'} /*  */ +.octicon-move-right:before { content: '\f0a9'} /*  */ +.octicon-move-up:before { content: '\f0a7'} /*  */ +.octicon-mute:before { content: '\f080'} /*  */ +.octicon-no-newline:before { content: '\f09c'} /*  */ +.octicon-octoface:before { content: '\f008'} /*  */ +.octicon-organization:before { content: '\f037'} /*  */ +.octicon-package:before { content: '\f0c4'} /*  */ +.octicon-paintcan:before { content: '\f0d1'} /*  */ +.octicon-pencil:before { content: '\f058'} /*  */ +.octicon-person-add:before, +.octicon-person-follow:before, +.octicon-person:before { content: '\f018'} /*  */ +.octicon-pin:before { content: '\f041'} /*  */ +.octicon-playback-fast-forward:before { content: '\f0bd'} /*  */ +.octicon-playback-pause:before { content: '\f0bb'} /*  */ +.octicon-playback-play:before { content: '\f0bf'} /*  */ +.octicon-playback-rewind:before { content: '\f0bc'} /*  */ +.octicon-plug:before { content: '\f0d4'} /*  */ +.octicon-repo-create:before, +.octicon-gist-new:before, +.octicon-file-directory-create:before, +.octicon-file-add:before, +.octicon-plus:before { content: '\f05d'} /*  */ +.octicon-podium:before { content: '\f0af'} /*  */ +.octicon-primitive-dot:before { content: '\f052'} /*  */ +.octicon-primitive-square:before { content: '\f053'} /*  */ +.octicon-pulse:before { content: '\f085'} /*  */ +.octicon-puzzle:before { content: '\f0c0'} /*  */ +.octicon-question:before { content: '\f02c'} /*  */ +.octicon-quote:before { content: '\f063'} /*  */ +.octicon-radio-tower:before { content: '\f030'} /*  */ +.octicon-repo-delete:before, +.octicon-repo:before { content: '\f001'} /*  */ +.octicon-repo-clone:before { content: '\f04c'} /*  */ +.octicon-repo-force-push:before { content: '\f04a'} /*  */ +.octicon-gist-fork:before, +.octicon-repo-forked:before { content: '\f002'} /*  */ +.octicon-repo-pull:before { content: '\f006'} /*  */ +.octicon-repo-push:before { content: '\f005'} /*  */ +.octicon-rocket:before { content: '\f033'} /*  */ +.octicon-rss:before { content: '\f034'} /*  */ +.octicon-ruby:before { content: '\f047'} /*  */ +.octicon-screen-full:before { content: '\f066'} /*  */ +.octicon-screen-normal:before { content: '\f067'} /*  */ +.octicon-search-save:before, +.octicon-search:before { content: '\f02e'} /*  */ +.octicon-server:before { content: '\f097'} /*  */ +.octicon-settings:before { content: '\f07c'} /*  */ +.octicon-log-in:before, +.octicon-sign-in:before { content: '\f036'} /*  */ +.octicon-log-out:before, +.octicon-sign-out:before { content: '\f032'} /*  */ +.octicon-split:before { content: '\f0c6'} /*  */ +.octicon-squirrel:before { content: '\f0b2'} /*  */ +.octicon-star-add:before, +.octicon-star-delete:before, +.octicon-star:before { content: '\f02a'} /*  */ +.octicon-steps:before { content: '\f0c7'} /*  */ +.octicon-stop:before { content: '\f08f'} /*  */ +.octicon-repo-sync:before, +.octicon-sync:before { content: '\f087'} /*  */ +.octicon-tag-remove:before, +.octicon-tag-add:before, +.octicon-tag:before { content: '\f015'} /*  */ +.octicon-telescope:before { content: '\f088'} /*  */ +.octicon-terminal:before { content: '\f0c8'} /*  */ +.octicon-three-bars:before { content: '\f05e'} /*  */ +.octicon-tools:before { content: '\f031'} /*  */ +.octicon-trashcan:before { content: '\f0d0'} /*  */ +.octicon-triangle-down:before { content: '\f05b'} /*  */ +.octicon-triangle-left:before { content: '\f044'} /*  */ +.octicon-triangle-right:before { content: '\f05a'} /*  */ +.octicon-triangle-up:before { content: '\f0aa'} /*  */ +.octicon-unfold:before { content: '\f039'} /*  */ +.octicon-unmute:before { content: '\f0ba'} /*  */ +.octicon-versions:before { content: '\f064'} /*  */ +.octicon-remove-close:before, +.octicon-x:before { content: '\f081'} /*  */ +.octicon-zap:before { content: '\26A1'} /* ⚡ */ diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/octicons.eot b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.eot new file mode 100644 index 000000000..22881a8b6 Binary files /dev/null and b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.eot differ diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/octicons.less b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.less new file mode 100644 index 000000000..b054eb894 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.less @@ -0,0 +1,233 @@ +@octicons-font-path: "."; +@octicons-version: "a594b5fd4cae0b2afd156bca8dad8d27ac3d7594"; + +@font-face { + font-family: 'octicons'; + src: ~"url('@{octicons-font-path}/octicons.eot?#iefix&v=@{octicons-version}') format('embedded-opentype')", + ~"url('@{octicons-font-path}/octicons.woff?v=@{octicons-version}') format('woff')", + ~"url('@{octicons-font-path}/octicons.ttf?v=@{octicons-version}') format('truetype')", + ~"url('@{octicons-font-path}/octicons.svg?v=@{octicons-version}#octicons') format('svg')"; + font-weight: normal; + font-style: normal; +} + +// .octicon is optimized for 16px. +// .mega-octicon is optimized for 32px but can be used larger. +.octicon, .mega-octicon { + font: normal normal normal 16px/1 octicons; + display: inline-block; + text-decoration: none; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.mega-octicon { font-size: 32px; } + +.octicon-alert:before { content: '\f02d'} /*  */ +.octicon-alignment-align:before { content: '\f08a'} /*  */ +.octicon-alignment-aligned-to:before { content: '\f08e'} /*  */ +.octicon-alignment-unalign:before { content: '\f08b'} /*  */ +.octicon-arrow-down:before { content: '\f03f'} /*  */ +.octicon-arrow-left:before { content: '\f040'} /*  */ +.octicon-arrow-right:before { content: '\f03e'} /*  */ +.octicon-arrow-small-down:before { content: '\f0a0'} /*  */ +.octicon-arrow-small-left:before { content: '\f0a1'} /*  */ +.octicon-arrow-small-right:before { content: '\f071'} /*  */ +.octicon-arrow-small-up:before { content: '\f09f'} /*  */ +.octicon-arrow-up:before { content: '\f03d'} /*  */ +.octicon-beer:before { content: '\f069'} /*  */ +.octicon-book:before { content: '\f007'} /*  */ +.octicon-bookmark:before { content: '\f07b'} /*  */ +.octicon-briefcase:before { content: '\f0d3'} /*  */ +.octicon-broadcast:before { content: '\f048'} /*  */ +.octicon-browser:before { content: '\f0c5'} /*  */ +.octicon-bug:before { content: '\f091'} /*  */ +.octicon-calendar:before { content: '\f068'} /*  */ +.octicon-check:before { content: '\f03a'} /*  */ +.octicon-checklist:before { content: '\f076'} /*  */ +.octicon-chevron-down:before { content: '\f0a3'} /*  */ +.octicon-chevron-left:before { content: '\f0a4'} /*  */ +.octicon-chevron-right:before { content: '\f078'} /*  */ +.octicon-chevron-up:before { content: '\f0a2'} /*  */ +.octicon-circle-slash:before { content: '\f084'} /*  */ +.octicon-circuit-board:before { content: '\f0d6'} /*  */ +.octicon-clippy:before { content: '\f035'} /*  */ +.octicon-clock:before { content: '\f046'} /*  */ +.octicon-cloud-download:before { content: '\f00b'} /*  */ +.octicon-cloud-upload:before { content: '\f00c'} /*  */ +.octicon-code:before { content: '\f05f'} /*  */ +.octicon-color-mode:before { content: '\f065'} /*  */ +.octicon-comment-add:before, +.octicon-comment:before { content: '\f02b'} /*  */ +.octicon-comment-discussion:before { content: '\f04f'} /*  */ +.octicon-credit-card:before { content: '\f045'} /*  */ +.octicon-dash:before { content: '\f0ca'} /*  */ +.octicon-dashboard:before { content: '\f07d'} /*  */ +.octicon-database:before { content: '\f096'} /*  */ +.octicon-device-camera:before { content: '\f056'} /*  */ +.octicon-device-camera-video:before { content: '\f057'} /*  */ +.octicon-device-desktop:before { content: '\f27c'} /*  */ +.octicon-device-mobile:before { content: '\f038'} /*  */ +.octicon-diff:before { content: '\f04d'} /*  */ +.octicon-diff-added:before { content: '\f06b'} /*  */ +.octicon-diff-ignored:before { content: '\f099'} /*  */ +.octicon-diff-modified:before { content: '\f06d'} /*  */ +.octicon-diff-removed:before { content: '\f06c'} /*  */ +.octicon-diff-renamed:before { content: '\f06e'} /*  */ +.octicon-ellipsis:before { content: '\f09a'} /*  */ +.octicon-eye-unwatch:before, +.octicon-eye-watch:before, +.octicon-eye:before { content: '\f04e'} /*  */ +.octicon-file-binary:before { content: '\f094'} /*  */ +.octicon-file-code:before { content: '\f010'} /*  */ +.octicon-file-directory:before { content: '\f016'} /*  */ +.octicon-file-media:before { content: '\f012'} /*  */ +.octicon-file-pdf:before { content: '\f014'} /*  */ +.octicon-file-submodule:before { content: '\f017'} /*  */ +.octicon-file-symlink-directory:before { content: '\f0b1'} /*  */ +.octicon-file-symlink-file:before { content: '\f0b0'} /*  */ +.octicon-file-text:before { content: '\f011'} /*  */ +.octicon-file-zip:before { content: '\f013'} /*  */ +.octicon-flame:before { content: '\f0d2'} /*  */ +.octicon-fold:before { content: '\f0cc'} /*  */ +.octicon-gear:before { content: '\f02f'} /*  */ +.octicon-gift:before { content: '\f042'} /*  */ +.octicon-gist:before { content: '\f00e'} /*  */ +.octicon-gist-secret:before { content: '\f08c'} /*  */ +.octicon-git-branch-create:before, +.octicon-git-branch-delete:before, +.octicon-git-branch:before { content: '\f020'} /*  */ +.octicon-git-commit:before { content: '\f01f'} /*  */ +.octicon-git-compare:before { content: '\f0ac'} /*  */ +.octicon-git-merge:before { content: '\f023'} /*  */ +.octicon-git-pull-request-abandoned:before, +.octicon-git-pull-request:before { content: '\f009'} /*  */ +.octicon-globe:before { content: '\f0b6'} /*  */ +.octicon-graph:before { content: '\f043'} /*  */ +.octicon-heart:before { content: '\2665'} /* ♥ */ +.octicon-history:before { content: '\f07e'} /*  */ +.octicon-home:before { content: '\f08d'} /*  */ +.octicon-horizontal-rule:before { content: '\f070'} /*  */ +.octicon-hourglass:before { content: '\f09e'} /*  */ +.octicon-hubot:before { content: '\f09d'} /*  */ +.octicon-inbox:before { content: '\f0cf'} /*  */ +.octicon-info:before { content: '\f059'} /*  */ +.octicon-issue-closed:before { content: '\f028'} /*  */ +.octicon-issue-opened:before { content: '\f026'} /*  */ +.octicon-issue-reopened:before { content: '\f027'} /*  */ +.octicon-jersey:before { content: '\f019'} /*  */ +.octicon-jump-down:before { content: '\f072'} /*  */ +.octicon-jump-left:before { content: '\f0a5'} /*  */ +.octicon-jump-right:before { content: '\f0a6'} /*  */ +.octicon-jump-up:before { content: '\f073'} /*  */ +.octicon-key:before { content: '\f049'} /*  */ +.octicon-keyboard:before { content: '\f00d'} /*  */ +.octicon-law:before { content: '\f0d8'} /* */ +.octicon-light-bulb:before { content: '\f000'} /*  */ +.octicon-link:before { content: '\f05c'} /*  */ +.octicon-link-external:before { content: '\f07f'} /*  */ +.octicon-list-ordered:before { content: '\f062'} /*  */ +.octicon-list-unordered:before { content: '\f061'} /*  */ +.octicon-location:before { content: '\f060'} /*  */ +.octicon-gist-private:before, +.octicon-mirror-private:before, +.octicon-git-fork-private:before, +.octicon-lock:before { content: '\f06a'} /*  */ +.octicon-logo-github:before { content: '\f092'} /*  */ +.octicon-mail:before { content: '\f03b'} /*  */ +.octicon-mail-read:before { content: '\f03c'} /*  */ +.octicon-mail-reply:before { content: '\f051'} /*  */ +.octicon-mark-github:before { content: '\f00a'} /*  */ +.octicon-markdown:before { content: '\f0c9'} /*  */ +.octicon-megaphone:before { content: '\f077'} /*  */ +.octicon-mention:before { content: '\f0be'} /*  */ +.octicon-microscope:before { content: '\f089'} /*  */ +.octicon-milestone:before { content: '\f075'} /*  */ +.octicon-mirror-public:before, +.octicon-mirror:before { content: '\f024'} /*  */ +.octicon-mortar-board:before { content: '\f0d7'} /* */ +.octicon-move-down:before { content: '\f0a8'} /*  */ +.octicon-move-left:before { content: '\f074'} /*  */ +.octicon-move-right:before { content: '\f0a9'} /*  */ +.octicon-move-up:before { content: '\f0a7'} /*  */ +.octicon-mute:before { content: '\f080'} /*  */ +.octicon-no-newline:before { content: '\f09c'} /*  */ +.octicon-octoface:before { content: '\f008'} /*  */ +.octicon-organization:before { content: '\f037'} /*  */ +.octicon-package:before { content: '\f0c4'} /*  */ +.octicon-paintcan:before { content: '\f0d1'} /*  */ +.octicon-pencil:before { content: '\f058'} /*  */ +.octicon-person-add:before, +.octicon-person-follow:before, +.octicon-person:before { content: '\f018'} /*  */ +.octicon-pin:before { content: '\f041'} /*  */ +.octicon-playback-fast-forward:before { content: '\f0bd'} /*  */ +.octicon-playback-pause:before { content: '\f0bb'} /*  */ +.octicon-playback-play:before { content: '\f0bf'} /*  */ +.octicon-playback-rewind:before { content: '\f0bc'} /*  */ +.octicon-plug:before { content: '\f0d4'} /*  */ +.octicon-repo-create:before, +.octicon-gist-new:before, +.octicon-file-directory-create:before, +.octicon-file-add:before, +.octicon-plus:before { content: '\f05d'} /*  */ +.octicon-podium:before { content: '\f0af'} /*  */ +.octicon-primitive-dot:before { content: '\f052'} /*  */ +.octicon-primitive-square:before { content: '\f053'} /*  */ +.octicon-pulse:before { content: '\f085'} /*  */ +.octicon-puzzle:before { content: '\f0c0'} /*  */ +.octicon-question:before { content: '\f02c'} /*  */ +.octicon-quote:before { content: '\f063'} /*  */ +.octicon-radio-tower:before { content: '\f030'} /*  */ +.octicon-repo-delete:before, +.octicon-repo:before { content: '\f001'} /*  */ +.octicon-repo-clone:before { content: '\f04c'} /*  */ +.octicon-repo-force-push:before { content: '\f04a'} /*  */ +.octicon-gist-fork:before, +.octicon-repo-forked:before { content: '\f002'} /*  */ +.octicon-repo-pull:before { content: '\f006'} /*  */ +.octicon-repo-push:before { content: '\f005'} /*  */ +.octicon-rocket:before { content: '\f033'} /*  */ +.octicon-rss:before { content: '\f034'} /*  */ +.octicon-ruby:before { content: '\f047'} /*  */ +.octicon-screen-full:before { content: '\f066'} /*  */ +.octicon-screen-normal:before { content: '\f067'} /*  */ +.octicon-search-save:before, +.octicon-search:before { content: '\f02e'} /*  */ +.octicon-server:before { content: '\f097'} /*  */ +.octicon-settings:before { content: '\f07c'} /*  */ +.octicon-log-in:before, +.octicon-sign-in:before { content: '\f036'} /*  */ +.octicon-log-out:before, +.octicon-sign-out:before { content: '\f032'} /*  */ +.octicon-split:before { content: '\f0c6'} /*  */ +.octicon-squirrel:before { content: '\f0b2'} /*  */ +.octicon-star-add:before, +.octicon-star-delete:before, +.octicon-star:before { content: '\f02a'} /*  */ +.octicon-steps:before { content: '\f0c7'} /*  */ +.octicon-stop:before { content: '\f08f'} /*  */ +.octicon-repo-sync:before, +.octicon-sync:before { content: '\f087'} /*  */ +.octicon-tag-remove:before, +.octicon-tag-add:before, +.octicon-tag:before { content: '\f015'} /*  */ +.octicon-telescope:before { content: '\f088'} /*  */ +.octicon-terminal:before { content: '\f0c8'} /*  */ +.octicon-three-bars:before { content: '\f05e'} /*  */ +.octicon-tools:before { content: '\f031'} /*  */ +.octicon-trashcan:before { content: '\f0d0'} /*  */ +.octicon-triangle-down:before { content: '\f05b'} /*  */ +.octicon-triangle-left:before { content: '\f044'} /*  */ +.octicon-triangle-right:before { content: '\f05a'} /*  */ +.octicon-triangle-up:before { content: '\f0aa'} /*  */ +.octicon-unfold:before { content: '\f039'} /*  */ +.octicon-unmute:before { content: '\f0ba'} /*  */ +.octicon-versions:before { content: '\f064'} /*  */ +.octicon-remove-close:before, +.octicon-x:before { content: '\f081'} /*  */ +.octicon-zap:before { content: '\26A1'} /* ⚡ */ diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/octicons.svg b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.svg new file mode 100644 index 000000000..ea3e0f161 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.svg @@ -0,0 +1,198 @@ + + + + +(c) 2012-2014 GitHub + +When using the GitHub logos, be sure to follow the GitHub logo guidelines (https://github.com/logos) + +Font License: SIL OFL 1.1 (http://scripts.sil.org/OFL) +Applies to all font files + +Code License: MIT (http://choosealicense.com/licenses/mit/) +Applies to all other files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/octicons.ttf b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.ttf new file mode 100644 index 000000000..189ca2813 Binary files /dev/null and b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.ttf differ diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/octicons.woff b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.woff new file mode 100644 index 000000000..2b770e429 Binary files /dev/null and b/src/main/java/com/gitblit/wicket/resources/octicons/octicons.woff differ diff --git a/src/main/java/com/gitblit/wicket/resources/octicons/sprockets-octicons.scss b/src/main/java/com/gitblit/wicket/resources/octicons/sprockets-octicons.scss new file mode 100644 index 000000000..0e518fc17 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/resources/octicons/sprockets-octicons.scss @@ -0,0 +1,230 @@ +@font-face { + font-family: 'octicons'; + src: font-url('octicons.eot?#iefix') format('embedded-opentype'), + font-url('octicons.woff') format('woff'), + font-url('octicons.ttf') format('truetype'), + font-url('octicons.svg#octicons') format('svg'); + font-weight: normal; + font-style: normal; +} + +// .octicon is optimized for 16px. +// .mega-octicon is optimized for 32px but can be used larger. +.octicon, .mega-octicon { + font: normal normal normal 16px/1 octicons; + display: inline-block; + text-decoration: none; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.mega-octicon { font-size: 32px; } + +.octicon-alert:before { content: '\f02d'} /*  */ +.octicon-alignment-align:before { content: '\f08a'} /*  */ +.octicon-alignment-aligned-to:before { content: '\f08e'} /*  */ +.octicon-alignment-unalign:before { content: '\f08b'} /*  */ +.octicon-arrow-down:before { content: '\f03f'} /*  */ +.octicon-arrow-left:before { content: '\f040'} /*  */ +.octicon-arrow-right:before { content: '\f03e'} /*  */ +.octicon-arrow-small-down:before { content: '\f0a0'} /*  */ +.octicon-arrow-small-left:before { content: '\f0a1'} /*  */ +.octicon-arrow-small-right:before { content: '\f071'} /*  */ +.octicon-arrow-small-up:before { content: '\f09f'} /*  */ +.octicon-arrow-up:before { content: '\f03d'} /*  */ +.octicon-beer:before { content: '\f069'} /*  */ +.octicon-book:before { content: '\f007'} /*  */ +.octicon-bookmark:before { content: '\f07b'} /*  */ +.octicon-briefcase:before { content: '\f0d3'} /*  */ +.octicon-broadcast:before { content: '\f048'} /*  */ +.octicon-browser:before { content: '\f0c5'} /*  */ +.octicon-bug:before { content: '\f091'} /*  */ +.octicon-calendar:before { content: '\f068'} /*  */ +.octicon-check:before { content: '\f03a'} /*  */ +.octicon-checklist:before { content: '\f076'} /*  */ +.octicon-chevron-down:before { content: '\f0a3'} /*  */ +.octicon-chevron-left:before { content: '\f0a4'} /*  */ +.octicon-chevron-right:before { content: '\f078'} /*  */ +.octicon-chevron-up:before { content: '\f0a2'} /*  */ +.octicon-circle-slash:before { content: '\f084'} /*  */ +.octicon-circuit-board:before { content: '\f0d6'} /*  */ +.octicon-clippy:before { content: '\f035'} /*  */ +.octicon-clock:before { content: '\f046'} /*  */ +.octicon-cloud-download:before { content: '\f00b'} /*  */ +.octicon-cloud-upload:before { content: '\f00c'} /*  */ +.octicon-code:before { content: '\f05f'} /*  */ +.octicon-color-mode:before { content: '\f065'} /*  */ +.octicon-comment-add:before, +.octicon-comment:before { content: '\f02b'} /*  */ +.octicon-comment-discussion:before { content: '\f04f'} /*  */ +.octicon-credit-card:before { content: '\f045'} /*  */ +.octicon-dash:before { content: '\f0ca'} /*  */ +.octicon-dashboard:before { content: '\f07d'} /*  */ +.octicon-database:before { content: '\f096'} /*  */ +.octicon-device-camera:before { content: '\f056'} /*  */ +.octicon-device-camera-video:before { content: '\f057'} /*  */ +.octicon-device-desktop:before { content: '\f27c'} /*  */ +.octicon-device-mobile:before { content: '\f038'} /*  */ +.octicon-diff:before { content: '\f04d'} /*  */ +.octicon-diff-added:before { content: '\f06b'} /*  */ +.octicon-diff-ignored:before { content: '\f099'} /*  */ +.octicon-diff-modified:before { content: '\f06d'} /*  */ +.octicon-diff-removed:before { content: '\f06c'} /*  */ +.octicon-diff-renamed:before { content: '\f06e'} /*  */ +.octicon-ellipsis:before { content: '\f09a'} /*  */ +.octicon-eye-unwatch:before, +.octicon-eye-watch:before, +.octicon-eye:before { content: '\f04e'} /*  */ +.octicon-file-binary:before { content: '\f094'} /*  */ +.octicon-file-code:before { content: '\f010'} /*  */ +.octicon-file-directory:before { content: '\f016'} /*  */ +.octicon-file-media:before { content: '\f012'} /*  */ +.octicon-file-pdf:before { content: '\f014'} /*  */ +.octicon-file-submodule:before { content: '\f017'} /*  */ +.octicon-file-symlink-directory:before { content: '\f0b1'} /*  */ +.octicon-file-symlink-file:before { content: '\f0b0'} /*  */ +.octicon-file-text:before { content: '\f011'} /*  */ +.octicon-file-zip:before { content: '\f013'} /*  */ +.octicon-flame:before { content: '\f0d2'} /*  */ +.octicon-fold:before { content: '\f0cc'} /*  */ +.octicon-gear:before { content: '\f02f'} /*  */ +.octicon-gift:before { content: '\f042'} /*  */ +.octicon-gist:before { content: '\f00e'} /*  */ +.octicon-gist-secret:before { content: '\f08c'} /*  */ +.octicon-git-branch-create:before, +.octicon-git-branch-delete:before, +.octicon-git-branch:before { content: '\f020'} /*  */ +.octicon-git-commit:before { content: '\f01f'} /*  */ +.octicon-git-compare:before { content: '\f0ac'} /*  */ +.octicon-git-merge:before { content: '\f023'} /*  */ +.octicon-git-pull-request-abandoned:before, +.octicon-git-pull-request:before { content: '\f009'} /*  */ +.octicon-globe:before { content: '\f0b6'} /*  */ +.octicon-graph:before { content: '\f043'} /*  */ +.octicon-heart:before { content: '\2665'} /* ♥ */ +.octicon-history:before { content: '\f07e'} /*  */ +.octicon-home:before { content: '\f08d'} /*  */ +.octicon-horizontal-rule:before { content: '\f070'} /*  */ +.octicon-hourglass:before { content: '\f09e'} /*  */ +.octicon-hubot:before { content: '\f09d'} /*  */ +.octicon-inbox:before { content: '\f0cf'} /*  */ +.octicon-info:before { content: '\f059'} /*  */ +.octicon-issue-closed:before { content: '\f028'} /*  */ +.octicon-issue-opened:before { content: '\f026'} /*  */ +.octicon-issue-reopened:before { content: '\f027'} /*  */ +.octicon-jersey:before { content: '\f019'} /*  */ +.octicon-jump-down:before { content: '\f072'} /*  */ +.octicon-jump-left:before { content: '\f0a5'} /*  */ +.octicon-jump-right:before { content: '\f0a6'} /*  */ +.octicon-jump-up:before { content: '\f073'} /*  */ +.octicon-key:before { content: '\f049'} /*  */ +.octicon-keyboard:before { content: '\f00d'} /*  */ +.octicon-law:before { content: '\f0d8'} /* */ +.octicon-light-bulb:before { content: '\f000'} /*  */ +.octicon-link:before { content: '\f05c'} /*  */ +.octicon-link-external:before { content: '\f07f'} /*  */ +.octicon-list-ordered:before { content: '\f062'} /*  */ +.octicon-list-unordered:before { content: '\f061'} /*  */ +.octicon-location:before { content: '\f060'} /*  */ +.octicon-gist-private:before, +.octicon-mirror-private:before, +.octicon-git-fork-private:before, +.octicon-lock:before { content: '\f06a'} /*  */ +.octicon-logo-github:before { content: '\f092'} /*  */ +.octicon-mail:before { content: '\f03b'} /*  */ +.octicon-mail-read:before { content: '\f03c'} /*  */ +.octicon-mail-reply:before { content: '\f051'} /*  */ +.octicon-mark-github:before { content: '\f00a'} /*  */ +.octicon-markdown:before { content: '\f0c9'} /*  */ +.octicon-megaphone:before { content: '\f077'} /*  */ +.octicon-mention:before { content: '\f0be'} /*  */ +.octicon-microscope:before { content: '\f089'} /*  */ +.octicon-milestone:before { content: '\f075'} /*  */ +.octicon-mirror-public:before, +.octicon-mirror:before { content: '\f024'} /*  */ +.octicon-mortar-board:before { content: '\f0d7'} /* */ +.octicon-move-down:before { content: '\f0a8'} /*  */ +.octicon-move-left:before { content: '\f074'} /*  */ +.octicon-move-right:before { content: '\f0a9'} /*  */ +.octicon-move-up:before { content: '\f0a7'} /*  */ +.octicon-mute:before { content: '\f080'} /*  */ +.octicon-no-newline:before { content: '\f09c'} /*  */ +.octicon-octoface:before { content: '\f008'} /*  */ +.octicon-organization:before { content: '\f037'} /*  */ +.octicon-package:before { content: '\f0c4'} /*  */ +.octicon-paintcan:before { content: '\f0d1'} /*  */ +.octicon-pencil:before { content: '\f058'} /*  */ +.octicon-person-add:before, +.octicon-person-follow:before, +.octicon-person:before { content: '\f018'} /*  */ +.octicon-pin:before { content: '\f041'} /*  */ +.octicon-playback-fast-forward:before { content: '\f0bd'} /*  */ +.octicon-playback-pause:before { content: '\f0bb'} /*  */ +.octicon-playback-play:before { content: '\f0bf'} /*  */ +.octicon-playback-rewind:before { content: '\f0bc'} /*  */ +.octicon-plug:before { content: '\f0d4'} /*  */ +.octicon-repo-create:before, +.octicon-gist-new:before, +.octicon-file-directory-create:before, +.octicon-file-add:before, +.octicon-plus:before { content: '\f05d'} /*  */ +.octicon-podium:before { content: '\f0af'} /*  */ +.octicon-primitive-dot:before { content: '\f052'} /*  */ +.octicon-primitive-square:before { content: '\f053'} /*  */ +.octicon-pulse:before { content: '\f085'} /*  */ +.octicon-puzzle:before { content: '\f0c0'} /*  */ +.octicon-question:before { content: '\f02c'} /*  */ +.octicon-quote:before { content: '\f063'} /*  */ +.octicon-radio-tower:before { content: '\f030'} /*  */ +.octicon-repo-delete:before, +.octicon-repo:before { content: '\f001'} /*  */ +.octicon-repo-clone:before { content: '\f04c'} /*  */ +.octicon-repo-force-push:before { content: '\f04a'} /*  */ +.octicon-gist-fork:before, +.octicon-repo-forked:before { content: '\f002'} /*  */ +.octicon-repo-pull:before { content: '\f006'} /*  */ +.octicon-repo-push:before { content: '\f005'} /*  */ +.octicon-rocket:before { content: '\f033'} /*  */ +.octicon-rss:before { content: '\f034'} /*  */ +.octicon-ruby:before { content: '\f047'} /*  */ +.octicon-screen-full:before { content: '\f066'} /*  */ +.octicon-screen-normal:before { content: '\f067'} /*  */ +.octicon-search-save:before, +.octicon-search:before { content: '\f02e'} /*  */ +.octicon-server:before { content: '\f097'} /*  */ +.octicon-settings:before { content: '\f07c'} /*  */ +.octicon-log-in:before, +.octicon-sign-in:before { content: '\f036'} /*  */ +.octicon-log-out:before, +.octicon-sign-out:before { content: '\f032'} /*  */ +.octicon-split:before { content: '\f0c6'} /*  */ +.octicon-squirrel:before { content: '\f0b2'} /*  */ +.octicon-star-add:before, +.octicon-star-delete:before, +.octicon-star:before { content: '\f02a'} /*  */ +.octicon-steps:before { content: '\f0c7'} /*  */ +.octicon-stop:before { content: '\f08f'} /*  */ +.octicon-repo-sync:before, +.octicon-sync:before { content: '\f087'} /*  */ +.octicon-tag-remove:before, +.octicon-tag-add:before, +.octicon-tag:before { content: '\f015'} /*  */ +.octicon-telescope:before { content: '\f088'} /*  */ +.octicon-terminal:before { content: '\f0c8'} /*  */ +.octicon-three-bars:before { content: '\f05e'} /*  */ +.octicon-tools:before { content: '\f031'} /*  */ +.octicon-trashcan:before { content: '\f0d0'} /*  */ +.octicon-triangle-down:before { content: '\f05b'} /*  */ +.octicon-triangle-left:before { content: '\f044'} /*  */ +.octicon-triangle-right:before { content: '\f05a'} /*  */ +.octicon-triangle-up:before { content: '\f0aa'} /*  */ +.octicon-unfold:before { content: '\f039'} /*  */ +.octicon-unmute:before { content: '\f0ba'} /*  */ +.octicon-versions:before { content: '\f064'} /*  */ +.octicon-remove-close:before, +.octicon-x:before { content: '\f081'} /*  */ +.octicon-zap:before { content: '\26A1'} /* ⚡ */ diff --git a/src/main/resources/pixel.png b/src/main/java/com/gitblit/wicket/resources/pixel.png similarity index 100% rename from src/main/resources/pixel.png rename to src/main/java/com/gitblit/wicket/resources/pixel.png diff --git a/src/main/resources/rosette_16x16.png b/src/main/java/com/gitblit/wicket/resources/rosette_16x16.png similarity index 100% rename from src/main/resources/rosette_16x16.png rename to src/main/java/com/gitblit/wicket/resources/rosette_16x16.png diff --git a/src/main/resources/rosette_32x32.png b/src/main/java/com/gitblit/wicket/resources/rosette_32x32.png similarity index 100% rename from src/main/resources/rosette_32x32.png rename to src/main/java/com/gitblit/wicket/resources/rosette_32x32.png diff --git a/src/main/resources/script_16x16.png b/src/main/java/com/gitblit/wicket/resources/script_16x16.png similarity index 100% rename from src/main/resources/script_16x16.png rename to src/main/java/com/gitblit/wicket/resources/script_16x16.png diff --git a/src/main/resources/search-icon.png b/src/main/java/com/gitblit/wicket/resources/search-icon.png similarity index 100% rename from src/main/resources/search-icon.png rename to src/main/java/com/gitblit/wicket/resources/search-icon.png diff --git a/src/main/resources/settings_16x16.png b/src/main/java/com/gitblit/wicket/resources/settings_16x16.png similarity index 100% rename from src/main/resources/settings_16x16.png rename to src/main/java/com/gitblit/wicket/resources/settings_16x16.png diff --git a/src/main/resources/settings_32x32.png b/src/main/java/com/gitblit/wicket/resources/settings_32x32.png similarity index 100% rename from src/main/resources/settings_32x32.png rename to src/main/java/com/gitblit/wicket/resources/settings_32x32.png diff --git a/src/main/resources/shield_16x16.png b/src/main/java/com/gitblit/wicket/resources/shield_16x16.png similarity index 100% rename from src/main/resources/shield_16x16.png rename to src/main/java/com/gitblit/wicket/resources/shield_16x16.png diff --git a/src/main/resources/smartgithg_32x32.png b/src/main/java/com/gitblit/wicket/resources/smartgithg_32x32.png similarity index 100% rename from src/main/resources/smartgithg_32x32.png rename to src/main/java/com/gitblit/wicket/resources/smartgithg_32x32.png diff --git a/src/main/resources/sourcetree_32x32.png b/src/main/java/com/gitblit/wicket/resources/sourcetree_32x32.png similarity index 100% rename from src/main/resources/sourcetree_32x32.png rename to src/main/java/com/gitblit/wicket/resources/sourcetree_32x32.png diff --git a/src/main/resources/sparkleshare_32x32.png b/src/main/java/com/gitblit/wicket/resources/sparkleshare_32x32.png similarity index 100% rename from src/main/resources/sparkleshare_32x32.png rename to src/main/java/com/gitblit/wicket/resources/sparkleshare_32x32.png diff --git a/src/main/resources/star_16x16.png b/src/main/java/com/gitblit/wicket/resources/star_16x16.png similarity index 100% rename from src/main/resources/star_16x16.png rename to src/main/java/com/gitblit/wicket/resources/star_16x16.png diff --git a/src/main/resources/star_32x32.png b/src/main/java/com/gitblit/wicket/resources/star_32x32.png similarity index 100% rename from src/main/resources/star_32x32.png rename to src/main/java/com/gitblit/wicket/resources/star_32x32.png diff --git a/src/main/resources/sub32.png b/src/main/java/com/gitblit/wicket/resources/sub32.png similarity index 100% rename from src/main/resources/sub32.png rename to src/main/java/com/gitblit/wicket/resources/sub32.png diff --git a/src/main/resources/tag_16x16.png b/src/main/java/com/gitblit/wicket/resources/tag_16x16.png similarity index 100% rename from src/main/resources/tag_16x16.png rename to src/main/java/com/gitblit/wicket/resources/tag_16x16.png diff --git a/src/main/resources/tortoise32.png b/src/main/java/com/gitblit/wicket/resources/tortoise32.png similarity index 100% rename from src/main/resources/tortoise32.png rename to src/main/java/com/gitblit/wicket/resources/tortoise32.png diff --git a/src/main/resources/tower_32x32.png b/src/main/java/com/gitblit/wicket/resources/tower_32x32.png similarity index 100% rename from src/main/resources/tower_32x32.png rename to src/main/java/com/gitblit/wicket/resources/tower_32x32.png diff --git a/src/main/resources/user_16x16.png b/src/main/java/com/gitblit/wicket/resources/user_16x16.png similarity index 100% rename from src/main/resources/user_16x16.png rename to src/main/java/com/gitblit/wicket/resources/user_16x16.png diff --git a/src/main/resources/users_16x16.png b/src/main/java/com/gitblit/wicket/resources/users_16x16.png similarity index 100% rename from src/main/resources/users_16x16.png rename to src/main/java/com/gitblit/wicket/resources/users_16x16.png diff --git a/src/main/resources/vcard_16x16.png b/src/main/java/com/gitblit/wicket/resources/vcard_16x16.png similarity index 100% rename from src/main/resources/vcard_16x16.png rename to src/main/java/com/gitblit/wicket/resources/vcard_16x16.png diff --git a/src/main/resources/bootstrap/js/jquery.js b/src/main/resources/bootstrap/js/jquery.js deleted file mode 100644 index 198b3ff07..000000000 --- a/src/main/resources/bootstrap/js/jquery.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/src/test/config/test-users.conf b/src/test/config/test-users.conf index 4361410c7..dfb2e46af 100644 --- a/src/test/config/test-users.conf +++ b/src/test/config/test-users.conf @@ -1,3 +1,11 @@ +[user "TicketRefTest"] + password = admin + displayName = TicketRefTest + emailAddress = TicketRefTest@example.com + accountType = LOCAL + emailMeOnMyTicketChanges = true + role = "#none" + repository = RW+:ticketreferencetest.git [user "admin"] password = admin cookie = dd94709528bb1c83d08f3088d4043f4742891f4f