diff options
Diffstat (limited to 'sass')
81 files changed, 8651 insertions, 113 deletions
diff --git a/sass/README b/sass/README new file mode 100644 index 0000000000..4d9482763f --- /dev/null +++ b/sass/README @@ -0,0 +1,11 @@ +This project compiles SCSS into CSS. +It parses the SCSS into a tree. + +Classes +======= +SassCompiler: This is the main class that can be run from command line. First parameter is for a scss file to be compiled. Second parameter is optional and is a reference to a file where you want the compiled css. If file doesn't exist, it will be deleted. If file exists, it will be deleted and recreated. If second argument is left out, the css will be printed into standard out. +ScssStylesheet: When Scss/Css is parsed in, it will be represented in memory as this file. Reference is got through static get(File file) where file is input. +Parser: A JavaCC compiled java class that parses the input and notifies the DocumentHandler on what nodes it encounters. +Parser.jj: Source for the Parser class. +SCSSDocumentHandlerImpl: Class that takes in calls from parser and creates nodes into ScssStylesheet based on those calls. +Node package: All the nodes representing the Scss/Css in tree format
\ No newline at end of file diff --git a/sass/src/com/vaadin/sass/SassCompiler.java b/sass/src/com/vaadin/sass/SassCompiler.java index 8e4df2a62e..555797066b 100644 --- a/sass/src/com/vaadin/sass/SassCompiler.java +++ b/sass/src/com/vaadin/sass/SassCompiler.java @@ -35,8 +35,10 @@ public class SassCompiler { input = args[0]; output = args[1]; } - File inputFile = new File(input); - ScssStylesheet scss = ScssStylesheet.get(inputFile); + + // ScssStylesheet.setStylesheetResolvers(new VaadinResolver()); + + ScssStylesheet scss = ScssStylesheet.get(input); scss.compile(); if (output == null) { System.out.println(scss.toString()); diff --git a/sass/src/com/vaadin/sass/ScssServlet.java b/sass/src/com/vaadin/sass/ScssServlet.java index d85237aff2..a345ca1583 100644 --- a/sass/src/com/vaadin/sass/ScssServlet.java +++ b/sass/src/com/vaadin/sass/ScssServlet.java @@ -40,7 +40,7 @@ public class ScssServlet extends HttpServlet { String scssPath = cssPath.replace(".css", ".scss"); File scssFile = new File(scssPath); if (scssFile.exists()) { - ScssStylesheet scss = ScssStylesheet.get(new File(cssPath)); + ScssStylesheet scss = ScssStylesheet.get(cssPath); try { scss.compile(); } catch (Exception e) { diff --git a/sass/src/com/vaadin/sass/ScssStylesheet.java b/sass/src/com/vaadin/sass/ScssStylesheet.java index b5e744afc4..caef1720b1 100644 --- a/sass/src/com/vaadin/sass/ScssStylesheet.java +++ b/sass/src/com/vaadin/sass/ScssStylesheet.java @@ -19,13 +19,17 @@ package com.vaadin.sass; import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.w3c.css.sac.CSSException; +import org.w3c.css.sac.InputSource; import com.vaadin.sass.handler.SCSSDocumentHandler; import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.resolver.ScssStylesheetResolver; +import com.vaadin.sass.resolver.VaadinResolver; import com.vaadin.sass.tree.Node; import com.vaadin.sass.visitor.BlockVisitor; import com.vaadin.sass.visitor.ExtendVisitor; @@ -60,15 +64,49 @@ public class ScssStylesheet extends Node { * @throws CSSException * @throws IOException */ - public static ScssStylesheet get(File file) throws CSSException, + public static ScssStylesheet get(String identifier) throws CSSException, IOException { - Parser parser = new Parser(); - SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + File file = new File(identifier); file = file.getCanonicalFile(); - handler.getStyleSheet().setFileName(file.getAbsoluteFile().getParent()); + + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + ScssStylesheet stylesheet = handler.getStyleSheet(); + + InputSource source = stylesheet.resolveStylesheet(identifier); + if (source == null) { + return null; + } + + Parser parser = new Parser(); parser.setDocumentHandler(handler); - parser.parseStyleSheet(file.getAbsolutePath()); - return handler.getStyleSheet(); + parser.parseStyleSheet(source); + + return stylesheet; + } + + private static ScssStylesheetResolver[] resolvers = null; + + public static void setStylesheetResolvers( + ScssStylesheetResolver... styleSheetResolvers) { + resolvers = Arrays.copyOf(styleSheetResolvers, + styleSheetResolvers.length); + } + + public InputSource resolveStylesheet(String identifier) { + if (resolvers == null) { + setStylesheetResolvers(new VaadinResolver()); + } + + for (ScssStylesheetResolver resolver : resolvers) { + InputSource source = resolver.resolve(identifier); + if (source != null) { + File f = new File(source.getURI()); + setFileName(f.getParent()); + return source; + } + } + + return null; } /** diff --git a/sass/src/com/vaadin/sass/parser/LexicalUnitImpl.java b/sass/src/com/vaadin/sass/parser/LexicalUnitImpl.java index e268da8ed5..a6b03a864c 100644 --- a/sass/src/com/vaadin/sass/parser/LexicalUnitImpl.java +++ b/sass/src/com/vaadin/sass/parser/LexicalUnitImpl.java @@ -357,7 +357,7 @@ public class LexicalUnitImpl implements LexicalUnit, SCSSLexicalUnit, dimension = another.getDimension(); sdimension = another.getSdimension(); s = another.getStringValue(); - fname = getFunctionName(); + fname = another.getFunctionName(); params = another.getParameters(); prev = another.getPreviousLexicalUnit(); LexicalUnit finalNextInAnother = another; diff --git a/sass/src/com/vaadin/sass/parser/LocatorImpl.java b/sass/src/com/vaadin/sass/parser/LocatorImpl.java index 77e7543061..d481459f17 100644 --- a/sass/src/com/vaadin/sass/parser/LocatorImpl.java +++ b/sass/src/com/vaadin/sass/parser/LocatorImpl.java @@ -12,119 +12,117 @@ import org.w3c.css.sac.Locator; /** * @version $Revision: 1.2 $ - * @author Philippe Le Hegaret + * @author Philippe Le Hegaret */ public class LocatorImpl implements Locator { // W3C DEBUG mode private static boolean W3CDebug; static { - try { - W3CDebug = (Boolean.getBoolean("debug") - || Boolean.getBoolean("org.w3c.flute.parser.LocatorImpl.debug") - || Boolean.getBoolean("org.w3c.flute.parser.debug") - || Boolean.getBoolean("org.w3c.flute.debug") - || Boolean.getBoolean("org.w3c.debug") - || Boolean.getBoolean("org.debug")); - } catch (Exception e) { - // nothing - } + try { + W3CDebug = (Boolean.getBoolean("debug") + || Boolean + .getBoolean("org.w3c.flute.parser.LocatorImpl.debug") + || Boolean.getBoolean("org.w3c.flute.parser.debug") + || Boolean.getBoolean("org.w3c.flute.debug") + || Boolean.getBoolean("org.w3c.debug") || Boolean + .getBoolean("org.debug")); + } catch (Exception e) { + // nothing + } } - + String uri; - int line; - int column; + int line; + int column; public String getURI() { - return uri; + return uri; } public int getLineNumber() { - return line; + return line; } public int getColumnNumber() { - return column; + return column; } /** * Creates a new LocatorImpl */ public LocatorImpl(Parser p) { - if (W3CDebug) { - System.err.println( "LocatorImpl::newLocator(" + p + ");"); - } + if (W3CDebug) { + System.err.println("LocatorImpl::newLocator(" + p + ");"); + } uri = p.source.getURI(); - line = p.token.beginLine; - column = p.token.beginColumn; + line = p.token.beginLine; + column = p.token.beginColumn; } - + /** * Reinitializes a LocatorImpl */ public LocatorImpl(Parser p, Token tok) { - if (W3CDebug) { - System.err.println( "LocatorImpl::newLocator(" + p - + ", " + tok + ");"); - } + if (W3CDebug) { + System.err.println("LocatorImpl::newLocator(" + p + ", " + tok + + ");"); + } uri = p.source.getURI(); - line = tok.beginLine; - column = tok.beginColumn; + line = tok.beginLine; + column = tok.beginColumn; } - + /** * Reinitializes a LocatorImpl */ public LocatorImpl(Parser p, int line, int column) { - if (W3CDebug) { - System.err.println( "LocatorImpl::newLocator(" + p - + ", " + line - + ", " + column + ");"); - } + if (W3CDebug) { + System.err.println("LocatorImpl::newLocator(" + p + ", " + line + + ", " + column + ");"); + } uri = p.source.getURI(); - this.line = line; - this.column = column; + this.line = line; + this.column = column; } - + /** * Reinitializes a LocatorImpl */ public LocatorImpl reInit(Parser p) { - if (W3CDebug) { - System.err.println( "LocatorImpl::reInit(" + p + ");" ); - } + if (W3CDebug) { + System.err.println("LocatorImpl::reInit(" + p + ");"); + } uri = p.source.getURI(); - line = p.token.beginLine; - column = p.token.beginColumn; - return this; + line = p.token.beginLine; + column = p.token.beginColumn; + return this; } - + /** * Reinitializes a LocatorImpl */ public LocatorImpl reInit(Parser p, Token tok) { - if (W3CDebug) { - System.err.println( "LocatorImpl::reInit(" + p - + ", " + tok + ");"); - } + if (W3CDebug) { + System.err.println("LocatorImpl::reInit(" + p + ", " + tok + ");"); + } uri = p.source.getURI(); - line = tok.beginLine; - column = tok.beginColumn; - return this; + line = tok.beginLine; + column = tok.beginColumn; + return this; } - + /** * Reinitializes a LocatorImpl */ public LocatorImpl reInit(Parser p, int line, int column) { - if (W3CDebug) { - System.err.println("LocatorImpl::reInit(" + p - + ", " + line - + ", " + column + ");"); - } + if (W3CDebug) { + System.err.println("LocatorImpl::reInit(" + p + ", " + line + ", " + + column + ");"); + } uri = p.source.getURI(); - this.line = line; - this.column = column; - return this; + this.line = line; + this.column = column; + return this; } } diff --git a/sass/src/com/vaadin/sass/resolver/ClassloaderResolver.java b/sass/src/com/vaadin/sass/resolver/ClassloaderResolver.java new file mode 100644 index 0000000000..84ac6dc530 --- /dev/null +++ b/sass/src/com/vaadin/sass/resolver/ClassloaderResolver.java @@ -0,0 +1,39 @@ +package com.vaadin.sass.resolver; + +import java.io.InputStream; + +import org.w3c.css.sac.InputSource; + +public class ClassloaderResolver implements ScssStylesheetResolver { + + @Override + public InputSource resolve(String identifier) { + // identifier should not have .scss, fileName should + String ext = ".scss"; + if (identifier.endsWith(".css")) { + ext = ".css"; + } + String fileName = identifier; + if (identifier.endsWith(ext)) { + identifier = identifier.substring(0, + identifier.length() - ext.length()); + } else { + fileName = fileName + ext; + } + + // Can the classloader find it? + InputStream is = getClass().getClassLoader().getResourceAsStream( + fileName); + if (is != null) { + InputSource source = new InputSource(); + source.setByteStream(is); + source.setURI(fileName); + return source; + + } else { + return null; + } + + } + +} diff --git a/sass/src/com/vaadin/sass/resolver/FilesystemResolver.java b/sass/src/com/vaadin/sass/resolver/FilesystemResolver.java new file mode 100644 index 0000000000..2c6b92430f --- /dev/null +++ b/sass/src/com/vaadin/sass/resolver/FilesystemResolver.java @@ -0,0 +1,40 @@ +package com.vaadin.sass.resolver; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; + +import org.w3c.css.sac.InputSource; + +public class FilesystemResolver implements ScssStylesheetResolver { + + @Override + public InputSource resolve(String identifier) { + // identifier should not have .scss, fileName should + String ext = ".scss"; + if (identifier.endsWith(".css")) { + ext = ".css"; + } + String fileName = identifier; + if (identifier.endsWith(ext)) { + identifier = identifier.substring(0, + identifier.length() - ext.length()); + } else { + fileName = fileName + ext; + } + + try { + InputStream is = new FileInputStream(fileName); + InputSource source = new InputSource(); + source.setByteStream(is); + source.setURI(fileName); + return source; + + } catch (FileNotFoundException e) { + // not found, try something else + return null; + } + + } + +} diff --git a/sass/src/com/vaadin/sass/resolver/ScssStylesheetResolver.java b/sass/src/com/vaadin/sass/resolver/ScssStylesheetResolver.java new file mode 100644 index 0000000000..c3b0e75979 --- /dev/null +++ b/sass/src/com/vaadin/sass/resolver/ScssStylesheetResolver.java @@ -0,0 +1,19 @@ +package com.vaadin.sass.resolver; + +import org.w3c.css.sac.InputSource; + +public interface ScssStylesheetResolver { + /** + * Called with the "identifier" of a stylesheet that the resolver should try + * to find. The identifier is basically a filename, like "runo.scss" or + * "addon/styles.scss", but might exclude ".scss". The resolver must + * {@link InputSource#setURI(String)} to the final location where the + * stylesheet was found, e.g "runo.scss" might result in a URI like + * "VAADIN/themes/runo/runo.scss". + * + * @param identifier + * used fo find stylesheet + * @return InputSource for stylesheet (with URI set) or null if not found + */ + public InputSource resolve(String identifier); +}
\ No newline at end of file diff --git a/sass/src/com/vaadin/sass/resolver/VaadinResolver.java b/sass/src/com/vaadin/sass/resolver/VaadinResolver.java new file mode 100644 index 0000000000..93fdf6bfec --- /dev/null +++ b/sass/src/com/vaadin/sass/resolver/VaadinResolver.java @@ -0,0 +1,46 @@ +package com.vaadin.sass.resolver; + +import org.w3c.css.sac.InputSource; + +public class VaadinResolver implements ScssStylesheetResolver { + + @Override + public InputSource resolve(String identifier) { + String ext = ".scss"; + if (identifier.endsWith(".css")) { + ext = ".css"; + } + + // 'normalize' identifier to use in themeFile + String fileName = identifier; + if (identifier.endsWith(ext)) { + identifier = identifier.substring(0, + identifier.length() - ext.length()); + } + // also look here + String themeFile = "VAADIN/themes/" + identifier + "/" + fileName; + + // first plain file + ScssStylesheetResolver resolver = new FilesystemResolver(); + InputSource source = resolver.resolve(fileName); + + if (source == null) { + // then file in theme + source = resolver.resolve(themeFile); + } + + if (source == null) { + // then plain via classloader + resolver = new ClassloaderResolver(); + source = resolver.resolve(identifier); + + } + if (source == null) { + // then try theme via classloader + source = resolver.resolve(themeFile); + } + + return source; + } + +} diff --git a/sass/src/com/vaadin/sass/tree/BlockNode.java b/sass/src/com/vaadin/sass/tree/BlockNode.java index 2879cd57ea..e255b2a3e5 100644 --- a/sass/src/com/vaadin/sass/tree/BlockNode.java +++ b/sass/src/com/vaadin/sass/tree/BlockNode.java @@ -20,8 +20,10 @@ import org.w3c.css.sac.SelectorList; import com.vaadin.sass.parser.SelectorListImpl; import com.vaadin.sass.selector.SelectorUtil; +import com.vaadin.sass.util.Clonable; +import com.vaadin.sass.util.DeepCopy; -public class BlockNode extends Node { +public class BlockNode extends Node implements Clonable { private static final long serialVersionUID = 5742962631468325048L; @@ -62,12 +64,21 @@ public class BlockNode extends Node { } @Override - protected Object clone() throws CloneNotSupportedException { - SelectorListImpl clonedSelectorList = new SelectorListImpl(); - for (int i = 0; i < selectorList.getLength(); i++) { - clonedSelectorList.addSelector(selectorList.item(i)); + public Object clone() throws CloneNotSupportedException { + + SelectorListImpl clonedSelectorList = null; + + if (selectorList != null) { + clonedSelectorList = new SelectorListImpl(); + for (int i = 0; i < selectorList.getLength(); i++) { + clonedSelectorList.addSelector(selectorList.item(i)); + } } - return null; - // BlockNode clone = new BlockNode() + final BlockNode clone = new BlockNode(clonedSelectorList); + for (Node child : getChildren()) { + clone.getChildren().add((Node) DeepCopy.copy(child)); + } + return clone; } + } diff --git a/sass/src/com/vaadin/sass/util/Clonable.java b/sass/src/com/vaadin/sass/util/Clonable.java new file mode 100644 index 0000000000..639f158fb0 --- /dev/null +++ b/sass/src/com/vaadin/sass/util/Clonable.java @@ -0,0 +1,7 @@ +package com.vaadin.sass.util; + +public interface Clonable { + + public Object clone() throws CloneNotSupportedException; + +} diff --git a/sass/src/com/vaadin/sass/util/DeepCopy.java b/sass/src/com/vaadin/sass/util/DeepCopy.java index 712b8ecc11..5d4e43c477 100644 --- a/sass/src/com/vaadin/sass/util/DeepCopy.java +++ b/sass/src/com/vaadin/sass/util/DeepCopy.java @@ -35,26 +35,39 @@ public class DeepCopy { * Returns a copy of the object, or null if the object cannot be serialized. */ public static Object copy(Object orig) { + Object obj = null; - try { - // Write the object out to a byte array - FastByteArrayOutputStream fbos = new FastByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(fbos); - out.writeObject(orig); - out.flush(); - out.close(); + if (!(orig instanceof Clonable)) { + try { + // Write the object out to a byte array + FastByteArrayOutputStream fbos = new FastByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(fbos); + out.writeObject(orig); + out.flush(); + out.close(); - // Retrieve an input stream from the byte array and read - // a copy of the object back in. - ObjectInputStream in = new ObjectInputStream(fbos.getInputStream()); - obj = in.readObject(); - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } catch (ClassNotFoundException cnfe) { - cnfe.printStackTrace(); + // Retrieve an input stream from the byte array and read + // a copy of the object back in. + ObjectInputStream in = new ObjectInputStream( + fbos.getInputStream()); + obj = in.readObject(); + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException cnfe) { + cnfe.printStackTrace(); + } + return obj; + } else { + try { + obj = ((Clonable) orig).clone(); + } catch (ClassCastException e2) { + // Can't clone, return obj as null + } catch (CloneNotSupportedException e2) { + // Can't clone, return obj as null + } + return obj; } - return obj; } }
\ No newline at end of file diff --git a/sass/src/com/vaadin/sass/visitor/ImportVisitor.java b/sass/src/com/vaadin/sass/visitor/ImportVisitor.java index 00c0f41073..bda040be39 100644 --- a/sass/src/com/vaadin/sass/visitor/ImportVisitor.java +++ b/sass/src/com/vaadin/sass/visitor/ImportVisitor.java @@ -17,6 +17,7 @@ package com.vaadin.sass.visitor; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; @@ -38,16 +39,27 @@ public class ImportVisitor implements Visitor { if (child instanceof ImportNode) { ImportNode importNode = (ImportNode) child; if (!importNode.isPureCssImport()) { - StringBuilder filePathBuilder = new StringBuilder( - node.getFileName()); - filePathBuilder.append(File.separatorChar).append( - importNode.getUri()); - if (!filePathBuilder.toString().endsWith(".scss")) { - filePathBuilder.append(".scss"); - } + try { - ScssStylesheet imported = ScssStylesheet.get(new File( - filePathBuilder.toString())); + + StringBuilder filePathBuilder = new StringBuilder( + node.getFileName()); + filePathBuilder.append(File.separatorChar).append( + importNode.getUri()); + if (!filePathBuilder.toString().endsWith(".scss")) { + filePathBuilder.append(".scss"); + } + + ScssStylesheet imported = ScssStylesheet + .get(filePathBuilder.toString()); + if (imported == null) { + imported = ScssStylesheet.get(importNode.getUri()); + } + if (imported == null) { + throw new FileNotFoundException(importNode.getUri() + + " (parent: " + node.getFileName() + ")"); + } + traverse(imported); String prefix = getUrlPrefix(importNode.getUri()); if (prefix != null) { diff --git a/sass/src/com/vaadin/sass/visitor/VariableVisitor.java b/sass/src/com/vaadin/sass/visitor/VariableVisitor.java index e8fb2fccc3..7fa62bd20f 100644 --- a/sass/src/com/vaadin/sass/visitor/VariableVisitor.java +++ b/sass/src/com/vaadin/sass/visitor/VariableVisitor.java @@ -40,13 +40,20 @@ public class VariableVisitor implements Visitor { private void traverse(Node node, Map<String, LexicalUnitImpl> variables) { if (node instanceof RuleNode) { LexicalUnit value = ((RuleNode) node).getValue(); - updateValue(value, variables); + while (updateValue(value, variables)) { + ; + } } else { Set<Node> toBeDeleted = new HashSet<Node>(); for (Node child : node.getChildren()) { if (child instanceof VariableNode) { - variables.put(((VariableNode) child).getName(), - (LexicalUnitImpl) ((VariableNode) child).getExpr()); + VariableNode varChild = (VariableNode) child; + if (!varChild.isGuarded() || varChild.isGuarded() + && variables.get(varChild.getName()) == null) { + variables.put(((VariableNode) child).getName(), + (LexicalUnitImpl) ((VariableNode) child) + .getExpr()); + } toBeDeleted.add(child); } else { traverse(child, new HashMap<String, LexicalUnitImpl>( @@ -59,17 +66,22 @@ public class VariableVisitor implements Visitor { } } - private void updateValue(LexicalUnit value, + private boolean updateValue(LexicalUnit value, Map<String, LexicalUnitImpl> variables) { + boolean onceMore = false; if (value == null) { - return; + return false; } if (value.getLexicalUnitType() == SCSSLexicalUnit.SCSS_VARIABLE) { - LexicalUnitImpl variableValue = variables.get( - value.getStringValue()).clone(); + LexicalUnitImpl variableValue = variables.get(value + .getStringValue()); if (variableValue != null) { - LexicalUnitImpl lexVal = (LexicalUnitImpl) value; - lexVal.replaceValue(variableValue); + LexicalUnitImpl variableValueCloned = variableValue.clone(); + if (variableValueCloned != null) { + LexicalUnitImpl lexVal = (LexicalUnitImpl) value; + lexVal.replaceValue(variableValueCloned); + onceMore = true; + } } } else if (value.getLexicalUnitType() == SCSSLexicalUnit.SAC_FUNCTION) { LexicalUnit params = value.getParameters(); @@ -77,5 +89,6 @@ public class VariableVisitor implements Visitor { } LexicalUnit next = value.getNextLexicalUnit(); updateValue(next, variables); + return onceMore; } } diff --git a/sass/tests/resources/basic/empty_block.css b/sass/tests/resources/basic/empty_block.css new file mode 100644 index 0000000000..31c0b47032 --- /dev/null +++ b/sass/tests/resources/basic/empty_block.css @@ -0,0 +1,2 @@ +.v-panel-deco { +}
\ No newline at end of file diff --git a/sass/tests/resources/basic/media.css b/sass/tests/resources/basic/media.css new file mode 100644 index 0000000000..f1188835ba --- /dev/null +++ b/sass/tests/resources/basic/media.css @@ -0,0 +1,27 @@ +.v-view { + height: 100%; + width: 100%; + overflow: auto; + outline: none; + margin-top: -1px; + border-top: 1px solid transparent; + position: relative; +} + +@media print { + .v-generated-body { + height: auto; + min-height: 20cm; + overflow: visible; + } + .v-app { + height: auto; + min-height: 20cm; + } + .v-view { + overflow: visible; + } + .v-gridlayout { + overflow: visible !important; + } +}
\ No newline at end of file diff --git a/sass/tests/resources/basic/properties.css b/sass/tests/resources/basic/properties.css new file mode 100644 index 0000000000..946ee3a675 --- /dev/null +++ b/sass/tests/resources/basic/properties.css @@ -0,0 +1,67 @@ +.all-the-properties { + font-family: Arial, Helvetica, "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif; + position: absolute; + overflow: hidden; + outline: none; + text-align: left; + zoom: 1; + white-space: nowrap; + background: #123456; + border-bottom: 1px solid #ffffff; + filter: alpha(opacity = 30); + cursor: pointer; + overflow: auto; + width: 100%; + display: inline-block; +} + +.lexical-value-test { + margin: none; + margin: 0px; + margin: 0; + margin: 0.5px; + margin: 2px; + margin: -0.5px; + margin: -2px; + margin: 10px 20px; + margin: -10px 20px; + margin: 20px -10px -20px 40px; + margin-right: -0.5px; +} + +.background-positioning { + background-position: 0 0; + background-position: left top; + background-position: left 40px; + background-position: 50px left; + background-position: right -286px; +} + +.user-select-rules { + user-select: none; + -ie-user-select: none; +} + +.box-sizing-rules { + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +.user-select-and-box-sizing-combined { + -khtml-user-select: none; + -moz-user-select: none; + -ie-user-select: none; + user-select: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +@media print { + .v-generated-body { + height: auto; + min-height: 20cm; + overflow: visible; + } +} diff --git a/sass/tests/resources/basic/reindeer.css b/sass/tests/resources/basic/reindeer.css new file mode 100644 index 0000000000..4f1cd47193 --- /dev/null +++ b/sass/tests/resources/basic/reindeer.css @@ -0,0 +1,5891 @@ +.v-theme-version:after { + content: "6_8_0_dev-20120306"; +} + +.v-theme-version-6_8_0_dev-20120306 { + display: none; +} + +.v-absolutelayout-wrapper { + position: absolute; + overflow: hidden; +} + +.v-accordion { + position: relative; + outline: none; + overflow: hidden; + text-align: left; +} + +.v-accordion-item { + position: relative; + zoom: 1; +} + +.v-accordion-item-caption { + overflow: hidden; + white-space: nowrap; + background: #eeeeee; + border-bottom: 1px solid #dddddd; +} + +.v-accordion-item-caption .v-caption { + cursor: pointer; +} + +.v-accordion-item-open .v-accordion-item-caption .v-caption { + cursor: default; +} + +.v-accordion-item-content { + position: absolute; + overflow: auto; + width: 100%; +} + +.v-button { + display: inline-block; + zoom: 1; + text-align: center; + text-decoration: none; + border: 2px outset #dddddd; + background: #eeeeee; + cursor: pointer; + white-space: nowrap; + margin: 0; + padding: 0.2em 1em; + color: inherit; + font: inherit; + line-height: normal; + -khtml-user-select: none; + -moz-user-select: none; + -ie-user-select: none; + user-select: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.v-button.v-disabled { + cursor: default; +} + +.v-ie6 .v-button { + display: inline; +} + +.v-ie7 .v-button { + display: inline; +} + +.v-button-wrap, .v-button-caption { + vertical-align: middle; + white-space: nowrap; + font: inherit; + color: inherit; + line-height: normal; +} + +.v-button .v-icon, .v-nativebutton .v-icon { + vertical-align: middle; + margin-right: 3px; + border: none; +} + +.v-button .v-errorindicator, .v-nativebutton .v-errorindicator { + display: inline-block; + zoom: 1; + vertical-align: middle; + float: none; +} + +.v-button-link, .v-nativebutton-link { + border: none; + text-align: left; + background: transparent; + padding: 0; + color: inherit; + -khtml-user-select: text; + -moz-user-select: text; + -ie-user-select: text; + user-select: text; +} + +.v-sa .v-button-link:focus { + outline-offset: -3px; +} + +.v-button-link .v-button-caption, .v-nativebutton-link .v-nativebutton-caption { + text-decoration: underline; + color: inherit; + text-align: left; +} + +.v-nativebutton { + text-align: center; + cursor: pointer; + white-space: nowrap; + margin: 0; + color: inherit; + font: inherit; + line-height: normal; +} + +.v-nativebutton .v-nativebutton-caption { + vertical-align: middle; + white-space: nowrap; + font: inherit; + color: inherit; +} + +.v-nativebutton .v-icon { + vertical-align: middle; + margin-right: 3px; +} + +.v-nativebutton .v-errorindicator { + display: inline-block; + zoom: 1; + float: none; +} + +.v-ie6 .v-nativebutton { + width: 1px; +} + +.v-ie .v-nativebutton { + overflow: visible; + padding-left: 1em; + padding-right: 1em; +} + +.v-ie .v-nativebutton-link { + padding: 0; +} + +.v-checkbox { + display: block; +} + +.v-checkbox, .v-checkbox label, .v-checkbox input, .v-checkbox .v-icon { + vertical-align: middle; + white-space: nowrap; +} + +.v-ie6 .v-checkbox, .v-ie7 .v-checkbox { + vertical-align: baseline; +} + +.v-checkbox .v-icon { + margin: 0 2px; +} + +.v-checkbox .v-errorindicator { + float: none; + display: inline; + display: inline-block; + zoom: 1; +} + +.v-captionwrapper { + text-align: left; +} + +.v-caption { + overflow: hidden; + white-space: nowrap; +} + +.v-errorindicator { + float: left; +} + +.v-caption .v-icon { + float: left; + padding-right: 2px; + vertical-align: middle; +} + +.v-caption .v-captiontext { + float: left; + overflow: hidden; + vertical-align: middle; +} + +.v-caption .v-required-field-indicator { + float: left; +} + +.v-caption-clearelem { + clear: both; + width: 0; + height: 0; + overflow: hidden; +} + +.v-ie6 .v-errorindicator, .v-ie6 .v-icon, .v-ie6 .v-captiontext, .v-ie6 .v-required-field-indicator { + display: inline; +} + +.v-ie9 .v-gridlayout-margin > div > div > .v-caption, .v-ie9 .v-verticallayout > div > div > .v-caption, .v-ie9 .v-horizontallayout > div > div > .v-caption { + margin-right: -0.5px; +} + +.v-generated-body { + width: 100%; + height: 100%; + border: 0; + margin: 0; + overflow: hidden; +} + +.v-app { + height: 100%; +} + +.v-app, .v-window, .v-popupview-popup, .v-label, .v-caption { + cursor: default; +} + +div.v-app-loading { + background-image: url(../base/common/img/loading-indicator.gif); + background-repeat: no-repeat; + background-position: 50%; + width: 100%; + height: 100%; +} + +.v-view { + height: 100%; + width: 100%; + overflow: auto; + outline: none; + margin-top: -1px; + border-top: 1px solid transparent; + position: relative; +} + +@media print { + .v-generated-body { + height: auto; + min-height: 20cm; + overflow: visible; + } + .v-app { + height: auto; + min-height: 20cm; + } + .v-view { + overflow: visible; + } + .v-gridlayout { + overflow: visible !important; + } +} + +.v-view:active, .v-view:focus { + outline: none; +} + +.v-app select, .v-window select { + margin: 0; +} + +.v-disabled { + opacity: 0.3; + filter: alpha(opacity = 30); + cursor: default; +} + +.v-disabled * { + cursor: default; +} + +.v-disabled .v-disabled { + opacity: 1; +} + +.v-required-field-indicator { + padding-left: 2px; + color: red; +} + +.v-form fieldset { + border: none; + padding: 0; + margin: 0; +} + +.v-tooltip { + cursor: default; + background: #ffffff; +} + +.v-tooltip-text { + overflow: auto; +} + +.v-tooltip .v-errormessage { + overflow: auto; +} + +.v-contextmenu { + background: #ffffff; +} + +.v-contextmenu .gwt-MenuItem { + cursor: pointer; + vertical-align: middle; + padding: 0; + border: 0; + margin: 0; +} + +.v-contextmenu .gwt-MenuItem div { + cursor: pointer; + vertical-align: middle; + white-space: nowrap; +} + +.v-contextmenu .gwt-MenuItem-selected div { + background: #aaaaaa; + color: #ffffff; +} + +.v-contextmenu table { + border-collapse: collapse; + margin: 0; + padding: 0; +} + +.v-contextmenu .gwt-MenuItem img { + margin-right: 1em; + vertical-align: middle; +} + +.v-label pre { + margin: 0; +} + +.v-label-undef-w { + white-space: nowrap; +} + +.v-label h1, .v-label h2, .v-label h3, .v-label h4, .v-label h5, .v-label h6 { + line-height: normal; +} + +.v-loading-indicator, .v-loading-indicator-delay, .v-loading-indicator-wait { + position: absolute; + top: 0; + right: 0; + z-index: 30000; + width: 31px; + height: 31px; + background: transparent url(../base/common/img/loading-indicator.gif); + margin-right: 5px; + margin-top: 5px; +} + +.v-loading-indicator-delay { + background-image: url(../base/common/img/loading-indicator-delay.gif); +} + +.v-loading-indicator-wait { + background-image: url(../base/common/img/loading-indicator-wait.gif); +} + +.v-debug-console { + background: #ffffff; + opacity: 0.9; + border: 1px solid #000000; + font-family: sans-serif; +} + +.v-debug-console-caption { + background: #000000; + border-bottom: 1px solid grey; + color: white; + font-weight: bold; +} + +.v-debug-console-content { + font-size: x-small; + overflow: auto; + white-space: pre; +} + +.v-debug-console-content input { + font-size: xx-small; +} + +.v-app .invalidlayout, .v-app .invalidlayout * { + background: #ff9999 !important; +} + +.v-app input[type="text"], .v-app input[type="password"], .v-app input[type="reset"], .v-app select, .v-app textarea, .v-window input[type="text"], .v-window input[type="password"], .v-window input[type="reset"], .v-window select, .v-window textarea { + padding: 2px; +} + +.v-drag-element { + z-index: 60000; + position: absolute; + opacity: 0.5; + filter: alpha(opacity = 50); + cursor: default; +} + +.v-csslayout { + overflow: hidden; +} + +.v-csslayout-margin-top { + padding-top: 12px; +} + +.v-csslayout-margin-bottom { + padding-bottom: 12px; +} + +.v-csslayout-margin-left { + padding-left: 12px; +} + +.v-csslayout-margin-right { + padding-right: 12px; +} + +.v-customcomponent { + overflow: hidden; +} + +.v-customlayout { + overflow: hidden; +} + +.v-datefield { + white-space: nowrap; + float: left; +} + +.v-datefield-textfield { + vertical-align: top; +} + +.v-datefield-button { + cursor: pointer; +} + +.v-datefield-prompt .v-datefield-textfield { + color: #999999; + font-style: italic; +} + +.v-datefield .v-datefield-button-readonly { + display: none; +} + +.v-datefield-calendarpanel table { + width: 100%; +} + +.v-datefield-calendarpanel td { + padding: 0; + margin: 0; +} + +.v-datefield-calendarpanel:focus { + outline: none; +} + +.v-datefield-calendarpanel-header td { + text-align: center; +} + +.v-datefield-calendarpanel-month { + text-align: center; + white-space: nowrap; +} + +.v-datefield-calendarpanel-weeknumber { + color: #999999; + border-right: 1px solid #dddddd; + font-size: 0.9em; +} + +.v-datefield-calendarpanel-day, .v-datefield-calendarpanel-day-today { + cursor: pointer; +} + +.v-datefield-calendarpanel-day-today { + border: 1px solid #dddddd; +} + +.v-disabled .v-datefield-calendarpanel-day, .v-disabled .v-datefield-calendarpanel-day-today { + cursor: default; +} + +.v-datefield-calendarpanel-day-disabled { + cursor: default; + opacity: 0.5; +} + +.v-datefield-calendarpanel-day-selected { + cursor: default; + background: #333333; + color: #ffffff; +} + +.v-datefield-calendarpanel-day-focused { + outline: 1px dotted black; +} + +.v-datefield-calendarpanel-day-offmonth { + color: #666666; +} + +.v-ie6 .v-datefield-calendarpanel-day, .v-ie7 .v-datefield-calendarpanel-day { + margin: 1px; +} + +.v-ie6 .v-datefield-calendarpanel-day-focused, .v-ie7 .v-datefield-calendarpanel-day-focused { + border: 1px dotted black; + margin: 0px; +} + +.v-datefield-time { + white-space: nowrap; +} + +.v-datefield-time .v-label { + display: inline; +} + +.v-datefield-popup { + background: #ffffff; +} + +.v-ie6 .v-disabled .v-datefield-button, .v-ie6 .v-disabled .v-datefield-textfield, .v-ie7 .v-disabled .v-datefield-button, .v-ie7 .v-disabled .v-datefield-textfield { + filter: alpha(opacity = 30); +} + +.v-ddwrapper { + padding: 2px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + position: relative; +} + +[draggable=true] { + -khtml-user-drag: element; + -webkit-user-drag: element; + -khtml-user-select: none; + -webkit-user-select: none; +} + +.v-ie .v-ddwrapper a.drag-start { + display: block; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 100%; + opacity: 0; + background-color: cyan; + filter: alpha(opacity = 0); +} + +.v-ddwrapper-over { + border: 2px solid #1d9dff; + background-color: #bcdcff; + padding: 0; +} + +.v-ddwrapper-over { + background-color: rgba(169, 209, 255, 0.6); +} + +.no-box-drag-hints .v-ddwrapper-over { + border: none; + background-color: transparent; + padding: 2px; +} + +.v-app .v-ddwrapper-over-top, .v-window .v-ddwrapper-over-top, .v-popupview-popup .v-ddwrapper-over-top { + border: none; + border-top: 2px solid #1d9dff; + background-color: transparent; + padding: 2px; + padding-top: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} + +.v-app .v-ddwrapper-over-bottom, .v-window .v-ddwrapper-over-bottom, .v-popupview-popup .v-ddwrapper-over-bottom { + border: none; + border-bottom: 2px solid #1d9dff; + background-color: transparent; + padding: 2px; + padding-bottom: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} + +.v-app .v-ddwrapper-over-left, .v-window .v-ddwrapper-over-left, .v-popupview-popup .v-ddwrapper-over-left { + border: none; + border-left: 2px solid #1d9dff; + background-color: transparent; + padding: 2px; + padding-left: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} + +.v-app .v-ddwrapper-over-right, .v-window .v-ddwrapper-over-right, .v-popupview-popup .v-ddwrapper-over-right { + border: none; + border-right: 2px solid #1d9dff; + background-color: transparent; + padding: 2px; + padding-right: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} + +.v-ddwrapper, .v-ddwrapper-over, .v-app .v-ddwrapper-over-top, .v-window .v-ddwrapper-over-top, .v-popupview-popup .v-ddwrapper-over-top, .v-app .v-ddwrapper-over-bottom, .v-window .v-ddwrapper-over-bottom, .v-popupview-popup .v-ddwrapper-over-bottom, .v-app .v-ddwrapper-over-left, .v-window .v-ddwrapper-over-left, .v-popupview-popup .v-ddwrapper-over-left, .v-app .v-ddwrapper-over-right, .v-window .v-ddwrapper-over-right, .v-popupview-popup .v-ddwrapper-over-right { + border-color: rgba(0, 109, 232, 0.6); +} + +.v-ddwrapper-over-top:before, .v-ddwrapper-over-bottom:after, .v-ddwrapper-over-left:before, .v-ddwrapper-over-right:before { + display: block; + content: ""; + position: absolute; + width: 6px; + height: 6px; + margin-top: -4px; + margin-left: -2px; + background: transparent url(../base/common/img/drag-slot-dot.png) no-repeat; +} + +.v-ddwrapper-over-bottom:after { + margin-top: -2px; +} + +.v-ddwrapper-over-left:before, .v-ddwrapper-over-right:before { + background-position: 0 -6px; + margin-top: -2px; + margin-left: -4px; +} + +.v-ddwrapper-over-right:before { + position: relative; + margin-bottom: -4px; + margin-right: -4px; + margin-left: 0; + width: auto; + background-position: 100% -6px; +} + +.no-horizontal-drag-hints .v-ddwrapper-over-left { + padding-left: 2px; + border-left: none; +} + +.no-horizontal-drag-hints .v-ddwrapper-over-right { + padding-right: 2px; + border-right: none; +} + +.no-vertical-drag-hints .v-ddwrapper-over-top { + padding-top: 2px; + border-top: none; +} + +.no-vertical-drag-hints .v-ddwrapper-over-bottom { + padding-bottom: 2px; + border-bottom: none; +} + +.no-horizontal-drag-hints .v-ddwrapper-over-left:before, .no-horizontal-drag-hints .v-ddwrapper-over-right:before, .no-vertical-drag-hints .v-ddwrapper-over-top:before, .no-vertical-drag-hints .v-ddwrapper-over-bottom:after { + display: none; +} + +.v-table .v-embedded-image { + display: inline-block; +} + +.v-formlayout-cell .v-errorindicator { + display: block; +} + +.v-formlayout-error-indicator { + width: 12px; +} + +.v-formlayout-captioncell { + text-align: right; + white-space: nowrap; +} + +.v-formlayout-captioncell .v-caption { + overflow: visible; +} + +.v-formlayout-spacing .v-formlayout-row .v-formlayout-captioncell, .v-formlayout-spacing .v-formlayout-row .v-formlayout-contentcell, .v-formlayout-spacing .v-formlayout-row .v-formlayout-errorcell { + padding-top: 6px; +} + +.v-formlayout-spacing .v-formlayout-firstrow .v-formlayout-captioncell, .v-formlayout-spacing .v-formlayout-firstrow .v-formlayout-contentcell, .v-formlayout-spacing .v-formlayout-firstrow .v-formlayout-errorcell { + padding-top: 0; +} + +.v-formlayout-margin-top .v-formlayout-firstrow .v-formlayout-captioncell, .v-formlayout-margin-top .v-formlayout-firstrow .v-formlayout-contentcell, .v-formlayout-margin-top .v-formlayout-firstrow .v-formlayout-errorcell { + padding-top: 12px; +} + +.v-formlayout-margin-bottom .v-formlayout-lastrow .v-formlayout-captioncell, .v-formlayout-margin-bottom .v-formlayout-lastrow .v-formlayout-contentcell, .v-formlayout-margin-bottom .v-formlayout-lastrow .v-formlayout-errorcell { + padding-bottom: 12px; +} + +.v-formlayout-margin-left .v-formlayout-captioncell { + padding-left: 12px; +} + +.v-formlayout-margin-right .v-formlayout-contentcell { + padding-right: 12px; +} + +.v-formlayout-captioncell .v-caption .v-required-field-indicator { + float: none; +} + +.v-gridlayout-margin-top { + padding-top: 12px; +} + +.v-gridlayout-margin-bottom { + padding-bottom: 12px; +} + +.v-gridlayout-margin-left { + padding-left: 12px; +} + +.v-gridlayout-margin-right { + padding-right: 12px; +} + +.v-gridlayout-spacing-on { + padding-left: 6px; + padding-top: 6px; + overflow: hidden; +} + +.v-gridlayout-spacing, .v-gridlayout-spacing-off { + padding-left: 0; + padding-top: 0; +} + +.v-gridlayout-spacing-off { + overflow: hidden; +} + +.v-ie6 .v-gridlayout, .v-ie7 .v-gridlayout { + overflow: hidden; +} + +.v-link { + white-space: nowrap; +} + +.v-link a { + vertical-align: middle; + text-decoration: none; +} + +.v-link span { + text-decoration: underline; + vertical-align: middle; +} + +.v-disabled a { + cursor: default; +} + +.v-link img { + vertical-align: middle; + border: none; +} + +.v-loginform { + height: 140px; + width: 200px; +} + +.v-app-loginpage .v-button, .v-app-loginpage .v-button { + float: left; +} + +.v-menubar { + float: left; + white-space: nowrap; +} + +.v-menubar .v-menubar-menuitem { + cursor: default; + vertical-align: middle; + white-space: nowrap; + display: inline; + display: inline-block; + zoom: 1; +} + +.v-menubar .v-menubar-menuitem-caption .v-icon { + vertical-align: middle; + white-space: nowrap; +} + +.v-menubar-submenu { + background: #ffffff; +} + +.v-menubar-menuitem-selected { + background: #333333; + color: #ffffff; +} + +.v-menubar-submenu .v-menubar-menuitem { + cursor: default; + display: block; + position: relative; + padding-right: 1.5em; +} + +.v-menubar-submenu .v-menubar-menuitem-caption { + display: block; +} + +.v-menubar-submenu .v-menubar-menuitem *, .v-menubar-submenu .v-menubar-menuitem-caption * { + white-space: nowrap; +} + +.v-menubar-submenu-indicator { + display: none; + font-family: arial, helvetica, sans-serif; +} + +.v-menubar-submenu .v-menubar-submenu-indicator { + display: block; + position: absolute; + right: 0; + width: 1em; + height: 1em; + font-size: 0.9em; +} + +.v-menubar-menuitem-disabled, .v-menubar span.v-menubar-menuitem-disabled:hover, .v-menubar span.v-menubar-menuitem-disabled:focus, .v-menubar span.v-menubar-menuitem-disabled:active { + color: #999999; +} + +.v-menubar-more-menuitem { + font-family: arial, helvetica, sans-serif; +} + +.v-menubar-separator { + overflow: hidden; +} + +.v-menubar-separator span { + display: block; + text-indent: -9999px; + font-size: 1px; + line-height: 1px; + border-top: 1px solid #dddddd; + margin: 3px 0 2px; + overflow: hidden; +} + +.v-menubar .v-icon, .v-menubar-submenu .v-icon { + margin-right: 3px; +} + +.v-menubar:focus, .v-menubar-popup:focus, .v-menubar-popup .popupContent:focus, .v-menubar-popup .popupContent .v-menubar-submenu:focus { + outline: none; +} + +.v-menubar-submenu-check-column .v-menubar-menuitem { + padding-left: 6px; +} + +.v-menubar-submenu-check-column .v-menubar-menuitem-caption { + padding-left: 18px; +} + +.v-menubar-submenu .v-menubar-menuitem-checked .v-menubar-menuitem-caption { + background: transparent url(../base/menubar/img/check.gif) no-repeat left; +} + +.v-Notification { + background: #999999; + color: #ffffff; + cursor: pointer; + overflow: hidden; + padding: 1em; + max-width: 85%; +} + +.v-Notification h1, .v-Notification p, .v-Notification-error h1, .v-Notification-error p, .v-Notification-warning h1, .v-Notification-warning p { + display: inline; + margin: 0 0.5em 0 0; +} + +.v-Notification-warning { + background: orange; +} + +.v-Notification-error { + background: red; +} + +.v-Notification-tray h1 { + display: block; +} + +.v-Notification-tray p { + display: block; +} + +.v-Notification-system { + background-color: red; + opacity: 0.7; + filter: alpha(opacity = 70); +} + +.v-Notification-system h1 { + display: block; + margin: 0; +} + +.v-orderedlayout-margin-top, .v-horizontallayout-margin-top, .v-verticallayout-margin-top { + padding-top: 12px; +} + +.v-orderedlayout-margin-right, .v-horizontallayout-margin-right, .v-verticallayout-margin-right { + padding-right: 12px; +} + +.v-orderedlayout-margin-bottom, .v-horizontallayout-margin-bottom, .v-verticallayout-margin-bottom { + padding-bottom: 12px; +} + +.v-orderedlayout-margin-left, .v-horizontallayout-margin-left, .v-verticallayout-margin-left { + padding-left: 12px; +} + +.v-orderedlayout-spacing-on, .v-horizontallayout-spacing-on, .v-verticallayout-spacing-on { + padding-top: 6px; + padding-left: 6px; +} + +.v-orderedlayout-spacing-off, .v-horizontallayout-spacing-off, .v-verticallayout-spacing-off { + padding-top: 0; + padding-left: 0; +} + +.v-ie6 .v-orderedlayout, .v-ie6 .v-horizontallayout, .v-ie6 .v-verticallayout, .v-ie7 .v-orderedlayout, .v-ie7 .v-horizontallayout, .v-ie7 .v-verticallayout { + overflow: hidden; +} + +.v-panel, .v-panel-caption, .v-panel-content, .v-panel-deco, .v-panel-light, .v-panel-caption-light, .v-panel-content-light, .v-panel-deco-light { + outline: none; + text-align: left; +} + +.v-panel-caption .v-errorindicator { + float: none; + display: inline; +} + +.v-panel-caption .v-icon { + display: inline; + vertical-align: middle; +} + +.v-panel-caption span { + vertical-align: middle; +} + +.v-panel-caption { + white-space: nowrap; + overflow: hidden; + font-weight: bold; +} + +.v-panel-nocaption { + overflow: hidden; +} + +.v-panel-content { + overflow: auto; +} + +.v-panel-deco { +} + +.v-popupview { + cursor: pointer; + text-decoration: underline; + white-space: nowrap; +} + +.v-popupview-popup { + overflow: auto; +} + +.v-popupview-loading { + width: 30px; + height: 30px; + background: transparent url(../base/common/img/ajax-loader-medium.gif) no-repeat 50%; +} + +.v-progressindicator { + overflow: hidden; + width: 150px; +} + +.v-progressindicator-wrapper { + overflow: hidden; + height: 7px; + border: 1px solid #dddddd; +} + +.v-progressindicator-indicator { + height: 7px; + overflow: hidden; + background: #dddddd; +} + +div.v-progressindicator-indeterminate { + height: 20px; + width: 20px; + overflow: hidden; + background: #ffffff url(../base/common/img/ajax-loader-medium.gif) no-repeat 50%; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; +} + +.v-progressindicator-indeterminate .v-progressindicator-wrapper, .v-progressindicator-indeterminate .v-progressindicator-indicator, .v-progressindicator-indeterminate-disabled .v-progressindicator-wrapper, .v-progressindicator-indeterminate-disabled .v-progressindicator-indicator { + display: none; +} + +div.v-progressindicator-indeterminate-disabled { + height: 20px; + width: 20px; + overflow: hidden; + background: transparent; +} + +.v-select { + text-align: left; +} + +.v-select-optiongroup .v-select-option { + display: block; + white-space: nowrap; +} + +.v-select-optiongroup .v-icon { + vertical-align: middle; + white-space: nowrap; + margin: 0 2px; +} + +.v-ie .v-select-optiongroup .v-select-option { + zoom: 1; +} + +.v-select-select { + display: block; +} + +.v-select-twincol { + white-space: nowrap; +} + +.v-select-twincol-options { + float: left; +} + +.v-select-twincol-caption-left { + float: left; + overflow: hidden; + text-overflow: ellipsis; +} + +.v-select-twincol-selections { + font-weight: bold; +} + +.v-select-twincol-caption-right { + float: right; + overflow: hidden; + text-overflow: ellipsis; +} + +.v-select-twincol-buttons { + float: left; + text-align: center; +} + +.v-select-twincol-buttons .v-select-twincol-deco { + clear: both; +} + +.v-select-twincol .v-textfield { + display: block; + float: left; + clear: left; +} + +.v-select-twincol .v-button { + float: left; +} + +.v-select-twincol-buttons .v-button { + float: none; +} + +.v-filterselect { + white-space: nowrap; + text-align: left; +} + +.v-filterselect .v-icon { + float: left; +} + +.v-app .v-filterselect-input, .v-window .v-filterselect-input, .v-popupview-popup .v-filterselect-input { + float: left; + -webkit-border-radius: 0px; +} + +.v-filterselect-prompt .v-filterselect-input { + color: #999999; + font-style: italic; +} + +.v-filterselect-button { + float: right; + cursor: pointer; + width: 1em; + height: 1em; + background: transparent url(../base/common/img/sprites.png) no-repeat -5px -8px; +} + +.v-filterselect.v-readonly .v-filterselect-button { + display: none; +} + +.v-filterselect.v-readonly, .v-filterselect.v-readonly .v-filterselect-input { + background: transparent; +} + +.v-filterselect-suggestpopup { + background: #ffffff; + border: 1px solid #eeeeee; +} + +.v-filterselect-suggestmenu table { + border-collapse: collapse; + border: none; +} + +.v-filterselect-suggestmenu .gwt-MenuItem { + white-space: nowrap; +} + +.v-filterselect-suggestmenu .gwt-MenuItem .v-icon { + margin-right: 3px; + vertical-align: middle; +} + +.v-filterselect-suggestmenu .gwt-MenuItem span { + vertical-align: middle; +} + +.v-filterselect-suggestmenu .gwt-MenuItem-selected { + background: #333333; + color: #ffffff; +} + +.v-filterselect-nextpage, .v-filterselect-nextpage-off, .v-filterselect-prevpage-off, .v-filterselect-prevpage { + width: 100%; + background: #aaaaaa; + text-align: center; + overflow: hidden; + cursor: pointer; +} + +.v-filterselect-nextpage-off, .v-filterselect-prevpage-off { + color: #666666; + opacity: 0.5; + filter: alpha(opacity = 50); + cursor: default; +} + +.v-filterselect-nextpage-off span, .v-filterselect-prevpage-off span { + cursor: default; +} + +.v-filterselect-status { + white-space: nowrap; + text-align: center; +} + +.v-filterselect-no-input .v-filterselect-input { + cursor: default; +} + +.v-shadow { + position: absolute; +} + +.v-shadow .top-left { + position: absolute; + overflow: hidden; + top: -3px; + left: -5px; + width: 10px; + height: 10px; + background: transparent url(../base/shadow/img/top-left.png); +} + +.v-shadow .top { + position: absolute; + overflow: hidden; + top: -3px; + left: 5px; + height: 10px; + right: 5px; + background: transparent url(../base/shadow/img/top.png); +} + +.v-shadow .top-right { + position: absolute; + overflow: hidden; + top: -3px; + right: -5px; + width: 10px; + height: 10px; + background: transparent url(../base/shadow/img/top-right.png); +} + +.v-shadow .left { + position: absolute; + overflow: hidden; + top: 7px; + left: -5px; + width: 10px; + bottom: 3px; + background: transparent url(../base/shadow/img/left.png); +} + +.v-shadow .center { + position: absolute; + overflow: hidden; + top: 7px; + left: 5px; + bottom: 3px; + right: 5px; + background: transparent url(../base/shadow/img/center.png); +} + +.v-shadow .right { + position: absolute; + overflow: hidden; + top: 7px; + right: -5px; + width: 10px; + bottom: 3px; + background: transparent url(../base/shadow/img/right.png); +} + +.v-shadow .bottom-left { + position: absolute; + overflow: hidden; + bottom: -7px; + left: -5px; + width: 10px; + height: 10px; + background: transparent url(../base/shadow/img/bottom-left.png); +} + +.v-shadow .bottom { + position: absolute; + overflow: hidden; + bottom: -7px; + left: 5px; + right: 5px; + height: 10px; + background: transparent url(../base/shadow/img/bottom.png); +} + +.v-shadow .bottom-right { + position: absolute; + overflow: hidden; + bottom: -7px; + right: -5px; + width: 10px; + height: 10px; + background: transparent url(../base/shadow/img/bottom-right.png); +} + +.v-ie6 .v-shadow * { + display: none; +} + +.v-slider { + margin: 5px 0; +} + +.v-slider-base { + height: 2px; + border-top: 1px solid #dddddd; + background: #eeeeee; + border-left: 1px solid #dddddd; + border-right: 1px solid #eeeeee; +} + +.v-slider-handle { + background: #aaaaaa; + width: 12px; + height: 12px; + margin-top: -5px; + font-size: 0; +} + +.v-slider-vertical { + width: 2px; + height: auto; + margin: 0 5px; + border: none; + border-left: 1px solid #cccfd0; + border-right: 1px solid #cccfd0; +} + +.v-slider-vertical .v-slider-base { + width: 2px; + border-bottom: 1px solid #eeeeee; + border-right: none; +} + +.v-slider-vertical .v-slider-handle { + width: 12px; + height: 12px; + font-size: 0; + margin-left: -5px; +} + +.v-slider-feedback { + padding: 2px 5px; + background: #444444; + color: #ffffff; + font-size: 11px; + line-height: 13px; + font-weight: bold; + font-family: Arial, Helvetica, sans-serif; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + margin: -2px 0 0 2px; + text-shadow: 0 1px 0 #000000; +} + +.v-ie6 .v-slider, .v-ie6 .v-slider-vertical { + margin: 0; +} + +.v-ie6 .v-slider .v-slider-handle { + margin: -1px 0; +} + +.v-ie6 .v-slider-vertical .v-slider-handle { + margin: 0 -1px; +} + +.v-splitpanel-horizontal, .v-splitpanel-vertical { + overflow: hidden; +} + +.v-splitpanel-hsplitter { + width: 6px; + font-size: 1px; +} + +.v-splitpanel-hsplitter div { + width: 6px; + font-size: 1px; + position: absolute; + top: 0; + bottom: 0; + background: #dddddd; + cursor: e-resize; + cursor: col-resize; +} + +.v-disabled .v-splitpanel-hsplitter div { + cursor: default; +} + +.v-splitpanel-vsplitter { + height: 6px; + font-size: 1px; +} + +.v-splitpanel-vsplitter div { + height: 6px; + font-size: 1px; + background: #dddddd; + cursor: s-resize; + cursor: row-resize; +} + +.v-disabled .v-splitpanel-vsplitter div { + cursor: default; +} + +.v-ie6 .v-splitpanel-hsplitter div { + height: 99%; +} + +.v-ie6 .v-splitpanel-first-container, .v-ie6 .v-splitpanel-second-container, .v-ie7 .v-splitpanel-first-container, .v-ie7 .v-splitpanel-second-container { + position: relative; +} + +.v-table { + overflow: hidden; + text-align: left; +} + +.v-ie7 .v-table { + overflow: visible; +} + +.v-table-header-wrap { + overflow: hidden; + border: 1px solid #aaaaaa; + border-bottom: none; + background: #efefef; +} + +.v-table-header table, .v-table-table { + border-spacing: 0; + border-collapse: separate; + margin: 0; + padding: 0; + border: 0; +} + +.v-table-header td { + padding: 0; +} + +.v-table-header-cell, .v-table-header-cell-asc, .v-table-header-cell-desc { + cursor: pointer; +} + +.v-table.v-disabled .v-table-header-cell, .v-table.v-disabled .v-table-header-cell-asc, .v-table.v-disabled .v-table-header-cell-desc { + cursor: default; +} + +.v-table-footer-wrap { + overflow: hidden; + border: 1px solid #aaaaaa; + border-top: none; + background: #efefef; +} + +.v-table-footer table { + border-spacing: 0; + border-collapse: collapse; + margin: 0; + padding: 0; + border: 0; +} + +.v-table-footer td { + padding: 0; + border-right: 1px solid #aaaaaa; +} + +.v-table-footer-cell { + cursor: pointer; +} + +.v-table-footer-container { + float: right; + padding-right: 6px; + overflow: hidden; + white-space: nowrap; +} + +.v-table-resizer { + display: block; + height: 1.2em; + float: right; + background: #aaaaaa; + cursor: e-resize; + cursor: col-resize; + width: 1px; + overflow: hidden; +} + +.v-table.v-disabled .v-table-resizer { + cursor: default; +} + +.v-table-caption-container { + overflow: hidden; + white-space: nowrap; + margin-left: 6px; +} + +.v-ie7 .v-table-caption-container-align-right { + margin-left: 0px; + padding-left: 6px; +} + +.v-table-caption-container-align-right { + float: right; +} + +.v-table-sort-indicator { + width: 0px; + height: 1.2em; + float: right; +} + +.v-table-header-cell-asc .v-table-sort-indicator, .v-table-header-cell-desc .v-table-sort-indicator { + width: 16px; + height: 1.2em; + float: right; +} + +.v-table-header-cell-asc .v-table-sort-indicator { + background: transparent url(../base/common/img/sprites.png) no-repeat right 6px; +} + +.v-table-header-cell-desc .v-table-sort-indicator { + background: transparent url(../base/common/img/sprites.png) no-repeat right -10px; +} + +.v-table-caption-container-align-center { + text-align: center; +} + +.v-table-caption-container-align-right { + text-align: right; +} + +.v-table-caption-container .v-icon, .v-table-header-drag .v-icon { + vertical-align: middle; +} + +.v-table-body { + border: 1px solid #aaaaaa; +} + +.v-table-row-spacer { + height: 10px; + overflow: hidden; +} + +.v-table-row, .v-table-row-odd { + background: #ffffff; + border: 0; + margin: 0; + padding: 0; + cursor: pointer; +} + +.v-table-generated-row { + background: #efefef; +} + +.v-table-body-noselection .v-table-row, .v-table-body-noselection .v-table-row-odd { + cursor: default; +} + +.v-table .v-selected { + background: #999999; + color: #ffffff; +} + +.v-table-cell-content { + white-space: nowrap; + overflow: hidden; + padding: 0 6px; + border-right: 1px solid #aaaaaa; +} + +.v-table-cell-wrapper { + white-space: nowrap; + overflow: hidden; +} + +.v-table-cell-wrapper-align-center { + text-align: center; +} + +.v-table-cell-wrapper-align-right { + text-align: right; +} + +.v-table-column-selector { + float: right; + background: transparent url(../base/common/img/sprites.png) no-repeat 4px -37px; + margin: -1.2em 0 0 0; + height: 1.2em; + width: 14px; + position: relative; + cursor: pointer; +} + +.v-table.v-disabled .v-table-column-selector { + cursor: default; +} + +.v-ie6 .v-table-column-selector, .v-ie7 .v-table-column-selector { + position: static; +} + +.v-table-focus-slot-left { + border-left: 2px solid #999999; + float: none; + margin-bottom: -1.2em; + width: auto; + background: transparent; + border-right: 1px solid #aaaaaa; +} + +.v-table-focus-slot-right { + border-right: 2px solid #999999; + margin-left: -2px; +} + +.v-table-header-drag { + position: absolute; + background: #efefef; + border: 1px solid #eeeeee; + opacity: 0.9; + filter: alpha(opacity = 90); + margin-top: 20px; + z-index: 30000; +} + +.v-table-header-drag .v-icon { + vertical-align: middle; +} + +.v-table-scrollposition { + width: 160px; + background: #eeeeee; + border: 1px solid #aaaaaa; +} + +.v-table-scrollposition span { + display: block; + text-align: center; +} + +.v-table-body:focus, .v-table-body-wrapper:focus { + outline: none; +} + +.v-table-body.focused { + border-color: #388ddd; +} + +.v-table-focus .v-table-cell-content { + border-top: 1px dotted #0066bd; + border-bottom: 1px dotted #0066bd; +} + +.v-table-focus .v-table-cell-wrapper { + margin-top: -1px; + margin-bottom: -1px; +} + +.v-on { +} + +.v-off { + color: #dddddd; +} + +.v-table-drag .v-table-body { + border-color: #1d9dff; +} + +.v-table-row-drag-middle .v-table-cell-content { + background-color: #bcdcff; +} + +.v-table-row-drag-top .v-table-cell-content { + border-top: 2px solid #1d9dff; +} + +.v-table-row-drag-top .v-table-cell-wrapper { + margin-top: -2px; +} + +.v-table-row-drag-bottom .v-table-cell-content { + border-bottom: 2px solid #1d9dff; +} + +.v-table-row-drag-bottom .v-table-cell-wrapper { + margin-bottom: -2px; +} + +.v-table-row-drag-top .v-table-cell-content:first-child:before, .v-table-row-drag-bottom .v-table-cell-content:first-child:after { + display: block; + content: ""; + position: absolute; + width: 6px; + height: 6px; + margin-top: -4px; + margin-left: -6px; + background: transparent url(../base/common/img/drag-slot-dot.png); +} + +.v-ff .v-table-row-drag-bottom .v-table-cell-content:first-child:after, .v-ie .v-table-row-drag-bottom .v-table-cell-content:first-child:after { + margin-top: -2px; +} + +.v-tabsheet, .v-tabsheet-content, .v-tabsheet-deco { + outline: none; + text-align: left; +} + +.v-tabsheet-tabs { + empty-cells: hide; + border-collapse: collapse; + margin: 0; + padding: 0; + border: 0; + width: 100%; + overflow: hidden; +} + +.v-tabsheet-tabitemcell:focus { + outline: none; +} + +.v-tabsheet-tabitemcell, .v-tabsheet-spacertd { + margin: 0; + padding: 0; + vertical-align: bottom; +} + +.v-tabsheet-spacertd { + width: 100%; +} + +.v-tabsheet-spacertd div { + border-left: 1px solid #aaaaaa; + border-bottom: 1px solid #aaaaaa; + height: 1em; + padding: 0.2em 0; +} + +.v-tabsheet-hidetabs .v-tabsheet-tabcontainer { + display: none; +} + +.v-tabsheet-scroller { + white-space: nowrap; + text-align: right; + margin-top: -1em; +} + +.v-ff2 .v-tabsheet-scroller { + position: relative; +} + +.v-disabled .v-tabsheet-scroller { + display: none; +} + +.v-tabsheet-scrollerPrev, .v-tabsheet-scrollerNext, .v-tabsheet-scrollerPrev-disabled, .v-tabsheet-scrollerNext-disabled { + border: 1px solid #aaaaaa; + background: #ffffff; + width: 12px; + height: 1em; + cursor: pointer; +} + +.v-tabsheet-scrollerPrev-disabled, .v-tabsheet-scrollerNext-disabled { + opacity: 0.5; + cursor: default; +} + +.v-tabsheet-tabs .v-caption, .v-tabsheet-tabs .v-caption span { + white-space: nowrap; +} + +.v-tabsheet-caption-close { + display: inline; + display: inline-block; + zoom: 1; + width: 16px; + height: 16px; + text-align: center; + font-weight: bold; + cursor: pointer; + vertical-align: middle; + user-select: none; + -khtml-user-select: none; + -ms-user-select: none; + -moz-user-select: none; + -webkit-user-select: none; +} + +.v-tabsheet .v-disabled .v-tabsheet-caption-close { + cursor: default; + visibility: hidden; +} + +.v-tabsheet-tabitem:hover .v-tabsheet-caption-close, .v-ie6 .v-tabsheet-caption-close { + visibility: visible; +} + +.v-ie6 .v-tabsheet-caption-close { + float: right; +} + +.v-tabsheet-tabitem { + border: 1px solid #aaaaaa; + border-right: none; + cursor: pointer; + padding: 0.2em 0.5em; +} + +.v-tabsheet-tabitem .v-caption { + cursor: inherit; +} + +.v-tabsheet.v-disabled .v-tabsheet-tabitem, .v-tabsheet-tabitemcell-disabled .v-tabsheet-tabitem { + cursor: default; +} + +.v-tabsheet-tabitem-selected { + cursor: default; + border-bottom-color: #ffffff; +} + +.v-tabsheet-tabitem-selected .v-caption { + cursor: default; +} + +.v-tabsheet-content { + border: 1px solid #aaaaaa; + border-top: none; + border-bottom: none; + position: relative; +} + +.v-ie6 .v-tabsheet-content, .v-ie7 .v-tabsheet-content { + zoom: 1; +} + +.v-tabsheet-deco { + height: 1px; + background: #aaaaaa; + overflow: hidden; +} + +.v-tabsheet-hidetabs .v-tabsheet-content { + border: none; +} + +.v-tabsheet-hidetabs .v-tabsheet-deco { + height: 0; +} + +.v-textfield { + text-align: left; +} + +.v-textarea { + resize: none; +} + +.v-textfield-focus, .v-textarea-focus { +} + +input.v-textfield-prompt, textarea.v-textarea-prompt { + color: #999999; + font-style: italic; +} + +input.v-textfield-readonly, textarea.v-textarea-readonly { + background: transparent; + border: none; + resize: none; +} + +input.v-disabled, textarea.v-disabled { + resize: none; +} + +input.v-textfield-readonly:focus, textarea.v-textarea-readonly:focus { + outline: none; +} + +.v-sa input:focus, .v-sa textarea:focus { + outline-width: medium; +} + +.v-richtextarea { + border: 1px solid #aaaaaa; + overflow: hidden; +} + +.v-richtextarea .gwt-RichTextArea { + background: #ffffff; + border: none; +} + +.v-richtextarea .gwt-RichTextToolbar { + white-space: nowrap; + background: #959595 url(../base/textfield/img/richtext-toolbar-bg.png) repeat-x 0 -42px; + border-bottom: 1px solid #7d7d7d; + padding: 2px; + overflow: hidden; +} + +.v-richtextarea .gwt-RichTextToolbar-top { + padding-bottom: 1px; + overflow: hidden; + white-space: normal; +} + +.v-richtextarea .gwt-RichTextToolbar-bottom { + clear: left; + overflow: hidden; + white-space: nowrap; +} + +.v-richtextarea .gwt-RichTextToolbar .gwt-ToggleButton, .v-richtextarea .gwt-RichTextToolbar .gwt-PushButton { + float: left; + display: inline; + width: 22px; + height: 21px; + overflow: hidden; + background: transparent url(../base/textfield/img/richtext-toolbar-bg.png) repeat-x; + cursor: pointer; + margin-right: 2px; + text-align: center; +} + +.v-richtextarea .gwt-RichTextToolbar .gwt-ToggleButton-down, .v-richtextarea .gwt-RichTextToolbar .gwt-PushButton-down, .v-richtextarea .gwt-RichTextToolbar .gwt-ToggleButton-down-hovering, .v-richtextarea .gwt-RichTextToolbar .gwt-PushButton-down-hovering { + background-position: 0 -21px; +} + +.v-richtextarea .gwt-RichTextToolbar .gwt-ToggleButton img, .v-richtextarea .gwt-RichTextToolbar .gwt-PushButton img { +} + +.v-richtextarea .gwt-RichTextToolbar .gwt-ListBox { + width: 24.5%; + margin-right: 2px; +} + +.v-richtextarea-readonly { + border: none; +} + +.v-tree { + text-align: left; + overflow: hidden; + padding: 1px 0; + outline: none; +} + +.v-tree-node { + background: transparent url(../base/common/img/sprites.png) no-repeat 5px -37px; + padding: 1px 0; +} + +.v-tree-node-caption:focus { + outline: none; +} + +div.v-tree-node-leaf { + background: transparent; +} + +.v-tree-node-expanded { + background: transparent url(../base/common/img/sprites.png) no-repeat -5px -10px; +} + +.v-tree-node-caption { + margin-left: 1em; +} + +.v-tree-node span { + cursor: pointer; +} + +.v-tree-node-caption div { + white-space: nowrap; +} + +.v-tree-node-caption span, .v-tree-node-caption .v-icon { + vertical-align: middle; +} + +.v-tree-node-selected span { + background: #999999; + color: #ffffff; +} + +.v-tree-node-children { + padding-left: 1em; +} + +.v-tree-node-ie6compatnode { + display: none; +} + +.v-ie6 .v-tree-node-ie6compatnode { + display: inline; + float: left; + background: orange; + margin: 0; + width: 0.8em; + height: 0.8em; + padding: 0.1em; + filter: alpha(opacity = 0); +} + +.v-ie6 .v-tree-node, .v-ie6 .v-tree-node-children { + clear: left; +} + +.v-tree .v-tree-node-drag-top { + border-top: 2px solid #1d9dff; + margin-top: -1px; + padding-top: 0; +} + +.v-tree .v-tree-node-drag-bottom { + border-bottom: 2px solid #1d9dff; + margin-bottom: -1px; + padding-bottom: 0; +} + +.v-tree .v-tree-node-drag-top:before, .v-tree .v-tree-node-drag-bottom:after, .v-tree .v-tree-node-caption-drag-center:after { + display: block; + content: ""; + position: absolute; + width: 6px; + height: 6px; + margin-top: -4px; + background: transparent url(../base/common/img/drag-slot-dot.png); +} + +.v-tree .v-tree-node-drag-bottom:after { + margin-top: -2px; +} + +.v-tree .v-tree-node-caption-drag-center:after { + margin-left: 14px; +} + +.v-ff .v-tree .v-tree-node-caption-drag-center:after, .v-ie .v-tree .v-tree-node-caption-drag-center:after { + margin-top: -2px; +} + +.v-tree .v-tree-node-drag-top { + background-position: 5px -38px; +} + +.v-tree .v-tree-node-drag-top.v-tree-node-expanded { + background-position: -5px -11px; +} + +.v-tree .v-tree-node-caption-drag-center div { + border: 2px solid #1d9dff; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + margin: -2px 2px -2px -2px; + background-color: #bcdcff; +} + +.v-ie6 .v-tree .v-tree-node-caption-drag-center div { + margin: -2px; +} + +.v-tree .v-tree-node-caption-drag-center div { + background-color: rgba(169, 209, 255, 0.6); +} + +.v-tree .v-tree-node-caption-drag-center div, .v-tree .v-tree-node-drag-top, .v-tree .v-tree-node-drag-bottom { + border-color: rgba(0, 109, 232, 0.6); +} + +.v-tree-connectors .v-tree-node-caption { + padding-top: 1px; +} + +.v-tree-connectors .v-tree-node { + background: transparent url(../base/tree/img/connector-expand.png) no-repeat 2px -52px; +} + +.v-tree-connectors .v-tree-node-expanded { + background: transparent url(../base/tree/img/connector-collapse.png) no-repeat 2px -52px; +} + +.v-tree-connectors .v-tree-node-last { + background: transparent url(../base/tree/img/connector-expand-last.png) no-repeat 2px -52px; +} + +.v-tree-connectors .v-tree-node-expanded.v-tree-node-last { + background: transparent url(../base/tree/img/connector-collapse-last.png) no-repeat 2px -52px; +} + +.v-tree-connectors .v-tree-node-leaf { + background: transparent url(../base/tree/img/connector-leaf.png) repeat-y 2px 50%; +} + +.v-tree-connectors .v-tree-node-leaf-last { + background: transparent url(../base/tree/img/connector-leaf-last.png) repeat-y 2px 50%; +} + +.v-tree-connectors .v-tree-node-children { + background: transparent url(../base/tree/img/connector.png) repeat-y 2px 0; +} + +.v-tree-connectors .v-tree-node-children-last { + background: transparent; +} + +.v-tree-connectors .v-tree-node-drag-top, .v-tree-connectors .v-tree-node-expanded.v-tree-node-drag-top { + background-position: 2px -53px; +} + +.v-tree-connectors .v-tree-node-drag-top.v-tree-node-leaf { + background-position: 2px 50%; +} + +.v-ie6 .v-tree-connectors .v-tree-node { + background: transparent url(../base/tree/img/connector-expand-ie6.png) no-repeat 2px -52px; +} + +.v-ie6 .v-tree-connectors .v-tree-node-expanded { + background: transparent url(../base/tree/img/connector-collapse-ie6.png) no-repeat 2px -52px; +} + +.v-ie6 .v-tree-connectors .v-tree-node-last { + background: transparent url(../base/tree/img/connector-expand-last-ie6.png) no-repeat 2px -52px; +} + +.v-ie6 .v-tree-connectors .v-tree-node-last.v-tree-node-expanded { + background: transparent url(../base/tree/img/connector-collapse-last-ie6.png) no-repeat 2px -52px; +} + +.v-treetable-treespacer { + display: inline-block; + background: transparent; + height: 10px; + width: 18px; +} + +.v-ie7 .v-treetable-treespacer { + height: 100%; +} + +.v-treetable-node-closed { + background: url(../base/treetable/img/arrow-right.png) right center no-repeat; +} + +.v-ie6 .v-treetable-node-closed { + background-image: url(../base/treetable/img/arrow-right.gif); +} + +.v-treetable-node-open { + background: url(../base/treetable/img/arrow-down.png) right center no-repeat; +} + +.v-ie6 .v-treetable-node-open { + background-image: url(../base/treetable/img/arrow-down.gif); +} + +.v-treetable .v-checkbox { + display: inline-block; + padding-bottom: 4px; +} + +.v-treetable .v-table-row .v-table-cell-content, .v-treetable .v-table-row-odd .v-table-cell-content { + position: relative; + z-index: 10; +} + +.v-treetable .v-table-body .v-table-table .v-table-row-animating { + zoom: 1; + z-index: 1; +} + +.v-treetable .v-table-body .v-table-table .v-table-row-animating, .v-treetable .v-table-body .v-table-table .v-table-row-animating .v-table-cell-content { + background: transparent; +} + +.v-treetable-animation-clone { + border-spacing: 0; + zoom: 1; +} + +div.v-treetable-animation-clone-wrapper { + position: absolute; + z-index: 2; + background-color: #ffffff; +} + +div.v-treetable-animation-clone-wrapper table.v-treetable-animation-clone { + background-color: #ffffff; +} + +div table.v-treetable-animation-clone tr.v-table-row, div table.v-treetable-animation-clone tr.v-table-row-odd, div table.v-treetable-animation-clone tr.v-table-row td.v-table-cell-content, div table.v-treetable-animation-clone tr.v-table-row-odd td.v-table-cell-content { + visibility: visible; +} + +.v-upload { + white-space: nowrap; +} + +.v-ie6 .v-upload, .v-ie7 .v-upload { + margin: 0; +} + +.v-upload-immediate { + position: relative; + margin: 0; + overflow: hidden; +} + +.v-ff .v-upload-immediate, .v-op .v-upload-immediate { + display: inline-block; +} + +.v-upload-immediate input { + opacity: 0; + filter: alpha(opacity = 0); + z-index: 2; + position: absolute; + right: 0; + height: 21px; + text-align: right; + border: none; + background: transparent; +} + +.v-upload-immediate button { + position: relative; + left: 0; + top: 0; + width: 100%; + text-align: left; +} + +.v-window { + background: #ffffff; +} + +.v-window-outerheader { + padding: 0.3em 1em; + height: 1em; +} + +.v-window-outerheader, .v-window-draggingCurtain { + cursor: move; +} + +.v-window-header { + font-weight: bold; +} + +div.v-window-header { + white-space: nowrap; + text-overflow: ellipsis; + -ms-text-overflow: ellipsis; + overflow: hidden; + padding: 0; +} + +.v-ie6 .v-window-header { + width: 100%; +} + +.v-window-header .v-icon { + vertical-align: middle; +} + +.v-window-contents, x:-moz-any-link { + overflow: hidden; +} + +.v-window-contents, x:-moz-any-link, x:default { + overflow: visible; +} + +.v-window-contents > div { + outline: none; +} + +.v-window-footer { + overflow: hidden; + zoom: 1; + height: 10px; + position: relative; + cursor: move; +} + +.v-window-resizebox { + width: 10px; + height: 10px; + background: #dddddd; + overflow: hidden; + position: absolute; + right: 0; +} + +.v-window-resizebox, .v-window-resizingCurtain { + cursor: se-resize; +} + +.v-window div.v-window-footer-noresize { + height: 0; +} + +.v-window-resizebox-disabled { + cursor: default; + display: none; +} + +.v-window-closebox { + position: absolute; + top: 0; + right: 0; + width: 1em; + height: 1em; + background: red; + cursor: pointer; + overflow: hidden; +} + +.v-window-modalitycurtain { + top: 0; + left: 0; + background: #999999; + opacity: 0.5; + position: fixed; + width: 100%; + height: 100%; + filter: alpha(opacity = 50); +} + +.v-ie6 .v-window-modalitycurtain { + position: absolute; + top: expression(document.documentElement.scrollTop + "px"); +} + +.v-ie6 .v-window { + width: 0; +} + +.v-shadow-window { + position: absolute; +} + +.v-shadow-window .top-left { + position: absolute; + overflow: hidden; + top: -10px; + left: -15px; + width: 28px; + height: 28px; + background: transparent url(../base/window/img/shadow/top-left.png); +} + +.v-shadow-window .top { + position: absolute; + overflow: hidden; + top: -10px; + left: 13px; + height: 28px; + right: 13px; + background: transparent url(../base/window/img/shadow/top.png); +} + +.v-shadow-window .top-right { + position: absolute; + overflow: hidden; + top: -10px; + right: -15px; + width: 28px; + height: 28px; + background: transparent url(../base/window/img/shadow/top-right.png); +} + +.v-shadow-window .left { + position: absolute; + overflow: hidden; + top: 18px; + left: -15px; + width: 28px; + bottom: 10px; + background: transparent url(../base/window/img/shadow/left.png); +} + +.v-shadow-window .center { + position: absolute; + overflow: hidden; + top: 18px; + left: 13px; + bottom: 10px; + right: 13px; + background: transparent url(../base/window/img/shadow/center.png); +} + +.v-shadow-window .right { + position: absolute; + overflow: hidden; + top: 18px; + right: -15px; + width: 28px; + bottom: 10px; + background: transparent url(../base/window/img/shadow/right.png); +} + +.v-shadow-window .bottom-left { + position: absolute; + overflow: hidden; + bottom: -18px; + left: -15px; + width: 28px; + height: 28px; + background: transparent url(../base/window/img/shadow/bottom-left.png); +} + +.v-shadow-window .bottom { + position: absolute; + overflow: hidden; + bottom: -18px; + left: 13px; + right: 13px; + height: 28px; + background: transparent url(../base/window/img/shadow/bottom.png); +} + +.v-shadow-window .bottom-right { + position: absolute; + overflow: hidden; + bottom: -18px; + right: -15px; + width: 28px; + height: 28px; + background: transparent url(../base/window/img/shadow/bottom-right.png); +} + +.v-ie6 .v-shadow-window * { + display: none; +} + +.v-accordion { + border: 1px solid #bebebe; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + overflow: hidden; +} + +.v-accordion-item { + background-color: #ffffff; +} + +.v-accordion-item-caption { + height: 19px; + background: #e4e4e4 repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -0px; + font-size: 11px; + line-height: normal; + border-top: 1px solid #bebebe; + text-shadow: #ffffff 0 1px 0; +} + +.v-accordion-item-first .v-accordion-item-caption { + border-top: none; +} + +.v-accordion-item-caption .v-caption { + padding: 3px 0 5px 10px; +} + +.v-ie .v-accordion-item-caption .v-caption { + padding: 2px 0 6px 10px; +} + +.v-accordion-item-open .v-accordion-item-caption { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -19px; + border-bottom: 1px solid #bbbbbb; +} + +.v-accordion-item-caption .v-icon { + margin-top: -1px; +} + +.v-ie .v-accordion-item-caption .v-icon { + vertical-align: top; +} + +.v-accordion-borderless { + border: none; + border-radius: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; +} + +.v-button:focus { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -0px; + outline: none; +} + +.v-button:focus .v-button-wrap { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -26px; + outline: none; +} + +.v-button:active, .v-button.v-pressed { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -52px; + outline: none; +} + +.v-button:active .v-button-wrap, .v-button.v-pressed .v-button-wrap { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -78px; + outline: none; +} + +.v-button, .v-disabled.v-button { + height: 26px; + padding: 0 0 0 6px; + background-color: transparent; + background-repeat: no-repeat; + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -104px; + border: none; + cursor: default; +} + +.v-button-wrap, .v-disabled.v-button .v-button-wrap { + display: block; + height: 22px; + padding: 4px 15px 0 9px; + background-color: transparent; + background-repeat: no-repeat; + background-position: right top; + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -130px; +} + +.v-button-caption { + color: #222222; + text-shadow: #ffffff 0 1px 0; + font-weight: bold; + font-size: 11px; + line-height: 16px; +} + +.black .v-button:focus { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -0px; +} + +.black .v-button:focus .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -26px; +} + +.black .v-button:active, .black .v-button.v-pressed { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -52px; +} + +.black .v-button:active .v-button-wrap, .black .v-button.v-pressed .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -78px; +} + +.black .v-button, .black .v-disabled.v-button { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -104px; +} + +.black .v-button-wrap, .black .v-disabled.v-button .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -130px; +} + +.black .v-button-caption { + color: #c9ccce; + text-shadow: #121314 0 -1px 0; +} + +.v-button-primary:focus { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -156px; +} + +.v-button-primary:focus .v-button-wrap { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -182px; +} + +.v-button-primary:active, .v-button-primary.v-pressed { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -208px; +} + +.v-button-primary:active .v-button-wrap, .v-button-primary.v-pressed .v-button-wrap { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -234px; +} + +.v-button-primary, .v-disabled.v-button-primary { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -260px; +} + +.v-button-primary .v-button-wrap, .v-disabled.v-button-primary .v-button-wrap { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -286px; +} + +.black .v-button-primary:focus { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -156px; +} + +.black .v-button-primary:focus .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -182px; + color: #eaf4fb; +} + +.black .v-button-primary:active, .black .v-button-primary.v-pressed { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -208px; +} + +.black .v-button-primary:active .v-button-wrap, .black .v-button-primary.v-pressed .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -234px; +} + +.black .v-button-primary, .black .v-disabled.v-button-primary { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -260px; +} + +.black .v-button-primary .v-button-wrap, .black .v-disabled.v-button-primary .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -286px; +} + +.v-button-small:focus { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -312px; +} + +.v-button-small:focus .v-button-wrap { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -332px; +} + +.v-button-small:active, .v-button-small.v-pressed { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -352px; +} + +.v-button-small:active .v-button-wrap, .v-button-small.v-pressed .v-button-wrap { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -372px; +} + +.v-button-small, .v-disabled.v-button-small { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: left -392px; + height: 20px; +} + +.v-button-small .v-button-wrap, .v-disabled.v-button-small .v-button-wrap { + background-image: url(button/img/button-sprites.png); + -background-image: url(button/img/button-sprites-ie6.png); + background-position: right -412px; + height: 19px; + padding: 1px 14px 0 8px; +} + +.v-button-small .v-button-caption { + font-weight: normal; +} + +.black .v-button-small:focus { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -312px; +} + +.black .v-button-small:focus .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -332px; +} + +.black .v-button-small:active, .black .v-button-small.v-pressed { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -352px; +} + +.black .v-button-small:active .v-button-wrap, .black .v-button-small.v-pressed .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -372px; +} + +.black .v-button-small, .black .v-disabled.v-button-small { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: left -392px; +} + +.black .v-button-small .v-button-wrap, .black .v-disabled.v-button-small .v-button-wrap { + background-image: url(button/img/black-button-sprites.png); + -background-image: url(button/img/black-button-sprites-ie6.png); + background-position: right -412px; +} + +.v-button.v-button-link, .v-button.v-button-link:focus, .v-button.v-button-link:active, .v-button-link.v-pressed, .v-disabled.v-button.v-button-link, .v-button.v-button-link .v-button-wrap, .v-button.v-button-link:focus .v-button-wrap, .v-button.v-button-link:active .v-button-wrap, .v-button-link.v-pressed .v-button-wrap, .v-disabled.v-button.v-button-link .v-button-wrap { + background: transparent; + height: auto; + padding: 0; + cursor: pointer; + line-height: inherit; +} + +.v-button.v-button-link.v-disabled, .v-button.v-button-link.v-disabled .v-button-wrap { + cursor: default; +} + +.v-button-link .v-button-caption, .v-nativebutton-link .v-nativebutton-caption { + line-height: inherit; + font-weight: normal; + color: #1b699f; + font-size: 12px; + text-shadow: none; +} + +.v-button-link:focus .v-button-caption, .v-nativebutton-link:focus .v-nativebutton-caption { + outline: 1px dotted #1b699f; +} + +.v-ff2 .v-button .v-button-caption { + display: -moz-inline-box; + padding-top: 6px; + height: 20px; +} + +.v-ie6 .v-nativebutton-link, .v-ie7 .v-nativebutton-link, .v-ie8 .v-nativebutton-link { + padding: 0; + text-align: left; +} + +.v-ie6 .v-button { + border: 1px solid #b3b3b3; + border-bottom-color: #9a9a9a; + background: #d8d8d8 url(button/img/right.png) no-repeat 0 -1px; + padding: 0 15px; + height: 23px; +} + +.v-ie6 .v-button .v-button-wrap { + background: transparent; + height: 20px; + padding: 3px 0 0; + display: inline; + zoom: 1; +} + +.v-ie6 .v-button-primary { + background-image: url(button/img/primary-right.png); +} + +.v-ie6 .v-button-small { + background-image: url(button/img/small-right.png); + height: 17px; +} + +.v-ie6 .v-button-small .v-button-wrap { + height: 17px; + padding: 0; +} + +.v-ie6 .v-button.v-pressed { + background: transparent url(button/img/right-pressed.png) no-repeat 0 -1px; +} + +.v-ie6 .blue .v-button { + border-color: #84949c; + border-top-color: #83939b; + border-bottom-color: #888d91; +} + +.v-ie6 .black .v-button { + border: 1px solid #0d0e0f; + background: #202224 url(button/img/black/right.png) no-repeat 0 -1px; + color: #c9ccce; +} + +.v-ie6 .black .v-button-primary { + background-image: url(button/img/black/primary-right.png); +} + +.v-ie6 .black .v-button-small { + background-image: url(button/img/black/small-right.png); +} + +.v-ie6 .black .v-button.v-pressed { + background-image: url(button/img/black/right-pressed.png); +} + +.v-ie6 .v-button-link, .v-ie6 .black .v-button-link { + background: transparent; + border: none; + height: auto; + line-height: normal; + padding: 0; +} + +.v-ie6 .v-button-link .v-button-wrap, .v-ie6 .black .v-button-link .v-button-wrap { + padding: 0; + height: auto; +} + +.v-generated-body, .v-app { + background: #f5f5f5; +} + +.v-app, .v-window, .v-popupview-popup, .v-tooltip, .v-app input, .v-app select, .v-app button, .v-app textarea, .v-window input, .v-window select, .v-window button, .v-window textarea, .v-popupview-popup input, .v-popupview-popup select, .v-popupview-popup button, .v-popupview-popup textarea, .v-filterselect-suggestpopup, .v-datefield-popup, .v-contextmenu, .v-Notification, .v-menubar-submenu, .v-drag-element, .v-table-header-drag { + font-family: Arial, Helvetica, Tahoma, Verdana, sans-serif; + font-size: 12px; + line-height: normal; + color: #222222; +} + +.v-app .black, .v-window-black, .v-window .black, .v-popupview-popup .black { + color: #c9ccce; + text-shadow: #000000 0 0 1px; +} + +.v-errorindicator { + width: 13px; + height: 16px; + background: transparent url(common/icons/error.png) no-repeat 50%; +} + +.v-ie6 .v-errorindicator { + background-image: url(common/icons/error-ie6.png); +} + +.v-tooltip { + background-color: #fffcdd; + border: 1px solid #b8b295; + font-size: 11px; + color: #222222; +} + +.v-tooltip-text { + padding: 2px 4px; +} + +.v-tooltip .v-errormessage { + padding: 3px 4px; + background: #ffecc6; + color: #b74100; + border: none; + border-top: 1px solid #fff3dc; +} + +.v-tooltip .v-errormessage h2 { + font-size: 16px; + font-weight: normal; + color: #ab3101; + margin: 2px 0 8px 0; +} + +.v-tooltip .v-errormessage h3 { + font-size: 13px; + font-weight: bold; + margin: 1px 0 4px 0; +} + +.v-contextmenu { + background: #f8f8f9; + border: none; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -o-border-radius: 3px; + overflow: hidden; + padding: 4px 0; +} + +.v-contextmenu .gwt-MenuItem { + padding: 1px 12px 1px 8px; + height: 16px; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + cursor: default; +} + +.v-contextmenu .gwt-MenuItem .v-icon { + margin-right: 3px; +} + +.v-contextmenu .gwt-MenuItem-selected { + background: transparent repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -38px; + color: #ffffff; + text-shadow: #3b5a7a 0 1px 0; +} + +.v-ie .v-contextmenu .gwt-MenuItem-selected { + background-image: url(common/img/sel-bg.png); + background-position: left top; +} + +.v-contextmenu .gwt-MenuItem-selected div { + background: transparent; + cursor: default; +} + +.portlet .v-app { + background: transparent; +} + +.portlet .v-app .v-radiobutton input, .portlet .v-window .v-radiobutton input, .portlet .v-popupview-popup .v-radiobutton input, .portlet .v-app .v-checkbox input, .portlet .v-window .v-checkbox input, .portlet .v-popupview-popup .v-checkbox input { + margin-right: 3px; + background: transparent; +} + +input.v-textfield-readonly:focus { + background-color: transparent; +} + +.v-datefield-calendarpanel { + border-collapse: collapse; + margin: 0; + padding: 0; + height: auto !important; +} + +.v-datefield-year .v-datefield-calendarpanel-prevmonth, .v-datefield-year .v-datefield-calendarpanel-nextmonth { + display: none; +} + +.v-datefield-calendarpanel td { + vertical-align: top; +} + +td.v-datefield-calendarpanel-month { + height: 23px; + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -58px; +} + +span.v-datefield-calendarpanel-month { + display: block; + text-align: center; + height: 16px; + padding: 3px 10px 0 10px; + border-left: 1px solid #efefef; + border-right: 1px solid #d8d8d8; + text-shadow: #ffffff 0 1px 0; + overflow: hidden; + margin-top: 1px; +} + +.v-datefield-year .v-datefield-calendarpanel-month { + width: 35px; +} + +.v-datefield-month .v-datefield-calendarpanel-month, .v-datefield-day .v-datefield-calendarpanel-month, .v-datefield-full .v-datefield-calendarpanel-month { + width: 124px; +} + +.v-datefield-month, .v-datefield-day, .v-datefield-full { + min-width: 240px; +} + +.v-ff2 .v-datefield-month, .v-ff2 .v-datefield-day, .v-ff2 .v-datefield-full { + min-width: 254px; +} + +.v-datefield-popupcalendar, .v-ff2 .v-datefield-popupcalendar { + min-width: 0; +} + +.v-datefield-year .v-datefield-calendarpanel { + width: 100px; +} + +td.v-datefield-calendarpanel-prevyear { + text-align: right; +} + +td.v-datefield-calendarpanel-nextyear { + text-align: left; +} + +.v-datefield-calendarpanel-prevyear button, .v-datefield-calendarpanel-nextyear button, .v-datefield-calendarpanel-prevmonth button, .v-datefield-calendarpanel-nextmonth button { + width: 24px; + height: 23px; + border: none; + background: transparent; + background-repeat: no-repeat; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -81px; + overflow: hidden; + padding: 0; + text-indent: -9999px; + outline: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.v-ie .v-datefield-calendarpanel-prevyear button, .v-ie .v-datefield-calendarpanel-nextyear button, .v-ie .v-datefield-calendarpanel-prevmonth button, .v-ie .v-datefield-calendarpanel-nextmonth button { + text-indent: 0; + font-size: 1px; +} + +.v-datefield-calendarpanel-nextyear button { + background-position: left top; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -104px; +} + +.v-datefield-calendarpanel-prevyear button:active, .v-ie .v-datefield-calendarpanel-prevyear button.v-pressed { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -127px; +} + +.v-datefield-calendarpanel-nextyear button:active, .v-ie .v-datefield-calendarpanel-nextyear button.v-pressed { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -150px; +} + +.v-datefield-calendarpanel-prevmonth, .v-datefield-calendarpanel-nextmonth { + width: 24px; + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -173px; +} + +.v-datefield-calendarpanel-prevmonth button, .v-datefield-calendarpanel-nextmonth button { + width: 100%; + height: 21px; + border-left: 1px solid #efefef; + border-right: 1px solid #d8d8d8; + background: transparent; + background-position: center top; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -196px; + min-width: 24px; + margin-top: 1px; +} + +.v-ie .v-datefield-calendarpanel-prevmonth button, .v-ie .v-datefield-calendarpanel-nextmonth button { + border: none; +} + +.v-ie6 .v-datefield-calendarpanel-prevmonth button, .v-ie6 .v-datefield-calendarpanel-nextmonth button { + width: 24px; +} + +.v-datefield-calendarpanel-nextmonth button { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -217px; +} + +.v-datefield-calendarpanel-prevmonth button:active, .v-ie .v-datefield-calendarpanel-prevmonth button.v-pressed { + background-position: center top; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -238px; +} + +.v-datefield-calendarpanel-nextmonth button:active, .v-ie .v-datefield-calendarpanel-nextmonth button.v-pressed { + background-position: center top; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -259px; +} + +.v-datefield-calendarpanel-body, .v-datefield-calendarpanel-time { + text-align: center; + vertical-align: top; +} + +.v-datefield-calendarpanel-body table { + border-collapse: collapse; + margin: 0; + padding: 0; + width: 220px; + margin: 0 auto; +} + +.v-datefield-calendarpanel-weekdays td { + width: 14.2%; + overflow: hidden; + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -280px; + font-size: 10px; + line-height: normal; + text-transform: uppercase; + color: #eaeff1; + text-shadow: #3b4651 0 -1px 0; + vertical-align: top; +} + +.v-datefield-calendarpanel-weeknumbers td { + width: 12.4%; +} + +.v-datefield-calendarpanel-weekdays strong { + display: block; + text-align: right; + padding: 1px 5px 0 0; + height: 14px; + border-top: 1px solid #596775; +} + +.v-datefield-calendarpanel-weekdays .v-first { + background-repeat: no-repeat; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -299px; +} + +.v-datefield-calendarpanel-weekdays .v-last { + background-repeat: no-repeat; + background-position: right top; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -318px; +} + +.v-ie .v-datefield-calendarpanel-weekdays td { + background: url(datefield/img/weekday-bg.png) repeat-x; + background-position: left top; +} + +.v-ie .v-datefield-calendarpanel .v-first { + background: url(datefield/img/weekday-first.png) no-repeat; +} + +.v-ie .v-datefield-calendarpanel .v-last { + background: url(datefield/img/weekday-last.png) no-repeat right top; +} + +.v-datefield-calendarpanel-body td { + text-align: right; + height: 19px; +} + +.v-datefield-calendarpanel-day, .v-datefield-calendarpanel-weeknumber, .v-datefield-calendarpanel-day-today { + padding: 2px 5px 2px 0; + display: block; + margin: 1px 0 0 5px; +} + +.v-datefield-calendarpanel-weeknumber { + margin: 0; + padding-top: 4px; + padding-bottom: 3px; +} + +.v-datefield-calendarpanel-day-today { + color: #4095d1; + border: none; +} + +.v-datefield-calendarpanel-day-selected { + background: #507ba3; + color: #ffffff; + text-shadow: #3b5b79 0 1px 0; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +.v-datefield-calendarpanel-time select { + padding: 0; + font-size: 11px; +} + +.v-datefield-popup { + background: #f8f8f9; + padding: 8px 4px; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} + +.v-sa .v-datefield-popup, .v-ff3 .v-datefield-popup, .v-op .v-datefield-popup { + background: rgba(255, 255, 255, 0.95); +} + +.v-datefield-year .v-datefield-textfield { + width: 4em; +} + +.v-datefield-month .v-datefield-textfield { + width: 5em; +} + +.v-datefield-day .v-datefield-textfield { + width: 5.5em; +} + +.v-datefield-full .v-datefield-textfield { + width: 12em; +} + +.v-datefield-popupcalendar input.v-datefield-textfield { + border-right-width: 0; + -moz-border-radius-topright: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-top-right-radius: 0; + -webkit-border-bottom-right-radius: 0; + height: 14px; +} + +.v-datefield.v-readonly input.v-datefield-textfield { + border-right-width: 1px; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +.v-datefield-prompt .v-datefield-textfield { + color: #999999; + font-style: normal; +} + +.v-datefield-popupcalendar .v-datefield-button { + width: 24px; + height: 23px; + background: transparent; + border: none; + padding: 0; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -337px; + cursor: pointer; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.v-datefield-popupcalendar .v-datefield-button:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -360px; +} + +.black .v-datefield-popupcalendar .v-datefield-button { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -0px; +} + +.black .v-datefield-popupcalendar .v-datefield-button:active { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -23px; +} + +.v-ie6 .v-datefield-popupcalendar .v-datefield-button { + margin-top: 1px; +} + +.black td.v-datefield-calendarpanel-month { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -46px; + height: 21px; +} + +.black span.v-datefield-calendarpanel-month { + border-left: 1px solid #333638; + border-right: 1px solid #232527; + color: #c9ccce; + text-shadow: #000000 0 -1px 0; + padding: 4px 10px 1px 10px; + margin-top: 0; +} + +.black .v-datefield-calendarpanel-prevyear button, .black .v-datefield-calendarpanel-nextyear button, .black .v-datefield-calendarpanel-prevmonth button, .black .v-datefield-calendarpanel-nextmonth button { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -67px; + height: 21px; +} + +.black .v-datefield-calendarpanel-nextyear button { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -88px; +} + +.black .v-datefield-calendarpanel-prevyear button:active, .v-ie .black .v-datefield-calendarpanel-prevyear button.v-pressed { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -109px; +} + +.black .v-datefield-calendarpanel-nextyear button:active, .v-ie .black .v-datefield-calendarpanel-nextyear button.v-pressed { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -130px; +} + +.black .v-datefield-calendarpanel-prevmonth, .black .v-datefield-calendarpanel-nextmonth { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -151px; +} + +.black .v-datefield-calendarpanel-prevmonth button, .black .v-datefield-calendarpanel-nextmonth button { + border-left: 1px solid #333638; + border-right: 1px solid #232527; + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: center -172px; + margin-top: 0; +} + +.black .v-datefield-calendarpanel-nextmonth button { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: center -193px; +} + +.black .v-datefield-calendarpanel-prevmonth button:active, .v-ie .black .v-datefield-calendarpanel-prevmonth button.v-pressed { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: center -214px; +} + +.black .v-datefield-calendarpanel-nextmonth button:active, .v-ie .black .v-datefield-calendarpanel-nextmonth button.v-pressed { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: center -235px; +} + +.v-ie .black .v-datefield-calendarpanel-prevmonth button, .v-ie .black .v-datefield-calendarpanel-nextmonth button { + border: none; +} + +.black .v-datefield-calendarpanel-weekdays td { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -256px; + color: #0a0b0b; + text-shadow: #5a5c5e 0 1px 0; +} + +.black .v-datefield-calendarpanel-weekdays strong { + border-top-color: #1b1c1d; +} + +.black .v-datefield-calendarpanel .v-first { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -275px; +} + +.black .v-datefield-calendarpanel .v-last { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: right -294px; +} + +.black .v-datefield-prompt .v-datefield-textfield { + color: #5f6366; +} + +.v-formlayout-errorcell { + width: 13px; +} + +.v-formlayout-cell .v-errorindicator { + width: 13px; + height: 16px; + background: transparent url(common/icons/error.png) no-repeat 50%; +} + +.v-ie6 .v-formlayout-cell .v-errorindicator { + background-image: url(common/icons/error-ie6.png); +} + +.v-formlayout-captioncell { + text-align: right; + white-space: nowrap; +} + +.v-formlayout-spacing .v-formlayout-row .v-formlayout-captioncell, .v-formlayout-spacing .v-formlayout-row .v-formlayout-contentcell, .v-formlayout-spacing .v-formlayout-row .v-formlayout-errorcell { + padding-top: 8px; +} + +.v-formlayout-margin-top .v-formlayout-firstrow .v-formlayout-captioncell, .v-formlayout-margin-top .v-formlayout-firstrow .v-formlayout-contentcell, .v-formlayout-margin-top .v-formlayout-firstrow .v-formlayout-errorcell { + padding-top: 15px; +} + +.v-formlayout-margin-bottom .v-formlayout-lastrow .v-formlayout-captioncell, .v-formlayout-margin-bottom .v-formlayout-lastrow .v-formlayout-contentcell, .v-formlayout-margin-bottom .v-formlayout-lastrow .v-formlayout-errorcell { + padding-bottom: 15px; +} + +.v-formlayout-margin-left .v-formlayout-captioncell { + padding-left: 18px; +} + +.v-formlayout-margin-right .v-formlayout-contentcell { + padding-right: 18px; +} + +.v-form-errormessage { + background: transparent url(common/icons/error.png) no-repeat 3px 2px; + padding-left: 20px; + margin-bottom: 5px; + margin-top: 5px; + min-height: 20px; +} + +.v-ie6 .v-form-errormessage { + height: 20px; + background-image: url(common/icons/error-ie6.png); +} + +.v-form fieldset { + border: none; + border-top: 1px solid #babfc0; +} + +.v-form-nocaption fieldset { + border: none; +} + +.v-form-nocaption legend { + display: none; +} + +.v-form legend { + margin: 0 0 0 20px; + padding: 0 5px; + font-weight: bold; + color: #222222; +} + +.black .v-form legend { + color: #e3e6e8; +} + +.v-label { + line-height: 18px; +} + +.white .black, .blue .black { + color: #c9ccce; + text-shadow: 0 0 1px #000000; +} + +.black .v-label-h1, .black .v-label-h2, .black .v-caption-h1, .black .v-caption-h2, .white .black .v-label-h1, .white .black .v-label-h2, .white .black .v-caption-h1, .white .black .v-caption-h2, .blue .black .v-label-h1, .blue .black .v-label-h2, .blue .black .v-caption-h1, .blue .black .v-caption-h2 { + color: #ffffff; + text-shadow: rgba(0, 0, 0, 0.8) 0 2px 2px; +} + +.black .v-label-light, .white .black .v-label-light { + color: #72787c; +} + +.black .v-label hr, .white .black .v-label hr { + background: #0c0d0e; + color: #0c0d0e; + border-bottom-color: #292b2e; +} + +.v-app .white, .v-window .white, .v-app .blue, .v-window .blue { + color: #222222; + text-shadow: none; +} + +.blue .v-label-h1, .blue .v-label-h2, .blue .v-caption-h1, .blue .v-caption-h2, .white .blue .v-label-h1, .white .blue .v-label-h2, .white .blue .v-caption-h1, .white .blue .v-caption-h2 { + color: #ffffff; + text-shadow: rgba(0, 0, 0, 0.3) 0 1px 1px; +} + +.blue .v-label-light, .white .blue .v-label-light { + color: #6e7c83; +} + +.blue .v-label hr, .white .blue .v-label hr { + background: #a3bcc9; + color: #a3bcc9; + border-bottom-color: #cfe2eb; +} + +.v-label-h1, .v-label-h2, .v-caption-h1, .v-caption-h2, .white .v-label-h1, .white .v-label-h2, .white .v-caption-h1, .white .v-caption-h2 { + font-family: Helvetica, Arial, "Lucida Grande", Geneva, Tahoma, Verdana, sans-serif; + font-size: 24px; + line-height: 30px; + font-weight: bold; + color: #44698b; + letter-spacing: -0.02em; + text-shadow: #ffffff 0 -1px 1px; +} + +.v-label-h2, .v-caption-h2, .white .v-label-h2, .white .v-caption-h2 { + font-size: 16px; + line-height: 22px; +} + +.v-label-light, .white .v-label-light { + font-size: 11px; + line-height: 13px; + color: #707070; +} + +.v-label hr, .white .v-label hr { + height: 2px; + overflow: hidden; + background: #dcdcdc; + color: #dcdcdc; + border: none; + border-bottom: 1px solid #ffffff; +} + +.v-sa .v-label hr, .v-ie8 .v-label hr { + height: 1px; +} + +.v-table .v-label { + line-height: normal; +} + +.v-orderedlayout-margin-top, .v-horizontallayout-margin-top, .v-verticallayout-margin-top { + padding-top: 18px; +} + +.v-orderedlayout-margin-right, .v-horizontallayout-margin-right, .v-verticallayout-margin-right { + padding-right: 18px; +} + +.v-orderedlayout-margin-bottom, .v-horizontallayout-margin-bottom, .v-verticallayout-margin-bottom { + padding-bottom: 18px; +} + +.v-orderedlayout-margin-left, .v-horizontallayout-margin-left, .v-verticallayout-margin-left { + padding-left: 18px; +} + +.v-orderedlayout-spacing-on, .v-horizontallayout-spacing-on, .v-verticallayout-spacing-on { + padding-top: 7px; + padding-left: 6px; +} + +.v-gridlayout-margin-top { + padding-top: 24px; +} + +.v-gridlayout-margin-bottom { + padding-bottom: 24px; +} + +.v-gridlayout-margin-left { + padding-left: 24px; +} + +.v-gridlayout-margin-right { + padding-right: 24px; +} + +.v-gridlayout-spacing-on { + padding-left: 12px; + padding-top: 12px; +} + +.v-verticallayout-blue, .v-horizontallayout-blue, .v-orderedlayout-blue, .v-gridlayout-blue, .v-csslayout-blue, .v-formlayout-blue, .v-splitpanel-vertical-blue, .v-splitpanel-horizontal-blue { + background-color: #bcd3de; +} + +.v-panel-content > div.blue { + background-color: #bcd3de; +} + +.v-verticallayout-white, .v-horizontallayout-white, .v-orderedlayout-white, .v-gridlayout-white, .v-csslayout-white, .v-formlayout-white, .v-splitpanel-vertical-white, .v-splitpanel-horizontal-white { + background-color: #ffffff; + color: #222222; +} + +.v-panel-content > div.white { + background-color: #ffffff; + color: #222222; +} + +.v-verticallayout-black, .v-horizontallayout-black, .v-orderedlayout-black, .v-gridlayout-black, .v-csslayout-black, .v-formlayout-black, .v-splitpanel-vertical-black, .v-splitpanel-horizontal-black { + background: #1e2022 url(layouts/img/black-bg.png) repeat-x; +} + +.v-panel-content > div.black { + background: #1e2022 url(layouts/img/black-bg.png) repeat-x; +} + +.v-link a:link span { + color: #1b699f; +} + +.v-link a:visited span { + color: #5c7485; +} + +.v-link a:hover span { + color: #2483c4; +} + +.v-menubar { + height: 23px; + background: #323336 repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -383px; + color: #d1d3d6; + text-shadow: rgba(0, 0, 0, 0.9) 0 1px 0; + padding: 0 8px; +} + +.v-menubar .v-menubar-menuitem { + padding: 3px 8px; + height: 17px; + line-height: 16px; +} + +.v-menubar .v-menubar-menuitem:hover { + color: #ffffff; +} + +.v-menubar-submenu { + background: #f8f8f9; + border: none; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -o-border-radius: 3px; + overflow: hidden; + padding: 4px 0; +} + +.v-menubar-submenu .v-menubar-menuitem { + padding: 1px 26px 1px 10px; + line-height: 16px; +} + +.v-menubar-submenu .v-menubar-menuitem-caption .v-icon { + vertical-align: middle; +} + +.v-menubar .v-menubar-menuitem-selected, .v-menubar-submenu .v-menubar-menuitem-selected { + background: #4d749f repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -406px; + color: #ffffff; + text-shadow: 0 1px 0 #3b5a7a; +} + +.v-menubar .v-menubar-menuitem-selected { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -426px; +} + +.v-menubar-submenu .v-menubar-submenu-indicator { + background: transparent url(menubar/img/submenu-icon.png) no-repeat right 70%; + width: 26px; + height: 16px; + text-indent: -9999px; +} + +.v-menubar-submenu .v-menubar-menuitem-selected .v-menubar-submenu-indicator { + background-image: url(menubar/img/submenu-icon-hover.png); +} + +.v-menubar-submenu-check-column .v-menubar-menuitem { + padding-left: 6px; +} + +.v-menubar-submenu-check-column .v-menubar-menuitem-caption { + padding-left: 18px; +} + +.v-menubar-submenu .v-menubar-menuitem-checked .v-menubar-menuitem-caption { + background: transparent url(menubar/img/checked.png) no-repeat left; +} + +.v-menubar-submenu .v-menubar-menuitem-unchecked .v-menubar-menuitem-caption { + background: transparent url(menubar/img/unchecked.png) no-repeat left; +} + +.v-menubar-submenu .v-menubar-menuitem-selected-checked .v-menubar-menuitem-caption { + background: transparent url(menubar/img/checked-selected.png) no-repeat left; +} + +.v-menubar-submenu .v-menubar-menuitem-selected-unchecked .v-menubar-menuitem-caption { + background: transparent url(menubar/img/unchecked-selected.png) no-repeat left; +} + +.v-Notification { + color: #ffffff; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + font-size: 100%; + background: #c8ccd0; + font-weight: bold; +} + +.v-ie9 .v-Notification H1 { + font-weight: bold; +} + +.v-Notification p { + line-height: 1.3; +} + +.v-Notification-warning { + background: #fdf3b5; + color: #ca9a61; + border: 3px solid #fee3af; +} + +.v-Notification-error { + background: #b40000 url(notification/img/error-close.png) no-repeat right top; + border: 3px solid #ca3030; +} + +.v-Notification-tray { + margin: 0 5px 5px 0; + background: #3b3c3e; + border: 2px solid #585b5c; + padding: 0.8em 0.9em; +} + +.v-Notification-tray h1 { + font-size: 14px; + line-height: 18px; +} + +.v-Notification-tray p { + font-size: 12px; + font-weight: normal; +} + +.v-Notification-system { + background-color: #b40000; +} + +.blue .v-panel-caption, .blue .v-panel-nocaption, .blue .v-panel-content { + border-color: #a8bcc5; +} + +.v-panel-caption, .v-panel-nocaption, .white .v-panel-caption, .white .v-panel-nocaption { + border-bottom: 1px solid #e5e5e5; + line-height: 16px; +} + +.v-webkit .v-panel-caption, .v-webkit .v-panel-nocaption, .v-gecko .v-panel-caption, .v-gecko .v-panel-nocaption, .v-ie9 .v-panel-caption, .v-ie9 .v-panel-nocaption { + border-bottom-color: rgba(0, 0, 0, 0.08); +} + +.v-panel-caption { + padding-bottom: 2px; +} + +.v-panel-content, .white .v-panel-content { + border: 1px solid #dcdcdc; + border-bottom: none; + border-top: none; +} + +.v-webkit .v-panel-content, .v-gecko .v-panel-content, .v-ie9 .v-panel-content { + border-top-color: rgba(0, 0, 0, 0.07); +} + +.v-panel-content > div { + background: #ffffff; + min-height: 100%; +} + +.v-ie6 .v-panel-content { + background: #ffffff; +} + +.blue .v-panel-deco { + border-color: #92a3ac; + background: #adc2cd; +} + +.v-panel-deco, .white .v-panel-deco { + height: 1px; + border-top: 1px solid #bebebe; + background: #e2e2e2; + overflow: hidden; +} + +.v-wekit .v-panel-deco, .v-gecko .v-panel-deco, .v-ie9 .v-panel-deco { + border-top-color: rgba(0, 0, 0, 0.1); + background: rgba(0, 0, 0, 0.08); +} + +.v-panel-caption .v-errorindicator { + height: 16px; + width: 13px; + background: url(common/icons/error.png) no-repeat 50%; + display: inline; + display: inline-block; + vertical-align: middle; +} + +.v-ie6 .v-panel-caption .v-errorindicator { + background-image: url(common/icons/error-ie6.png); +} + +.v-panel-light .v-panel-caption-light, .v-panel-light .v-panel-nocaption-light { + border: none; +} + +.v-panel-light .v-panel-content-light { + border: none; +} + +.v-panel-content-light > div { + background: transparent; +} + +.v-ie6 .v-panel-content-light { + background: transparent; +} + +.v-panel-light .v-panel-deco-light { + height: 0; + border: none; +} + +.v-popupview { + color: #1b699f; +} + +.v-popupview:hover { + color: #2483c4; +} + +.v-popupview-popup { + background: #ffffff; + padding: 3px; +} + +.v-progressindicator-wrapper { + background: #dfe2e4 url(progressindicator/img/base.gif) repeat-x; + border: 1px solid #bfbfbf; +} + +.v-disabled .v-progressindicator-wrapper { + background-image: url(progressindicator/img/disabled.gif); +} + +.v-progressindicator-indicator { + background: #f7f9f9 url(progressindicator/img/progress.png); +} + +.v-filterselect { + height: 24px; + background-repeat: no-repeat; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -450px; + padding-left: 2px; +} + +.v-ie6 .v-filterselect { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -475px; +} + +.v-app .v-filterselect-input, .v-window .v-filterselect-input, .v-popupview-popup .v-filterselect-input { + background: transparent repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -499px; + border: none; + height: 16px; +} + +.v-app input.v-filterselect-input, .v-window input.v-filterselect-input, .v-popupview-popup input.v-filterselect-input { + padding: 4px 0 4px 2px; +} + +.v-filterselect-prompt .v-filterselect-input { + font-style: normal; +} + +.v-filterselect-input:focus { + outline: none; +} + +.v-filterselect-focus { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -524px; +} + +.v-ie6 .v-filterselect-focus { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -549px; +} + +.v-filterselect-focus .v-filterselect-input { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -573px; +} + +.v-filterselect-button { + overflow: hidden; + width: 25px; + height: 24px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -597px; + cursor: default; +} + +.v-filterselect-button:hover { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -622px; +} + +.v-filterselect-button:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -646px; +} + +.v-filterselect-focus .v-filterselect-button { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -670px; +} + +.v-filterselect-focus .v-filterselect-button:hover { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -694px; +} + +.v-filterselect-focus .v-filterselect-button:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -718px; +} + +.v-disabled .v-filterselect-button:hover, .v-readonly .v-filterselect-button:hover { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -742px; +} + +.v-filterselect-suggestpopup { + background: #f8f8f9; + border: none; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -o-border-radius: 3px; + overflow: hidden; +} + +.v-filterselect-suggestmenu { + margin: 4px 0; +} + +.v-filterselect-suggestmenu .gwt-MenuItem { + padding: 1px 8px; + height: 16px; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + cursor: default; +} + +.v-ff .v-filterselect-suggestmenu .gwt-MenuItem { + height: 18px; +} + +.v-filterselect-suggestmenu .gwt-MenuItem .v-icon { + margin-right: 3px; +} + +.v-filterselect-suggestmenu .gwt-MenuItem-selected { + background: transparent repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -766px; + color: #ffffff; + text-shadow: #3b5a7a 0 1px 0; +} + +.v-filterselect-nextpage, .v-filterselect-nextpage-off, .v-filterselect-prevpage-off, .v-filterselect-prevpage { + height: 11px; + width: 100%; + background: transparent; + margin-bottom: -4px; +} + +.v-filterselect-nextpage, .v-filterselect-nextpage-off { + margin: -4px 0 0; +} + +.v-filterselect-nextpage:hover { + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -786px; +} + +.v-filterselect-prevpage:hover { + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -797px; +} + +.v-filterselect-nextpage:active { + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -808px; +} + +.v-filterselect-prevpage:active { + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -819px; +} + +.v-filterselect-nextpage-off span, .v-filterselect-prevpage-off span { + display: none; +} + +.v-filterselect-nextpage span, .v-filterselect-prevpage span { + display: block; + height: 11px; + width: 100%; + overflow: hidden; + text-indent: -99999px; + background: transparent no-repeat center 3px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -830px; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; +} + +.v-filterselect-prevpage span { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -841px; +} + +.v-filterselect-nextpage:hover span { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -852px; +} + +.v-filterselect-prevpage:hover span { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -863px; +} + +.v-filterselect-status { + text-shadow: #e9eaeb 0 1px 0; + font-size: 11px; + line-height: normal; + width: 100%; + padding: 3px 0; + height: 11px; + overflow: hidden; + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -874px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; +} + +.v-ie .v-filterselect-suggestmenu .gwt-MenuItem-selected { + background: transparent url(common/img/sel-bg.png) repeat-x; +} + +.v-ie .v-filterselect-nextpage:hover { + background: transparent url(select/img/page-down-hover.png) repeat-x; +} + +.v-ie .v-filterselect-prevpage:hover { + background: transparent url(select/img/page-up-hover.png) repeat-x; +} + +.v-ie .v-filterselect-prevpage span { + background: transparent url(select/img/arrow-up.png) no-repeat center 3px; +} + +.v-ie .v-filterselect-nextpage span { + background: transparent url(select/img/arrow-down.png) no-repeat center 3px; +} + +.v-ie .v-filterselect-prevpage:hover span { + background: transparent url(select/img/arrow-up-hover.png) no-repeat center 3px; +} + +.v-ie .v-filterselect-nextpage:hover span { + background: transparent url(select/img/arrow-down-hover.png) no-repeat center 3px; +} + +.v-ie .v-filterselect-status { + background: transparent url(select/img/status-bg.png) repeat-x; +} + +.v-filterselect .v-icon { + width: 16px; + position: relative; +} + +.v-filterselect .v-icon + .v-filterselect-input { + margin-left: -16px; + padding-left: 18px; +} + +.black .v-filterselect { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -310px; +} + +.v-ie6 .black .v-filterselect { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -334px; +} + +.v-app .black .v-filterselect-input, .v-window .black .v-filterselect-input, .v-window-black .v-filterselect-input, .v-popupview-popup .black .v-filterselect-input { + color: #c9ccce; + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -358px; +} + +.black .v-filterselect-focus { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -382px; +} + +.v-ie6 .black .v-filterselect-focus { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -406px; +} + +.black .v-filterselect-focus .v-filterselect-input { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -430px; +} + +.black .v-filterselect-button { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -454px; +} + +.black .v-filterselect-button:hover { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -478px; +} + +.black .v-filterselect-button:active { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -502px; +} + +.black .v-filterselect-focus .v-filterselect-button { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -526px; +} + +.black .v-filterselect-focus .v-filterselect-button:hover { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -550px; +} + +.black .v-filterselect-focus .v-filterselect-button:active { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -574px; +} + +.black .v-disabled .v-filterselect-button:hover, .black .v-readonly .v-filterselect-button:hover { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -598px; +} + +.black .v-filterselect-prompt .v-filterselect-input { + color: #5f6366; +} + +.black .v-select select, .black .v-select-twincol select { + border-color: #38393a; + border-top-color: #2c2d2e; + border-bottom-color: #3e3f3f; + background: #151717; + color: #c9ccce; +} + +.v-ie6 .v-select-twincol-buttons .v-button { + padding-left: 12px; + padding-right: 12px; +} + +.v-ie6 .v-filterselect.v-readonly, .v-ie6 .v-filterselect .v-filterselect-input-readonly { + background: transparent; +} + +.v-slider { + border-top: 1px solid #9a9c9e; + border-bottom: 1px solid #bdbfc1; + margin: 4px 0; +} + +.v-slider-base { + height: 1px; + background: #e0e2e2; + border-top: 1px solid #adb0b1; + border-left: 1px solid #a0a3a6; + border-right: 1px solid #a0a3a6; +} + +.v-slider-handle { + background: transparent; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -891px; + width: 10px; + height: 10px; + margin-top: -5px; +} + +.v-slider-handle-active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -901px; +} + +.v-slider-vertical { + width: 2px; + margin: 0 5px; + border: none; + border-left: 1px solid #9a9c9e; + border-right: 1px solid #bdbfc1; +} + +.v-slider-vertical .v-slider-base { + width: 2px; + border-left: 1px solid #adb0b1; + border-right: none; + border-top: 1px solid #adb0b1; + border-bottom: 1px solid #adb0b1; +} + +.v-slider-vertical .v-slider-handle { + width: 10px; + height: 10px; + margin-left: -5px; +} + +.v-splitpanel-hsplitter, .v-splitpanel-hsplitter-locked { + width: 7px; + background-repeat: repeat-y; + background-image: url(common/img/horizontal-sprites.png); + background-position: -0px top; +} + +.v-splitpanel-hsplitter div { + width: 7px; + height: 100%; + background: transparent; + background-repeat: no-repeat; + background-position: 50%; + background-image: url(common/img/horizontal-sprites.png); + background-position: -7px center; +} + +.v-splitpanel-vsplitter, .v-splitpanel-vsplitter-locked { + height: 7px; + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -911px; +} + +.v-splitpanel-vsplitter div { + height: 7px; + background: transparent; + background-repeat: no-repeat; + background-position: 50%; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: center -918px; +} + +.blue .v-splitpanel-hsplitter-small, .blue .v-splitpanel-hsplitter-small-locked { + background: #7c8a91; +} + +.black .v-splitpanel-hsplitter-small, .black .v-splitpanel-hsplitter-small-locked { + background: #4e5253; +} + +.v-splitpanel-hsplitter-small, .v-splitpanel-hsplitter-small-locked, .white .v-splitpanel-hsplitter-small, .white .v-splitpanel-hsplitter-small-locked { + width: 1px; + background: #949698; +} + +.v-splitpanel-vsplitter-small, .v-splitpanel-vsplitter-small-locked, .white .v-splitpanel-vsplitter-small, .white .v-splitpanel-vsplitter-small-locked { + height: 1px; + background: #949698; +} + +.v-splitpanel-hsplitter-small div { + width: 5px; + margin-left: -2px; + background: transparent; +} + +.v-splitpanel-vsplitter-small div { + height: 5px; + margin-top: -2px; + background: transparent; +} + +.blue .v-table-header-wrap { + border-color: #92a2aa; +} + +.blue .v-table-body { + border-color: #92a2aa; + border-top-color: #c2c3c4; +} + +.v-table-header-wrap, .white .v-table-header-wrap, .v-table-footer-wrap, .white .v-table-footer-wrap, .v-table-header-drag { + border-color: #c2c3c4; + background: transparent repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -925px; + height: 20px; + text-transform: uppercase; + font-size: 10px; + font-weight: bold; + color: #222222; + text-shadow: #f3f5f8 0 1px 0; + line-height: normal; +} + +.v-ie6 .v-table, .v-ie6 .v-table-header-wrap, .v-ie6 .v-table-footer-wrap, .v-ie6 .v-table-column-selector { + position: relative; +} + +.v-ie6 .v-table.v-disabled, .v-ie7 .v-table.v-disabled { + position: relative; +} + +.v-table-footer-wrap, .white .v-table-footer-wrap { + text-transform: none; + font-size: 12px; + font-weight: normal; +} + +.v-table-footer td, .white .v-table-footer td { + border-color: #c2c3c4; +} + +.v-table-footer-container { + padding-right: 7px; +} + +.v-table-header, .v-table-footer, .v-table-footer table { + height: 20px; +} + +.v-table-caption-container, .v-table-header-drag { + padding-top: 4px; + padding-right: 4px; +} + +.v-table-caption-container .v-icon, .v-table-header-drag .v-icon { + height: 16px; + margin: -4px 3px 0 0; + vertical-align: middle; +} + +.v-ie .v-table-caption-container .v-icon, .v-ie .v-table-header-drag .v-icon { + margin-top: -3px; +} + +.v-table-resizer { + height: 20px; + width: 2px; + background: transparent; + border-right: 1px solid #c2c3c4; +} + +.v-table-sort-indicator { + background: transparent; + width: 0px; + height: 20px; +} + +.v-table-header-cell-asc .v-table-sort-indicator { + background: transparent no-repeat right 7px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -945px; + width: 16px; +} + +.v-table-header-cell-desc .v-table-sort-indicator { + background: transparent no-repeat right 7px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -965px; + width: 16px; +} + +.v-table-body, .white .v-table-body { + border-color: #c2c3c4; + background: #ffffff; +} + +.v-table-cell-content { + padding-top: 0; + border-right-color: #d3d4d5; + vertical-align: top; +} + +.v-table-cell-wrapper { + padding-top: 3px; + padding-bottom: 3px; +} + +.v-table-row-odd { + background: #eff0f1; +} + +.v-table-generated-row { + background: #dcdee0; + text-transform: uppercase; + font-size: 10px; + font-weight: bold; + color: #222222; + text-shadow: #f3f5f8 0 1px 0; + line-height: normal; +} + +.v-table-generated-row .v-table-cell-content { + padding-top: 1px; + padding-bottom: 2px; +} + +.v-table-cell-content:last-child { + border-right-color: transparent; +} + +.v-table .v-selected, .black .v-table .v-selected { + background: #4d749f url(common/img/sel-bg.png) repeat-x; + color: #ffffff; + text-shadow: #3b5a7a 0 1px 0; +} + +.v-table .v-selected .v-table-cell-content { + border-right-color: #466c90; +} + +.v-table-column-selector { + width: 16px; + height: 20px; + margin-top: -20px; + background: transparent no-repeat; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -985px; +} + +.v-table-column-selector:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1005px; +} + +.v-table-focus-slot-left { + border-left: 1px solid #222222; + margin-bottom: -20px; + width: auto; +} + +.v-table-focus-slot-right { + border-right-color: #222222; + margin-right: 0; +} + +.v-table-header-drag { + padding-left: 6px; + height: 16px; +} + +.v-table-header-drag img { + height: 16px; + margin: -3px 3px 0 0; +} + +.v-table-scrollposition { + width: auto; + background: transparent; + border: none; +} + +.v-table-scrollposition span { + background: transparent repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1025px; + border: 1px solid #939494; + border: none; + border-radius-bottomleft: 4px; + border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + height: 13px; + padding: 4px 30px; + white-space: nowrap; + color: #222222; + text-shadow: #ffffff 0 1px 0; + position: relative; + top: 1px; + -webkit-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 2px; + -moz-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 2px; +} + +.v-table-borderless .v-table-scrollposition span { + top: 0; +} + +.v-contextmenu .v-on, .v-contextmenu .v-off { + display: inline-block; + zoom: 1; + background: transparent no-repeat 0 4px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1047px; + padding-left: 12px; + padding-right: 4px; +} + +.v-contextmenu .v-off { + background-image: none; + color: #666666; +} + +.v-contextmenu .gwt-MenuItem-selected .v-on { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1061px; +} + +.v-table-strong .v-table-header-wrap, .v-table-strong .v-table-header-drag { + border-color: #2b3033; + border-top-color: #2b3033; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1076px; + color: #e7e9ea; + text-shadow: #000000 0 -1px 0; +} + +.v-table-strong .v-table-body { + border-top-color: #2b3033; +} + +.v-table-strong .v-table-resizer { + border-right-color: #1c1f21; +} + +.v-table-strong .v-table-header-cell-asc .v-table-sort-indicator { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -1096px; +} + +.v-table-strong .v-table-header-cell-desc .v-table-sort-indicator { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -1115px; +} + +.v-table-strong .v-table-column-selector { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1134px; +} + +.v-table-strong .v-table-column-selector:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1154px; +} + +.v-table-strong .v-table-focus-slot-left, .v-table-strong .v-table-focus-slot-right { + border-color: #9ca1a5; +} + +.black .v-table-header-wrap, .black .v-table-header-drag { + border-color: #252729; + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -622px; + color: #e7eaee; + text-shadow: #000000 0 -1px 0; +} + +.black .v-table-resizer { + border-right-color: #252729; +} + +.black .v-table-header-cell-asc .v-table-sort-indicator { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: right -642px; +} + +.black .v-table-header-cell-desc .v-table-sort-indicator { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: right -661px; +} + +.black .v-table-column-selector { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -680px; +} + +.black .v-table-column-selector:active { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -700px; +} + +.black .v-table-focus-slot-left, .black .v-table-focus-slot-right { + border-color: #9ca1a5; +} + +.black .v-table-body { + border-color: #252729; + background: transparent; +} + +.black .v-table-cell-content { + border-right-color: #252729; + border-bottom: 1px solid #252729; +} + +.black .v-table-cell-wrapper { + padding-bottom: 2px; +} + +.black .v-table-row-odd { + background: transparent; +} + +.black .v-table .v-selected .v-table-cell-content { + border-bottom: 1px solid #4d749f; +} + +.v-table-borderless .v-table-header-wrap, .v-table-borderless .v-table-body { + border: none; +} + +.v-tabsheet-tabitemcell, .v-tabsheet-spacertd { + height: 32px; +} + +.v-tabsheet-tabitemcell { + background: no-repeat; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1174px; + padding-left: 3px; +} + +.v-tabsheet-tabitemcell-first { + padding-left: 10px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1206px; +} + +.v-tabsheet-tabitem, .v-tabsheet-spacertd div { + border: none; + height: 32px; + background: transparent repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1238px; + padding: 0; + color: #222222; + text-shadow: #ffffff 0 1px 0; +} + +.v-tabsheet-tabitem .v-caption { + border: none; + height: 23px; + background: no-repeat right top; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -1270px; + padding: 9px 8px 0 6px; +} + +.v-tabsheet-tabitem .v-caption-closable { + padding-right: 0; + padding-left: 17px; +} + +.v-tabsheet-tabitem .v-captiontext { + height: 16px; + line-height: 16px; +} + +.v-tabsheet-caption-close { + float: right; + width: 19px; + height: 18px; + margin: -1px -1px 0; + padding-left: 2px; + background: transparent; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1302px; + cursor: default; + text-indent: -999px; + overflow: hidden; + font-size: 14px; + font-weight: normal; +} + +.v-ff .v-tabsheet-caption-close, .v-ie7 .v-tabsheet-caption-close { + margin-top: -17px; +} + +.v-ie6 .v-tabsheet-caption-close { + float: none; +} + +.v-tabsheet-caption-close:hover { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1320px; +} + +.v-tabsheet-caption-close:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1338px; +} + +.v-tabsheet-tabitem-selected .v-tabsheet-caption-close { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1356px; +} + +.v-tabsheet-tabitem-selected .v-tabsheet-caption-close:hover { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1374px; +} + +.v-tabsheet-tabitem-selected .v-tabsheet-caption-close:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1392px; +} + +.v-tabsheet-tabitemcell-selected { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1410px; +} + +.v-tabsheet-tabitemcell-selected-first { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1442px; +} + +.v-tabsheet-tabitem-selected { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1474px; + color: #232930; +} + +.v-tabsheet-tabitem-selected .v-caption { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -1506px; +} + +.v-tabsheet-spacertd div { + margin-right: 4px; +} + +.v-tabsheet-spacertd { + background: transparent no-repeat right top; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -1538px; +} + +.blue .v-tabsheet-content { + border-color: #a8bcc5; +} + +.v-tabsheet-content, .white .v-tabsheet-content { + border: 1px solid #dcdcdc; + border-bottom: none; + border-top: none; + color: #222222; + text-shadow: none; +} + +.v-tabsheet-tabsheetpanel { + background: #ffffff; +} + +.v-sa .v-tabsheet-content, .v-ff3 .v-tabsheet-content { + border-color: rgba(0, 0, 0, 0.1); +} + +.blue .v-tabsheet-deco { + border-color: #92a3ac; + background: #adc2cd; +} + +.v-tabsheet-deco, .white .v-tabsheet-deco { + height: 1px; + border-top: 1px solid #bebebe; + background: #e2e2e2; + overflow: hidden; +} + +.v-sa .v-tabsheet-deco, .v-ff3 .v-tabsheet-deco { + border-top-color: rgba(0, 0, 0, 0.1); + background: rgba(0, 0, 0, 0.08); +} + +.v-tabsheet-tabs .v-icon, .v-tabsheet-tabs .v-captiontext, .v-tabsheet-tabs .v-errorindicator { + display: inline; + float: none; +} + +.v-sa .v-tabsheet-tabs .v-captiontext { + display: inline-block; +} + +.v-tabsheet-tabs .v-icon { + width: 16px !important; + height: 16px !important; +} + +.v-tabsheet-tabs .v-errorindicator { + display: inline-block; + width: 13px; + height: 16px; + background: transparent url(common/icons/error.png) no-repeat 50%; +} + +.v-ff2 .v-tabsheet-tabs .v-icon, .v-ff2 .v-tabsheet-tabs .v-errorindicator { + display: -moz-inline-stack; +} + +.v-ie6 .v-tabsheet-tabs .v-errorindicator { + background-image: url(common/icons/error-ie6.png); +} + +.v-ie .v-tabsheet-tabs .v-errorindicator { + zoom: 1; + display: inline; +} + +.v-ie8 .v-tabsheet-tabs .v-errorindicator, .v-ie9 .v-tabsheet-tabs .v-errorindicator { + display: inline-block; +} + +.v-tabsheet-scroller { + height: 31px; + margin-top: -31px; + padding: 0 3px 0 4px; + border-right: 1px solid #c2c2c2; + border-left: 1px solid #cfcfcf; + position: relative; + float: right; + background: transparent url(tabsheet/img/framed/tab-bg.png) repeat-x left -1px; + width: 36px; +} + +.v-tabsheet-scroller button { + margin-top: 7px; +} + +.v-tabsheet-scrollerPrev, .v-tabsheet-scrollerNext, .v-tabsheet-scrollerPrev-disabled, .v-tabsheet-scrollerNext-disabled { + border: none; + background: transparent; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1570px; + width: 18px; + height: 17px; + overflow: hidden; +} + +.v-tabsheet-scroller button::-moz-focus-inner { + border: none; +} + +.v-tabsheet-scrollerNext { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1587px; +} + +.v-tabsheet-scrollerPrev:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1604px; +} + +.v-tabsheet-scrollerNext:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1621px; +} + +.v-tabsheet-scrollerPrev-disabled, .v-tabsheet-scrollerPrev-disabled:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1638px; + opacity: 1; + filter: none; +} + +.v-tabsheet-scrollerNext-disabled, .v-tabsheet-scrollerNext-disabled:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1655px; + opacity: 1; + filter: none; +} + +.v-tabsheet-borderless .v-tabsheet-tabitemcell-first { + padding-left: 7px; + background: url(tabsheet/img/framed/tab-first-left.png) no-repeat -3px 0; +} + +.v-tabsheet-borderless .v-tabsheet-tabitemcell-selected-first { + background: url(tabsheet/img/framed/tab-first-left-sel.png) no-repeat -3px 0; +} + +.v-tabsheet-borderless .v-tabsheet-spacertd div { + margin-right: 0; +} + +.v-tabsheet-borderless .v-tabsheet-spacertd { + background: transparent; +} + +.v-tabsheet-borderless .v-tabsheet-content { + border: none; +} + +.v-tabsheet-borderless .v-tabsheet-deco { + height: 0; + border-top: none; +} + +.blue .v-tabsheet-tabs-minimal .v-tabsheet-spacertd div, .blue .v-tabsheet-tabs-minimal .v-tabsheet-tabitem, .blue .v-tabsheet-tabs-minimal .v-tabsheet-tabitem-selected { + border-color: #7c8a91; +} + +.blue .v-tabsheet-tabs-minimal .v-tabsheet-caption-close { + color: #7c8a91; +} + +.blue .v-tabsheet-tabs-minimal .v-tabsheet-caption-close:hover { + color: #bcd3de; + background: #778d98; +} + +.blue .v-tabsheet-tabs-minimal .v-tabsheet-caption-close:active { + background: #4f6874; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-spacertd div, .white .v-tabsheet-tabs-minimal .v-tabsheet-spacertd div { + border-bottom: 1px solid #bfbfbf; + height: auto; + background: transparent; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-tabitemcell, .v-tabsheet-tabs-minimal .v-tabsheet-spacertd { + height: auto; + background: transparent; + padding-left: 0; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-tabitem, .white .v-tabsheet-tabs-minimal .v-tabsheet-tabitem { + border: none; + border-bottom: 1px solid #bfbfbf; + color: #4d748f; + padding: 0; + height: auto; + background: transparent; + text-shadow: none; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-tabitem .v-caption { + padding: 5px 16px; + height: auto; + background: transparent; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-tabitemcell-selected { + background: transparent; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-tabitem-selected, .white .v-tabsheet-tabs-minimal .v-tabsheet-tabitem-selected { + background: transparent; + border: 1px solid #bfbfbf; + border-bottom: none; + color: #222222; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-tabitem-selected .v-caption { + background: transparent; + padding: 4px 15px 6px 15px; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-tabitem .v-caption-closable, .v-tabsheet-tabs-minimal .v-tabsheet-tabitem-selected .v-caption-closable { + padding-right: 6px; +} + +.v-tabsheet-content-minimal, .white .v-tabsheet-content-minimal { + border: none; +} + +.v-tabsheet-content-minimal .v-tabsheet-tabsheetpanel { + background: transparent; +} + +.v-tabsheet-deco-minimal, .white .v-tabsheet-deco-minimal { + height: 0; + border: none; +} + +.v-tabsheet-tabcontainer-minimal .v-tabsheet-scroller { + margin-top: -20px; + height: 17px; + padding: 0; + border: none; + background: transparent; +} + +.v-tabsheet-tabcontainer-minimal .v-tabsheet-scroller button { + margin-top: 0; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-caption-close, .v-tabsheet-tabs-minimal .v-tabsheet-caption-close:hover, .v-tabsheet-tabs-minimal .v-tabsheet-caption-close:active { + text-indent: 0; + background: transparent; + margin-left: 3px; + margin-right: -3px; + padding: 0; + color: #999999; + width: 14px; + height: 14px; + line-height: 14px; + -webkit-border-radius: 7px; + -moz-border-radius: 7px; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-caption-close { + margin-top: 1px; +} + +.v-ff .v-tabsheet-tabs-minimal .v-tabsheet-caption-close, .v-ie7 .v-tabsheet-tabs-minimal .v-tabsheet-caption-close { + margin-top: -15px; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-caption-close:hover, .white .v-tabsheet-tabs-minimal .v-tabsheet-caption-close:hover { + color: #ffffff; + background: #aaaaaa; +} + +.v-tabsheet-tabs-minimal .v-tabsheet-caption-close:active, .white .v-tabsheet-tabs-minimal .v-tabsheet-caption-close:active { + background: #777777; +} + +.black .v-tabsheet-tabs-minimal .v-tabsheet-spacertd div, .black .v-tabsheet-tabs-minimal .v-tabsheet-tabitem, .black .v-tabsheet-tabs-minimal .v-tabsheet-tabitem-selected { + border-color: #3e4044; + color: #6a7f89; +} + +.black .v-tabsheet-tabs-minimal .v-tabsheet-tabitem-selected { + color: #c9ccce; +} + +.black .v-tabsheet-content-minimal, .black .v-tabsheet-content-bar { + color: #c9ccce; + text-shadow: #000000 0 0 1px; +} + +.black .v-tabsheet-tabs-minimal .v-tabsheet-caption-close { + color: #72787c; +} + +.black .v-tabsheet-tabs-minimal .v-tabsheet-caption-close:hover { + color: #1d2021; + background: #4d5154; +} + +.black .v-tabsheet-tabs-minimal .v-tabsheet-caption-close:active { + background: #626669; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell, .v-tabsheet-tabs-bar .v-tabsheet-spacertd { + height: 20px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-spacertd { + background: transparent; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1673px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell-first { + padding-left: 6px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1693px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitem, .v-tabsheet-tabs-bar .v-tabsheet-spacertd div { + height: 20px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1713px; + font-size: 11px; + margin: 0; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitem .v-caption { + height: 18px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -1733px; + padding: 2px 12px 0 10px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitem .v-caption-closable, .v-tabsheet-tabs-bar .v-tabsheet-tabitem-selected .v-caption-closable { + padding-right: 8px; + padding-left: 14px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-caption-close, .v-tabsheet-tabs-bar .v-tabsheet-caption-close:hover, .v-tabsheet-tabs-bar .v-tabsheet-caption-close:active { + text-indent: 0; + background: transparent; + margin-left: 3px; + margin-right: -3px; + padding: 1px 0 0 1px; + color: #3c3c3c; + width: 13px; + height: 13px; + line-height: 12px; + -webkit-border-radius: 7px; + -moz-border-radius: 7px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-caption-close { + margin-top: 1px; +} + +.v-ff .v-tabsheet-tabs-bar .v-tabsheet-caption-close, .v-ie7 .v-tabsheet-tabs-bar .v-tabsheet-caption-close { + margin-top: -14px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-caption-close:hover { + background: #bfbfbf; + -webkit-box-shadow: 0 1px 0 #ffffff; +} + +.v-tabsheet-tabs-bar .v-tabsheet-caption-close:active { + background: #a9a9a9; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitem-selected .v-tabsheet-caption-close { + color: #404142; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitem-selected .v-tabsheet-caption-close:hover { + background: #5e666e; + color: #ffffff; + text-shadow: 0 -1px 0 #222222; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitem-selected .v-tabsheet-caption-close:active { + background: #404142; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell-selected { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1753px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitemcell-selected-first { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1773px; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitem-selected { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1793px; + color: #232930; +} + +.v-tabsheet-tabs-bar .v-tabsheet-tabitem-selected .v-caption { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: right -1813px; +} + +.v-tabsheet-tabcontainer-bar .v-tabsheet-scroller { + margin-top: -20px; + height: 19px; + border-right: none; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1833px; +} + +.v-tabsheet-tabcontainer-bar .v-tabsheet-scroller button { + margin-top: 1px; +} + +.v-tabsheet-content-bar, .white .v-tabsheet-content-bar { + border: none; +} + +.v-tabsheet-content-bar .v-tabsheet-tabsheetpanel { + background: transparent; +} + +.v-tabsheet-deco-bar, .white .v-tabsheet-deco-bar { + height: 0; + border: none; +} + +.v-tabsheet-tabs-selected-closable .v-tabsheet-tabitem .v-tabsheet-caption-close, .v-tabsheet-tabs-selected-closable .v-tabsheet-tabitem:hover .v-tabsheet-caption-close { + visibility: hidden; +} + +.v-tabsheet-tabs-selected-closable .v-tabsheet-tabitem-selected .v-tabsheet-caption-close, .v-tabsheet-tabs-selected-closable .v-tabsheet-tabitem-selected:hover .v-tabsheet-caption-close { + visibility: visible; +} + +.v-tabsheet-tabs-hover-closable .v-tabsheet-caption-close { + visibility: hidden; +} + +.v-tabsheet-tabs-hover-closable .v-tabsheet-tabitem:hover .v-tabsheet-caption-close { + visibility: visible; +} + +.blue .v-textfield, .blue .v-textarea { + border-color: #92a2aa; + border-top-color: #7c8a90; + border-bottom-color: #a1b3bc; +} + +.v-textfield, .v-textarea, .white .v-textfield, .white .v-textarea { + border: 1px solid #bcbdbe; + border-top-color: #a2a3a4; + border-bottom-color: #d2d3d4; + background: #ffffff; + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1853px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + margin: 0; + height: 15px; + line-height: normal; +} + +.v-textarea, .white .v-textarea { + background-image: none; + height: auto; +} + +.v-app input.v-textfield, .v-window input.v-textfield, .v-app textarea.v-textarea, .v-window textarea.v-textarea { + padding: 3px 3px 4px; +} + +.v-app .v-textfield-focus, .v-window .v-textfield-focus, .v-popupview-popup .v-textfield-focus, .v-app .v-textarea-focus, .v-window .v-textarea-focus, .v-popupview-popup .v-textarea-focus { + border-color: #5b97d0; + border-top-color: #4f83b4; + border-bottom-color: #5ca0df; + outline: none; + background-color: #ffffff; +} + +input.v-textfield-prompt, textarea.v-textarea-prompt { + font-style: normal; + color: #999999; +} + +.v-app input.v-textfield-small { + font-size: 11px; + line-height: normal; + height: auto; + padding: 2px; +} + +.v-app textarea.v-textarea-small { + font-size: 11px; +} + +.v-table input.v-textfield { + padding: 1px 2px; + height: auto; + line-height: normal; +} + +.v-table-cell-wrapper > input.v-textfield { + margin-top: -2px; + margin-bottom: -2px; +} + +.v-ie6 .v-table-cell-wrapper input.v-textfield { + margin-top: -2px; + margin-bottom: -2px; +} + +.v-ie6 .v-table-cell-wrapper div input.v-textfield { + margin-top: 0; + margin-bottom: 0; +} + +.black .v-textfield, .black .v-textarea { + border-color: #38393a; + border-top-color: #2c2d2e; + border-bottom-color: #3e3f3f; + background: #151717; + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -720px; + color: #c9ccce; + text-shadow: #000000 0 0 1px; +} + +.black .v-textarea { + background-image: none; +} + +.v-app .black .v-textfield-focus, .v-window-black .v-textfield-focus, .v-window .black .v-textfield-focus, .v-popupview-popup .black .v-textfield-focus, .v-app .black .v-textarea-focus, .v-window-black .v-textarea-focus, .v-window .black .v-textarea-focus, .v-popupview-popup .black .v-textarea-focus { + border-color: #4b7192; + border-top-color: #3b5a75; + border-bottom-color: #507596; + background-color: #151717; +} + +.black input.v-textfield-prompt { + color: #5f6366; +} + +input.v-textfield-readonly, .black input.v-textfield-readonly, textarea.v-textarea-readonly, .black textarea.v-textarea-readonly { + border: none; + background: transparent; +} + +.v-tree-node { + background: transparent url(tree/img/arrows.png) no-repeat 6px -10px; +} + +.v-ie6 .v-tree-node { + background-image: url(tree/img/arrows-ie6.png); + background-repeat: no-repeat; +} + +.v-ie6 div.v-tree-node-leaf { + background: transparent; +} + +.v-tree-node-expanded { + background-position: -7px 5px; +} + +.v-tree-node-caption { + margin-left: 16px; + padding-bottom: 1px; +} + +.v-tree-node span { + padding: 1px 2px; + display: inline-block; +} + +.v-tree-node-selected span { + background: #4d749f repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1876px; + color: #ffffff; + padding: 1px 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + text-shadow: #2b425a 0 1px 0; + display: inline-block; +} + +.v-tree-node-children { + padding-left: 16px; +} + +.v-ie6 .v-tree-node-ie6compatnode { + width: 14px; + height: 10px; + padding: 1px; +} + +.v-tree-node-caption.v-tree-node-focused span { + padding-left: 1px; + padding-top: 0px; + padding-bottom: 0px; +} + +.v-tree-node-focused span { + border: 1px dotted black; +} + +.v-ie6 .v-tree-node-ie6compatnode.v-tree-node-focused { + padding-left: 0px; +} + +.v-tree .v-tree-node-drag-top { + background-position: 6px -11px; +} + +.v-tree .v-tree-node-drag-top.v-tree-node-expanded { + background-position: -7px 4px; +} + +.v-tree-connectors .v-tree-node-drag-top, .v-tree-connectors .v-tree-node-expanded.v-tree-node-drag-top { + background-position: 2px -53px; +} + +.v-tree-connectors .v-tree-node-drag-top.v-tree-node-leaf { + background-position: 2px 50%; +} + +.v-window { + background: transparent; +} + +.v-window-wrap { + border: 1px solid #808386; +} + +.v-sa .v-window-wrap, .v-ff3 .v-window-wrap, .v-op .v-window-wrap { + border-color: rgba(0, 0, 0, 0.2); +} + +.v-ff2 .v-window-wrap, .v-ie6 .v-window-wrap { + border: none; +} + +.v-ff2 .v-window-outerheader, .v-ie6 .v-window-outerheader { + border: 1px solid #808386; + border-bottom: none; +} + +.v-ff2 .v-window-contents, .v-ie6 .v-window-contents { + border: 1px solid #808386; + border-top: none; + border-bottom: none; +} + +.v-ff2 .v-window-footer, .v-ie6 .v-window-footer { + border: 1px solid #808386; + border-top: none; +} + +.v-window-outerheader { + padding: 12px 32px 0 14px; + height: 25px; + background: black repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1896px; +} + +.v-window-header { + font-weight: bold; + font-size: 12px; + line-height: normal; + color: #ffffff; + text-shadow: #000000 0 -1px 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + -ms-text-overflow: ellipsis; +} + +.v-window-error .v-window-header { + padding-left: 13px; + background: transparent url(common/icons/error.png) no-repeat 0 50%; +} + +.v-ie6 .v-window-error .v-window-header { + background-image: url(common/icons/error-ie6.png); +} + +.v-window-resizebox { + width: 15px; + height: 15px; + cursor: se-resize; + background: transparent; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1933px; +} + +.v-window-footer { + background-color: white; + background-repeat: repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1948px; + height: 15px; +} + +.v-window-closebox { + top: 12px; + right: 10px; + width: 15px; + height: 16px; + background: transparent; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1963px; +} + +.v-window-closebox:hover { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1979px; +} + +.v-window-closebox:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -1995px; +} + +.v-window-contents { + background: #ffffff; +} + +.v-window-modalitycurtain { + background: #56595b; +} + +.v-window-light .v-window-outerheader { + background: transparent; + padding: 15px 32px 0 18px; + height: 23px; +} + +.v-window-light .v-window-header { + font-size: 16px; + color: #292e34; + text-shadow: none; +} + +.v-window-light .v-window-resizebox { + width: 12px; + height: 12px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -2011px; +} + +.v-window-light .v-window-footer { + background: transparent; + height: 12px; +} + +.v-window-light .v-window-closebox { + right: 1px; + top: 17px; + width: 19px; + height: 15px; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -2023px; +} + +.v-window-light .v-window-closebox:hover { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -2038px; +} + +.v-window-light .v-window-closebox:active { + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -2053px; +} + +.v-window-light .v-window-contents { + background: transparent; +} + +.v-window-light .v-window-wrap2 { + background: #f7f7f8 repeat-x; + background-image: url(common/img/vertical-sprites.png); + -background-image: url(common/img/vertical-sprites-ie6.png); + background-position: left -2068px; +} + +.v-ie6 .v-window-light .v-window-wrap2 { + background-image: none; +} + +.v-window-black .v-window-wrap { + border-color: #2e3030; + border-radius: 8px; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + overflow: hidden; +} + +.v-sa .v-window-black .v-window-wrap, .v-ff3 .v-window-black .v-window-wrap, .v-op .v-window-black .v-window-wrap { + border-color: rgba(0, 0, 0, 0.8); +} + +.v-window-black .v-window-wrap2 { + background-color: #1d2021; + -moz-border-radius: 7px; + -webkit-border-radius: 7px; +} + +.v-sa .v-window-black .v-window-wrap2, .v-ff3 .v-window-black .v-window-wrap2, .v-op .v-window-black .v-window-wrap2 { + background-color: rgba(29, 32, 33, 0.9); +} + +.v-window-black .v-window-outerheader { + height: auto; + padding: 7px 14px; + height: 15px; + background: transparent repeat-x; + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -743px; + text-align: center; + -moz-border-radius-topright: 7px; + -moz-border-radius-topleft: 7px; + -webkit-border-top-right-radius: 7px; + -webkit-border-top-left-radius: 7px; + overflow: hidden; + border: none; +} + +.v-window-black .v-window-header { + font-size: 12px; + font-weight: normal; + color: #dddfe1; +} + +.v-window-black .v-window-closebox { + top: 8px; +} + +.v-window-black .v-window-footer { + background: transparent; + border: none; + height: 14px; +} + +.v-window-black .v-window-resizebox { + background: transparent no-repeat; + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -772px; + width: 14px; + height: 14px; +} + +.v-ie6 .v-window-black .v-window-resizebox { + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -786px; +} + +.v-ie6 .v-window-black .v-window-contents { + background: transparent url(window/img/black/content-bg-ie6.png) repeat-x; +} + +.v-window-black .v-window-contents { + border: none; + background: transparent repeat-x; + background-image: url(common/img/black-vertical-sprites.png); + -background-image: url(common/img/black-vertical-sprites-ie6.png); + background-position: left -800px; +}
\ No newline at end of file diff --git a/sass/tests/resources/basic/selectors.css b/sass/tests/resources/basic/selectors.css new file mode 100644 index 0000000000..50c5fb7cc5 --- /dev/null +++ b/sass/tests/resources/basic/selectors.css @@ -0,0 +1,103 @@ +.foo { + color: red; +} + +.foo-bar { + color: red; +} + +.foo_bar { + color: red; +} + +.foo .bar { + color: red; +} + +.foo .bar .baz .fee .roo { + color: red; +} + +.foo.bar.baz.fee.roo { + color: red; +} + +.foo.bar .baz.fee.roo .dar { + color: red; +} + +.foo > .bar { + color: red; +} + +#foo { + color: red; +} + +#foo .bar { + color: red; +} + +.foo #bar { + color: red; +} + +#foo.bar { + color: red; +} + +#foo, #bar, .baz, .roo .dar { + color: red; +} + +#foo a, .foo pre img { + color: red; +} + +#foo a.bar { + color: red; +} + +a:link { + color: red; +} + +a.foo:visited, .bar { + color: red; +} + +.v-app input[type="text"] { + color: red; +} + +.foo + .bar { + color: red; +} + +h1 + .foo { + color: red; +} + +.foo * { + color: red; +} + +.foo * h1 { + color: red; +} + +h1 * .foo { + color: red; +} + +* .foo { + color: red; +} + +p::abc { + color: red; +} + +p:first { + color: red; +}
\ No newline at end of file diff --git a/sass/tests/resources/css/comments.css b/sass/tests/resources/css/comments.css new file mode 100644 index 0000000000..1c773f7974 --- /dev/null +++ b/sass/tests/resources/css/comments.css @@ -0,0 +1,15 @@ +/** 0sprite: verticals; sprite-image: url(../common/img/vertical-sprites.png); sprite-layout: vertical */ + +/** 1sprite: verticals; sprite-image: url(../common/img/vertical-sprites.png); sprite-layout: vertical */ + +/** 2sprite: verticals; sprite-image: url(../common/img/vertical-sprites.png); sprite-layout: vertical */ + +.v-button:focus { + background-image: url(img/left-focus.png);/** sprite-ref: buttons */ + outline: none; +} + +.v-button:focus .v-button-wrap { + background-image: url(img/right-focus.png);/** sprite-ref: buttons; sprite-alignment: right */ + outline: none; +}
\ No newline at end of file diff --git a/sass/tests/resources/css/control-directives.css b/sass/tests/resources/css/control-directives.css new file mode 100644 index 0000000000..0a6f1f7233 --- /dev/null +++ b/sass/tests/resources/css/control-directives.css @@ -0,0 +1 @@ +Implement a sane test case.
\ No newline at end of file diff --git a/sass/tests/resources/css/extends.css b/sass/tests/resources/css/extends.css new file mode 100644 index 0000000000..d1c903f166 --- /dev/null +++ b/sass/tests/resources/css/extends.css @@ -0,0 +1,13 @@ +.error, .badError { + border: 1px #f00; + background: #fdd; +} + +.error.intrusion, .badError.intrusion { + font-size: 1.3em; + font-weight: bold; +} + +.badError { + border-width: 3px; +}
\ No newline at end of file diff --git a/sass/tests/resources/css/functions.css b/sass/tests/resources/css/functions.css new file mode 100644 index 0000000000..de87462b46 --- /dev/null +++ b/sass/tests/resources/css/functions.css @@ -0,0 +1,14 @@ +.main { + margin: 2px; + border: 11px; + border: 10px; + border: 10px; + color: hsl(0, 0%, 30%); + color: hsl(25, 100%, 50%); + color: rgb(36, 0, 0); + color: rgb(240, 0, 0); + color: #240000; + color: #200; + color: #f00000; + color: #f00; +} diff --git a/sass/tests/resources/css/imports.css b/sass/tests/resources/css/imports.css new file mode 100644 index 0000000000..5b1001802a --- /dev/null +++ b/sass/tests/resources/css/imports.css @@ -0,0 +1,11 @@ +.caption { + border: 1px solid black; + background: #ff0000; + padding: 10px; + margin: 10px; +} + +.text { + font-weight: bold; + color: red; +}
\ No newline at end of file diff --git a/sass/tests/resources/css/microsoft-extensions.css b/sass/tests/resources/css/microsoft-extensions.css new file mode 100644 index 0000000000..69670969de --- /dev/null +++ b/sass/tests/resources/css/microsoft-extensions.css @@ -0,0 +1,6 @@ +.v-ie6 .v-shadow-window { + background: #000000; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=5 ) alpha(opacity = 20); + margin-top: 2px; + margin-left: 2px; +} diff --git a/sass/tests/resources/css/mixins.css b/sass/tests/resources/css/mixins.css new file mode 100644 index 0000000000..5c727c193b --- /dev/null +++ b/sass/tests/resources/css/mixins.css @@ -0,0 +1,46 @@ +.main { + border: 1px solid black; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + font-family: arial; + font-size: 16px; + font-weight: bold; +} + +.main .details { + font-size: 14px; + font-weight: bold; +} + +.footer { + border: 2px solid black; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; +} + +.header { + width: 100%; +} + +.main { + width: 100%; + height: 100%; +} + +.footer { + width: 100%; +} + +@media print { + .v-view { + overflow: visible; + } +} + +font-family: arial; + +font-size: 16px; + +font-weight: bold;
\ No newline at end of file diff --git a/sass/tests/resources/css/nested-properties.css b/sass/tests/resources/css/nested-properties.css new file mode 100644 index 0000000000..79b21e632b --- /dev/null +++ b/sass/tests/resources/css/nested-properties.css @@ -0,0 +1,5 @@ +li { + font-family: serif; + font-weight: bold; + font-size: 1.2em; +}
\ No newline at end of file diff --git a/sass/tests/resources/css/nesting.css b/sass/tests/resources/css/nesting.css new file mode 100644 index 0000000000..2400c73d43 --- /dev/null +++ b/sass/tests/resources/css/nesting.css @@ -0,0 +1,47 @@ +.top-bar { + color: red; +} + +.top-bar .alt { + color: blue; +} + +.menu { + background-color: red; +} + +.menu a { + color: blue; +} + +.caption { + padding: 10px; +} + +.caption .text, .caption .header { + color: green; +} + +.footer { + padding: 10px; +} + +.footer .left, .footer .right { + color: purple; +} + +.footer .left a, .footer .right a { + color: orange; +} + +.main { + color: red; +} + +.main .second.third { + color: blue; +} + +.main .second.third .fourth { + color: black; +} diff --git a/sass/tests/resources/css/parent-import.css b/sass/tests/resources/css/parent-import.css new file mode 100644 index 0000000000..f67d17f8b4 --- /dev/null +++ b/sass/tests/resources/css/parent-import.css @@ -0,0 +1,25 @@ +.content-navigation { + border-color: #3bbfce; + color: #0000ff; +} + +.border { + padding: 8px; + margin: 8px; + border-color: #3bbfce; +} + +.body { + background-image: url(../folder-test2/bg.png); + background: transparent url(../folder-test2/img/loading-indicator.gif); + background-image: url(http://abc/bg.png); + background-image: url(/abc/bg.png); +} + +.base { + color: red; +} + +.text { + font-weight: bold; +}
\ No newline at end of file diff --git a/sass/tests/resources/css/parent-selector.css b/sass/tests/resources/css/parent-selector.css new file mode 100644 index 0000000000..9c7140e313 --- /dev/null +++ b/sass/tests/resources/css/parent-selector.css @@ -0,0 +1,24 @@ +a { + font-weight: bold; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +body.firefox a { + font-weight: normal; +} + +#main { + color: black; +} + +#main a { + font-weight: bold; +} + +#main a:hover { + color: red; +}
\ No newline at end of file diff --git a/sass/tests/resources/css/semicolons.css b/sass/tests/resources/css/semicolons.css new file mode 100644 index 0000000000..8a08617638 --- /dev/null +++ b/sass/tests/resources/css/semicolons.css @@ -0,0 +1,10 @@ +.all-the-properties { + font-family: Arial, Helvetica, "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif; + position: absolute; + overflow: hidden; +} + +.missing-semicolon-on-last-row { + color: red; + background-color: blue; +} diff --git a/sass/tests/resources/css/var-guarded.css b/sass/tests/resources/css/var-guarded.css new file mode 100644 index 0000000000..c4a8c49d12 --- /dev/null +++ b/sass/tests/resources/css/var-guarded.css @@ -0,0 +1,4 @@ +#main { + content: "First content"; + new-content: "First time reference"; +}
\ No newline at end of file diff --git a/sass/tests/resources/css/variables.css b/sass/tests/resources/css/variables.css new file mode 100644 index 0000000000..d54ae6cd30 --- /dev/null +++ b/sass/tests/resources/css/variables.css @@ -0,0 +1,12 @@ +.content-navigation { + border-color: #3bbfce; + color: #0000ff; + color1: #0000d1; + font-family: Arial, Helvetica, "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif; +} + +.border { + padding: 8px; + margin: 8px; + border-color: #3bbfce; +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/_partial-for-import.scss b/sass/tests/resources/scss/_partial-for-import.scss new file mode 100644 index 0000000000..32c3149a5b --- /dev/null +++ b/sass/tests/resources/scss/_partial-for-import.scss @@ -0,0 +1,9 @@ +$foo : red; + +.caption { + $side: right; + border: 1px solid black; + background: #ff0000; + padding: 10px; + margin: 10px; +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/comments.scss b/sass/tests/resources/scss/comments.scss new file mode 100644 index 0000000000..de3fbe8e0d --- /dev/null +++ b/sass/tests/resources/scss/comments.scss @@ -0,0 +1,13 @@ +/** 0sprite: verticals; sprite-image: url(../common/img/vertical-sprites.png); sprite-layout: vertical */ +/** 1sprite: verticals; sprite-image: url(../common/img/vertical-sprites.png); sprite-layout: vertical */ +/** 2sprite: verticals; sprite-image: url(../common/img/vertical-sprites.png); sprite-layout: vertical */ +$black:#000000; +.v-button:focus { + background-image: url(img/left-focus.png);/** sprite-ref: buttons */ + outline: none; +} + +.v-button:focus .v-button-wrap { + background-image: url(img/right-focus.png);/** sprite-ref: buttons; sprite-alignment: right */ + outline: none; +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/control-directives.scss b/sass/tests/resources/scss/control-directives.scss new file mode 100644 index 0000000000..febd563f19 --- /dev/null +++ b/sass/tests/resources/scss/control-directives.scss @@ -0,0 +1,14 @@ +@for $i from 1 through 3 { + .item-#{$i} { width: 2em * $i; } +} + +@while $i > 0 { + .item-#{$i} { width: 2em * $i; } + $i: $i - 2; +} + +@each $animal in puma, sea-slug, egret, salamander { + .#{$animal}-icon { + background-image: url('/images/#{$animal}.png'); + } +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/extends.scss b/sass/tests/resources/scss/extends.scss new file mode 100644 index 0000000000..c9e0f85381 --- /dev/null +++ b/sass/tests/resources/scss/extends.scss @@ -0,0 +1,13 @@ +.error { + border: 1px #f00; + background: #fdd; +} +.error.intrusion { + font-size: 1.3em; + font-weight: bold; +} + +.badError { + @extend .error; + border-width: 3px; +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/folder-test/parent-import.scss b/sass/tests/resources/scss/folder-test/parent-import.scss new file mode 100644 index 0000000000..b3f6c8000e --- /dev/null +++ b/sass/tests/resources/scss/folder-test/parent-import.scss @@ -0,0 +1,6 @@ +@import "../folder-test2/variables.scss"; +@import "../folder-test2/url"; +@import "../folder-test2/base-imported.scss"; +.text { + font-weight: bold; +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/folder-test2/base-imported.scss b/sass/tests/resources/scss/folder-test2/base-imported.scss new file mode 100644 index 0000000000..17d801e4aa --- /dev/null +++ b/sass/tests/resources/scss/folder-test2/base-imported.scss @@ -0,0 +1 @@ +@import "base.scss";
\ No newline at end of file diff --git a/sass/tests/resources/scss/folder-test2/base.scss b/sass/tests/resources/scss/folder-test2/base.scss new file mode 100644 index 0000000000..57ca0bb7a2 --- /dev/null +++ b/sass/tests/resources/scss/folder-test2/base.scss @@ -0,0 +1,3 @@ +.base{ + color: red; +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/folder-test2/url.scss b/sass/tests/resources/scss/folder-test2/url.scss new file mode 100644 index 0000000000..a4be967ad7 --- /dev/null +++ b/sass/tests/resources/scss/folder-test2/url.scss @@ -0,0 +1,6 @@ +.body{ + background-image: url(bg.png); + background: transparent url(img/loading-indicator.gif); + background-image: url(http://abc/bg.png); + background-image: url(/abc/bg.png); +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/folder-test2/variables.scss b/sass/tests/resources/scss/folder-test2/variables.scss new file mode 100644 index 0000000000..2d06d36650 --- /dev/null +++ b/sass/tests/resources/scss/folder-test2/variables.scss @@ -0,0 +1,14 @@ +$blue: #3bbfce; +$margin: 8px; + +.content-navigation { + border-color: $blue; + $blue: #0000ff; + color: $blue; +} + +.border { + padding: $margin; + margin: $margin; + border-color: $blue; +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/functions.scss b/sass/tests/resources/scss/functions.scss new file mode 100644 index 0000000000..abf6f6187d --- /dev/null +++ b/sass/tests/resources/scss/functions.scss @@ -0,0 +1,16 @@ +.main { + margin: abs(-2px); + border: ceil(10.4px); + border: floor(10.4px); + border: round(10.4px); + color: lighten(hsl(0, 0%, 0%), 30%); + color: darken(hsl(25, 100%, 80%), 30%); + color: darken(rgb(136, 0, 0), 20%); + color: lighten(rgb(136, 0, 0), 20%); + color: darken(#880000, 20%); + color: darken(#800, 20%); + color: lighten(#880000, 20%); + color: lighten(#800, 20%); +} + + diff --git a/sass/tests/resources/scss/imports.scss b/sass/tests/resources/scss/imports.scss new file mode 100644 index 0000000000..4d53a120d2 --- /dev/null +++ b/sass/tests/resources/scss/imports.scss @@ -0,0 +1,6 @@ +@import "_partial-for-import"; + +.text { + font-weight: bold; + color: $foo; +} diff --git a/sass/tests/resources/scss/interpolation.scss b/sass/tests/resources/scss/interpolation.scss new file mode 100644 index 0000000000..5859a9838b --- /dev/null +++ b/sass/tests/resources/scss/interpolation.scss @@ -0,0 +1,3 @@ +$name: foo; +$attr: border; +p.#{$name}abc { abc#{$attr}-color: blue }
\ No newline at end of file diff --git a/sass/tests/resources/scss/microsoft-extensions.scss b/sass/tests/resources/scss/microsoft-extensions.scss new file mode 100644 index 0000000000..69670969de --- /dev/null +++ b/sass/tests/resources/scss/microsoft-extensions.scss @@ -0,0 +1,6 @@ +.v-ie6 .v-shadow-window { + background: #000000; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=5 ) alpha(opacity = 20); + margin-top: 2px; + margin-left: 2px; +} diff --git a/sass/tests/resources/scss/mixins.scss b/sass/tests/resources/scss/mixins.scss new file mode 100644 index 0000000000..52e03d62c1 --- /dev/null +++ b/sass/tests/resources/scss/mixins.scss @@ -0,0 +1,55 @@ +//asfdasdf + +@mixin font-settings { + font-family: arial; + font-size: 16px; + font-weight: bold; +} + +@mixin rounded-borders($thickness, $radius : 3px) { + border: $thickness solid black; + -webkit-border-radius: $radius; + -moz-border-radius: $radius; + border-radius: $radius; +} + +.main { + @include rounded-borders(1px); + @include font-settings; + @include main-details(14px); +} + +.footer { + @include rounded-borders(2px, 10px); +} + +@mixin layout { + .header { + width: 100%; + } + .main { + width: 100%; + height: 100%; + } + + .footer { + width: 100%; + } + @media print { + .v-view { + overflow: visible; + } + } + @include font-settings; +} + +@mixin main-details($size){ + .details { + font: { + size : $size; + weight: bold; + } + } +} + +@include layout;
\ No newline at end of file diff --git a/sass/tests/resources/scss/nested-properties.scss b/sass/tests/resources/scss/nested-properties.scss new file mode 100644 index 0000000000..e12a83aa2d --- /dev/null +++ b/sass/tests/resources/scss/nested-properties.scss @@ -0,0 +1,7 @@ +li { + font: { + family: serif;; + weight: bold; + size: 1.2em + } +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/nesting.scss b/sass/tests/resources/scss/nesting.scss new file mode 100644 index 0000000000..0336c9e86d --- /dev/null +++ b/sass/tests/resources/scss/nesting.scss @@ -0,0 +1,40 @@ +.top-bar { + color: red; + .alt { + color: blue; + } +} + +.menu { + background-color: red; + a { + color: blue; + } +} + +.caption { + padding: 10px; + .text, .header { + color: green; + } +} + +.footer { + padding: 10px; + .left, .right { + color: purple; + a { + color: orange; + } + } +} + +.main { + color: red; + .second.third { + color: blue; + .fourth { + color: black; + } + } +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/parent-selector.scss b/sass/tests/resources/scss/parent-selector.scss new file mode 100644 index 0000000000..3d0f694801 --- /dev/null +++ b/sass/tests/resources/scss/parent-selector.scss @@ -0,0 +1,14 @@ +a { + font-weight: bold; + text-decoration: none; + &:hover { text-decoration: underline; } + body.firefox & { font-weight: normal; } +} + +#main { + color: black; + a { + font-weight: bold; + &:hover { color: red; } + } +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/reference-parent-selector.css b/sass/tests/resources/scss/reference-parent-selector.css new file mode 100644 index 0000000000..733c8fd42d --- /dev/null +++ b/sass/tests/resources/scss/reference-parent-selector.css @@ -0,0 +1,6 @@ +a { + color: #660000; + &:hover {color: #000000;} + &:visited {color:#660066;} + &:active {color: #ffffff;} +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/semicolons.scss b/sass/tests/resources/scss/semicolons.scss new file mode 100644 index 0000000000..a4a56043d5 --- /dev/null +++ b/sass/tests/resources/scss/semicolons.scss @@ -0,0 +1,9 @@ +.all-the-properties { + font-family: Arial, Helvetica, "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif; ; + position: absolute;; + overflow: hidden; +} +.missing-semicolon-on-last-row { + color: red; + background-color: blue +} diff --git a/sass/tests/resources/scss/var-guarded.scss b/sass/tests/resources/scss/var-guarded.scss new file mode 100644 index 0000000000..8f7aab8fa9 --- /dev/null +++ b/sass/tests/resources/scss/var-guarded.scss @@ -0,0 +1,8 @@ +$content: "First content"; +$content: "Second content?" !default; +$new_content: "First time reference" !default; + +#main { + content: $content; + new-content: $new_content; +}
\ No newline at end of file diff --git a/sass/tests/resources/scss/variables.scss b/sass/tests/resources/scss/variables.scss new file mode 100644 index 0000000000..60acc5dd10 --- /dev/null +++ b/sass/tests/resources/scss/variables.scss @@ -0,0 +1,17 @@ +$blue: #3bbfce; +$margin: 8px; +$chameleon-font-family: Arial, Helvetica, "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif; + +.content-navigation { + border-color: $blue; + $blue: #0000ff; + color: $blue; + color1: darken($blue, 9%); + font-family: $chameleon-font-family; +} + +.border { + padding: $margin; + margin: $margin; + border-color: $blue; +}
\ No newline at end of file diff --git a/sass/tests/src/com/vaadin/sass/AbstractTestBase.java b/sass/tests/src/com/vaadin/sass/AbstractTestBase.java new file mode 100644 index 0000000000..a6b03fefb0 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/AbstractTestBase.java @@ -0,0 +1,84 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.net.URISyntaxException; + +import junit.framework.Assert; + +import org.apache.commons.io.IOUtils; +import org.w3c.css.sac.CSSException; + +public abstract class AbstractTestBase { + + protected ScssStylesheet stylesheet; + protected String originalScss; + protected String parsedScss; + protected String comparisonCss; + + public ScssStylesheet getStyleSheet(String filename) + throws URISyntaxException, CSSException, IOException { + File file = getFile(filename); + stylesheet = ScssStylesheet.get(file.getAbsolutePath()); + return stylesheet; + } + + public File getFile(String filename) throws URISyntaxException, + CSSException, IOException { + return new File(getClass().getResource(filename).toURI()); + } + + public String getFileContent(String filename) throws IOException, + CSSException, URISyntaxException { + File file = getFile(filename); + return getFileContent(file); + } + + /** + * Read in the full content of a file into a string. + * + * @param file + * the file to be read + * @return a String with the content of the + * @throws IOException + * when file reading fails + */ + public String getFileContent(File file) throws IOException { + return IOUtils.toString(new FileReader(file)); + } + + public void testParser(String file) throws CSSException, IOException, + URISyntaxException { + originalScss = getFileContent(file); + ScssStylesheet sheet = getStyleSheet(file); + parsedScss = sheet.toString(); + Assert.assertEquals("Original CSS and parsed CSS do not match", + originalScss, parsedScss); + } + + public void testCompiler(String scss, String css) throws Exception { + comparisonCss = getFileContent(css); + ScssStylesheet sheet = getStyleSheet(scss); + sheet.compile(); + parsedScss = sheet.toString(); + Assert.assertEquals("Original CSS and parsed CSS do not match", + comparisonCss, parsedScss); + } +} diff --git a/sass/tests/src/com/vaadin/sass/parser/ParserTest.java b/sass/tests/src/com/vaadin/sass/parser/ParserTest.java new file mode 100644 index 0000000000..34c365ea13 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/parser/ParserTest.java @@ -0,0 +1,65 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.parser; + +import java.io.IOException; +import java.io.StringReader; + +import org.junit.Assert; +import org.junit.Test; +import org.w3c.css.sac.CSSException; +import org.w3c.css.sac.InputSource; +import org.w3c.css.sac.LexicalUnit; + +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; + +public class ParserTest { + + @Test + public void testParsePropertyValue() throws CSSException, IOException { + Parser parser = new Parser(); + + LexicalUnit value = parser.parsePropertyValue(new InputSource( + new StringReader("$margin/2;"))); + + Assert.assertEquals("margin", value.getStringValue()); + Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, + value.getLexicalUnitType()); + value = value.getNextLexicalUnit(); + Assert.assertEquals(LexicalUnit.SAC_OPERATOR_SLASH, + value.getLexicalUnitType()); + value = value.getNextLexicalUnit(); + Assert.assertEquals(LexicalUnit.SAC_INTEGER, value.getLexicalUnitType()); + Assert.assertEquals(2, value.getIntegerValue()); + + } + + @Test + public void testCanIngoreSingleLineComment() { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + try { + parser.parseStyleSheet(new InputSource(new StringReader( + "//kjaljsföajsfalkj\n@12abcg;"))); + Assert.assertTrue(true); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + } +}
\ No newline at end of file diff --git a/sass/tests/src/com/vaadin/sass/testcases/css/EmptyBlock.java b/sass/tests/src/com/vaadin/sass/testcases/css/EmptyBlock.java new file mode 100644 index 0000000000..de8a45b9a9 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/css/EmptyBlock.java @@ -0,0 +1,35 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.css; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; + +public class EmptyBlock extends AbstractTestBase { + String css = "/basic/empty_block.css"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + testParser(css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/css/Interpolation.java b/sass/tests/src/com/vaadin/sass/testcases/css/Interpolation.java new file mode 100644 index 0000000000..01d593db78 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/css/Interpolation.java @@ -0,0 +1,49 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.css; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.junit.Assert; +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.BlockNode; + +public class Interpolation extends AbstractTestBase { + String scss = "/scss/interpolation.scss"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + + Assert.assertEquals(3, root.getChildren().size()); + BlockNode blockNodeWithInterpolation = (BlockNode) root.getChildren() + .get(2); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/css/Media.java b/sass/tests/src/com/vaadin/sass/testcases/css/Media.java new file mode 100644 index 0000000000..04b8573154 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/css/Media.java @@ -0,0 +1,36 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.css; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; + +public class Media extends AbstractTestBase { + + String css = "/basic/media.css"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + testParser(css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/css/Properties.java b/sass/tests/src/com/vaadin/sass/testcases/css/Properties.java new file mode 100644 index 0000000000..e0c07bc9c0 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/css/Properties.java @@ -0,0 +1,36 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.css; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; + +public class Properties extends AbstractTestBase { + + String css = "/basic/properties.css"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + testParser(css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/css/Reindeer.java b/sass/tests/src/com/vaadin/sass/testcases/css/Reindeer.java new file mode 100644 index 0000000000..9bb4ed4570 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/css/Reindeer.java @@ -0,0 +1,36 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.css; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; + +public class Reindeer extends AbstractTestBase { + + String css = "/basic/reindeer.css"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + testParser(css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/css/Selectors.java b/sass/tests/src/com/vaadin/sass/testcases/css/Selectors.java new file mode 100644 index 0000000000..cb865042b6 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/css/Selectors.java @@ -0,0 +1,36 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.css; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; + +public class Selectors extends AbstractTestBase { + + String css = "/basic/selectors.css"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + testParser(css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/Comments.java b/sass/tests/src/com/vaadin/sass/testcases/scss/Comments.java new file mode 100644 index 0000000000..c76bbb8458 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/Comments.java @@ -0,0 +1,56 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; +import java.net.URISyntaxException; + +import junit.framework.Assert; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.CommentNode; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +public class Comments extends AbstractTestBase { + String scss = "/scss/comments.scss"; + String css = "/css/comments.css"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + Assert.assertNotNull(root); + Assert.assertEquals(6, root.getChildren().size()); + Assert.assertTrue(root.getChildren().get(0) instanceof CommentNode); + Assert.assertTrue(root.getChildren().get(2) instanceof CommentNode); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java b/sass/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java new file mode 100644 index 0000000000..033bbb0a1f --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java @@ -0,0 +1,52 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; + +public class ControlDirectives extends AbstractTestBase { + + String scss = "/scss/control-directives.scss"; + String css = "/css/control-directives.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + Assert.assertNotNull(root); + Assert.fail("Implement assert nodes"); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/Extends.java b/sass/tests/src/com/vaadin/sass/testcases/scss/Extends.java new file mode 100644 index 0000000000..f52a1d2f8b --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/Extends.java @@ -0,0 +1,53 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.junit.Assert; +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.ExtendNode; + +public class Extends extends AbstractTestBase { + String scss = "/scss/extends.scss"; + String css = "/css/extends.css"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + + Assert.assertTrue(root.getChildren().get(2).getChildren().get(0) instanceof ExtendNode); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/Functions.java b/sass/tests/src/com/vaadin/sass/testcases/scss/Functions.java new file mode 100644 index 0000000000..d2e890c052 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/Functions.java @@ -0,0 +1,54 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.BlockNode; + +public class Functions extends AbstractTestBase { + + String scss = "/scss/functions.scss"; + String css = "/css/functions.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + Assert.assertEquals(1, root.getChildren().size()); + BlockNode blockNode = (BlockNode) root.getChildren().get(0); + Assert.assertEquals(12, blockNode.getChildren().size()); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/Imports.java b/sass/tests/src/com/vaadin/sass/testcases/scss/Imports.java new file mode 100644 index 0000000000..8c609273a1 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/Imports.java @@ -0,0 +1,54 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.ImportNode; + +public class Imports extends AbstractTestBase { + + String scss = "/scss/imports.scss"; + String css = "/css/imports.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + ImportNode importNode = (ImportNode) root.getChildren().get(0); + Assert.assertEquals("_partial-for-import", importNode.getUri()); + Assert.assertFalse(importNode.isPureCssImport()); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/MicrosoftExtensions.java b/sass/tests/src/com/vaadin/sass/testcases/scss/MicrosoftExtensions.java new file mode 100644 index 0000000000..5460700db4 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/MicrosoftExtensions.java @@ -0,0 +1,34 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import org.junit.Test; + +import com.vaadin.sass.AbstractTestBase; + +/** + * Test for Microsoft specific CSS extensions. + */ +public class MicrosoftExtensions extends AbstractTestBase { + String scss = "/scss/microsoft-extensions.scss"; + String css = "/css/microsoft-extensions.css"; + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/Mixins.java b/sass/tests/src/com/vaadin/sass/testcases/scss/Mixins.java new file mode 100644 index 0000000000..05b3d3c83e --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/Mixins.java @@ -0,0 +1,118 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; +import java.net.URISyntaxException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; +import org.w3c.css.sac.LexicalUnit; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.BlockNode; +import com.vaadin.sass.tree.MediaNode; +import com.vaadin.sass.tree.MixinDefNode; +import com.vaadin.sass.tree.MixinNode; + +public class Mixins extends AbstractTestBase { + + String scss = "/scss/mixins.scss"; + String css = "/css/mixins.css"; + + @Test + public void testParser() throws CSSException, URISyntaxException, + IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + + MixinDefNode mixinDefNode0 = (MixinDefNode) root.getChildren().get(0); + Assert.assertEquals("font-settings", mixinDefNode0.getName()); + Assert.assertTrue(mixinDefNode0.getArglist().isEmpty()); + Assert.assertEquals(3, mixinDefNode0.getChildren().size()); + + MixinDefNode mixinDefNode1 = (MixinDefNode) root.getChildren().get(1); + Assert.assertEquals("rounded-borders", mixinDefNode1.getName()); + Assert.assertEquals(2, mixinDefNode1.getArglist().size()); + Assert.assertEquals("thickness", mixinDefNode1.getArglist().get(0) + .getName()); + Assert.assertEquals("radius", mixinDefNode1.getArglist().get(1) + .getName()); + Assert.assertEquals(LexicalUnit.SAC_PIXEL, mixinDefNode1.getArglist() + .get(1).getExpr().getLexicalUnitType()); + Assert.assertEquals(3f, mixinDefNode1.getArglist().get(1).getExpr() + .getFloatValue()); + + Assert.assertEquals(4, mixinDefNode1.getChildren().size()); + + BlockNode mainBlockNode = (BlockNode) root.getChildren().get(2); + Assert.assertEquals(3, mainBlockNode.getChildren().size()); + MixinNode mixinNode0MainBlock = (MixinNode) mainBlockNode.getChildren() + .get(0); + Assert.assertEquals("rounded-borders", mixinNode0MainBlock.getName()); + Assert.assertEquals(1f, mixinNode0MainBlock.getArglist().get(0) + .getFloatValue()); + Assert.assertEquals(LexicalUnit.SAC_PIXEL, mixinNode0MainBlock + .getArglist().get(0).getLexicalUnitType()); + MixinNode mixinNOde1MainBlock = (MixinNode) mainBlockNode.getChildren() + .get(1); + Assert.assertEquals("font-settings", mixinNOde1MainBlock.getName()); + Assert.assertTrue(mixinNOde1MainBlock.getArglist().isEmpty()); + + MixinNode mixinNOde2MainBlock = (MixinNode) mainBlockNode.getChildren() + .get(2); + Assert.assertEquals("main-details", mixinNOde2MainBlock.getName()); + Assert.assertTrue(mixinNOde1MainBlock.getArglist().isEmpty()); + + MixinNode mixinNode1MainBlock = (MixinNode) mainBlockNode.getChildren() + .get(1); + Assert.assertTrue(mixinNode1MainBlock.getArglist().isEmpty()); + + BlockNode footerBlockNode = (BlockNode) root.getChildren().get(3); + MixinNode mixinNodeFooterBlock = (MixinNode) footerBlockNode + .getChildren().get(0); + Assert.assertEquals(2f, mixinNodeFooterBlock.getArglist().get(0) + .getFloatValue()); + Assert.assertEquals("px", mixinNodeFooterBlock.getArglist().get(0) + .getDimensionUnitText()); + + Assert.assertEquals(10f, mixinNodeFooterBlock.getArglist().get(1) + .getFloatValue()); + Assert.assertEquals("px", mixinNodeFooterBlock.getArglist().get(1) + .getDimensionUnitText()); + + Assert.assertTrue(root.getChildren().get(4) instanceof MixinDefNode); + Assert.assertTrue(root.getChildren().get(4).getChildren().get(3) instanceof MediaNode); + Assert.assertTrue(root.getChildren().get(4).getChildren().get(4) instanceof MixinNode); + + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } + +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/NestedProperties.java b/sass/tests/src/com/vaadin/sass/testcases/scss/NestedProperties.java new file mode 100644 index 0000000000..2f57934086 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/NestedProperties.java @@ -0,0 +1,69 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.BlockNode; +import com.vaadin.sass.tree.NestPropertiesNode; +import com.vaadin.sass.tree.RuleNode; + +public class NestedProperties extends AbstractTestBase { + String scss = "/scss/nested-properties.scss"; + String css = "/css/nested-properties.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + Assert.assertEquals(1, root.getChildren().size()); + + BlockNode blockNode = (BlockNode) root.getChildren().get(0); + Assert.assertEquals(1, blockNode.getChildren().size()); + + NestPropertiesNode nestPropertiesNode = (NestPropertiesNode) blockNode + .getChildren().get(0); + Assert.assertEquals("font", nestPropertiesNode.getName()); + RuleNode nestedProperty0 = (RuleNode) nestPropertiesNode.getChildren() + .get(0); + RuleNode nestedProperty1 = (RuleNode) nestPropertiesNode.getChildren() + .get(1); + RuleNode nestedProperty2 = (RuleNode) nestPropertiesNode.getChildren() + .get(2); + Assert.assertEquals("family", nestedProperty0.getVariable()); + Assert.assertEquals("weight", nestedProperty1.getVariable()); + Assert.assertEquals("size", nestedProperty2.getVariable()); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/Nesting.java b/sass/tests/src/com/vaadin/sass/testcases/scss/Nesting.java new file mode 100644 index 0000000000..55365c78e1 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/Nesting.java @@ -0,0 +1,87 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.BlockNode; + +public class Nesting extends AbstractTestBase { + + String scss = "/scss/nesting.scss"; + String css = "/css/nesting.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + Assert.assertEquals(5, root.getChildren().size()); + + BlockNode blockNode0 = (BlockNode) root.getChildren().get(0); + Assert.assertEquals(2, blockNode0.getChildren().size()); + BlockNode nestedBlock0 = (BlockNode) blockNode0.getChildren().get(1); + org.junit.Assert.assertEquals(1, nestedBlock0.getChildren().size()); + + BlockNode blockNode1 = (BlockNode) root.getChildren().get(1); + Assert.assertEquals(2, blockNode1.getChildren().size()); + BlockNode nestedBlockInBlock1 = (BlockNode) blockNode1.getChildren() + .get(1); + Assert.assertEquals(1, nestedBlockInBlock1.getChildren().size()); + + BlockNode blockNode2 = (BlockNode) root.getChildren().get(2); + Assert.assertEquals(2, blockNode2.getChildren().size()); + BlockNode nestedBlockInBlock2 = (BlockNode) blockNode2.getChildren() + .get(1); + Assert.assertEquals(1, nestedBlockInBlock2.getChildren().size()); + + BlockNode blockNode3 = (BlockNode) root.getChildren().get(3); + Assert.assertEquals(2, blockNode3.getChildren().size()); + BlockNode nestedBlockInBlock3 = (BlockNode) blockNode3.getChildren() + .get(1); + Assert.assertEquals(2, nestedBlockInBlock3.getChildren().size()); + BlockNode nestednestedBlockInBlock3 = (BlockNode) nestedBlockInBlock3 + .getChildren().get(1); + Assert.assertEquals(1, nestednestedBlockInBlock3.getChildren().size()); + + BlockNode blockNode4 = (BlockNode) root.getChildren().get(4); + Assert.assertEquals(2, blockNode4.getChildren().size()); + BlockNode nestedBlockInBlock4 = (BlockNode) blockNode3.getChildren() + .get(1); + Assert.assertEquals(2, nestedBlockInBlock4.getChildren().size()); + BlockNode nestednestedBlockInBlock4 = (BlockNode) nestedBlockInBlock3 + .getChildren().get(1); + Assert.assertEquals(1, nestednestedBlockInBlock4.getChildren().size()); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/ParentImports.java b/sass/tests/src/com/vaadin/sass/testcases/scss/ParentImports.java new file mode 100644 index 0000000000..8b12f3b7e9 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/ParentImports.java @@ -0,0 +1,64 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.tree.ImportNode; + +public class ParentImports extends AbstractTestBase { + + String scss = "/scss/folder-test/parent-import.scss"; + String css = "/css/parent-import.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + ImportNode importVariableNode = (ImportNode) root.getChildren().get(0); + Assert.assertEquals("../folder-test2/variables.scss", + importVariableNode.getUri()); + Assert.assertFalse(importVariableNode.isPureCssImport()); + + ImportNode importURLNode = (ImportNode) root.getChildren().get(1); + Assert.assertEquals("../folder-test2/url", importURLNode.getUri()); + Assert.assertFalse(importURLNode.isPureCssImport()); + + ImportNode importImportNode = (ImportNode) root.getChildren().get(2); + Assert.assertEquals("../folder-test2/base-imported.scss", + importImportNode.getUri()); + Assert.assertFalse(importImportNode.isPureCssImport()); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java b/sass/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java new file mode 100644 index 0000000000..7ac2450bfc --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java @@ -0,0 +1,59 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.selector.SelectorUtil; +import com.vaadin.sass.tree.BlockNode; + +public class ParentSelector extends AbstractTestBase { + String scss = "/scss/parent-selector.scss"; + String css = "/css/parent-selector.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + BlockNode blockNode = (BlockNode) root.getChildren().get(0); + Assert.assertEquals(4, blockNode.getChildren().size()); + BlockNode nestedBlock1 = (BlockNode) blockNode.getChildren().get(2); + Assert.assertEquals("&:hover", + SelectorUtil.toString(nestedBlock1.getSelectorList())); + BlockNode nestedBlock2 = (BlockNode) blockNode.getChildren().get(3); + Assert.assertEquals("body.firefox &", + SelectorUtil.toString(nestedBlock2.getSelectorList())); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/Semicolons.java b/sass/tests/src/com/vaadin/sass/testcases/scss/Semicolons.java new file mode 100644 index 0000000000..9dd8a38bfe --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/Semicolons.java @@ -0,0 +1,34 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import org.junit.Test; + +import com.vaadin.sass.AbstractTestBase; + +/** + * Test for missing and extraneous semicolon handling. + */ +public class Semicolons extends AbstractTestBase { + String scss = "/scss/semicolons.scss"; + String css = "/css/semicolons.css"; + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/VariableGuarded.java b/sass/tests/src/com/vaadin/sass/testcases/scss/VariableGuarded.java new file mode 100644 index 0000000000..2c37737e69 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/VariableGuarded.java @@ -0,0 +1,36 @@ +package com.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; + +public class VariableGuarded extends AbstractTestBase { + String scss = "/scss/var-guarded.scss"; + String css = "/css/var-guarded.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + Assert.assertEquals(4, root.getChildren().size()); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + Assert.assertEquals("Original CSS and parsed CSS doesn't match", + comparisonCss, parsedScss); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/scss/Variables.java b/sass/tests/src/com/vaadin/sass/testcases/scss/Variables.java new file mode 100644 index 0000000000..010a2085ba --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/scss/Variables.java @@ -0,0 +1,106 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.scss; + +import java.io.IOException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.w3c.css.sac.CSSException; + +import com.vaadin.sass.AbstractTestBase; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.handler.SCSSDocumentHandler; +import com.vaadin.sass.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.parser.Parser; +import com.vaadin.sass.parser.SCSSLexicalUnit; +import com.vaadin.sass.tree.BlockNode; +import com.vaadin.sass.tree.RuleNode; +import com.vaadin.sass.tree.VariableNode; + +public class Variables extends AbstractTestBase { + + String scss = "/scss/variables.scss"; + String css = "/css/variables.css"; + + @Test + public void testParser() throws CSSException, IOException { + Parser parser = new Parser(); + SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); + parser.setDocumentHandler(handler); + parser.parseStyleSheet(getClass().getResource(scss).getPath()); + ScssStylesheet root = handler.getStyleSheet(); + Assert.assertEquals(5, root.getChildren().size()); + + VariableNode varNode1 = (VariableNode) root.getChildren().get(0); + Assert.assertEquals("blue", varNode1.getName()); + // Assert.assertEquals("blue", varNode1.getExpr().); + + VariableNode varNode2 = (VariableNode) root.getChildren().get(1); + Assert.assertEquals("margin", varNode2.getName()); + Assert.assertEquals(8f, varNode2.getExpr().getFloatValue()); + Assert.assertEquals("px", varNode2.getExpr().getDimensionUnitText()); + + VariableNode varNode3 = (VariableNode) root.getChildren().get(2); + Assert.assertEquals("chameleon-font-family", varNode3.getName()); + + BlockNode blockNode1 = (BlockNode) root.getChildren().get(3); + Assert.assertEquals(5, blockNode1.getChildren().size()); + RuleNode ruleNode1Block1 = (RuleNode) blockNode1.getChildren().get(0); + Assert.assertEquals("border-color", ruleNode1Block1.getVariable()); + Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, ruleNode1Block1 + .getValue().getLexicalUnitType()); + Assert.assertEquals("blue", ruleNode1Block1.getValue().getStringValue()); + + VariableNode varNode1Block1 = (VariableNode) blockNode1.getChildren() + .get(1); + Assert.assertEquals("blue", varNode1Block1.getName()); + + RuleNode ruleNode2Block1 = (RuleNode) blockNode1.getChildren().get(2); + Assert.assertEquals("color", ruleNode2Block1.getVariable()); + Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, ruleNode2Block1 + .getValue().getLexicalUnitType()); + Assert.assertEquals("blue", ruleNode2Block1.getValue().getStringValue()); + + BlockNode blockNode2 = (BlockNode) root.getChildren().get(4); + RuleNode ruleNode1Block2 = (RuleNode) blockNode2.getChildren().get(0); + Assert.assertEquals("padding", ruleNode1Block2.getVariable()); + Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, ruleNode1Block2 + .getValue().getLexicalUnitType()); + Assert.assertEquals("margin", ruleNode1Block2.getValue() + .getStringValue()); + + RuleNode ruleNode2Block2 = (RuleNode) blockNode2.getChildren().get(1); + Assert.assertEquals("margin", ruleNode2Block2.getVariable()); + Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, ruleNode2Block2 + .getValue().getLexicalUnitType()); + Assert.assertEquals("margin", ruleNode2Block2.getValue() + .getStringValue()); + + RuleNode ruleNode3Block2 = (RuleNode) blockNode2.getChildren().get(2); + Assert.assertEquals("border-color", ruleNode3Block2.getVariable()); + Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, ruleNode1Block2 + .getValue().getLexicalUnitType()); + Assert.assertEquals("blue", ruleNode3Block2.getValue().getStringValue()); + } + + @Test + public void testCompiler() throws Exception { + testCompiler(scss, css); + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/visitor/ImportVisitorTest.java b/sass/tests/src/com/vaadin/sass/testcases/visitor/ImportVisitorTest.java new file mode 100644 index 0000000000..8459139b4b --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/visitor/ImportVisitorTest.java @@ -0,0 +1,25 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.visitor; + +import org.junit.Test; + +public class ImportVisitorTest { + @Test + public void canHandleNestedImports() { + } +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java b/sass/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java new file mode 100644 index 0000000000..6b7cfcb2fb --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java @@ -0,0 +1,279 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.visitor; + +import java.util.ArrayList; + +import org.junit.Assert; +import org.junit.Test; +import org.w3c.css.sac.LexicalUnit; + +import com.steadystate.css.parser.LexicalUnitImpl; +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.parser.SCSSLexicalUnit; +import com.vaadin.sass.tree.BlockNode; +import com.vaadin.sass.tree.MixinDefNode; +import com.vaadin.sass.tree.MixinNode; +import com.vaadin.sass.tree.RuleNode; +import com.vaadin.sass.tree.VariableNode; +import com.vaadin.sass.visitor.MixinVisitor; + +public class MixinVisitorTest { + private MixinVisitor mixinVisitor = new MixinVisitor(); + + @Test + public void testTraversMixinWithoutArgs() { + ScssStylesheet root = new ScssStylesheet(); + MixinDefNode mixinDefNoArgs = new MixinDefNode("no-args", null); + BlockNode blockNode = new BlockNode(null); + mixinDefNoArgs.appendChild(blockNode); + root.appendChild(mixinDefNoArgs); + + BlockNode blockWithMixin = new BlockNode(null); + MixinNode mixin = new MixinNode("no-args", null); + blockWithMixin.appendChild(mixin); + root.appendChild(blockWithMixin); + + try { + mixinVisitor.traverse(root); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + + Assert.assertEquals(1, root.getChildren().size()); + BlockNode child = (BlockNode) root.getChildren().get(0); + BlockNode fromMixin = (BlockNode) child.getChildren().get(0); + Assert.assertFalse(fromMixin.hasChildren()); + } + + @Test + public void testTraverseMixinWithNonDefaultArgs() { + ScssStylesheet root = new ScssStylesheet(); + ArrayList<VariableNode> args = new ArrayList<VariableNode>(); + args.add(new VariableNode("arg", null, false)); + MixinDefNode mixinDefWithNonDefaultArg = new MixinDefNode( + "non-default-arg", args); + BlockNode blockNode = new BlockNode(null); + mixinDefWithNonDefaultArg.appendChild(blockNode); + root.appendChild(mixinDefWithNonDefaultArg); + + BlockNode blockWithMixin = new BlockNode(null); + ArrayList<LexicalUnit> includeArgs = new ArrayList<LexicalUnit>(); + LexicalUnit includeArg = LexicalUnitImpl.createPixel(null, 1f); + includeArgs.add(includeArg); + MixinNode mixin = new MixinNode("non-default-arg", includeArgs); + blockWithMixin.appendChild(mixin); + root.appendChild(blockWithMixin); + + try { + mixinVisitor.traverse(root); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + + Assert.assertEquals(1, root.getChildren().size()); + BlockNode child = (BlockNode) root.getChildren().get(0); + VariableNode varNode = (VariableNode) child.getChildren().get(0); + Assert.assertEquals("arg", varNode.getName()); + Assert.assertEquals(LexicalUnit.SAC_PIXEL, varNode.getExpr() + .getLexicalUnitType()); + Assert.assertEquals(1f, varNode.getExpr().getFloatValue(), 0); + BlockNode fromMixin = (BlockNode) child.getChildren().get(1); + Assert.assertFalse(fromMixin.hasChildren()); + + } + + @Test + public void testTraverseMixinWithDefaultArgs() { + ScssStylesheet root = new ScssStylesheet(); + ArrayList<VariableNode> args = new ArrayList<VariableNode>(); + args.add(new VariableNode("arg", LexicalUnitImpl.createPixel(null, 1f), + false)); + MixinDefNode mixinDefWithNonDefaultArg = new MixinDefNode( + "default-arg", args); + BlockNode blockNode = new BlockNode(null); + mixinDefWithNonDefaultArg.appendChild(blockNode); + root.appendChild(mixinDefWithNonDefaultArg); + + BlockNode blockWithMixin = new BlockNode(null); + MixinNode mixin = new MixinNode("default-arg", null); + blockWithMixin.appendChild(mixin); + root.appendChild(blockWithMixin); + + try { + mixinVisitor.traverse(root); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + + Assert.assertEquals(1, root.getChildren().size()); + BlockNode child = (BlockNode) root.getChildren().get(0); + VariableNode varNode = (VariableNode) child.getChildren().get(0); + Assert.assertEquals("arg", varNode.getName()); + Assert.assertEquals(LexicalUnit.SAC_PIXEL, varNode.getExpr() + .getLexicalUnitType()); + Assert.assertEquals(1f, varNode.getExpr().getFloatValue(), 0); + BlockNode fromMixin = (BlockNode) child.getChildren().get(1); + Assert.assertFalse(fromMixin.hasChildren()); + + } + + @Test + public void testMixinWithoutArgument() { + /* + * ArrayList<String> args = new ArrayList<String>(); args.add("arg"); + * MixinDefNode mixinDefWithArgs = new MixinDefNode("with-args", args); + * RuleNode ruleNode = new RuleNode("var", + * com.vaadin.sass.parser.LexicalUnitImpl.createVariable(0, 0, null, + * "arg"), false); mixinDefWithArgs.appendChild(ruleNode); + */ + ScssStylesheet root = new ScssStylesheet(); + MixinDefNode mixinDefNoArgs = new MixinDefNode("table-base", null); + BlockNode thBlockNode = new BlockNode(null); + RuleNode textAlignRuleNode = new RuleNode("text-align", + LexicalUnitImpl.createString(null, "center"), false, null); + thBlockNode.appendChild(textAlignRuleNode); + RuleNode fontWeightRuleNode = new RuleNode("font-weight", + LexicalUnitImpl.createString(null, "bold"), false, null); + thBlockNode.appendChild(fontWeightRuleNode); + mixinDefNoArgs.appendChild(thBlockNode); + + BlockNode tdthBlockNode = new BlockNode(null); + RuleNode paddingRuleNode = new RuleNode("padding", + LexicalUnitImpl.createPixel(null, 2f), false, null); + tdthBlockNode.appendChild(paddingRuleNode); + mixinDefNoArgs.appendChild(tdthBlockNode); + root.appendChild(mixinDefNoArgs); + + BlockNode dataBlock = new BlockNode(null); + MixinNode mixinNode = new MixinNode("table-base", null); + dataBlock.appendChild(mixinNode); + root.appendChild(dataBlock); + + try { + mixinVisitor.traverse(root); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + + Assert.assertEquals(1, root.getChildren().size()); + dataBlock = (BlockNode) root.getChildren().get(0); + BlockNode thBlock = (BlockNode) dataBlock.getChildren().get(0); + Assert.assertEquals(2, thBlock.getChildren().size()); + BlockNode thtdBlock = (BlockNode) dataBlock.getChildren().get(1); + Assert.assertEquals(1, thtdBlock.getChildren().size()); + + /* + * Assert.assertEquals(2, root.getChildren().size()); BlockNode + * datathBlockNode = (BlockNode) root.getChildren().get(0); + * Assert.assertEquals(LexicalUnit.SAC_IDENT, datathBlockNode + * .getSelectorList().item(0).getSelectorType()); + * Assert.assertEquals("text-align", ((RuleNode) datathBlockNode + * .getChildren().get(0)).getVariable()); Assert.assertEquals("center", + * ((RuleNode) datathBlockNode.getChildren() + * .get(0)).getValue().getStringValue()); + * Assert.assertEquals("font-weight", ((RuleNode) datathBlockNode + * .getChildren().get(1)).getVariable()); Assert.assertEquals("bold", + * ((RuleNode) datathBlockNode.getChildren() + * .get(1)).getValue().getStringValue()); + * + * BlockNode datathdatatdBlockNode = (BlockNode) + * root.getChildren().get(1); Assert.assertEquals(LexicalUnit.SAC_IDENT, + * datathdatatdBlockNode .getSelectorList().item(0).getSelectorType()); + * Assert.assertEquals(LexicalUnit.SAC_IDENT, datathdatatdBlockNode + * .getSelectorList().item(1).getSelectorType()); + * Assert.assertEquals("padding", ((RuleNode) datathdatatdBlockNode + * .getChildren().get(0)).getVariable()); Assert.assertEquals(2.0f, + * ((RuleNode) datathdatatdBlockNode + * .getChildren().get(0)).getValue().getFloatValue(), 0); + * Assert.assertEquals(LexicalUnit.SAC_PIXEL, ((RuleNode) + * datathdatatdBlockNode.getChildren().get(0)) + * .getValue().getLexicalUnitType()); + */ + + } + + @Test + public void testMixinWithArgument() { + ScssStylesheet root = new ScssStylesheet(); + ArrayList<VariableNode> argNameList = new ArrayList<VariableNode>(); + argNameList.add(new VariableNode("dist", null, false)); + MixinDefNode mixinDef = new MixinDefNode("left", argNameList); + + RuleNode floatRuleNode = new RuleNode("float", + LexicalUnitImpl.createString(null, "left"), false, null); + mixinDef.appendChild(floatRuleNode); + RuleNode marginLeftRuleNode = new RuleNode("margin-left", + com.vaadin.sass.parser.LexicalUnitImpl.createVariable(0, 0, + null, "dist"), false, null); + mixinDef.appendChild(marginLeftRuleNode); + root.appendChild(mixinDef); + + BlockNode dataBlock = new BlockNode(null); + ArrayList<LexicalUnit> argValueList = new ArrayList<LexicalUnit>(); + LexicalUnit arg = LexicalUnitImpl.createPixel(null, 10f); + argValueList.add(arg); + MixinNode mixinNode = new MixinNode("left", argValueList); + dataBlock.appendChild(mixinNode); + root.appendChild(dataBlock); + + try { + mixinVisitor.traverse(root); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + + Assert.assertEquals(1, root.getChildren().size()); + BlockNode dataBlockNode = (BlockNode) root.getChildren().get(0); + VariableNode variable = (VariableNode) dataBlockNode.getChildren().get( + 0); + Assert.assertEquals("dist", variable.getName()); + Assert.assertEquals("float", ((RuleNode) dataBlockNode.getChildren() + .get(1)).getVariable()); + Assert.assertEquals("left", ((RuleNode) dataBlockNode.getChildren() + .get(1)).getValue().getStringValue()); + Assert.assertEquals("margin-left", ((RuleNode) dataBlockNode + .getChildren().get(2)).getVariable()); + Assert.assertEquals(SCSSLexicalUnit.SCSS_VARIABLE, + ((RuleNode) dataBlockNode.getChildren().get(2)).getValue() + .getLexicalUnitType()); + } + + @Test + public void testTopLevelInclude() { + ScssStylesheet root = new ScssStylesheet(); + + MixinDefNode defNode = new MixinDefNode("mixin", null); + defNode.appendChild(new RuleNode("var", null, false, null)); + root.appendChild(defNode); + + MixinNode mixinNode = new MixinNode("mixin", null); + root.appendChild(mixinNode); + + try { + mixinVisitor.traverse(root); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + + Assert.assertEquals(1, root.getChildren().size()); + RuleNode varRule = (RuleNode) root.getChildren().get(0); + Assert.assertEquals("var", varRule.getVariable()); + + } + +} diff --git a/sass/tests/src/com/vaadin/sass/testcases/visitor/NestedPropertiesVisitorTest.java b/sass/tests/src/com/vaadin/sass/testcases/visitor/NestedPropertiesVisitorTest.java new file mode 100644 index 0000000000..3885869b72 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/testcases/visitor/NestedPropertiesVisitorTest.java @@ -0,0 +1,67 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.testcases.visitor; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.tree.NestPropertiesNode; +import com.vaadin.sass.tree.RuleNode; +import com.vaadin.sass.tree.VariableNode; +import com.vaadin.sass.visitor.NestPropertiesVisitor; + +public class NestedPropertiesVisitorTest { + private NestPropertiesVisitor visitor = new NestPropertiesVisitor(); + + @Test + public void testEmptyTreeNoChange() { + ScssStylesheet root = new ScssStylesheet(); + Assert.assertFalse(root.hasChildren()); + visitor.traverse(root); + Assert.assertFalse(root.hasChildren()); + } + + @Test + public void testNoNestPropertiesNodeNoChange() { + ScssStylesheet root = new ScssStylesheet(); + root.appendChild(new VariableNode("", "")); + Assert.assertEquals(1, root.getChildren().size()); + visitor.traverse(root); + Assert.assertEquals(1, root.getChildren().size()); + } + + @Test + public void testNestedPropertiesCanBeUnnested() { + ScssStylesheet root = new ScssStylesheet(); + NestPropertiesNode nested = new NestPropertiesNode("nested"); + RuleNode child0 = new RuleNode("child0", null, false, null); + RuleNode child1 = new RuleNode("child1", null, true, null); + nested.appendChild(child0); + nested.appendChild(child1); + root.appendChild(nested); + + Assert.assertEquals(1, root.getChildren().size()); + visitor.traverse(root); + Assert.assertEquals(2, root.getChildren().size()); + + for (int i = 0; i < root.getChildren().size(); i++) { + RuleNode node = (RuleNode) root.getChildren().get(i); + Assert.assertEquals("nested-child" + i, node.getVariable()); + } + } +} diff --git a/sass/tests/src/com/vaadin/sass/tree/ImportNodeTest.java b/sass/tests/src/com/vaadin/sass/tree/ImportNodeTest.java new file mode 100644 index 0000000000..b3a1c8f318 --- /dev/null +++ b/sass/tests/src/com/vaadin/sass/tree/ImportNodeTest.java @@ -0,0 +1,76 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * 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.vaadin.sass.tree; + +import org.junit.Assert; +import org.junit.Test; + +import com.steadystate.css.parser.SACMediaListImpl; + +public class ImportNodeTest { + @Test + public void testIsPureCssImportShouldReturnTrueWhenIsURL() { + ImportNode node = new ImportNode("", null, true); + Assert.assertTrue(node.isPureCssImport()); + } + + @Test + public void testIsPureCssImportShouldReturnTrueWhenStartsWithHttp() { + ImportNode node = new ImportNode("http://abc", null, false); + Assert.assertTrue(node.isPureCssImport()); + } + + @Test + public void testIsPureCssImportShouldReturnTrueWhenEndsWithCss() { + ImportNode node = new ImportNode("abc.css", null, false); + Assert.assertTrue(node.isPureCssImport()); + } + + @Test + public void testIsPureCssImportShouldReturnTrueWhenHasMediaQueries() { + SACMediaListImpl ml = new SACMediaListImpl(); + ml.add("screen"); + ImportNode node = new ImportNode("", ml, false); + Assert.assertTrue(node.isPureCssImport()); + } + + @Test + public void testIsPureCssImportShouldReturnFalseInOtherCases() { + ImportNode node = new ImportNode("", null, false); + Assert.assertFalse(node.isPureCssImport()); + } + + @Test + public void testToStringWhenIsURL() { + ImportNode node = new ImportNode("test", null, true); + Assert.assertEquals("@import url(test);", node.toString()); + } + + @Test + public void testToStringWhenIsNotURL() { + ImportNode node = new ImportNode("test", null, false); + Assert.assertEquals("@import \"test\";", node.toString()); + } + + @Test + public void testToStringWithMediaQueries() { + SACMediaListImpl ml = new SACMediaListImpl(); + ml.add("screen"); + ImportNode node = new ImportNode("test", ml, true); + Assert.assertEquals("@import url(test) screen;", node.toString()); + } +} |