aboutsummaryrefslogtreecommitdiffstats
path: root/theme-compiler
diff options
context:
space:
mode:
Diffstat (limited to 'theme-compiler')
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/resolver/ClassloaderResolver.java6
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/resolver/VaadinResolver.java50
2 files changed, 25 insertions, 31 deletions
diff --git a/theme-compiler/src/com/vaadin/sass/internal/resolver/ClassloaderResolver.java b/theme-compiler/src/com/vaadin/sass/internal/resolver/ClassloaderResolver.java
index 7ab789ca3f..8711a0a3e9 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/resolver/ClassloaderResolver.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/resolver/ClassloaderResolver.java
@@ -40,6 +40,12 @@ public class ClassloaderResolver implements ScssStylesheetResolver {
// Ensure only "/" is used, also in Windows
fileName = fileName.replace(File.separatorChar, '/');
+ // Filename should be a relative path starting with VAADIN/...
+ int vaadinIdx = fileName.lastIndexOf("VAADIN/");
+ if (vaadinIdx > -1) {
+ fileName = fileName.substring(vaadinIdx);
+ }
+
// Can the classloader find it?
InputStream is = getClass().getClassLoader().getResourceAsStream(
fileName);
diff --git a/theme-compiler/src/com/vaadin/sass/internal/resolver/VaadinResolver.java b/theme-compiler/src/com/vaadin/sass/internal/resolver/VaadinResolver.java
index f51201da06..25c7e04f99 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/resolver/VaadinResolver.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/resolver/VaadinResolver.java
@@ -15,8 +15,8 @@
*/
package com.vaadin.sass.internal.resolver;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.net.URI;
+import java.net.URISyntaxException;
import org.w3c.css.sac.InputSource;
@@ -24,39 +24,27 @@ public class VaadinResolver implements ScssStylesheetResolver {
@Override
public InputSource resolve(String identifier) {
- if (identifier.endsWith(".css")) {
- // CSS support mainly for testing, don't load from classpath etc
- ScssStylesheetResolver resolver = new FilesystemResolver();
- return resolver.resolve(identifier);
+
+ /*
+ * Normalize classpath so ../../ segments are resolved
+ */
+ try {
+ identifier = new URI(identifier).normalize().getPath();
+ } catch (URISyntaxException e) {
+ // No worries, continuing with the unnormalized path and hope for
+ // the best
}
InputSource source = null;
-
- Pattern pattern = Pattern
- .compile("\\.\\.\\/([^\\/]+)\\/([^\\/]+\\.scss)");
- Matcher matcher = pattern.matcher(identifier);
-
- if (matcher.find()) {
- // theme include
- ScssStylesheetResolver resolver = new FilesystemResolver();
+
+ // Can we find the scss from the file system?
+ ScssStylesheetResolver resolver = new FilesystemResolver();
+ source = resolver.resolve(identifier);
+
+ if (source == null) {
+ // How about the classpath?
+ resolver = new ClassloaderResolver();
source = resolver.resolve(identifier);
-
- if (source == null) {
- String themeName = matcher.group(1);
- String fileName = matcher.group(2);
- resolver = new ClassloaderResolver();
- String id = "VAADIN/themes/" + themeName + "/" + fileName;
- source = resolver.resolve(id);
- }
-
- } else {
- ScssStylesheetResolver resolver = new FilesystemResolver();
- source = resolver.resolve(identifier);
-
- if (source == null) {
- resolver = new ClassloaderResolver();
- source = resolver.resolve(identifier);
- }
}
return source;