├── .gitignore ├── CHANGELOG.md ├── README.md ├── pom.xml └── src ├── main ├── java │ └── org │ │ └── lesscss │ │ ├── Compile.java │ │ ├── FileResource.java │ │ ├── HttpResource.java │ │ ├── LessCompiler.java │ │ ├── LessException.java │ │ ├── LessSource.java │ │ ├── Resource.java │ │ ├── logging │ │ ├── JULILessLoggerProvider.java │ │ ├── LessLogger.java │ │ ├── LessLoggerFactory.java │ │ ├── LessLoggerProvider.java │ │ └── SLF4JLessLoggerProvider.java │ │ └── package-info.java ├── javadoc │ └── stylesheet.css └── resources │ └── META-INF │ ├── less-rhino-1.7.0.js │ └── lessc-rhino-1.7.0.js └── test ├── java ├── integration │ ├── AbstractCompileIT.java │ ├── BootstrapIT.java │ ├── CompatibilityIT.java │ ├── ImportIT.java │ ├── LessExceptionIT.java │ ├── MultithreadedIT.java │ └── ReuseIT.java └── org │ └── lesscss │ ├── LessCompilerTest.java │ └── LessSourceTest.java └── resources ├── bootstrap-3.1.1 ├── css │ ├── bootstrap.css │ └── bootstrap.min.css └── less │ ├── alerts.less │ ├── badges.less │ ├── bootstrap.less │ ├── breadcrumbs.less │ ├── button-groups.less │ ├── buttons.less │ ├── carousel.less │ ├── close.less │ ├── code.less │ ├── compile.html │ ├── component-animations.less │ ├── dropdowns.less │ ├── forms.less │ ├── glyphicons.less │ ├── grid.less │ ├── input-groups.less │ ├── jumbotron.less │ ├── labels.less │ ├── less-1.6.1.js │ ├── list-group.less │ ├── media.less │ ├── mixins.less │ ├── modals.less │ ├── navbar.less │ ├── navs.less │ ├── normalize.less │ ├── pager.less │ ├── pagination.less │ ├── panels.less │ ├── popovers.less │ ├── print.less │ ├── progress-bars.less │ ├── responsive-utilities.less │ ├── scaffolding.less │ ├── tables.less │ ├── theme.less │ ├── thumbnails.less │ ├── tooltip.less │ ├── type.less │ ├── utilities.less │ ├── variables.less │ └── wells.less ├── bootstrap ├── css │ ├── bootstrap-responsive.css │ ├── bootstrap-responsive.min.css │ ├── bootstrap.css │ └── bootstrap.min.css └── less │ ├── accordion.less │ ├── alerts.less │ ├── badges.less │ ├── bootstrap.less │ ├── breadcrumbs.less │ ├── button-groups.less │ ├── buttons.less │ ├── carousel.less │ ├── close.less │ ├── code.less │ ├── component-animations.less │ ├── dropdowns.less │ ├── forms.less │ ├── grid.less │ ├── hero-unit.less │ ├── labels.less │ ├── layouts.less │ ├── mixins.less │ ├── modals.less │ ├── navbar.less │ ├── navs.less │ ├── pager.less │ ├── pagination.less │ ├── popovers.less │ ├── progress-bars.less │ ├── reset.less │ ├── responsive.less │ ├── scaffolding.less │ ├── sprites.less │ ├── tables.less │ ├── thumbnails.less │ ├── tooltip.less │ ├── type.less │ ├── utilities.less │ ├── variables.less │ └── wells.less ├── compatibility ├── a_source.less ├── css │ ├── colors.css │ ├── comments.css │ ├── css-3.css │ ├── css-escapes.css │ ├── css.css │ ├── functions.css │ ├── ie-filters.css │ ├── import.css │ ├── import_custom.css │ ├── javascript.css │ ├── lazy-eval.css │ ├── media.css │ ├── mixins-args.css │ ├── mixins-closure.css │ ├── mixins-guards.css │ ├── mixins-important.css │ ├── mixins-nested.css │ ├── mixins-pattern.css │ ├── mixins.css │ ├── operations.css │ ├── parens.css │ ├── rulesets.css │ ├── scope.css │ ├── selectors.css │ ├── strings.css │ ├── variables.css │ └── whitespace.css ├── custom.color.js ├── custom.math.js ├── custom.process.title.js ├── less │ ├── colors.less │ ├── comments.less │ ├── css-3.less │ ├── css-escapes.less │ ├── css.less │ ├── functions.less │ ├── ie-filters.less │ ├── import.less │ ├── import │ │ ├── import-test-a.less │ │ ├── import-test-b.less │ │ ├── import-test-c.less │ │ ├── import-test-d.css │ │ └── import-test-e.less │ ├── import_custom.less │ ├── javascript.less │ ├── lazy-eval.less │ ├── media.less │ ├── mixins-args.less │ ├── mixins-closure.less │ ├── mixins-guards.less │ ├── mixins-important.less │ ├── mixins-nested.less │ ├── mixins-pattern.less │ ├── mixins.less │ ├── operations.less │ ├── parens.less │ ├── rulesets.less │ ├── scope.less │ ├── selectors.less │ ├── strings.less │ ├── variables.less │ └── whitespace.less └── utf8-content.less ├── env.rhino.test.js ├── import ├── css │ ├── http_import.css │ └── import.css ├── endsinless │ ├── css │ │ └── import.css │ └── less │ │ ├── iendinless.less │ │ └── import.less └── less │ ├── http_import.less │ ├── import.less │ ├── import1.less │ ├── import1 │ ├── import1a.less │ ├── import1b.less │ └── import1c.less │ ├── import4.less │ ├── import5.less │ └── import_quotes.less └── less.test.js /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .classpath 3 | .project 4 | .settings/ 5 | *.iml 6 | *.ipr 7 | target/ 8 | dependency-reduced-pom.xml 9 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | # 1.4.1 3 | 4 | - support for lesscss 1.4.1 5 | 6 | # 1.3.3 7 | 8 | - support for lesscss 1.3.3 9 | - fixed #22 singe and double quotes import issue -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Official LESS CSS Compiler for Java 2 | =================================== 3 | 4 | **Latest release** 1.7.0.1.1 - The 1.1 release that is compatible with less 1.7.0 5 | 6 | 7 | LESS CSS Compiler for Java is a library to compile LESS sources to CSS stylesheets. 8 | 9 | The compiler uses Rhino, Envjs (simulated browser environment written in JavaScript), and the official LESS JavaScript compiler. 10 | 11 | Look at the simple example below to compile LESS to CSS: 12 | 13 | // Instantiate the LESS compiler 14 | LessCompiler lessCompiler = new LessCompiler(); 15 | 16 | // Instantiate the LESS compiler with some compiler options 17 | LessCompiler lessCompiler = new LessCompiler(Arrays.asList("--relative-urls", "--strict-math=on")); 18 | 19 | // Compile LESS input string to CSS output string 20 | String css = lessCompiler.compile("@color: #4D926F; #header { color: @color; }"); 21 | 22 | // Or compile LESS input file to CSS output file 23 | lessCompiler.compile(new File("main.less"), new File("main.css")); 24 | 25 | LessCompiler is thread safe. In other words, an application only needs one LessCompiler that it can reuse whenever necessary. 26 | 27 | To learn more about LESS, please see http://lesscss.org/. 28 | 29 | 30 | Getting Started 31 | --------------- 32 | 33 | Maven users should add the library using the following dependency: 34 | 35 | 36 | org.lesscss 37 | lesscss 38 | 1.7.0.1.1 39 | 40 | 41 | (lesscss-java is in the Maven Central repository.) 42 | 43 | Non-Maven users should download the latest version and add it to the project's classpath. Also the following dependencies are required: 44 | 45 | + Apache Commons IO 2.4 46 | + Apache Commons Lang 3.1 47 | + Rhino: JavaScript for Java 1.7R4 48 | 49 | If [SLF4J](http://www.slf4j.org/) is present in the classpath, it will be used for logging. 50 | 51 | Compatibility 52 | ------------- 53 | 54 | The LESS CSS Compiler for Java contains all LESS compatibility tests. All tests pass, except the @import test case which fails partially as the compiler does not support the media query import feature (yet). 55 | 56 | The project also contains integration tests for compiling the Twitter Bootstrap (http://twitter.github.com/bootstrap/) library. If you are using another 3th party LESS library you want to be added to the integration tests, just create a issue and provide a link to the library. 57 | 58 | 59 | Support 60 | ------- 61 | 62 | Have a question, or found an issue? Just create a issue: https://github.com/marceloverdijk/lesscss-java/issues 63 | 64 | 65 | Building From Source 66 | -------------------- 67 | 68 | Can be built with [Maven 2.2.x](http://maven.apache.org) (or later?) by using the following commands: 69 | 70 | mvn package 71 | 72 | or, to install into your local Maven repository: 73 | 74 | mvn install 75 | 76 | You may also wish to build API Documentation: 77 | 78 | mvn javadoc:javadoc 79 | 80 | Authors 81 | ------- 82 | 83 | **Marcel Overdijk** 84 | 85 | + marcel@overdijk.me 86 | + http://twitter.com/marceloverdijk 87 | + http://github.com/marceloverdijk 88 | 89 | **Craig Andrews** 90 | 91 | + candrews@integralblue.com 92 | + http://candrews.integralblue.com 93 | 94 | **Christophe Popov** 95 | + http://twitter.com/chpopov 96 | + http://uk.linkedin.com/in/hpopov/ 97 | 98 | Copyright and License 99 | --------------------- 100 | 101 | Copyright 2012 Marcel Overdijk 102 | 103 | Licensed under the Apache License, Version 2.0 (the "License"); 104 | you may not use this file except in compliance with the License. 105 | You may obtain a copy of the License at 106 | 107 | http://www.apache.org/licenses/LICENSE-2.0 108 | 109 | Unless required by applicable law or agreed to in writing, software 110 | distributed under the License is distributed on an "AS IS" BASIS, 111 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 112 | See the License for the specific language governing permissions and 113 | limitations under the License. 114 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/Compile.java: -------------------------------------------------------------------------------- 1 | package org.lesscss; 2 | 3 | import org.lesscss.logging.LessLogger; 4 | import org.lesscss.logging.LessLoggerFactory; 5 | 6 | import java.io.File; 7 | import java.util.Arrays; 8 | import java.util.List; 9 | 10 | public class Compile { 11 | 12 | private static final LessLogger logger = LessLoggerFactory.getLogger( Compile.class ); 13 | 14 | public static void main(String[] args) throws Exception { 15 | if( args.length < 1 ) { 16 | logger.info("usage: org.lesscss.Compile "); 17 | System.exit(-1); 18 | } 19 | 20 | List argList = Arrays.asList(args); 21 | String fileName = argList.get(argList.size() - 1); 22 | argList = argList.subList(0, argList.size() - 1); 23 | 24 | File output = new File( fileName + ".css" ); 25 | logger.info("Compiler output = %s", output.getCanonicalPath() ); 26 | 27 | long start = System.currentTimeMillis(); 28 | LessCompiler lessCompiler = new LessCompiler(argList); 29 | 30 | lessCompiler.compile( new File( fileName ), output ); 31 | 32 | long duration = System.currentTimeMillis() - start; 33 | logger.info("Done. %,d ms", duration); 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/java/org/lesscss/FileResource.java: -------------------------------------------------------------------------------- 1 | package org.lesscss; 2 | 3 | import java.io.File; 4 | import java.io.FileInputStream; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | 8 | /** 9 | * File based implementation of {@link Resource}. 10 | * 11 | * @author Anton Pechinsky 12 | */ 13 | public class FileResource implements Resource { 14 | 15 | private File file; 16 | 17 | public FileResource(File file) { 18 | if (file == null) { 19 | throw new IllegalArgumentException("File must not be null!"); 20 | } 21 | this.file = file; 22 | } 23 | 24 | public boolean exists() { 25 | return file.exists(); 26 | } 27 | 28 | public InputStream getInputStream() throws IOException { 29 | return new FileInputStream(file); 30 | } 31 | 32 | public long lastModified() { 33 | return file.lastModified(); 34 | } 35 | 36 | public Resource createRelative(String relativePath) { 37 | File relativeFile = new File(file.getParentFile(), relativePath); 38 | return new FileResource(relativeFile); 39 | } 40 | 41 | @Override 42 | public String toString() { 43 | return file.getAbsolutePath(); 44 | } 45 | 46 | public String getName() { 47 | return file.getAbsolutePath(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/HttpResource.java: -------------------------------------------------------------------------------- 1 | package org.lesscss; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.net.URI; 6 | import java.net.URISyntaxException; 7 | import java.net.URL; 8 | import java.net.URLConnection; 9 | 10 | public class HttpResource implements Resource { 11 | 12 | URI url; 13 | 14 | public HttpResource(String url) throws URISyntaxException { 15 | this.url = new URI( url ); 16 | } 17 | 18 | public HttpResource(URI url) { 19 | this.url = url; 20 | } 21 | 22 | public boolean exists() { 23 | try { 24 | URL u = url.toURL(); 25 | URLConnection connection = u.openConnection(); 26 | connection.connect(); 27 | return true; 28 | } catch (IOException e) { 29 | return false; 30 | } 31 | } 32 | 33 | public long lastModified() { 34 | try { 35 | URL u = url.toURL(); 36 | URLConnection connection = u.openConnection(); 37 | return connection.getLastModified(); 38 | } catch( IOException e ) { 39 | return 0; 40 | } 41 | } 42 | 43 | public InputStream getInputStream() throws IOException { 44 | return url.toURL().openStream(); 45 | } 46 | 47 | public Resource createRelative(String relativeResourcePath) throws IOException { 48 | try { 49 | return new HttpResource(url.resolve(new URI(relativeResourcePath))); 50 | } catch (URISyntaxException e) { 51 | throw (IOException)new IOException( "Could not resolve " + url + " against " + relativeResourcePath ).initCause(e); 52 | } 53 | } 54 | 55 | public String getName() { 56 | return url.toASCIIString(); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/LessException.java: -------------------------------------------------------------------------------- 1 | /* Copyright 2011-2012 The Apache Software Foundation. 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | package org.lesscss; 16 | 17 | /** 18 | * An exception that provides information on a LESS compilation error. 19 | * 20 | * @author Marcel Overdijk 21 | */ 22 | @SuppressWarnings("serial") 23 | public class LessException extends Exception { 24 | 25 | /** 26 | * Constructs a new LessException. 27 | * 28 | * @param cause The cause. 29 | */ 30 | public LessException(Throwable cause) { 31 | super(cause); 32 | } 33 | 34 | /** 35 | * Constructs a new LessException. 36 | * 37 | * @param message The message. 38 | * @param cause The cause. 39 | */ 40 | public LessException(String message, Throwable cause) { 41 | super(message, cause); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/Resource.java: -------------------------------------------------------------------------------- 1 | package org.lesscss; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | 6 | /** 7 | * LESS resource interface. 8 | * 9 | *

Abstracts {@link LessSource} from resource access technology. Makes it possible to load LESS resources from files, 10 | * classpath resource, URL, etc.

11 | * 12 | * @author Anton Pechinsky 13 | */ 14 | public interface Resource { 15 | 16 | /** 17 | * Tests if resource exists. 18 | * 19 | * @return true if resource exists. 20 | */ 21 | boolean exists(); 22 | 23 | /** 24 | * Returns the time that the LESS source was last modified. 25 | * 26 | * @return A long value representing the time the resource was last modified, measured in milliseconds 27 | * since the epoch (00:00:00 GMT, January 1, 1970). 28 | */ 29 | long lastModified(); 30 | 31 | /** 32 | * Returns resource input stream. 33 | * 34 | * @throws IOException 35 | */ 36 | InputStream getInputStream() throws IOException; 37 | 38 | /** 39 | * Creates relative resource for current resource. 40 | * 41 | * @param relativeResourcePath String relative resource path 42 | * @return Resource relative resource 43 | */ 44 | Resource createRelative(String relativeResourcePath) throws IOException; 45 | 46 | /** 47 | * Returns a unique name for this resource. (ie file name for files) 48 | * 49 | * @return the name of the resource 50 | */ 51 | String getName(); 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/logging/JULILessLoggerProvider.java: -------------------------------------------------------------------------------- 1 | package org.lesscss.logging; 2 | 3 | import java.util.logging.Level; 4 | import java.util.logging.Logger; 5 | 6 | class JULILessLoggerProvider implements LessLoggerProvider { 7 | public LessLogger getLogger(Class clazz) { 8 | return new JULILessLogger(Logger.getLogger(clazz.getName())); 9 | } 10 | 11 | private static class JULILessLogger implements LessLogger { 12 | private final Logger logger; 13 | 14 | private JULILessLogger(Logger logger) { 15 | this.logger = logger; 16 | } 17 | 18 | public boolean isDebugEnabled() { 19 | return logger.isLoggable(Level.FINE); 20 | } 21 | 22 | public boolean isInfoEnabled() { 23 | return logger.isLoggable(Level.INFO); 24 | } 25 | 26 | public void debug(String msg) { 27 | logger.fine(msg); 28 | } 29 | 30 | public void debug(String format, Object... args) { 31 | if( isDebugEnabled() ) { 32 | logger.fine( String.format(format, args) ); 33 | } 34 | } 35 | 36 | public void info(String msg) { 37 | logger.info(msg); 38 | } 39 | 40 | public void info(String format, Object... args) { 41 | if( isInfoEnabled() ) { 42 | logger.info(String.format(format,args)); 43 | } 44 | } 45 | 46 | public void error(String msg, Throwable t) { 47 | logger.log(Level.SEVERE, msg, t); 48 | } 49 | 50 | public void error(String format, Object... args) { 51 | logger.severe(String.format(format,args)); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/logging/LessLogger.java: -------------------------------------------------------------------------------- 1 | package org.lesscss.logging; 2 | 3 | public interface LessLogger { 4 | boolean isDebugEnabled(); 5 | 6 | boolean isInfoEnabled(); 7 | 8 | void debug(String msg); 9 | 10 | void debug(String format, Object... args); 11 | 12 | void info(String msg); 13 | 14 | void info(String format, Object... args); 15 | 16 | void error(String msg, Throwable t); 17 | 18 | void error(String format, Object... args); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/logging/LessLoggerFactory.java: -------------------------------------------------------------------------------- 1 | package org.lesscss.logging; 2 | 3 | public class LessLoggerFactory { 4 | private static LessLoggerFactory instance = new LessLoggerFactory(); 5 | private LessLoggerProvider loggerProvider; 6 | 7 | private LessLoggerFactory() { 8 | try { 9 | Class.forName("org.slf4j.Logger"); 10 | loggerProvider = new SLF4JLessLoggerProvider(); 11 | } catch(ClassNotFoundException ex) { 12 | loggerProvider = new JULILessLoggerProvider(); 13 | } 14 | } 15 | 16 | public static LessLogger getLogger(Class clazz) { 17 | return instance.loggerProvider.getLogger(clazz); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/logging/LessLoggerProvider.java: -------------------------------------------------------------------------------- 1 | package org.lesscss.logging; 2 | 3 | interface LessLoggerProvider { 4 | LessLogger getLogger(Class clazz); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/logging/SLF4JLessLoggerProvider.java: -------------------------------------------------------------------------------- 1 | package org.lesscss.logging; 2 | 3 | class SLF4JLessLoggerProvider implements LessLoggerProvider { 4 | public LessLogger getLogger(Class clazz) { 5 | return new SLF4JLessLogger(org.slf4j.LoggerFactory.getLogger(clazz)); 6 | } 7 | 8 | private static class SLF4JLessLogger implements LessLogger { 9 | private final org.slf4j.Logger logger; 10 | 11 | private SLF4JLessLogger(org.slf4j.Logger logger) { 12 | this.logger = logger; 13 | } 14 | 15 | public boolean isDebugEnabled() { 16 | return logger.isDebugEnabled(); 17 | } 18 | 19 | public boolean isInfoEnabled() { 20 | return logger.isInfoEnabled(); 21 | } 22 | 23 | public void debug(String msg) { 24 | logger.debug(msg); 25 | } 26 | 27 | public void debug(String format, Object... args) { 28 | if( logger.isDebugEnabled() ) { 29 | logger.debug(String.format(format, args)); 30 | } 31 | } 32 | 33 | public void info(String msg) { 34 | logger.info(msg); 35 | } 36 | 37 | public void info(String format, Object... args) { 38 | if( logger.isInfoEnabled() ) { 39 | logger.info( String.format(format, args) ); 40 | } 41 | } 42 | 43 | public void error(String msg, Throwable t) { 44 | logger.error(msg, t); 45 | } 46 | 47 | public void error(String format, Object... args) { 48 | if( logger.isErrorEnabled() ) { 49 | logger.error( String.format(format, args) ); 50 | } 51 | } 52 | 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/org/lesscss/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides classes for compiling LESS sources. 3 | */ 4 | package org.lesscss; -------------------------------------------------------------------------------- /src/main/javadoc/stylesheet.css: -------------------------------------------------------------------------------- 1 | /* Javadoc style sheet */ 2 | /* Author: Doug Kramer */ 3 | /* Purpose: For use with Sun Javadoc tool, to define colors, fonts and other style attributes for Google look */ 4 | /* Apply by specifying javadoc option "-stylesheetfile dev_javadoc.css" */ 5 | 6 | body { 7 | font-family: arial, sans-serif; 8 | background-color:#fff; 9 | font-size: small; 10 | margin: 3px 8px 8px 8px; /* Increasing top margin moves "All Classes" down in lower left frame, */ 11 | color:#000; /* but unnecessarily moves increases gap in other 2 frames */ 12 | } 13 | 14 | /* Needed to turn off "border=1" */ 15 | table { 16 | border: none; 17 | border-collapse: collapse; 18 | } 19 | 20 | /* Need "th" to bypass "bgcolor" embedded in */ 21 | .TableSubHeadingColor th, 22 | .TableHeadingColor th, 23 | .TableRowColor td { 24 | background: #E5ECF9; /* light blue */ 25 | border-top: #3366CC solid thin; /* dark blue */ 26 | border-bottom: #3366CC solid thin; 27 | border-left: #3366CC solid thin; 28 | border-right: #3366CC solid thin; 29 | font-family: arial, sans-serif; 30 | font-size: 100%; 31 | } 32 | 33 | .TableHeadingColor th { 34 | /* border-bottom: none; */ 35 | /* border-left: none; */ 36 | /* border-right: none; */ 37 | } 38 | 39 | .TableRowColor td { 40 | background: #FFFFFF; 41 | padding: 6px 6px 6px 12px; 42 | } 43 | 44 | /* Need "b" to bypass "font-size=+2" between and */ 45 | .TableHeadingColor th b, 46 | .TableSubHeadingColor th b { 47 | font-size: 10pt; 48 | } 49 | 50 | /* Font used in left-hand frame lists */ 51 | .FrameTitleFont { font-size: 105%; font-family: Helvetica, Arial, sans-serif; } 52 | .FrameHeadingFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; 53 | font-weight: bold; margin-top: .3em; } 54 | .FrameItemFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; } 55 | 56 | /* Navigation bar fonts and colors */ 57 | .NavBarCell1 { padding-left: 2px; padding-right: 2px; font-size: 12px; 58 | background-color: #EEEEFF;} /* light mauve */ 59 | .NavBarCell1Rev { background-color: #00008B;} /* dark blue */ 60 | .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color: #000000; font-size: 120%;} 61 | .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color: #FFFFFF; font-size: 120%;} 62 | 63 | .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color: #EEEEFF;} 64 | .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color: #EEEEFF;} 65 | 66 | .NavBarCell1 em { font-size: 14px; } 67 | .NavBarCell2 b { font-size: 9px; } 68 | .NavBarCell3 b { font-size: 9px; } 69 | 70 | #searchbox { 71 | margin-top: 0px; 72 | margin-bottom: -8px; 73 | } 74 | 75 | #navheader { 76 | font-weight: bold; 77 | margin-top: 0.4em; 78 | margin-bottom: -0.5em; 79 | } 80 | 81 | #doc_title{ /* in header */ 82 | font-size: large; 83 | font-weight: bold; 84 | border-top: 1px solid; 85 | background-color: #e5ecf9; 86 | border-color: #3366CC; 87 | margin: 5px 0px 16px 0px; 88 | padding: 1px 0 1px 3px; 89 | } 90 | 91 | #footer{ 92 | height: 55px; 93 | padding-top: 20px; 94 | clear: both; 95 | } 96 | 97 | #footerlogo{ /* in footer */ 98 | position: absolute; 99 | width: 175px; 100 | padding: 0; 101 | margin: 0; 102 | left: 10px; 103 | } 104 | 105 | #copyright { /* in footer */ 106 | text-align: center; 107 | margin: 0px; 108 | padding-top: 8px; 109 | } -------------------------------------------------------------------------------- /src/test/java/integration/AbstractCompileIT.java: -------------------------------------------------------------------------------- 1 | /* Copyright 2011-2012 The Apache Software Foundation. 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | package integration; 16 | 17 | import static org.junit.Assert.assertEquals; 18 | 19 | import java.io.File; 20 | import java.net.MalformedURLException; 21 | import java.net.URL; 22 | 23 | import org.apache.commons.io.FileUtils; 24 | import org.junit.Before; 25 | 26 | import org.lesscss.LessCompiler; 27 | 28 | public abstract class AbstractCompileIT { 29 | 30 | protected LessCompiler lessCompiler; 31 | 32 | @Before 33 | public void setUp() throws Exception { 34 | lessCompiler = new LessCompiler(); 35 | } 36 | 37 | protected void testCompile(File lessFile, File cssFile) throws Exception { 38 | String actual = lessCompiler.compile(lessFile); 39 | String expected = FileUtils.readFileToString(cssFile); 40 | 41 | expected = expected.replace("\r\n", "\n"); 42 | expected += "\n"; 43 | 44 | assertEquals(expected, actual); 45 | } 46 | 47 | protected void testCompile(File lessFile, File cssFile, boolean compress) throws Exception { 48 | lessCompiler.setCompress(compress); 49 | testCompile(lessFile, cssFile); 50 | } 51 | 52 | protected File toFile(String filename) { 53 | URL url = CompatibilityIT.class.getClassLoader().getResource(filename); 54 | File file = FileUtils.toFile(url); 55 | return file; 56 | } 57 | 58 | protected URL toURL(String filename) throws MalformedURLException { 59 | return AbstractCompileIT.class.getClassLoader().getResource(filename); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/test/java/integration/BootstrapIT.java: -------------------------------------------------------------------------------- 1 | /* Copyright 2011-2012 The Apache Software Foundation. 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | package integration; 16 | 17 | import org.junit.Before; 18 | import org.junit.Test; 19 | 20 | public class BootstrapIT extends AbstractCompileIT { 21 | 22 | @Before 23 | public void setUp() throws Exception { 24 | super.setUp(); 25 | // set explicit less version if latest version of less gets incompatible with bootstrap 26 | // lessCompiler.setLessJs(Bootstrap201IT.class.getClassLoader().getResource("bootstrap/less-1.3.0.js")); 27 | } 28 | 29 | @Test 30 | public void testBootstrap() throws Exception { 31 | testCompile("bootstrap"); 32 | } 33 | 34 | @Test 35 | public void testBootstrapMin() throws Exception { 36 | testCompile("bootstrap", "bootstrap.min", true); 37 | } 38 | 39 | private void testCompile(String filename) throws Exception { 40 | testCompile(filename, filename); 41 | } 42 | 43 | private void testCompile(String lessFilename, String cssFilename) throws Exception { 44 | testCompile(lessFilename, cssFilename, false); 45 | } 46 | 47 | private void testCompile(String lessFilename, String cssFilename, boolean compress) throws Exception { 48 | testCompile(toFile("bootstrap-3.1.1/less/" + lessFilename + ".less"), toFile("bootstrap-3.1.1/css/" + cssFilename + ".css"), compress); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/integration/CompatibilityIT.java: -------------------------------------------------------------------------------- 1 | /* Copyright 2011-2012 The Apache Software Foundation. 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | package integration; 16 | 17 | import java.util.Arrays; 18 | import org.junit.Before; 19 | import org.junit.Test; 20 | 21 | public class CompatibilityIT extends AbstractCompileIT { 22 | 23 | @Before 24 | public void setUp() throws Exception { 25 | super.setUp(); 26 | lessCompiler.setCustomJs(Arrays.asList( 27 | toURL("compatibility/custom.math.js"), 28 | toURL("compatibility/custom.color.js"), 29 | toURL("compatibility/custom.process.title.js"))); 30 | } 31 | 32 | @Test 33 | public void testColors() throws Exception { 34 | testCompile("colors"); 35 | } 36 | 37 | @Test 38 | public void testComments() throws Exception { 39 | testCompile("comments"); 40 | } 41 | 42 | @Test 43 | public void testCss3() throws Exception { 44 | testCompile("css-3"); 45 | } 46 | 47 | @Test 48 | public void testCssEscapes() throws Exception { 49 | testCompile("css-escapes"); 50 | } 51 | 52 | @Test 53 | public void testCss() throws Exception { 54 | testCompile("css"); 55 | } 56 | 57 | @Test 58 | public void testFunctions() throws Exception { 59 | testCompile("functions"); 60 | } 61 | 62 | @Test 63 | public void testIeFilters() throws Exception { 64 | testCompile("ie-filters"); 65 | } 66 | 67 | @Test 68 | public void testImport() throws Exception { 69 | testCompile("import"); 70 | } 71 | 72 | @Test 73 | public void testImportCustom() throws Exception { 74 | testCompile("import_custom"); 75 | } 76 | 77 | @Test 78 | public void testJavascript() throws Exception { 79 | testCompile("javascript"); 80 | } 81 | 82 | @Test 83 | public void testLazyEval() throws Exception { 84 | testCompile("lazy-eval"); 85 | } 86 | 87 | @Test 88 | public void testMedia() throws Exception { 89 | testCompile("media"); 90 | } 91 | 92 | @Test 93 | public void testMixinsArgs() throws Exception { 94 | testCompile("mixins-args"); 95 | } 96 | 97 | @Test 98 | public void testMixinsClosure() throws Exception { 99 | testCompile("mixins-closure"); 100 | } 101 | 102 | @Test 103 | public void testMixinsGuards() throws Exception { 104 | testCompile("mixins-guards"); 105 | } 106 | 107 | @Test 108 | public void testMixinsImportant() throws Exception { 109 | testCompile("mixins-important"); 110 | } 111 | 112 | @Test 113 | public void testMixinsNested() throws Exception { 114 | testCompile("mixins-nested"); 115 | } 116 | 117 | @Test 118 | public void testMixinsPattern() throws Exception { 119 | testCompile("mixins-pattern"); 120 | } 121 | 122 | @Test 123 | public void testMixins() throws Exception { 124 | testCompile("mixins"); 125 | } 126 | 127 | @Test 128 | public void testOperations() throws Exception { 129 | testCompile("operations"); 130 | } 131 | 132 | @Test 133 | public void testParens() throws Exception { 134 | testCompile("parens"); 135 | } 136 | 137 | @Test 138 | public void testRulesets() throws Exception { 139 | testCompile("rulesets"); 140 | } 141 | 142 | @Test 143 | public void testScope() throws Exception { 144 | testCompile("scope"); 145 | } 146 | 147 | @Test 148 | public void testSelectors() throws Exception { 149 | testCompile("selectors"); 150 | } 151 | 152 | @Test 153 | public void testStrings() throws Exception { 154 | testCompile("strings"); 155 | } 156 | 157 | @Test 158 | public void testVariables() throws Exception { 159 | testCompile("variables"); 160 | } 161 | 162 | @Test 163 | public void testWhitespace() throws Exception { 164 | testCompile("whitespace"); 165 | } 166 | 167 | private void testCompile(String filename) throws Exception { 168 | testCompile(toFile("compatibility/less/" + filename + ".less"), toFile("compatibility/css/" + filename + ".css")); 169 | } 170 | } 171 | -------------------------------------------------------------------------------- /src/test/java/integration/ImportIT.java: -------------------------------------------------------------------------------- 1 | /* Copyright 2011-2012 The Apache Software Foundation. 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | package integration; 16 | 17 | import org.junit.Ignore; 18 | import org.junit.Test; 19 | 20 | public class ImportIT extends AbstractCompileIT { 21 | 22 | @Test 23 | public void testImport() throws Exception { 24 | testCompile(toFile("import/less/import.less"), toFile("import/css/import.css")); 25 | } 26 | 27 | @Test 28 | public void testImportEndsInLess() throws Exception { 29 | testCompile(toFile("import/endsinless/less/import.less"), toFile("import/endsinless/css/import.css")); 30 | } 31 | 32 | @Test 33 | public void testImportSingleQuotes() throws Exception { 34 | testCompile(toFile("import/less/import_quotes.less"), toFile("import/css/import.css")); 35 | } 36 | 37 | @Test @Ignore 38 | public void testHttpImport() throws Exception { 39 | // I would appreciate it if someone finds a fix for this test. 40 | testCompile(toFile("import/less/http_import.less"), toFile("import/css/http_import.css")); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/test/java/integration/LessExceptionIT.java: -------------------------------------------------------------------------------- 1 | /* Copyright 2011-2012 The Apache Software Foundation. 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | package integration; 16 | 17 | import static org.junit.Assert.assertTrue; 18 | 19 | import org.junit.Test; 20 | import org.lesscss.LessException; 21 | 22 | public class LessExceptionIT extends AbstractCompileIT { 23 | 24 | @Test 25 | public void testException() throws Exception { 26 | try { 27 | lessCompiler.compile("a { color: @linkColor; }"); 28 | } catch (LessException e) { 29 | String exceptionMsg = e.getMessage(); 30 | assertTrue(exceptionMsg!=null && exceptionMsg.startsWith("NameError: variable @linkColor is undefined in")); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/test/java/integration/MultithreadedIT.java: -------------------------------------------------------------------------------- 1 | package integration; 2 | 3 | import java.io.File; 4 | import java.util.Arrays; 5 | 6 | import org.apache.commons.io.FileUtils; 7 | import org.jodah.concurrentunit.Waiter; 8 | import org.junit.Before; 9 | import org.junit.Test; 10 | 11 | public class MultithreadedIT extends AbstractCompileIT { 12 | final Waiter waiter = new Waiter(); 13 | 14 | @Before 15 | public void setUp() throws Exception { 16 | super.setUp(); 17 | lessCompiler.setCustomJs(Arrays.asList( 18 | toURL("compatibility/custom.math.js"), 19 | toURL("compatibility/custom.color.js"), 20 | toURL("compatibility/custom.process.title.js"))); 21 | } 22 | 23 | @Test 24 | public void testMultithreaded() throws Throwable { 25 | final String[] filenames = new String[]{ 26 | "colors", 27 | "comments", 28 | "css-3", 29 | "css-escapes", 30 | "css", 31 | "functions", 32 | "ie-filters", 33 | "import_custom", 34 | "import_custom", 35 | "javascript", 36 | "lazy-eval", 37 | "media", 38 | "mixins-args", 39 | "mixins-closure", 40 | "mixins-guards" 41 | }; 42 | final int ITERATIONS = 5; 43 | for(int i=0;i p, 28 | > ul { 29 | margin-bottom: 0; 30 | } 31 | > p + p { 32 | margin-top: 5px; 33 | } 34 | } 35 | 36 | // Dismissable alerts 37 | // 38 | // Expand the right padding and account for the close button's positioning. 39 | 40 | .alert-dismissable { 41 | padding-right: (@alert-padding + 20); 42 | 43 | // Adjust close link position 44 | .close { 45 | position: relative; 46 | top: -2px; 47 | right: -21px; 48 | color: inherit; 49 | } 50 | } 51 | 52 | // Alternate styles 53 | // 54 | // Generate contextual modifier classes for colorizing the alert. 55 | 56 | .alert-success { 57 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); 58 | } 59 | .alert-info { 60 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); 61 | } 62 | .alert-warning { 63 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); 64 | } 65 | .alert-danger { 66 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); 67 | } 68 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/badges.less: -------------------------------------------------------------------------------- 1 | // 2 | // Badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base classes 7 | .badge { 8 | display: inline-block; 9 | min-width: 10px; 10 | padding: 3px 7px; 11 | font-size: @font-size-small; 12 | font-weight: @badge-font-weight; 13 | color: @badge-color; 14 | line-height: @badge-line-height; 15 | vertical-align: baseline; 16 | white-space: nowrap; 17 | text-align: center; 18 | background-color: @badge-bg; 19 | border-radius: @badge-border-radius; 20 | 21 | // Empty badges collapse automatically (not available in IE8) 22 | &:empty { 23 | display: none; 24 | } 25 | 26 | // Quick fix for badges in buttons 27 | .btn & { 28 | position: relative; 29 | top: -1px; 30 | } 31 | .btn-xs & { 32 | top: 0; 33 | padding: 1px 5px; 34 | } 35 | } 36 | 37 | // Hover state, but only for links 38 | a.badge { 39 | &:hover, 40 | &:focus { 41 | color: @badge-link-hover-color; 42 | text-decoration: none; 43 | cursor: pointer; 44 | } 45 | } 46 | 47 | // Account for counters in navs 48 | a.list-group-item.active > .badge, 49 | .nav-pills > .active > a > .badge { 50 | color: @badge-active-color; 51 | background-color: @badge-active-bg; 52 | } 53 | .nav-pills > li > a > .badge { 54 | margin-left: 3px; 55 | } 56 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/bootstrap.less: -------------------------------------------------------------------------------- 1 | // Core variables and mixins 2 | @import "variables.less"; 3 | @import "mixins.less"; 4 | 5 | // Reset 6 | @import "normalize.less"; 7 | @import "print.less"; 8 | 9 | // Core CSS 10 | @import "scaffolding.less"; 11 | @import "type.less"; 12 | @import "code.less"; 13 | @import "grid.less"; 14 | @import "tables.less"; 15 | @import "forms.less"; 16 | @import "buttons.less"; 17 | 18 | // Components 19 | @import "component-animations.less"; 20 | @import "glyphicons.less"; 21 | @import "dropdowns.less"; 22 | @import "button-groups.less"; 23 | @import "input-groups.less"; 24 | @import "navs.less"; 25 | @import "navbar.less"; 26 | @import "breadcrumbs.less"; 27 | @import "pagination.less"; 28 | @import "pager.less"; 29 | @import "labels.less"; 30 | @import "badges.less"; 31 | @import "jumbotron.less"; 32 | @import "thumbnails.less"; 33 | @import "alerts.less"; 34 | @import "progress-bars.less"; 35 | @import "media.less"; 36 | @import "list-group.less"; 37 | @import "panels.less"; 38 | @import "wells.less"; 39 | @import "close.less"; 40 | 41 | // Components w/ JavaScript 42 | @import "modals.less"; 43 | @import "tooltip.less"; 44 | @import "popovers.less"; 45 | @import "carousel.less"; 46 | 47 | // Utility classes 48 | @import "utilities.less"; 49 | @import "responsive-utilities.less"; 50 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/buttons.less: -------------------------------------------------------------------------------- 1 | // 2 | // Buttons 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base styles 7 | // -------------------------------------------------- 8 | 9 | .btn { 10 | display: inline-block; 11 | margin-bottom: 0; // For input.btn 12 | font-weight: @btn-font-weight; 13 | text-align: center; 14 | vertical-align: middle; 15 | cursor: pointer; 16 | background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 17 | border: 1px solid transparent; 18 | white-space: nowrap; 19 | .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base); 20 | .user-select(none); 21 | 22 | &, 23 | &:active, 24 | &.active { 25 | &:focus { 26 | .tab-focus(); 27 | } 28 | } 29 | 30 | &:hover, 31 | &:focus { 32 | color: @btn-default-color; 33 | text-decoration: none; 34 | } 35 | 36 | &:active, 37 | &.active { 38 | outline: 0; 39 | background-image: none; 40 | .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); 41 | } 42 | 43 | &.disabled, 44 | &[disabled], 45 | fieldset[disabled] & { 46 | cursor: not-allowed; 47 | pointer-events: none; // Future-proof disabling of clicks 48 | .opacity(.65); 49 | .box-shadow(none); 50 | } 51 | } 52 | 53 | 54 | // Alternate buttons 55 | // -------------------------------------------------- 56 | 57 | .btn-default { 58 | .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); 59 | } 60 | .btn-primary { 61 | .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); 62 | } 63 | // Success appears as green 64 | .btn-success { 65 | .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); 66 | } 67 | // Info appears as blue-green 68 | .btn-info { 69 | .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); 70 | } 71 | // Warning appears as orange 72 | .btn-warning { 73 | .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); 74 | } 75 | // Danger and error appear as red 76 | .btn-danger { 77 | .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); 78 | } 79 | 80 | 81 | // Link buttons 82 | // ------------------------- 83 | 84 | // Make a button look and behave like a link 85 | .btn-link { 86 | color: @link-color; 87 | font-weight: normal; 88 | cursor: pointer; 89 | border-radius: 0; 90 | 91 | &, 92 | &:active, 93 | &[disabled], 94 | fieldset[disabled] & { 95 | background-color: transparent; 96 | .box-shadow(none); 97 | } 98 | &, 99 | &:hover, 100 | &:focus, 101 | &:active { 102 | border-color: transparent; 103 | } 104 | &:hover, 105 | &:focus { 106 | color: @link-hover-color; 107 | text-decoration: underline; 108 | background-color: transparent; 109 | } 110 | &[disabled], 111 | fieldset[disabled] & { 112 | &:hover, 113 | &:focus { 114 | color: @btn-link-disabled-color; 115 | text-decoration: none; 116 | } 117 | } 118 | } 119 | 120 | 121 | // Button Sizes 122 | // -------------------------------------------------- 123 | 124 | .btn-lg { 125 | // line-height: ensure even-numbered height of button next to large input 126 | .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); 127 | } 128 | .btn-sm { 129 | // line-height: ensure proper height of button next to small input 130 | .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); 131 | } 132 | .btn-xs { 133 | .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small); 134 | } 135 | 136 | 137 | // Block button 138 | // -------------------------------------------------- 139 | 140 | .btn-block { 141 | display: block; 142 | width: 100%; 143 | padding-left: 0; 144 | padding-right: 0; 145 | } 146 | 147 | // Vertically space out multiple block buttons 148 | .btn-block + .btn-block { 149 | margin-top: 5px; 150 | } 151 | 152 | // Specificity overrides 153 | input[type="submit"], 154 | input[type="reset"], 155 | input[type="button"] { 156 | &.btn-block { 157 | width: 100%; 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/carousel.less: -------------------------------------------------------------------------------- 1 | // 2 | // Carousel 3 | // -------------------------------------------------- 4 | 5 | 6 | // Wrapper for the slide container and indicators 7 | .carousel { 8 | position: relative; 9 | } 10 | 11 | .carousel-inner { 12 | position: relative; 13 | overflow: hidden; 14 | width: 100%; 15 | 16 | > .item { 17 | display: none; 18 | position: relative; 19 | .transition(.6s ease-in-out left); 20 | 21 | // Account for jankitude on images 22 | > img, 23 | > a > img { 24 | &:extend(.img-responsive); 25 | line-height: 1; 26 | } 27 | } 28 | 29 | > .active, 30 | > .next, 31 | > .prev { display: block; } 32 | 33 | > .active { 34 | left: 0; 35 | } 36 | 37 | > .next, 38 | > .prev { 39 | position: absolute; 40 | top: 0; 41 | width: 100%; 42 | } 43 | 44 | > .next { 45 | left: 100%; 46 | } 47 | > .prev { 48 | left: -100%; 49 | } 50 | > .next.left, 51 | > .prev.right { 52 | left: 0; 53 | } 54 | 55 | > .active.left { 56 | left: -100%; 57 | } 58 | > .active.right { 59 | left: 100%; 60 | } 61 | 62 | } 63 | 64 | // Left/right controls for nav 65 | // --------------------------- 66 | 67 | .carousel-control { 68 | position: absolute; 69 | top: 0; 70 | left: 0; 71 | bottom: 0; 72 | width: @carousel-control-width; 73 | .opacity(@carousel-control-opacity); 74 | font-size: @carousel-control-font-size; 75 | color: @carousel-control-color; 76 | text-align: center; 77 | text-shadow: @carousel-text-shadow; 78 | // We can't have this transition here because WebKit cancels the carousel 79 | // animation if you trip this while in the middle of another animation. 80 | 81 | // Set gradients for backgrounds 82 | &.left { 83 | #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); 84 | } 85 | &.right { 86 | left: auto; 87 | right: 0; 88 | #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); 89 | } 90 | 91 | // Hover/focus state 92 | &:hover, 93 | &:focus { 94 | outline: none; 95 | color: @carousel-control-color; 96 | text-decoration: none; 97 | .opacity(.9); 98 | } 99 | 100 | // Toggles 101 | .icon-prev, 102 | .icon-next, 103 | .glyphicon-chevron-left, 104 | .glyphicon-chevron-right { 105 | position: absolute; 106 | top: 50%; 107 | z-index: 5; 108 | display: inline-block; 109 | } 110 | .icon-prev, 111 | .glyphicon-chevron-left { 112 | left: 50%; 113 | } 114 | .icon-next, 115 | .glyphicon-chevron-right { 116 | right: 50%; 117 | } 118 | .icon-prev, 119 | .icon-next { 120 | width: 20px; 121 | height: 20px; 122 | margin-top: -10px; 123 | margin-left: -10px; 124 | font-family: serif; 125 | } 126 | 127 | .icon-prev { 128 | &:before { 129 | content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) 130 | } 131 | } 132 | .icon-next { 133 | &:before { 134 | content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) 135 | } 136 | } 137 | } 138 | 139 | // Optional indicator pips 140 | // 141 | // Add an unordered list with the following class and add a list item for each 142 | // slide your carousel holds. 143 | 144 | .carousel-indicators { 145 | position: absolute; 146 | bottom: 10px; 147 | left: 50%; 148 | z-index: 15; 149 | width: 60%; 150 | margin-left: -30%; 151 | padding-left: 0; 152 | list-style: none; 153 | text-align: center; 154 | 155 | li { 156 | display: inline-block; 157 | width: 10px; 158 | height: 10px; 159 | margin: 1px; 160 | text-indent: -999px; 161 | border: 1px solid @carousel-indicator-border-color; 162 | border-radius: 10px; 163 | cursor: pointer; 164 | 165 | // IE8-9 hack for event handling 166 | // 167 | // Internet Explorer 8-9 does not support clicks on elements without a set 168 | // `background-color`. We cannot use `filter` since that's not viewed as a 169 | // background color by the browser. Thus, a hack is needed. 170 | // 171 | // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we 172 | // set alpha transparency for the best results possible. 173 | background-color: #000 \9; // IE8 174 | background-color: rgba(0,0,0,0); // IE9 175 | } 176 | .active { 177 | margin: 0; 178 | width: 12px; 179 | height: 12px; 180 | background-color: @carousel-indicator-active-bg; 181 | } 182 | } 183 | 184 | // Optional captions 185 | // ----------------------------- 186 | // Hidden by default for smaller viewports 187 | .carousel-caption { 188 | position: absolute; 189 | left: 15%; 190 | right: 15%; 191 | bottom: 20px; 192 | z-index: 10; 193 | padding-top: 20px; 194 | padding-bottom: 20px; 195 | color: @carousel-caption-color; 196 | text-align: center; 197 | text-shadow: @carousel-text-shadow; 198 | & .btn { 199 | text-shadow: none; // No shadow for button elements in carousel-caption 200 | } 201 | } 202 | 203 | 204 | // Scale up controls for tablets and up 205 | @media screen and (min-width: @screen-sm-min) { 206 | 207 | // Scale up the controls a smidge 208 | .carousel-control { 209 | .glyphicon-chevron-left, 210 | .glyphicon-chevron-right, 211 | .icon-prev, 212 | .icon-next { 213 | width: 30px; 214 | height: 30px; 215 | margin-top: -15px; 216 | margin-left: -15px; 217 | font-size: 30px; 218 | } 219 | } 220 | 221 | // Show and left align the captions 222 | .carousel-caption { 223 | left: 20%; 224 | right: 20%; 225 | padding-bottom: 30px; 226 | } 227 | 228 | // Move up the indicators 229 | .carousel-indicators { 230 | bottom: 20px; 231 | } 232 | } 233 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | button& { 27 | padding: 0; 28 | cursor: pointer; 29 | background: transparent; 30 | border: 0; 31 | -webkit-appearance: none; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/code.less: -------------------------------------------------------------------------------- 1 | // 2 | // Code (inline and block) 3 | // -------------------------------------------------- 4 | 5 | 6 | // Inline and block code styles 7 | code, 8 | kbd, 9 | pre, 10 | samp { 11 | font-family: @font-family-monospace; 12 | } 13 | 14 | // Inline code 15 | code { 16 | padding: 2px 4px; 17 | font-size: 90%; 18 | color: @code-color; 19 | background-color: @code-bg; 20 | white-space: nowrap; 21 | border-radius: @border-radius-base; 22 | } 23 | 24 | // User input typically entered via keyboard 25 | kbd { 26 | padding: 2px 4px; 27 | font-size: 90%; 28 | color: @kbd-color; 29 | background-color: @kbd-bg; 30 | border-radius: @border-radius-small; 31 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); 32 | } 33 | 34 | // Blocks of code 35 | pre { 36 | display: block; 37 | padding: ((@line-height-computed - 1) / 2); 38 | margin: 0 0 (@line-height-computed / 2); 39 | font-size: (@font-size-base - 1); // 14px to 13px 40 | line-height: @line-height-base; 41 | word-break: break-all; 42 | word-wrap: break-word; 43 | color: @pre-color; 44 | background-color: @pre-bg; 45 | border: 1px solid @pre-border-color; 46 | border-radius: @border-radius-base; 47 | 48 | // Account for some code outputs that place code tags in pre tags 49 | code { 50 | padding: 0; 51 | font-size: inherit; 52 | color: inherit; 53 | white-space: pre-wrap; 54 | background-color: transparent; 55 | border-radius: 0; 56 | } 57 | } 58 | 59 | // Enable scrollable blocks of code 60 | .pre-scrollable { 61 | max-height: @pre-scrollable-max-height; 62 | overflow-y: scroll; 63 | } 64 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/compile.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | &.in { 21 | display: block; 22 | } 23 | } 24 | .collapsing { 25 | position: relative; 26 | height: 0; 27 | overflow: hidden; 28 | .transition(height .35s ease); 29 | } 30 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/dropdowns.less: -------------------------------------------------------------------------------- 1 | // 2 | // Dropdown menus 3 | // -------------------------------------------------- 4 | 5 | 6 | // Dropdown arrow/caret 7 | .caret { 8 | display: inline-block; 9 | width: 0; 10 | height: 0; 11 | margin-left: 2px; 12 | vertical-align: middle; 13 | border-top: @caret-width-base solid; 14 | border-right: @caret-width-base solid transparent; 15 | border-left: @caret-width-base solid transparent; 16 | } 17 | 18 | // The dropdown wrapper (div) 19 | .dropdown { 20 | position: relative; 21 | } 22 | 23 | // Prevent the focus on the dropdown toggle when closing dropdowns 24 | .dropdown-toggle:focus { 25 | outline: 0; 26 | } 27 | 28 | // The dropdown menu (ul) 29 | .dropdown-menu { 30 | position: absolute; 31 | top: 100%; 32 | left: 0; 33 | z-index: @zindex-dropdown; 34 | display: none; // none by default, but block on "open" of the menu 35 | float: left; 36 | min-width: 160px; 37 | padding: 5px 0; 38 | margin: 2px 0 0; // override default ul 39 | list-style: none; 40 | font-size: @font-size-base; 41 | background-color: @dropdown-bg; 42 | border: 1px solid @dropdown-fallback-border; // IE8 fallback 43 | border: 1px solid @dropdown-border; 44 | border-radius: @border-radius-base; 45 | .box-shadow(0 6px 12px rgba(0,0,0,.175)); 46 | background-clip: padding-box; 47 | 48 | // Aligns the dropdown menu to right 49 | // 50 | // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` 51 | &.pull-right { 52 | right: 0; 53 | left: auto; 54 | } 55 | 56 | // Dividers (basically an hr) within the dropdown 57 | .divider { 58 | .nav-divider(@dropdown-divider-bg); 59 | } 60 | 61 | // Links within the dropdown menu 62 | > li > a { 63 | display: block; 64 | padding: 3px 20px; 65 | clear: both; 66 | font-weight: normal; 67 | line-height: @line-height-base; 68 | color: @dropdown-link-color; 69 | white-space: nowrap; // prevent links from randomly breaking onto new lines 70 | } 71 | } 72 | 73 | // Hover/Focus state 74 | .dropdown-menu > li > a { 75 | &:hover, 76 | &:focus { 77 | text-decoration: none; 78 | color: @dropdown-link-hover-color; 79 | background-color: @dropdown-link-hover-bg; 80 | } 81 | } 82 | 83 | // Active state 84 | .dropdown-menu > .active > a { 85 | &, 86 | &:hover, 87 | &:focus { 88 | color: @dropdown-link-active-color; 89 | text-decoration: none; 90 | outline: 0; 91 | background-color: @dropdown-link-active-bg; 92 | } 93 | } 94 | 95 | // Disabled state 96 | // 97 | // Gray out text and ensure the hover/focus state remains gray 98 | 99 | .dropdown-menu > .disabled > a { 100 | &, 101 | &:hover, 102 | &:focus { 103 | color: @dropdown-link-disabled-color; 104 | } 105 | } 106 | // Nuke hover/focus effects 107 | .dropdown-menu > .disabled > a { 108 | &:hover, 109 | &:focus { 110 | text-decoration: none; 111 | background-color: transparent; 112 | background-image: none; // Remove CSS gradient 113 | .reset-filter(); 114 | cursor: not-allowed; 115 | } 116 | } 117 | 118 | // Open state for the dropdown 119 | .open { 120 | // Show the menu 121 | > .dropdown-menu { 122 | display: block; 123 | } 124 | 125 | // Remove the outline when :focus is triggered 126 | > a { 127 | outline: 0; 128 | } 129 | } 130 | 131 | // Menu positioning 132 | // 133 | // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown 134 | // menu with the parent. 135 | .dropdown-menu-right { 136 | left: auto; // Reset the default from `.dropdown-menu` 137 | right: 0; 138 | } 139 | // With v3, we enabled auto-flipping if you have a dropdown within a right 140 | // aligned nav component. To enable the undoing of that, we provide an override 141 | // to restore the default dropdown menu alignment. 142 | // 143 | // This is only for left-aligning a dropdown menu within a `.navbar-right` or 144 | // `.pull-right` nav component. 145 | .dropdown-menu-left { 146 | left: 0; 147 | right: auto; 148 | } 149 | 150 | // Dropdown section headers 151 | .dropdown-header { 152 | display: block; 153 | padding: 3px 20px; 154 | font-size: @font-size-small; 155 | line-height: @line-height-base; 156 | color: @dropdown-header-color; 157 | } 158 | 159 | // Backdrop to catch body clicks on mobile, etc. 160 | .dropdown-backdrop { 161 | position: fixed; 162 | left: 0; 163 | right: 0; 164 | bottom: 0; 165 | top: 0; 166 | z-index: (@zindex-dropdown - 10); 167 | } 168 | 169 | // Right aligned dropdowns 170 | .pull-right > .dropdown-menu { 171 | right: 0; 172 | left: auto; 173 | } 174 | 175 | // Allow for dropdowns to go bottom up (aka, dropup-menu) 176 | // 177 | // Just add .dropup after the standard .dropdown class and you're set, bro. 178 | // TODO: abstract this so that the navbar fixed styles are not placed here? 179 | 180 | .dropup, 181 | .navbar-fixed-bottom .dropdown { 182 | // Reverse the caret 183 | .caret { 184 | border-top: 0; 185 | border-bottom: @caret-width-base solid; 186 | content: ""; 187 | } 188 | // Different positioning for bottom up menu 189 | .dropdown-menu { 190 | top: auto; 191 | bottom: 100%; 192 | margin-bottom: 1px; 193 | } 194 | } 195 | 196 | 197 | // Component alignment 198 | // 199 | // Reiterate per navbar.less and the modified component alignment there. 200 | 201 | @media (min-width: @grid-float-breakpoint) { 202 | .navbar-right { 203 | .dropdown-menu { 204 | .dropdown-menu-right(); 205 | } 206 | // Necessary for overrides of the default right aligned menu. 207 | // Will remove come v4 in all likelihood. 208 | .dropdown-menu-left { 209 | .dropdown-menu-left(); 210 | } 211 | } 212 | } 213 | 214 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/grid.less: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | 6 | // Container widths 7 | // 8 | // Set the container width, and override it for fixed navbars in media queries. 9 | 10 | .container { 11 | .container-fixed(); 12 | 13 | @media (min-width: @screen-sm-min) { 14 | width: @container-sm; 15 | } 16 | @media (min-width: @screen-md-min) { 17 | width: @container-md; 18 | } 19 | @media (min-width: @screen-lg-min) { 20 | width: @container-lg; 21 | } 22 | } 23 | 24 | 25 | // Fluid container 26 | // 27 | // Utilizes the mixin meant for fixed width containers, but without any defined 28 | // width for fluid, full width layouts. 29 | 30 | .container-fluid { 31 | .container-fixed(); 32 | } 33 | 34 | 35 | // Row 36 | // 37 | // Rows contain and clear the floats of your columns. 38 | 39 | .row { 40 | .make-row(); 41 | } 42 | 43 | 44 | // Columns 45 | // 46 | // Common styles for small and large grid columns 47 | 48 | .make-grid-columns(); 49 | 50 | 51 | // Extra small grid 52 | // 53 | // Columns, offsets, pushes, and pulls for extra small devices like 54 | // smartphones. 55 | 56 | .make-grid(xs); 57 | 58 | 59 | // Small grid 60 | // 61 | // Columns, offsets, pushes, and pulls for the small device range, from phones 62 | // to tablets. 63 | 64 | @media (min-width: @screen-sm-min) { 65 | .make-grid(sm); 66 | } 67 | 68 | 69 | // Medium grid 70 | // 71 | // Columns, offsets, pushes, and pulls for the desktop device range. 72 | 73 | @media (min-width: @screen-md-min) { 74 | .make-grid(md); 75 | } 76 | 77 | 78 | // Large grid 79 | // 80 | // Columns, offsets, pushes, and pulls for the large desktop device range. 81 | 82 | @media (min-width: @screen-lg-min) { 83 | .make-grid(lg); 84 | } 85 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/input-groups.less: -------------------------------------------------------------------------------- 1 | // 2 | // Input groups 3 | // -------------------------------------------------- 4 | 5 | // Base styles 6 | // ------------------------- 7 | .input-group { 8 | position: relative; // For dropdowns 9 | display: table; 10 | border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table 11 | 12 | // Undo padding and float of grid classes 13 | &[class*="col-"] { 14 | float: none; 15 | padding-left: 0; 16 | padding-right: 0; 17 | } 18 | 19 | .form-control { 20 | // Ensure that the input is always above the *appended* addon button for 21 | // proper border colors. 22 | position: relative; 23 | z-index: 2; 24 | 25 | // IE9 fubars the placeholder attribute in text inputs and the arrows on 26 | // select elements in input groups. To fix it, we float the input. Details: 27 | // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 28 | float: left; 29 | 30 | width: 100%; 31 | margin-bottom: 0; 32 | } 33 | } 34 | 35 | // Sizing options 36 | // 37 | // Remix the default form control sizing classes into new ones for easier 38 | // manipulation. 39 | 40 | .input-group-lg > .form-control, 41 | .input-group-lg > .input-group-addon, 42 | .input-group-lg > .input-group-btn > .btn { .input-lg(); } 43 | .input-group-sm > .form-control, 44 | .input-group-sm > .input-group-addon, 45 | .input-group-sm > .input-group-btn > .btn { .input-sm(); } 46 | 47 | 48 | // Display as table-cell 49 | // ------------------------- 50 | .input-group-addon, 51 | .input-group-btn, 52 | .input-group .form-control { 53 | display: table-cell; 54 | 55 | &:not(:first-child):not(:last-child) { 56 | border-radius: 0; 57 | } 58 | } 59 | // Addon and addon wrapper for buttons 60 | .input-group-addon, 61 | .input-group-btn { 62 | width: 1%; 63 | white-space: nowrap; 64 | vertical-align: middle; // Match the inputs 65 | } 66 | 67 | // Text input groups 68 | // ------------------------- 69 | .input-group-addon { 70 | padding: @padding-base-vertical @padding-base-horizontal; 71 | font-size: @font-size-base; 72 | font-weight: normal; 73 | line-height: 1; 74 | color: @input-color; 75 | text-align: center; 76 | background-color: @input-group-addon-bg; 77 | border: 1px solid @input-group-addon-border-color; 78 | border-radius: @border-radius-base; 79 | 80 | // Sizing 81 | &.input-sm { 82 | padding: @padding-small-vertical @padding-small-horizontal; 83 | font-size: @font-size-small; 84 | border-radius: @border-radius-small; 85 | } 86 | &.input-lg { 87 | padding: @padding-large-vertical @padding-large-horizontal; 88 | font-size: @font-size-large; 89 | border-radius: @border-radius-large; 90 | } 91 | 92 | // Nuke default margins from checkboxes and radios to vertically center within. 93 | input[type="radio"], 94 | input[type="checkbox"] { 95 | margin-top: 0; 96 | } 97 | } 98 | 99 | // Reset rounded corners 100 | .input-group .form-control:first-child, 101 | .input-group-addon:first-child, 102 | .input-group-btn:first-child > .btn, 103 | .input-group-btn:first-child > .btn-group > .btn, 104 | .input-group-btn:first-child > .dropdown-toggle, 105 | .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), 106 | .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { 107 | .border-right-radius(0); 108 | } 109 | .input-group-addon:first-child { 110 | border-right: 0; 111 | } 112 | .input-group .form-control:last-child, 113 | .input-group-addon:last-child, 114 | .input-group-btn:last-child > .btn, 115 | .input-group-btn:last-child > .btn-group > .btn, 116 | .input-group-btn:last-child > .dropdown-toggle, 117 | .input-group-btn:first-child > .btn:not(:first-child), 118 | .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { 119 | .border-left-radius(0); 120 | } 121 | .input-group-addon:last-child { 122 | border-left: 0; 123 | } 124 | 125 | // Button input groups 126 | // ------------------------- 127 | .input-group-btn { 128 | position: relative; 129 | // Jankily prevent input button groups from wrapping with `white-space` and 130 | // `font-size` in combination with `inline-block` on buttons. 131 | font-size: 0; 132 | white-space: nowrap; 133 | 134 | // Negative margin for spacing, position for bringing hovered/focused/actived 135 | // element above the siblings. 136 | > .btn { 137 | position: relative; 138 | + .btn { 139 | margin-left: -1px; 140 | } 141 | // Bring the "active" button to the front 142 | &:hover, 143 | &:focus, 144 | &:active { 145 | z-index: 2; 146 | } 147 | } 148 | 149 | // Negative margin to only have a 1px border between the two 150 | &:first-child { 151 | > .btn, 152 | > .btn-group { 153 | margin-right: -1px; 154 | } 155 | } 156 | &:last-child { 157 | > .btn, 158 | > .btn-group { 159 | margin-left: -1px; 160 | } 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/jumbotron.less: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding: @jumbotron-padding; 8 | margin-bottom: @jumbotron-padding; 9 | color: @jumbotron-color; 10 | background-color: @jumbotron-bg; 11 | 12 | h1, 13 | .h1 { 14 | color: @jumbotron-heading-color; 15 | } 16 | p { 17 | margin-bottom: (@jumbotron-padding / 2); 18 | font-size: @jumbotron-font-size; 19 | font-weight: 200; 20 | } 21 | 22 | .container & { 23 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container 24 | } 25 | 26 | .container { 27 | max-width: 100%; 28 | } 29 | 30 | @media screen and (min-width: @screen-sm-min) { 31 | padding-top: (@jumbotron-padding * 1.6); 32 | padding-bottom: (@jumbotron-padding * 1.6); 33 | 34 | .container & { 35 | padding-left: (@jumbotron-padding * 2); 36 | padding-right: (@jumbotron-padding * 2); 37 | } 38 | 39 | h1, 40 | .h1 { 41 | font-size: (@font-size-base * 4.5); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/labels.less: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // -------------------------------------------------- 4 | 5 | .label { 6 | display: inline; 7 | padding: .2em .6em .3em; 8 | font-size: 75%; 9 | font-weight: bold; 10 | line-height: 1; 11 | color: @label-color; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | border-radius: .25em; 16 | 17 | // Add hover effects, but only for links 18 | &[href] { 19 | &:hover, 20 | &:focus { 21 | color: @label-link-hover-color; 22 | text-decoration: none; 23 | cursor: pointer; 24 | } 25 | } 26 | 27 | // Empty labels collapse automatically (not available in IE8) 28 | &:empty { 29 | display: none; 30 | } 31 | 32 | // Quick fix for labels in buttons 33 | .btn & { 34 | position: relative; 35 | top: -1px; 36 | } 37 | } 38 | 39 | // Colors 40 | // Contextual variations (linked labels get darker on :hover) 41 | 42 | .label-default { 43 | .label-variant(@label-default-bg); 44 | } 45 | 46 | .label-primary { 47 | .label-variant(@label-primary-bg); 48 | } 49 | 50 | .label-success { 51 | .label-variant(@label-success-bg); 52 | } 53 | 54 | .label-info { 55 | .label-variant(@label-info-bg); 56 | } 57 | 58 | .label-warning { 59 | .label-variant(@label-warning-bg); 60 | } 61 | 62 | .label-danger { 63 | .label-variant(@label-danger-bg); 64 | } 65 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/list-group.less: -------------------------------------------------------------------------------- 1 | // 2 | // List groups 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | // 8 | // Easily usable on
    ,
      , or
      . 9 | 10 | .list-group { 11 | // No need to set list-style: none; since .list-group-item is block level 12 | margin-bottom: 20px; 13 | padding-left: 0; // reset padding because ul and ol 14 | } 15 | 16 | 17 | // Individual list items 18 | // 19 | // Use on `li`s or `div`s within the `.list-group` parent. 20 | 21 | .list-group-item { 22 | position: relative; 23 | display: block; 24 | padding: 10px 15px; 25 | // Place the border on the list items and negative margin up for better styling 26 | margin-bottom: -1px; 27 | background-color: @list-group-bg; 28 | border: 1px solid @list-group-border; 29 | 30 | // Round the first and last items 31 | &:first-child { 32 | .border-top-radius(@list-group-border-radius); 33 | } 34 | &:last-child { 35 | margin-bottom: 0; 36 | .border-bottom-radius(@list-group-border-radius); 37 | } 38 | 39 | // Align badges within list items 40 | > .badge { 41 | float: right; 42 | } 43 | > .badge + .badge { 44 | margin-right: 5px; 45 | } 46 | } 47 | 48 | 49 | // Linked list items 50 | // 51 | // Use anchor elements instead of `li`s or `div`s to create linked list items. 52 | // Includes an extra `.active` modifier class for showing selected items. 53 | 54 | a.list-group-item { 55 | color: @list-group-link-color; 56 | 57 | .list-group-item-heading { 58 | color: @list-group-link-heading-color; 59 | } 60 | 61 | // Hover state 62 | &:hover, 63 | &:focus { 64 | text-decoration: none; 65 | background-color: @list-group-hover-bg; 66 | } 67 | 68 | // Active class on item itself, not parent 69 | &.active, 70 | &.active:hover, 71 | &.active:focus { 72 | z-index: 2; // Place active items above their siblings for proper border styling 73 | color: @list-group-active-color; 74 | background-color: @list-group-active-bg; 75 | border-color: @list-group-active-border; 76 | 77 | // Force color to inherit for custom content 78 | .list-group-item-heading { 79 | color: inherit; 80 | } 81 | .list-group-item-text { 82 | color: @list-group-active-text-color; 83 | } 84 | } 85 | } 86 | 87 | 88 | // Contextual variants 89 | // 90 | // Add modifier classes to change text and background color on individual items. 91 | // Organizationally, this must come after the `:hover` states. 92 | 93 | .list-group-item-variant(success; @state-success-bg; @state-success-text); 94 | .list-group-item-variant(info; @state-info-bg; @state-info-text); 95 | .list-group-item-variant(warning; @state-warning-bg; @state-warning-text); 96 | .list-group-item-variant(danger; @state-danger-bg; @state-danger-text); 97 | 98 | 99 | // Custom content options 100 | // 101 | // Extra classes for creating well-formatted content within `.list-group-item`s. 102 | 103 | .list-group-item-heading { 104 | margin-top: 0; 105 | margin-bottom: 5px; 106 | } 107 | .list-group-item-text { 108 | margin-bottom: 0; 109 | line-height: 1.3; 110 | } 111 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/media.less: -------------------------------------------------------------------------------- 1 | // Media objects 2 | // Source: http://stubbornella.org/content/?p=497 3 | // -------------------------------------------------- 4 | 5 | 6 | // Common styles 7 | // ------------------------- 8 | 9 | // Clear the floats 10 | .media, 11 | .media-body { 12 | overflow: hidden; 13 | zoom: 1; 14 | } 15 | 16 | // Proper spacing between instances of .media 17 | .media, 18 | .media .media { 19 | margin-top: 15px; 20 | } 21 | .media:first-child { 22 | margin-top: 0; 23 | } 24 | 25 | // For images and videos, set to block 26 | .media-object { 27 | display: block; 28 | } 29 | 30 | // Reset margins on headings for tighter default spacing 31 | .media-heading { 32 | margin: 0 0 5px; 33 | } 34 | 35 | 36 | // Media image alignment 37 | // ------------------------- 38 | 39 | .media { 40 | > .pull-left { 41 | margin-right: 10px; 42 | } 43 | > .pull-right { 44 | margin-left: 10px; 45 | } 46 | } 47 | 48 | 49 | // Media list variation 50 | // ------------------------- 51 | 52 | // Undo default ul/ol styles 53 | .media-list { 54 | padding-left: 0; 55 | list-style: none; 56 | } 57 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/modals.less: -------------------------------------------------------------------------------- 1 | // 2 | // Modals 3 | // -------------------------------------------------- 4 | 5 | // .modal-open - body class for killing the scroll 6 | // .modal - container to scroll within 7 | // .modal-dialog - positioning shell for the actual modal 8 | // .modal-content - actual modal w/ bg and corners and shit 9 | 10 | // Kill the scroll on the body 11 | .modal-open { 12 | overflow: hidden; 13 | } 14 | 15 | // Container that the modal scrolls within 16 | .modal { 17 | display: none; 18 | overflow: auto; 19 | overflow-y: scroll; 20 | position: fixed; 21 | top: 0; 22 | right: 0; 23 | bottom: 0; 24 | left: 0; 25 | z-index: @zindex-modal; 26 | -webkit-overflow-scrolling: touch; 27 | 28 | // Prevent Chrome on Windows from adding a focus outline. For details, see 29 | // https://github.com/twbs/bootstrap/pull/10951. 30 | outline: 0; 31 | 32 | // When fading in the modal, animate it to slide down 33 | &.fade .modal-dialog { 34 | .translate(0, -25%); 35 | .transition-transform(~"0.3s ease-out"); 36 | } 37 | &.in .modal-dialog { .translate(0, 0)} 38 | } 39 | 40 | // Shell div to position the modal with bottom padding 41 | .modal-dialog { 42 | position: relative; 43 | width: auto; 44 | margin: 10px; 45 | } 46 | 47 | // Actual modal 48 | .modal-content { 49 | position: relative; 50 | background-color: @modal-content-bg; 51 | border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc) 52 | border: 1px solid @modal-content-border-color; 53 | border-radius: @border-radius-large; 54 | .box-shadow(0 3px 9px rgba(0,0,0,.5)); 55 | background-clip: padding-box; 56 | // Remove focus outline from opened modal 57 | outline: none; 58 | } 59 | 60 | // Modal background 61 | .modal-backdrop { 62 | position: fixed; 63 | top: 0; 64 | right: 0; 65 | bottom: 0; 66 | left: 0; 67 | z-index: @zindex-modal-background; 68 | background-color: @modal-backdrop-bg; 69 | // Fade for backdrop 70 | &.fade { .opacity(0); } 71 | &.in { .opacity(@modal-backdrop-opacity); } 72 | } 73 | 74 | // Modal header 75 | // Top section of the modal w/ title and dismiss 76 | .modal-header { 77 | padding: @modal-title-padding; 78 | border-bottom: 1px solid @modal-header-border-color; 79 | min-height: (@modal-title-padding + @modal-title-line-height); 80 | } 81 | // Close icon 82 | .modal-header .close { 83 | margin-top: -2px; 84 | } 85 | 86 | // Title text within header 87 | .modal-title { 88 | margin: 0; 89 | line-height: @modal-title-line-height; 90 | } 91 | 92 | // Modal body 93 | // Where all modal content resides (sibling of .modal-header and .modal-footer) 94 | .modal-body { 95 | position: relative; 96 | padding: @modal-inner-padding; 97 | } 98 | 99 | // Footer (for actions) 100 | .modal-footer { 101 | padding: @modal-inner-padding; 102 | text-align: right; // right align buttons 103 | border-top: 1px solid @modal-footer-border-color; 104 | &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons 105 | 106 | // Properly space out buttons 107 | .btn + .btn { 108 | margin-left: 5px; 109 | margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs 110 | } 111 | // but override that for button groups 112 | .btn-group .btn + .btn { 113 | margin-left: -1px; 114 | } 115 | // and override it for block buttons as well 116 | .btn-block + .btn-block { 117 | margin-left: 0; 118 | } 119 | } 120 | 121 | // Scale up the modal 122 | @media (min-width: @screen-sm-min) { 123 | // Automatically set modal's width for larger viewports 124 | .modal-dialog { 125 | width: @modal-md; 126 | margin: 30px auto; 127 | } 128 | .modal-content { 129 | .box-shadow(0 5px 15px rgba(0,0,0,.5)); 130 | } 131 | 132 | // Modal sizes 133 | .modal-sm { width: @modal-sm; } 134 | } 135 | 136 | @media (min-width: @screen-md-min) { 137 | .modal-lg { width: @modal-lg; } 138 | } 139 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | padding-left: 0; 8 | margin: @line-height-computed 0; 9 | list-style: none; 10 | text-align: center; 11 | &:extend(.clearfix all); 12 | li { 13 | display: inline; 14 | > a, 15 | > span { 16 | display: inline-block; 17 | padding: 5px 14px; 18 | background-color: @pager-bg; 19 | border: 1px solid @pager-border; 20 | border-radius: @pager-border-radius; 21 | } 22 | 23 | > a:hover, 24 | > a:focus { 25 | text-decoration: none; 26 | background-color: @pager-hover-bg; 27 | } 28 | } 29 | 30 | .next { 31 | > a, 32 | > span { 33 | float: right; 34 | } 35 | } 36 | 37 | .previous { 38 | > a, 39 | > span { 40 | float: left; 41 | } 42 | } 43 | 44 | .disabled { 45 | > a, 46 | > a:hover, 47 | > a:focus, 48 | > span { 49 | color: @pager-disabled-color; 50 | background-color: @pager-bg; 51 | cursor: not-allowed; 52 | } 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/pagination.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pagination (multiple pages) 3 | // -------------------------------------------------- 4 | .pagination { 5 | display: inline-block; 6 | padding-left: 0; 7 | margin: @line-height-computed 0; 8 | border-radius: @border-radius-base; 9 | 10 | > li { 11 | display: inline; // Remove list-style and block-level defaults 12 | > a, 13 | > span { 14 | position: relative; 15 | float: left; // Collapse white-space 16 | padding: @padding-base-vertical @padding-base-horizontal; 17 | line-height: @line-height-base; 18 | text-decoration: none; 19 | color: @pagination-color; 20 | background-color: @pagination-bg; 21 | border: 1px solid @pagination-border; 22 | margin-left: -1px; 23 | } 24 | &:first-child { 25 | > a, 26 | > span { 27 | margin-left: 0; 28 | .border-left-radius(@border-radius-base); 29 | } 30 | } 31 | &:last-child { 32 | > a, 33 | > span { 34 | .border-right-radius(@border-radius-base); 35 | } 36 | } 37 | } 38 | 39 | > li > a, 40 | > li > span { 41 | &:hover, 42 | &:focus { 43 | color: @pagination-hover-color; 44 | background-color: @pagination-hover-bg; 45 | border-color: @pagination-hover-border; 46 | } 47 | } 48 | 49 | > .active > a, 50 | > .active > span { 51 | &, 52 | &:hover, 53 | &:focus { 54 | z-index: 2; 55 | color: @pagination-active-color; 56 | background-color: @pagination-active-bg; 57 | border-color: @pagination-active-border; 58 | cursor: default; 59 | } 60 | } 61 | 62 | > .disabled { 63 | > span, 64 | > span:hover, 65 | > span:focus, 66 | > a, 67 | > a:hover, 68 | > a:focus { 69 | color: @pagination-disabled-color; 70 | background-color: @pagination-disabled-bg; 71 | border-color: @pagination-disabled-border; 72 | cursor: not-allowed; 73 | } 74 | } 75 | } 76 | 77 | // Sizing 78 | // -------------------------------------------------- 79 | 80 | // Large 81 | .pagination-lg { 82 | .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large); 83 | } 84 | 85 | // Small 86 | .pagination-sm { 87 | .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small); 88 | } 89 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/popovers.less: -------------------------------------------------------------------------------- 1 | // 2 | // Popovers 3 | // -------------------------------------------------- 4 | 5 | 6 | .popover { 7 | position: absolute; 8 | top: 0; 9 | left: 0; 10 | z-index: @zindex-popover; 11 | display: none; 12 | max-width: @popover-max-width; 13 | padding: 1px; 14 | text-align: left; // Reset given new insertion method 15 | background-color: @popover-bg; 16 | background-clip: padding-box; 17 | border: 1px solid @popover-fallback-border-color; 18 | border: 1px solid @popover-border-color; 19 | border-radius: @border-radius-large; 20 | .box-shadow(0 5px 10px rgba(0,0,0,.2)); 21 | 22 | // Overrides for proper insertion 23 | white-space: normal; 24 | 25 | // Offset the popover to account for the popover arrow 26 | &.top { margin-top: -@popover-arrow-width; } 27 | &.right { margin-left: @popover-arrow-width; } 28 | &.bottom { margin-top: @popover-arrow-width; } 29 | &.left { margin-left: -@popover-arrow-width; } 30 | } 31 | 32 | .popover-title { 33 | margin: 0; // reset heading margin 34 | padding: 8px 14px; 35 | font-size: @font-size-base; 36 | font-weight: normal; 37 | line-height: 18px; 38 | background-color: @popover-title-bg; 39 | border-bottom: 1px solid darken(@popover-title-bg, 5%); 40 | border-radius: 5px 5px 0 0; 41 | } 42 | 43 | .popover-content { 44 | padding: 9px 14px; 45 | } 46 | 47 | // Arrows 48 | // 49 | // .arrow is outer, .arrow:after is inner 50 | 51 | .popover > .arrow { 52 | &, 53 | &:after { 54 | position: absolute; 55 | display: block; 56 | width: 0; 57 | height: 0; 58 | border-color: transparent; 59 | border-style: solid; 60 | } 61 | } 62 | .popover > .arrow { 63 | border-width: @popover-arrow-outer-width; 64 | } 65 | .popover > .arrow:after { 66 | border-width: @popover-arrow-width; 67 | content: ""; 68 | } 69 | 70 | .popover { 71 | &.top > .arrow { 72 | left: 50%; 73 | margin-left: -@popover-arrow-outer-width; 74 | border-bottom-width: 0; 75 | border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback 76 | border-top-color: @popover-arrow-outer-color; 77 | bottom: -@popover-arrow-outer-width; 78 | &:after { 79 | content: " "; 80 | bottom: 1px; 81 | margin-left: -@popover-arrow-width; 82 | border-bottom-width: 0; 83 | border-top-color: @popover-arrow-color; 84 | } 85 | } 86 | &.right > .arrow { 87 | top: 50%; 88 | left: -@popover-arrow-outer-width; 89 | margin-top: -@popover-arrow-outer-width; 90 | border-left-width: 0; 91 | border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback 92 | border-right-color: @popover-arrow-outer-color; 93 | &:after { 94 | content: " "; 95 | left: 1px; 96 | bottom: -@popover-arrow-width; 97 | border-left-width: 0; 98 | border-right-color: @popover-arrow-color; 99 | } 100 | } 101 | &.bottom > .arrow { 102 | left: 50%; 103 | margin-left: -@popover-arrow-outer-width; 104 | border-top-width: 0; 105 | border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback 106 | border-bottom-color: @popover-arrow-outer-color; 107 | top: -@popover-arrow-outer-width; 108 | &:after { 109 | content: " "; 110 | top: 1px; 111 | margin-left: -@popover-arrow-width; 112 | border-top-width: 0; 113 | border-bottom-color: @popover-arrow-color; 114 | } 115 | } 116 | 117 | &.left > .arrow { 118 | top: 50%; 119 | right: -@popover-arrow-outer-width; 120 | margin-top: -@popover-arrow-outer-width; 121 | border-right-width: 0; 122 | border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback 123 | border-left-color: @popover-arrow-outer-color; 124 | &:after { 125 | content: " "; 126 | right: 1px; 127 | border-right-width: 0; 128 | border-left-color: @popover-arrow-color; 129 | bottom: -@popover-arrow-width; 130 | } 131 | } 132 | 133 | } 134 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/print.less: -------------------------------------------------------------------------------- 1 | // 2 | // Basic print styles 3 | // -------------------------------------------------- 4 | // Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css 5 | 6 | @media print { 7 | 8 | * { 9 | text-shadow: none !important; 10 | color: #000 !important; // Black prints faster: h5bp.com/s 11 | background: transparent !important; 12 | box-shadow: none !important; 13 | } 14 | 15 | a, 16 | a:visited { 17 | text-decoration: underline; 18 | } 19 | 20 | a[href]:after { 21 | content: " (" attr(href) ")"; 22 | } 23 | 24 | abbr[title]:after { 25 | content: " (" attr(title) ")"; 26 | } 27 | 28 | // Don't show links for images, or javascript/internal links 29 | a[href^="javascript:"]:after, 30 | a[href^="#"]:after { 31 | content: ""; 32 | } 33 | 34 | pre, 35 | blockquote { 36 | border: 1px solid #999; 37 | page-break-inside: avoid; 38 | } 39 | 40 | thead { 41 | display: table-header-group; // h5bp.com/t 42 | } 43 | 44 | tr, 45 | img { 46 | page-break-inside: avoid; 47 | } 48 | 49 | img { 50 | max-width: 100% !important; 51 | } 52 | 53 | p, 54 | h2, 55 | h3 { 56 | orphans: 3; 57 | widows: 3; 58 | } 59 | 60 | h2, 61 | h3 { 62 | page-break-after: avoid; 63 | } 64 | 65 | // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245 66 | // Once fixed, we can just straight up remove this. 67 | select { 68 | background: #fff !important; 69 | } 70 | 71 | // Bootstrap components 72 | .navbar { 73 | display: none; 74 | } 75 | .table { 76 | td, 77 | th { 78 | background-color: #fff !important; 79 | } 80 | } 81 | .btn, 82 | .dropup > .btn { 83 | > .caret { 84 | border-top-color: #000 !important; 85 | } 86 | } 87 | .label { 88 | border: 1px solid #000; 89 | } 90 | 91 | .table { 92 | border-collapse: collapse !important; 93 | } 94 | .table-bordered { 95 | th, 96 | td { 97 | border: 1px solid #ddd !important; 98 | } 99 | } 100 | 101 | } 102 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/progress-bars.less: -------------------------------------------------------------------------------- 1 | // 2 | // Progress bars 3 | // -------------------------------------------------- 4 | 5 | 6 | // Bar animations 7 | // ------------------------- 8 | 9 | // WebKit 10 | @-webkit-keyframes progress-bar-stripes { 11 | from { background-position: 40px 0; } 12 | to { background-position: 0 0; } 13 | } 14 | 15 | // Spec and IE10+ 16 | @keyframes progress-bar-stripes { 17 | from { background-position: 40px 0; } 18 | to { background-position: 0 0; } 19 | } 20 | 21 | 22 | 23 | // Bar itself 24 | // ------------------------- 25 | 26 | // Outer container 27 | .progress { 28 | overflow: hidden; 29 | height: @line-height-computed; 30 | margin-bottom: @line-height-computed; 31 | background-color: @progress-bg; 32 | border-radius: @border-radius-base; 33 | .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); 34 | } 35 | 36 | // Bar of progress 37 | .progress-bar { 38 | float: left; 39 | width: 0%; 40 | height: 100%; 41 | font-size: @font-size-small; 42 | line-height: @line-height-computed; 43 | color: @progress-bar-color; 44 | text-align: center; 45 | background-color: @progress-bar-bg; 46 | .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); 47 | .transition(width .6s ease); 48 | } 49 | 50 | // Striped bars 51 | .progress-striped .progress-bar { 52 | #gradient > .striped(); 53 | background-size: 40px 40px; 54 | } 55 | 56 | // Call animation for the active one 57 | .progress.active .progress-bar { 58 | .animation(progress-bar-stripes 2s linear infinite); 59 | } 60 | 61 | 62 | 63 | // Variations 64 | // ------------------------- 65 | 66 | .progress-bar-success { 67 | .progress-bar-variant(@progress-bar-success-bg); 68 | } 69 | 70 | .progress-bar-info { 71 | .progress-bar-variant(@progress-bar-info-bg); 72 | } 73 | 74 | .progress-bar-warning { 75 | .progress-bar-variant(@progress-bar-warning-bg); 76 | } 77 | 78 | .progress-bar-danger { 79 | .progress-bar-variant(@progress-bar-danger-bg); 80 | } 81 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/responsive-utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // IE10 in Windows (Phone) 8 7 | // 8 | // Support for responsive views via media queries is kind of borked in IE10, for 9 | // Surface/desktop in split view and for Windows Phone 8. This particular fix 10 | // must be accompanied by a snippet of JavaScript to sniff the user agent and 11 | // apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at 12 | // our Getting Started page for more information on this bug. 13 | // 14 | // For more information, see the following: 15 | // 16 | // Issue: https://github.com/twbs/bootstrap/issues/10497 17 | // Docs: http://getbootstrap.com/getting-started/#browsers 18 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ 19 | 20 | @-ms-viewport { 21 | width: device-width; 22 | } 23 | 24 | 25 | // Visibility utilities 26 | .visible-xs, 27 | .visible-sm, 28 | .visible-md, 29 | .visible-lg { 30 | .responsive-invisibility(); 31 | } 32 | 33 | .visible-xs { 34 | @media (max-width: @screen-xs-max) { 35 | .responsive-visibility(); 36 | } 37 | } 38 | .visible-sm { 39 | @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { 40 | .responsive-visibility(); 41 | } 42 | } 43 | .visible-md { 44 | @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { 45 | .responsive-visibility(); 46 | } 47 | } 48 | .visible-lg { 49 | @media (min-width: @screen-lg-min) { 50 | .responsive-visibility(); 51 | } 52 | } 53 | 54 | .hidden-xs { 55 | @media (max-width: @screen-xs-max) { 56 | .responsive-invisibility(); 57 | } 58 | } 59 | .hidden-sm { 60 | @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { 61 | .responsive-invisibility(); 62 | } 63 | } 64 | .hidden-md { 65 | @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { 66 | .responsive-invisibility(); 67 | } 68 | } 69 | .hidden-lg { 70 | @media (min-width: @screen-lg-min) { 71 | .responsive-invisibility(); 72 | } 73 | } 74 | 75 | 76 | // Print utilities 77 | // 78 | // Media queries are placed on the inside to be mixin-friendly. 79 | 80 | .visible-print { 81 | .responsive-invisibility(); 82 | 83 | @media print { 84 | .responsive-visibility(); 85 | } 86 | } 87 | 88 | .hidden-print { 89 | @media print { 90 | .responsive-invisibility(); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/scaffolding.less: -------------------------------------------------------------------------------- 1 | // 2 | // Scaffolding 3 | // -------------------------------------------------- 4 | 5 | 6 | // Reset the box-sizing 7 | // 8 | // Heads up! This reset may cause conflicts with some third-party widgets. 9 | // For recommendations on resolving such conflicts, see 10 | // http://getbootstrap.com/getting-started/#third-box-sizing 11 | * { 12 | .box-sizing(border-box); 13 | } 14 | *:before, 15 | *:after { 16 | .box-sizing(border-box); 17 | } 18 | 19 | 20 | // Body reset 21 | 22 | html { 23 | font-size: 62.5%; 24 | -webkit-tap-highlight-color: rgba(0,0,0,0); 25 | } 26 | 27 | body { 28 | font-family: @font-family-base; 29 | font-size: @font-size-base; 30 | line-height: @line-height-base; 31 | color: @text-color; 32 | background-color: @body-bg; 33 | } 34 | 35 | // Reset fonts for relevant elements 36 | input, 37 | button, 38 | select, 39 | textarea { 40 | font-family: inherit; 41 | font-size: inherit; 42 | line-height: inherit; 43 | } 44 | 45 | 46 | // Links 47 | 48 | a { 49 | color: @link-color; 50 | text-decoration: none; 51 | 52 | &:hover, 53 | &:focus { 54 | color: @link-hover-color; 55 | text-decoration: underline; 56 | } 57 | 58 | &:focus { 59 | .tab-focus(); 60 | } 61 | } 62 | 63 | 64 | // Figures 65 | // 66 | // We reset this here because previously Normalize had no `figure` margins. This 67 | // ensures we don't break anyone's use of the element. 68 | 69 | figure { 70 | margin: 0; 71 | } 72 | 73 | 74 | // Images 75 | 76 | img { 77 | vertical-align: middle; 78 | } 79 | 80 | // Responsive images (ensure images don't scale beyond their parents) 81 | .img-responsive { 82 | .img-responsive(); 83 | } 84 | 85 | // Rounded corners 86 | .img-rounded { 87 | border-radius: @border-radius-large; 88 | } 89 | 90 | // Image thumbnails 91 | // 92 | // Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`. 93 | .img-thumbnail { 94 | padding: @thumbnail-padding; 95 | line-height: @line-height-base; 96 | background-color: @thumbnail-bg; 97 | border: 1px solid @thumbnail-border; 98 | border-radius: @thumbnail-border-radius; 99 | .transition(all .2s ease-in-out); 100 | 101 | // Keep them at most 100% wide 102 | .img-responsive(inline-block); 103 | } 104 | 105 | // Perfect circle 106 | .img-circle { 107 | border-radius: 50%; // set radius in percents 108 | } 109 | 110 | 111 | // Horizontal rules 112 | 113 | hr { 114 | margin-top: @line-height-computed; 115 | margin-bottom: @line-height-computed; 116 | border: 0; 117 | border-top: 1px solid @hr-border; 118 | } 119 | 120 | 121 | // Only display content to screen readers 122 | // 123 | // See: http://a11yproject.com/posts/how-to-hide-content/ 124 | 125 | .sr-only { 126 | position: absolute; 127 | width: 1px; 128 | height: 1px; 129 | margin: -1px; 130 | padding: 0; 131 | overflow: hidden; 132 | clip: rect(0,0,0,0); 133 | border: 0; 134 | } 135 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/tables.less: -------------------------------------------------------------------------------- 1 | // 2 | // Tables 3 | // -------------------------------------------------- 4 | 5 | 6 | table { 7 | max-width: 100%; 8 | background-color: @table-bg; 9 | } 10 | th { 11 | text-align: left; 12 | } 13 | 14 | 15 | // Baseline styles 16 | 17 | .table { 18 | width: 100%; 19 | margin-bottom: @line-height-computed; 20 | // Cells 21 | > thead, 22 | > tbody, 23 | > tfoot { 24 | > tr { 25 | > th, 26 | > td { 27 | padding: @table-cell-padding; 28 | line-height: @line-height-base; 29 | vertical-align: top; 30 | border-top: 1px solid @table-border-color; 31 | } 32 | } 33 | } 34 | // Bottom align for column headings 35 | > thead > tr > th { 36 | vertical-align: bottom; 37 | border-bottom: 2px solid @table-border-color; 38 | } 39 | // Remove top border from thead by default 40 | > caption + thead, 41 | > colgroup + thead, 42 | > thead:first-child { 43 | > tr:first-child { 44 | > th, 45 | > td { 46 | border-top: 0; 47 | } 48 | } 49 | } 50 | // Account for multiple tbody instances 51 | > tbody + tbody { 52 | border-top: 2px solid @table-border-color; 53 | } 54 | 55 | // Nesting 56 | .table { 57 | background-color: @body-bg; 58 | } 59 | } 60 | 61 | 62 | // Condensed table w/ half padding 63 | 64 | .table-condensed { 65 | > thead, 66 | > tbody, 67 | > tfoot { 68 | > tr { 69 | > th, 70 | > td { 71 | padding: @table-condensed-cell-padding; 72 | } 73 | } 74 | } 75 | } 76 | 77 | 78 | // Bordered version 79 | // 80 | // Add borders all around the table and between all the columns. 81 | 82 | .table-bordered { 83 | border: 1px solid @table-border-color; 84 | > thead, 85 | > tbody, 86 | > tfoot { 87 | > tr { 88 | > th, 89 | > td { 90 | border: 1px solid @table-border-color; 91 | } 92 | } 93 | } 94 | > thead > tr { 95 | > th, 96 | > td { 97 | border-bottom-width: 2px; 98 | } 99 | } 100 | } 101 | 102 | 103 | // Zebra-striping 104 | // 105 | // Default zebra-stripe styles (alternating gray and transparent backgrounds) 106 | 107 | .table-striped { 108 | > tbody > tr:nth-child(odd) { 109 | > td, 110 | > th { 111 | background-color: @table-bg-accent; 112 | } 113 | } 114 | } 115 | 116 | 117 | // Hover effect 118 | // 119 | // Placed here since it has to come after the potential zebra striping 120 | 121 | .table-hover { 122 | > tbody > tr:hover { 123 | > td, 124 | > th { 125 | background-color: @table-bg-hover; 126 | } 127 | } 128 | } 129 | 130 | 131 | // Table cell sizing 132 | // 133 | // Reset default table behavior 134 | 135 | table col[class*="col-"] { 136 | position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) 137 | float: none; 138 | display: table-column; 139 | } 140 | table { 141 | td, 142 | th { 143 | &[class*="col-"] { 144 | position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) 145 | float: none; 146 | display: table-cell; 147 | } 148 | } 149 | } 150 | 151 | 152 | // Table backgrounds 153 | // 154 | // Exact selectors below required to override `.table-striped` and prevent 155 | // inheritance to nested tables. 156 | 157 | // Generate the contextual variants 158 | .table-row-variant(active; @table-bg-active); 159 | .table-row-variant(success; @state-success-bg); 160 | .table-row-variant(info; @state-info-bg); 161 | .table-row-variant(warning; @state-warning-bg); 162 | .table-row-variant(danger; @state-danger-bg); 163 | 164 | 165 | // Responsive tables 166 | // 167 | // Wrap your tables in `.table-responsive` and we'll make them mobile friendly 168 | // by enabling horizontal scrolling. Only applies <768px. Everything above that 169 | // will display normally. 170 | 171 | .table-responsive { 172 | @media (max-width: @screen-xs-max) { 173 | width: 100%; 174 | margin-bottom: (@line-height-computed * 0.75); 175 | overflow-y: hidden; 176 | overflow-x: scroll; 177 | -ms-overflow-style: -ms-autohiding-scrollbar; 178 | border: 1px solid @table-border-color; 179 | -webkit-overflow-scrolling: touch; 180 | 181 | // Tighten up spacing 182 | > .table { 183 | margin-bottom: 0; 184 | 185 | // Ensure the content doesn't wrap 186 | > thead, 187 | > tbody, 188 | > tfoot { 189 | > tr { 190 | > th, 191 | > td { 192 | white-space: nowrap; 193 | } 194 | } 195 | } 196 | } 197 | 198 | // Special overrides for the bordered tables 199 | > .table-bordered { 200 | border: 0; 201 | 202 | // Nuke the appropriate borders so that the parent can handle them 203 | > thead, 204 | > tbody, 205 | > tfoot { 206 | > tr { 207 | > th:first-child, 208 | > td:first-child { 209 | border-left: 0; 210 | } 211 | > th:last-child, 212 | > td:last-child { 213 | border-right: 0; 214 | } 215 | } 216 | } 217 | 218 | // Only nuke the last row's bottom-border in `tbody` and `tfoot` since 219 | // chances are there will be only one `tr` in a `thead` and that would 220 | // remove the border altogether. 221 | > tbody, 222 | > tfoot { 223 | > tr:last-child { 224 | > th, 225 | > td { 226 | border-bottom: 0; 227 | } 228 | } 229 | } 230 | 231 | } 232 | } 233 | } 234 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: @thumbnail-padding; 10 | margin-bottom: @line-height-computed; 11 | line-height: @line-height-base; 12 | background-color: @thumbnail-bg; 13 | border: 1px solid @thumbnail-border; 14 | border-radius: @thumbnail-border-radius; 15 | .transition(all .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | &:extend(.img-responsive); 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // Add a hover state for linked versions only 25 | a&:hover, 26 | a&:focus, 27 | a&.active { 28 | border-color: @link-color; 29 | } 30 | 31 | // Image captions 32 | .caption { 33 | padding: @thumbnail-caption-padding; 34 | color: @thumbnail-caption-color; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/tooltip.less: -------------------------------------------------------------------------------- 1 | // 2 | // Tooltips 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .tooltip { 8 | position: absolute; 9 | z-index: @zindex-tooltip; 10 | display: block; 11 | visibility: visible; 12 | font-size: @font-size-small; 13 | line-height: 1.4; 14 | .opacity(0); 15 | 16 | &.in { .opacity(@tooltip-opacity); } 17 | &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } 18 | &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } 19 | &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } 20 | &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } 21 | } 22 | 23 | // Wrapper for the tooltip content 24 | .tooltip-inner { 25 | max-width: @tooltip-max-width; 26 | padding: 3px 8px; 27 | color: @tooltip-color; 28 | text-align: center; 29 | text-decoration: none; 30 | background-color: @tooltip-bg; 31 | border-radius: @border-radius-base; 32 | } 33 | 34 | // Arrows 35 | .tooltip-arrow { 36 | position: absolute; 37 | width: 0; 38 | height: 0; 39 | border-color: transparent; 40 | border-style: solid; 41 | } 42 | .tooltip { 43 | &.top .tooltip-arrow { 44 | bottom: 0; 45 | left: 50%; 46 | margin-left: -@tooltip-arrow-width; 47 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 48 | border-top-color: @tooltip-arrow-color; 49 | } 50 | &.top-left .tooltip-arrow { 51 | bottom: 0; 52 | left: @tooltip-arrow-width; 53 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 54 | border-top-color: @tooltip-arrow-color; 55 | } 56 | &.top-right .tooltip-arrow { 57 | bottom: 0; 58 | right: @tooltip-arrow-width; 59 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 60 | border-top-color: @tooltip-arrow-color; 61 | } 62 | &.right .tooltip-arrow { 63 | top: 50%; 64 | left: 0; 65 | margin-top: -@tooltip-arrow-width; 66 | border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; 67 | border-right-color: @tooltip-arrow-color; 68 | } 69 | &.left .tooltip-arrow { 70 | top: 50%; 71 | right: 0; 72 | margin-top: -@tooltip-arrow-width; 73 | border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; 74 | border-left-color: @tooltip-arrow-color; 75 | } 76 | &.bottom .tooltip-arrow { 77 | top: 0; 78 | left: 50%; 79 | margin-left: -@tooltip-arrow-width; 80 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 81 | border-bottom-color: @tooltip-arrow-color; 82 | } 83 | &.bottom-left .tooltip-arrow { 84 | top: 0; 85 | left: @tooltip-arrow-width; 86 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 87 | border-bottom-color: @tooltip-arrow-color; 88 | } 89 | &.bottom-right .tooltip-arrow { 90 | top: 0; 91 | right: @tooltip-arrow-width; 92 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 93 | border-bottom-color: @tooltip-arrow-color; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | .clearfix(); 11 | } 12 | .center-block { 13 | .center-block(); 14 | } 15 | .pull-right { 16 | float: right !important; 17 | } 18 | .pull-left { 19 | float: left !important; 20 | } 21 | 22 | 23 | // Toggling content 24 | // ------------------------- 25 | 26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 27 | .hide { 28 | display: none !important; 29 | } 30 | .show { 31 | display: block !important; 32 | } 33 | .invisible { 34 | visibility: hidden; 35 | } 36 | .text-hide { 37 | .text-hide(); 38 | } 39 | 40 | 41 | // Hide from screenreaders and browsers 42 | // 43 | // Credit: HTML5 Boilerplate 44 | 45 | .hidden { 46 | display: none !important; 47 | visibility: hidden !important; 48 | } 49 | 50 | 51 | // For Affix plugin 52 | // ------------------------- 53 | 54 | .affix { 55 | position: fixed; 56 | } 57 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap-3.1.1/less/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/accordion.less: -------------------------------------------------------------------------------- 1 | // ACCORDION 2 | // --------- 3 | 4 | 5 | // Parent container 6 | .accordion { 7 | margin-bottom: @baseLineHeight; 8 | } 9 | 10 | // Group == heading + body 11 | .accordion-group { 12 | margin-bottom: 2px; 13 | border: 1px solid #e5e5e5; 14 | .border-radius(4px); 15 | } 16 | .accordion-heading { 17 | border-bottom: 0; 18 | } 19 | .accordion-heading .accordion-toggle { 20 | display: block; 21 | padding: 8px 15px; 22 | } 23 | 24 | // Inner needs the styles because you can't animate properly with any styles on the element 25 | .accordion-inner { 26 | padding: 9px 15px; 27 | border-top: 1px solid #e5e5e5; 28 | } 29 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/alerts.less: -------------------------------------------------------------------------------- 1 | // ALERT STYLES 2 | // ------------ 3 | 4 | // Base alert styles 5 | .alert { 6 | padding: 8px 35px 8px 14px; 7 | margin-bottom: @baseLineHeight; 8 | text-shadow: 0 1px 0 rgba(255,255,255,.5); 9 | background-color: @warningBackground; 10 | border: 1px solid @warningBorder; 11 | .border-radius(4px); 12 | color: @warningText; 13 | } 14 | .alert-heading { 15 | color: inherit; 16 | } 17 | 18 | // Adjust close link position 19 | .alert .close { 20 | position: relative; 21 | top: -2px; 22 | right: -21px; 23 | line-height: 18px; 24 | } 25 | 26 | // Alternate styles 27 | // ---------------- 28 | 29 | .alert-success { 30 | background-color: @successBackground; 31 | border-color: @successBorder; 32 | color: @successText; 33 | } 34 | .alert-danger, 35 | .alert-error { 36 | background-color: @errorBackground; 37 | border-color: @errorBorder; 38 | color: @errorText; 39 | } 40 | .alert-info { 41 | background-color: @infoBackground; 42 | border-color: @infoBorder; 43 | color: @infoText; 44 | } 45 | 46 | // Block alerts 47 | // ------------------------ 48 | .alert-block { 49 | padding-top: 14px; 50 | padding-bottom: 14px; 51 | } 52 | .alert-block > p, 53 | .alert-block > ul { 54 | margin-bottom: 0; 55 | } 56 | .alert-block p + p { 57 | margin-top: 5px; 58 | } 59 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/badges.less: -------------------------------------------------------------------------------- 1 | // BADGES 2 | // ------ 3 | 4 | // Base 5 | .badge { 6 | padding: 1px 9px 2px; 7 | font-size: @baseFontSize * .925; 8 | font-weight: bold; 9 | white-space: nowrap; 10 | color: @white; 11 | background-color: @grayLight; 12 | .border-radius(9px); 13 | } 14 | 15 | // Hover state 16 | .badge:hover { 17 | color: @white; 18 | text-decoration: none; 19 | cursor: pointer; 20 | } 21 | 22 | // Colors 23 | .badge-error { background-color: @errorText; } 24 | .badge-error:hover { background-color: darken(@errorText, 10%); } 25 | 26 | .badge-warning { background-color: @orange; } 27 | .badge-warning:hover { background-color: darken(@orange, 10%); } 28 | 29 | .badge-success { background-color: @successText; } 30 | .badge-success:hover { background-color: darken(@successText, 10%); } 31 | 32 | .badge-info { background-color: @infoText; } 33 | .badge-info:hover { background-color: darken(@infoText, 10%); } 34 | 35 | .badge-inverse { background-color: @grayDark; } 36 | .badge-inverse:hover { background-color: darken(@grayDark, 10%); } -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/bootstrap.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v2.0.2 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */ 10 | 11 | // CSS Reset 12 | @import "reset.less"; 13 | 14 | // Core variables and mixins 15 | @import "variables.less"; // Modify this for custom colors, font-sizes, etc 16 | @import "mixins.less"; 17 | 18 | // Grid system and page structure 19 | @import "scaffolding.less"; 20 | @import "grid.less"; 21 | @import "layouts.less"; 22 | 23 | // Base CSS 24 | @import "type.less"; 25 | @import "code.less"; 26 | @import "forms.less"; 27 | @import "tables.less"; 28 | 29 | // Components: common 30 | @import "sprites.less"; 31 | @import "dropdowns.less"; 32 | @import "wells.less"; 33 | @import "component-animations.less"; 34 | @import "close.less"; 35 | 36 | // Components: Buttons & Alerts 37 | @import "buttons.less"; 38 | @import "button-groups.less"; 39 | @import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less 40 | 41 | // Components: Nav 42 | @import "navs.less"; 43 | @import "navbar.less"; 44 | @import "breadcrumbs.less"; 45 | @import "pagination.less"; 46 | @import "pager.less"; 47 | 48 | // Components: Popovers 49 | @import "modals.less"; 50 | @import "tooltip.less"; 51 | @import "popovers.less"; 52 | 53 | // Components: Misc 54 | @import "thumbnails.less"; 55 | @import "labels.less"; 56 | @import "badges.less"; 57 | @import "progress-bars.less"; 58 | @import "accordion.less"; 59 | @import "carousel.less"; 60 | @import "hero-unit.less"; 61 | 62 | // Utility classes 63 | @import "utilities.less"; // Has to be last to override when necessary 64 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // BREADCRUMBS 2 | // ----------- 3 | 4 | .breadcrumb { 5 | padding: 7px 14px; 6 | margin: 0 0 @baseLineHeight; 7 | list-style: none; 8 | #gradient > .vertical(@white, #f5f5f5); 9 | border: 1px solid #ddd; 10 | .border-radius(3px); 11 | .box-shadow(inset 0 1px 0 @white); 12 | li { 13 | display: inline-block; 14 | .ie7-inline-block(); 15 | text-shadow: 0 1px 0 @white; 16 | } 17 | .divider { 18 | padding: 0 5px; 19 | color: @grayLight; 20 | } 21 | .active a { 22 | color: @grayDark; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/button-groups.less: -------------------------------------------------------------------------------- 1 | // BUTTON GROUPS 2 | // ------------- 3 | 4 | 5 | // Make the div behave like a button 6 | .btn-group { 7 | position: relative; 8 | .clearfix(); // clears the floated buttons 9 | .ie7-restore-left-whitespace(); 10 | } 11 | 12 | // Space out series of button groups 13 | .btn-group + .btn-group { 14 | margin-left: 5px; 15 | } 16 | 17 | // Optional: Group multiple button groups together for a toolbar 18 | .btn-toolbar { 19 | margin-top: @baseLineHeight / 2; 20 | margin-bottom: @baseLineHeight / 2; 21 | .btn-group { 22 | display: inline-block; 23 | .ie7-inline-block(); 24 | } 25 | } 26 | 27 | // Float them, remove border radius, then re-add to first and last elements 28 | .btn-group .btn { 29 | position: relative; 30 | float: left; 31 | margin-left: -1px; 32 | .border-radius(0); 33 | } 34 | // Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match 35 | .btn-group .btn:first-child { 36 | margin-left: 0; 37 | -webkit-border-top-left-radius: 4px; 38 | -moz-border-radius-topleft: 4px; 39 | border-top-left-radius: 4px; 40 | -webkit-border-bottom-left-radius: 4px; 41 | -moz-border-radius-bottomleft: 4px; 42 | border-bottom-left-radius: 4px; 43 | } 44 | .btn-group .btn:last-child, 45 | .btn-group .dropdown-toggle { 46 | -webkit-border-top-right-radius: 4px; 47 | -moz-border-radius-topright: 4px; 48 | border-top-right-radius: 4px; 49 | -webkit-border-bottom-right-radius: 4px; 50 | -moz-border-radius-bottomright: 4px; 51 | border-bottom-right-radius: 4px; 52 | } 53 | // Reset corners for large buttons 54 | .btn-group .btn.large:first-child { 55 | margin-left: 0; 56 | -webkit-border-top-left-radius: 6px; 57 | -moz-border-radius-topleft: 6px; 58 | border-top-left-radius: 6px; 59 | -webkit-border-bottom-left-radius: 6px; 60 | -moz-border-radius-bottomleft: 6px; 61 | border-bottom-left-radius: 6px; 62 | } 63 | .btn-group .btn.large:last-child, 64 | .btn-group .large.dropdown-toggle { 65 | -webkit-border-top-right-radius: 6px; 66 | -moz-border-radius-topright: 6px; 67 | border-top-right-radius: 6px; 68 | -webkit-border-bottom-right-radius: 6px; 69 | -moz-border-radius-bottomright: 6px; 70 | border-bottom-right-radius: 6px; 71 | } 72 | 73 | // On hover/focus/active, bring the proper btn to front 74 | .btn-group .btn:hover, 75 | .btn-group .btn:focus, 76 | .btn-group .btn:active, 77 | .btn-group .btn.active { 78 | z-index: 2; 79 | } 80 | 81 | // On active and open, don't show outline 82 | .btn-group .dropdown-toggle:active, 83 | .btn-group.open .dropdown-toggle { 84 | outline: 0; 85 | } 86 | 87 | 88 | 89 | // Split button dropdowns 90 | // ---------------------- 91 | 92 | // Give the line between buttons some depth 93 | .btn-group .dropdown-toggle { 94 | padding-left: 8px; 95 | padding-right: 8px; 96 | @shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); 97 | .box-shadow(@shadow); 98 | *padding-top: 3px; 99 | *padding-bottom: 3px; 100 | } 101 | .btn-group .btn-mini.dropdown-toggle { 102 | padding-left: 5px; 103 | padding-right: 5px; 104 | *padding-top: 1px; 105 | *padding-bottom: 1px; 106 | } 107 | .btn-group .btn-small.dropdown-toggle { 108 | *padding-top: 4px; 109 | *padding-bottom: 4px; 110 | } 111 | .btn-group .btn-large.dropdown-toggle { 112 | padding-left: 12px; 113 | padding-right: 12px; 114 | } 115 | 116 | .btn-group.open { 117 | // IE7's z-index only goes to the nearest positioned ancestor, which would 118 | // make the menu appear below buttons that appeared later on the page 119 | *z-index: @zindexDropdown; 120 | 121 | // Reposition menu on open and round all corners 122 | .dropdown-menu { 123 | display: block; 124 | margin-top: 1px; 125 | .border-radius(5px); 126 | } 127 | 128 | .dropdown-toggle { 129 | background-image: none; 130 | @shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); 131 | .box-shadow(@shadow); 132 | } 133 | } 134 | 135 | // Reposition the caret 136 | .btn .caret { 137 | margin-top: 7px; 138 | margin-left: 0; 139 | } 140 | .btn:hover .caret, 141 | .open.btn-group .caret { 142 | .opacity(100); 143 | } 144 | // Carets in other button sizes 145 | .btn-mini .caret { 146 | margin-top: 5px; 147 | } 148 | .btn-small .caret { 149 | margin-top: 6px; 150 | } 151 | .btn-large .caret { 152 | margin-top: 6px; 153 | border-left: 5px solid transparent; 154 | border-right: 5px solid transparent; 155 | border-top: 5px solid @black; 156 | } 157 | 158 | 159 | // Account for other colors 160 | .btn-primary, 161 | .btn-warning, 162 | .btn-danger, 163 | .btn-info, 164 | .btn-success, 165 | .btn-inverse { 166 | .caret { 167 | border-top-color: @white; 168 | border-bottom-color: @white; 169 | .opacity(75); 170 | } 171 | } 172 | 173 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/buttons.less: -------------------------------------------------------------------------------- 1 | // BUTTON STYLES 2 | // ------------- 3 | 4 | 5 | // Base styles 6 | // -------------------------------------------------- 7 | 8 | // Core 9 | .btn { 10 | display: inline-block; 11 | .ie7-inline-block(); 12 | padding: 4px 10px 4px; 13 | margin-bottom: 0; // For input.btn 14 | font-size: @baseFontSize; 15 | line-height: @baseLineHeight; 16 | color: @grayDark; 17 | text-align: center; 18 | text-shadow: 0 1px 1px rgba(255,255,255,.75); 19 | vertical-align: middle; 20 | .buttonBackground(@btnBackground, @btnBackgroundHighlight); 21 | border: 1px solid @btnBorder; 22 | border-bottom-color: darken(@btnBorder, 10%); 23 | .border-radius(4px); 24 | @shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); 25 | .box-shadow(@shadow); 26 | cursor: pointer; 27 | 28 | // Give IE7 some love 29 | .ie7-restore-left-whitespace(); 30 | } 31 | 32 | // Hover state 33 | .btn:hover { 34 | color: @grayDark; 35 | text-decoration: none; 36 | background-color: darken(@white, 10%); 37 | background-position: 0 -15px; 38 | 39 | // transition is only when going to hover, otherwise the background 40 | // behind the gradient (there for IE<=9 fallback) gets mismatched 41 | .transition(background-position .1s linear); 42 | } 43 | 44 | // Focus state for keyboard and accessibility 45 | .btn:focus { 46 | .tab-focus(); 47 | } 48 | 49 | // Active state 50 | .btn.active, 51 | .btn:active { 52 | background-image: none; 53 | @shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); 54 | .box-shadow(@shadow); 55 | background-color: darken(@white, 10%); 56 | background-color: darken(@white, 15%) e("\9"); 57 | outline: 0; 58 | } 59 | 60 | // Disabled state 61 | .btn.disabled, 62 | .btn[disabled] { 63 | cursor: default; 64 | background-image: none; 65 | background-color: darken(@white, 10%); 66 | .opacity(65); 67 | .box-shadow(none); 68 | } 69 | 70 | 71 | // Button Sizes 72 | // -------------------------------------------------- 73 | 74 | // Large 75 | .btn-large { 76 | padding: 9px 14px; 77 | font-size: @baseFontSize + 2px; 78 | line-height: normal; 79 | .border-radius(5px); 80 | } 81 | .btn-large [class^="icon-"] { 82 | margin-top: 1px; 83 | } 84 | 85 | // Small 86 | .btn-small { 87 | padding: 5px 9px; 88 | font-size: @baseFontSize - 2px; 89 | line-height: @baseLineHeight - 2px; 90 | } 91 | .btn-small [class^="icon-"] { 92 | margin-top: -1px; 93 | } 94 | 95 | // Mini 96 | .btn-mini { 97 | padding: 2px 6px; 98 | font-size: @baseFontSize - 2px; 99 | line-height: @baseLineHeight - 4px; 100 | } 101 | 102 | 103 | // Alternate buttons 104 | // -------------------------------------------------- 105 | 106 | // Set text color 107 | // ------------------------- 108 | .btn-primary, 109 | .btn-primary:hover, 110 | .btn-warning, 111 | .btn-warning:hover, 112 | .btn-danger, 113 | .btn-danger:hover, 114 | .btn-success, 115 | .btn-success:hover, 116 | .btn-info, 117 | .btn-info:hover, 118 | .btn-inverse, 119 | .btn-inverse:hover { 120 | text-shadow: 0 -1px 0 rgba(0,0,0,.25); 121 | color: @white; 122 | } 123 | // Provide *some* extra contrast for those who can get it 124 | .btn-primary.active, 125 | .btn-warning.active, 126 | .btn-danger.active, 127 | .btn-success.active, 128 | .btn-info.active, 129 | .btn-inverse.active { 130 | color: rgba(255,255,255,.75); 131 | } 132 | 133 | // Set the backgrounds 134 | // ------------------------- 135 | .btn-primary { 136 | .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight); 137 | } 138 | // Warning appears are orange 139 | .btn-warning { 140 | .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight); 141 | } 142 | // Danger and error appear as red 143 | .btn-danger { 144 | .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight); 145 | } 146 | // Success appears as green 147 | .btn-success { 148 | .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight); 149 | } 150 | // Info appears as a neutral blue 151 | .btn-info { 152 | .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight); 153 | } 154 | // Inverse appears as dark gray 155 | .btn-inverse { 156 | .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight); 157 | } 158 | 159 | 160 | // Cross-browser Jank 161 | // -------------------------------------------------- 162 | 163 | button.btn, 164 | input[type="submit"].btn { 165 | 166 | // Firefox 3.6 only I believe 167 | &::-moz-focus-inner { 168 | padding: 0; 169 | border: 0; 170 | } 171 | 172 | // IE7 has some default padding on button controls 173 | *padding-top: 2px; 174 | *padding-bottom: 2px; 175 | &.btn-large { 176 | *padding-top: 7px; 177 | *padding-bottom: 7px; 178 | } 179 | &.btn-small { 180 | *padding-top: 3px; 181 | *padding-bottom: 3px; 182 | } 183 | &.btn-mini { 184 | *padding-top: 1px; 185 | *padding-bottom: 1px; 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/carousel.less: -------------------------------------------------------------------------------- 1 | // CAROUSEL 2 | // -------- 3 | 4 | .carousel { 5 | position: relative; 6 | margin-bottom: @baseLineHeight; 7 | line-height: 1; 8 | } 9 | 10 | .carousel-inner { 11 | overflow: hidden; 12 | width: 100%; 13 | position: relative; 14 | } 15 | 16 | .carousel { 17 | 18 | .item { 19 | display: none; 20 | position: relative; 21 | .transition(.6s ease-in-out left); 22 | } 23 | 24 | // Account for jankitude on images 25 | .item > img { 26 | display: block; 27 | line-height: 1; 28 | } 29 | 30 | .active, 31 | .next, 32 | .prev { display: block; } 33 | 34 | .active { 35 | left: 0; 36 | } 37 | 38 | .next, 39 | .prev { 40 | position: absolute; 41 | top: 0; 42 | width: 100%; 43 | } 44 | 45 | .next { 46 | left: 100%; 47 | } 48 | .prev { 49 | left: -100%; 50 | } 51 | .next.left, 52 | .prev.right { 53 | left: 0; 54 | } 55 | 56 | .active.left { 57 | left: -100%; 58 | } 59 | .active.right { 60 | left: 100%; 61 | } 62 | 63 | } 64 | 65 | // Left/right controls for nav 66 | // --------------------------- 67 | 68 | .carousel-control { 69 | position: absolute; 70 | top: 40%; 71 | left: 15px; 72 | width: 40px; 73 | height: 40px; 74 | margin-top: -20px; 75 | font-size: 60px; 76 | font-weight: 100; 77 | line-height: 30px; 78 | color: @white; 79 | text-align: center; 80 | background: @grayDarker; 81 | border: 3px solid @white; 82 | .border-radius(23px); 83 | .opacity(50); 84 | 85 | // we can't have this transition here 86 | // because webkit cancels the carousel 87 | // animation if you trip this while 88 | // in the middle of another animation 89 | // ;_; 90 | // .transition(opacity .2s linear); 91 | 92 | // Reposition the right one 93 | &.right { 94 | left: auto; 95 | right: 15px; 96 | } 97 | 98 | // Hover state 99 | &:hover { 100 | color: @white; 101 | text-decoration: none; 102 | .opacity(90); 103 | } 104 | } 105 | 106 | // Caption for text below images 107 | // ----------------------------- 108 | 109 | .carousel-caption { 110 | position: absolute; 111 | left: 0; 112 | right: 0; 113 | bottom: 0; 114 | padding: 10px 15px 5px; 115 | background: @grayDark; 116 | background: rgba(0,0,0,.75); 117 | } 118 | .carousel-caption h4, 119 | .carousel-caption p { 120 | color: @white; 121 | } 122 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/close.less: -------------------------------------------------------------------------------- 1 | // CLOSE ICONS 2 | // ----------- 3 | 4 | .close { 5 | float: right; 6 | font-size: 20px; 7 | font-weight: bold; 8 | line-height: @baseLineHeight; 9 | color: @black; 10 | text-shadow: 0 1px 0 rgba(255,255,255,1); 11 | .opacity(20); 12 | &:hover { 13 | color: @black; 14 | text-decoration: none; 15 | .opacity(40); 16 | cursor: pointer; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/code.less: -------------------------------------------------------------------------------- 1 | // Code.less 2 | // Code typography styles for the and
       elements
       3 | // --------------------------------------------------------
       4 | 
       5 | // Inline and block code styles
       6 | code,
       7 | pre {
       8 |   padding: 0 3px 2px;
       9 |   #font > #family > .monospace;
      10 |   font-size: @baseFontSize - 1;
      11 |   color: @grayDark;
      12 |   .border-radius(3px);
      13 | }
      14 | 
      15 | // Inline code
      16 | code {
      17 |   padding: 2px 4px;
      18 |   color: #d14;
      19 |   background-color: #f7f7f9;
      20 |   border: 1px solid #e1e1e8;
      21 | }
      22 | 
      23 | // Blocks of code
      24 | pre {
      25 |   display: block;
      26 |   padding: (@baseLineHeight - 1) / 2;
      27 |   margin: 0 0 @baseLineHeight / 2;
      28 |   font-size: @baseFontSize * .925; // 13px to 12px
      29 |   line-height: @baseLineHeight;
      30 |   background-color: #f5f5f5;
      31 |   border: 1px solid #ccc; // fallback for IE7-8
      32 |   border: 1px solid rgba(0,0,0,.15);
      33 |   .border-radius(4px);
      34 |   white-space: pre;
      35 |   white-space: pre-wrap;
      36 |   word-break: break-all;
      37 |   word-wrap: break-word;
      38 | 
      39 |   // Make prettyprint styles more spaced out for readability
      40 |   &.prettyprint {
      41 |     margin-bottom: @baseLineHeight;
      42 |   }
      43 | 
      44 |   // Account for some code outputs that place code tags in pre tags
      45 |   code {
      46 |     padding: 0;
      47 |     color: inherit;
      48 |     background-color: transparent;
      49 |     border: 0;
      50 |   }
      51 | }
      52 | 
      53 | // Enable scrollable blocks of code
      54 | .pre-scrollable {
      55 |   max-height: 340px;
      56 |   overflow-y: scroll;
      57 | }
      
      
      --------------------------------------------------------------------------------
      /src/test/resources/bootstrap/less/component-animations.less:
      --------------------------------------------------------------------------------
       1 | // COMPONENT ANIMATIONS
       2 | // --------------------
       3 | 
       4 | .fade {
       5 |   .transition(opacity .15s linear);
       6 |   opacity: 0;
       7 |   &.in {
       8 |     opacity: 1;
       9 |   }
      10 | }
      11 | 
      12 | .collapse {
      13 |   .transition(height .35s ease);
      14 |   position:relative;
      15 |   overflow:hidden;
      16 |   height: 0;
      17 |   &.in {
      18 |     height: auto;
      19 |   }
      20 | }
      
      
      --------------------------------------------------------------------------------
      /src/test/resources/bootstrap/less/dropdowns.less:
      --------------------------------------------------------------------------------
        1 | // DROPDOWN MENUS
        2 | // --------------
        3 | 
        4 | // Use the .menu class on any 
    1. element within the topbar or ul.tabs and you'll get some superfancy dropdowns 5 | .dropdown { 6 | position: relative; 7 | } 8 | .dropdown-toggle { 9 | // The caret makes the toggle a bit too tall in IE7 10 | *margin-bottom: -3px; 11 | } 12 | .dropdown-toggle:active, 13 | .open .dropdown-toggle { 14 | outline: 0; 15 | } 16 | 17 | // Dropdown arrow/caret 18 | // -------------------- 19 | .caret { 20 | display: inline-block; 21 | width: 0; 22 | height: 0; 23 | vertical-align: top; 24 | border-left: 4px solid transparent; 25 | border-right: 4px solid transparent; 26 | border-top: 4px solid @black; 27 | .opacity(30); 28 | content: ""; 29 | } 30 | 31 | // Place the caret 32 | .dropdown .caret { 33 | margin-top: 8px; 34 | margin-left: 2px; 35 | } 36 | .dropdown:hover .caret, 37 | .open.dropdown .caret { 38 | .opacity(100); 39 | } 40 | 41 | // The dropdown menu (ul) 42 | // ---------------------- 43 | .dropdown-menu { 44 | position: absolute; 45 | top: 100%; 46 | left: 0; 47 | z-index: @zindexDropdown; 48 | float: left; 49 | display: none; // none by default, but block on "open" of the menu 50 | min-width: 160px; 51 | padding: 4px 0; 52 | margin: 0; // override default ul 53 | list-style: none; 54 | background-color: @dropdownBackground; 55 | border-color: #ccc; 56 | border-color: rgba(0,0,0,.2); 57 | border-style: solid; 58 | border-width: 1px; 59 | .border-radius(0 0 5px 5px); 60 | .box-shadow(0 5px 10px rgba(0,0,0,.2)); 61 | -webkit-background-clip: padding-box; 62 | -moz-background-clip: padding; 63 | background-clip: padding-box; 64 | *border-right-width: 2px; 65 | *border-bottom-width: 2px; 66 | 67 | // Aligns the dropdown menu to right 68 | &.pull-right { 69 | right: 0; 70 | left: auto; 71 | } 72 | 73 | // Dividers (basically an hr) within the dropdown 74 | .divider { 75 | .nav-divider(); 76 | } 77 | 78 | // Links within the dropdown menu 79 | a { 80 | display: block; 81 | padding: 3px 15px; 82 | clear: both; 83 | font-weight: normal; 84 | line-height: @baseLineHeight; 85 | color: @dropdownLinkColor; 86 | white-space: nowrap; 87 | } 88 | } 89 | 90 | // Hover state 91 | // ----------- 92 | .dropdown-menu li > a:hover, 93 | .dropdown-menu .active > a, 94 | .dropdown-menu .active > a:hover { 95 | color: @dropdownLinkColorHover; 96 | text-decoration: none; 97 | background-color: @dropdownLinkBackgroundHover; 98 | } 99 | 100 | // Open state for the dropdown 101 | // --------------------------- 102 | .dropdown.open { 103 | // IE7's z-index only goes to the nearest positioned ancestor, which would 104 | // make the menu appear below buttons that appeared later on the page 105 | *z-index: @zindexDropdown; 106 | 107 | .dropdown-toggle { 108 | color: @white; 109 | background: #ccc; 110 | background: rgba(0,0,0,.3); 111 | } 112 | .dropdown-menu { 113 | display: block; 114 | } 115 | } 116 | 117 | // Right aligned dropdowns 118 | .pull-right .dropdown-menu { 119 | left: auto; 120 | right: 0; 121 | } 122 | 123 | // Allow for dropdowns to go bottom up (aka, dropup-menu) 124 | // ------------------------------------------------------ 125 | // Just add .dropup after the standard .dropdown class and you're set, bro. 126 | // TODO: abstract this so that the navbar fixed styles are not placed here? 127 | .dropup, 128 | .navbar-fixed-bottom .dropdown { 129 | // Reverse the caret 130 | .caret { 131 | border-top: 0; 132 | border-bottom: 4px solid @black; 133 | content: "\2191"; 134 | } 135 | // Different positioning for bottom up menu 136 | .dropdown-menu { 137 | top: auto; 138 | bottom: 100%; 139 | margin-bottom: 1px; 140 | } 141 | } 142 | 143 | // Typeahead 144 | // --------- 145 | .typeahead { 146 | margin-top: 2px; // give it some space to breathe 147 | .border-radius(4px); 148 | } 149 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/grid.less: -------------------------------------------------------------------------------- 1 | // Fixed (940px) 2 | #grid > .core(@gridColumnWidth, @gridGutterWidth); 3 | 4 | // Fluid (940px) 5 | #grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/hero-unit.less: -------------------------------------------------------------------------------- 1 | // HERO UNIT 2 | // --------- 3 | 4 | .hero-unit { 5 | padding: 60px; 6 | margin-bottom: 30px; 7 | background-color: @heroUnitBackground; 8 | .border-radius(6px); 9 | h1 { 10 | margin-bottom: 0; 11 | font-size: 60px; 12 | line-height: 1; 13 | color: @heroUnitHeadingColor; 14 | letter-spacing: -1px; 15 | } 16 | p { 17 | font-size: 18px; 18 | font-weight: 200; 19 | line-height: @baseLineHeight * 1.5; 20 | color: @heroUnitLeadColor; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/labels.less: -------------------------------------------------------------------------------- 1 | // LABELS 2 | // ------ 3 | 4 | // Base 5 | .label { 6 | padding: 1px 4px 2px; 7 | font-size: @baseFontSize * .846; 8 | font-weight: bold; 9 | line-height: 13px; // ensure proper line-height if floated 10 | color: @white; 11 | vertical-align: middle; 12 | white-space: nowrap; 13 | text-shadow: 0 -1px 0 rgba(0,0,0,.25); 14 | background-color: @grayLight; 15 | .border-radius(3px); 16 | } 17 | 18 | // Hover state 19 | .label:hover { 20 | color: @white; 21 | text-decoration: none; 22 | } 23 | 24 | // Colors 25 | .label-important { background-color: @errorText; } 26 | .label-important:hover { background-color: darken(@errorText, 10%); } 27 | 28 | .label-warning { background-color: @orange; } 29 | .label-warning:hover { background-color: darken(@orange, 10%); } 30 | 31 | .label-success { background-color: @successText; } 32 | .label-success:hover { background-color: darken(@successText, 10%); } 33 | 34 | .label-info { background-color: @infoText; } 35 | .label-info:hover { background-color: darken(@infoText, 10%); } 36 | 37 | .label-inverse { background-color: @grayDark; } 38 | .label-inverse:hover { background-color: darken(@grayDark, 10%); } -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/layouts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Layouts 3 | // Fixed-width and fluid (with sidebar) layouts 4 | // -------------------------------------------- 5 | 6 | 7 | // Container (centered, fixed-width layouts) 8 | .container { 9 | .container-fixed(); 10 | } 11 | 12 | // Fluid layouts (left aligned, with sidebar, min- & max-width content) 13 | .container-fluid { 14 | padding-left: @gridGutterWidth; 15 | padding-right: @gridGutterWidth; 16 | .clearfix(); 17 | } -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/modals.less: -------------------------------------------------------------------------------- 1 | // MODALS 2 | // ------ 3 | 4 | // Recalculate z-index where appropriate 5 | .modal-open { 6 | .dropdown-menu { z-index: @zindexDropdown + @zindexModal; } 7 | .dropdown.open { *z-index: @zindexDropdown + @zindexModal; } 8 | .popover { z-index: @zindexPopover + @zindexModal; } 9 | .tooltip { z-index: @zindexTooltip + @zindexModal; } 10 | } 11 | 12 | // Background 13 | .modal-backdrop { 14 | position: fixed; 15 | top: 0; 16 | right: 0; 17 | bottom: 0; 18 | left: 0; 19 | z-index: @zindexModalBackdrop; 20 | background-color: @black; 21 | // Fade for backdrop 22 | &.fade { opacity: 0; } 23 | } 24 | 25 | .modal-backdrop, 26 | .modal-backdrop.fade.in { 27 | .opacity(80); 28 | } 29 | 30 | // Base modal 31 | .modal { 32 | position: fixed; 33 | top: 50%; 34 | left: 50%; 35 | z-index: @zindexModal; 36 | overflow: auto; 37 | width: 560px; 38 | margin: -250px 0 0 -280px; 39 | background-color: @white; 40 | border: 1px solid #999; 41 | border: 1px solid rgba(0,0,0,.3); 42 | *border: 1px solid #999; /* IE6-7 */ 43 | .border-radius(6px); 44 | .box-shadow(0 3px 7px rgba(0,0,0,0.3)); 45 | .background-clip(padding-box); 46 | &.fade { 47 | .transition(e('opacity .3s linear, top .3s ease-out')); 48 | top: -25%; 49 | } 50 | &.fade.in { top: 50%; } 51 | } 52 | .modal-header { 53 | padding: 9px 15px; 54 | border-bottom: 1px solid #eee; 55 | // Close icon 56 | .close { margin-top: 2px; } 57 | } 58 | 59 | // Body (where all modal content resises) 60 | .modal-body { 61 | overflow-y: auto; 62 | max-height: 400px; 63 | padding: 15px; 64 | } 65 | // Remove bottom margin if need be 66 | .modal-form { 67 | margin-bottom: 0; 68 | } 69 | 70 | // Footer (for actions) 71 | .modal-footer { 72 | padding: 14px 15px 15px; 73 | margin-bottom: 0; 74 | text-align: right; // right align buttons 75 | background-color: #f5f5f5; 76 | border-top: 1px solid #ddd; 77 | .border-radius(0 0 6px 6px); 78 | .box-shadow(inset 0 1px 0 @white); 79 | .clearfix(); // clear it in case folks use .pull-* classes on buttons 80 | 81 | // Properly space out buttons 82 | .btn + .btn { 83 | margin-left: 5px; 84 | margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs 85 | } 86 | // but override that for button groups 87 | .btn-group .btn + .btn { 88 | margin-left: -1px; 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/pager.less: -------------------------------------------------------------------------------- 1 | // PAGER 2 | // ----- 3 | 4 | .pager { 5 | margin-left: 0; 6 | margin-bottom: @baseLineHeight; 7 | list-style: none; 8 | text-align: center; 9 | .clearfix(); 10 | } 11 | .pager li { 12 | display: inline; 13 | } 14 | .pager a { 15 | display: inline-block; 16 | padding: 5px 14px; 17 | background-color: #fff; 18 | border: 1px solid #ddd; 19 | .border-radius(15px); 20 | } 21 | .pager a:hover { 22 | text-decoration: none; 23 | background-color: #f5f5f5; 24 | } 25 | .pager .next a { 26 | float: right; 27 | } 28 | .pager .previous a { 29 | float: left; 30 | } 31 | .pager .disabled a, 32 | .pager .disabled a:hover { 33 | color: @grayLight; 34 | background-color: #fff; 35 | cursor: default; 36 | } -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/pagination.less: -------------------------------------------------------------------------------- 1 | // PAGINATION 2 | // ---------- 3 | 4 | .pagination { 5 | height: @baseLineHeight * 2; 6 | margin: @baseLineHeight 0; 7 | } 8 | .pagination ul { 9 | display: inline-block; 10 | .ie7-inline-block(); 11 | margin-left: 0; 12 | margin-bottom: 0; 13 | .border-radius(3px); 14 | .box-shadow(0 1px 2px rgba(0,0,0,.05)); 15 | } 16 | .pagination li { 17 | display: inline; 18 | } 19 | .pagination a { 20 | float: left; 21 | padding: 0 14px; 22 | line-height: (@baseLineHeight * 2) - 2; 23 | text-decoration: none; 24 | border: 1px solid #ddd; 25 | border-left-width: 0; 26 | } 27 | .pagination a:hover, 28 | .pagination .active a { 29 | background-color: #f5f5f5; 30 | } 31 | .pagination .active a { 32 | color: @grayLight; 33 | cursor: default; 34 | } 35 | .pagination .disabled span, 36 | .pagination .disabled a, 37 | .pagination .disabled a:hover { 38 | color: @grayLight; 39 | background-color: transparent; 40 | cursor: default; 41 | } 42 | .pagination li:first-child a { 43 | border-left-width: 1px; 44 | .border-radius(3px 0 0 3px); 45 | } 46 | .pagination li:last-child a { 47 | .border-radius(0 3px 3px 0); 48 | } 49 | 50 | // Centered 51 | .pagination-centered { 52 | text-align: center; 53 | } 54 | .pagination-right { 55 | text-align: right; 56 | } 57 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/popovers.less: -------------------------------------------------------------------------------- 1 | // POPOVERS 2 | // -------- 3 | 4 | .popover { 5 | position: absolute; 6 | top: 0; 7 | left: 0; 8 | z-index: @zindexPopover; 9 | display: none; 10 | padding: 5px; 11 | &.top { margin-top: -5px; } 12 | &.right { margin-left: 5px; } 13 | &.bottom { margin-top: 5px; } 14 | &.left { margin-left: -5px; } 15 | &.top .arrow { #popoverArrow > .top(); } 16 | &.right .arrow { #popoverArrow > .right(); } 17 | &.bottom .arrow { #popoverArrow > .bottom(); } 18 | &.left .arrow { #popoverArrow > .left(); } 19 | .arrow { 20 | position: absolute; 21 | width: 0; 22 | height: 0; 23 | } 24 | } 25 | .popover-inner { 26 | padding: 3px; 27 | width: 280px; 28 | overflow: hidden; 29 | background: @black; // has to be full background declaration for IE fallback 30 | background: rgba(0,0,0,.8); 31 | .border-radius(6px); 32 | .box-shadow(0 3px 7px rgba(0,0,0,0.3)); 33 | } 34 | .popover-title { 35 | padding: 9px 15px; 36 | line-height: 1; 37 | background-color: #f5f5f5; 38 | border-bottom:1px solid #eee; 39 | .border-radius(3px 3px 0 0); 40 | } 41 | .popover-content { 42 | padding: 14px; 43 | background-color: @white; 44 | .border-radius(0 0 3px 3px); 45 | .background-clip(padding-box); 46 | p, ul, ol { 47 | margin-bottom: 0; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/progress-bars.less: -------------------------------------------------------------------------------- 1 | // PROGRESS BARS 2 | // ------------- 3 | 4 | 5 | // ANIMATIONS 6 | // ---------- 7 | 8 | // Webkit 9 | @-webkit-keyframes progress-bar-stripes { 10 | from { background-position: 0 0; } 11 | to { background-position: 40px 0; } 12 | } 13 | 14 | // Firefox 15 | @-moz-keyframes progress-bar-stripes { 16 | from { background-position: 0 0; } 17 | to { background-position: 40px 0; } 18 | } 19 | 20 | // IE9 21 | @-ms-keyframes progress-bar-stripes { 22 | from { background-position: 0 0; } 23 | to { background-position: 40px 0; } 24 | } 25 | 26 | // Spec 27 | @keyframes progress-bar-stripes { 28 | from { background-position: 0 0; } 29 | to { background-position: 40px 0; } 30 | } 31 | 32 | 33 | 34 | // THE BARS 35 | // -------- 36 | 37 | // Outer container 38 | .progress { 39 | overflow: hidden; 40 | height: 18px; 41 | margin-bottom: 18px; 42 | #gradient > .vertical(#f5f5f5, #f9f9f9); 43 | .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); 44 | .border-radius(4px); 45 | } 46 | 47 | // Bar of progress 48 | .progress .bar { 49 | width: 0%; 50 | height: 18px; 51 | color: @white; 52 | font-size: 12px; 53 | text-align: center; 54 | text-shadow: 0 -1px 0 rgba(0,0,0,.25); 55 | #gradient > .vertical(#149bdf, #0480be); 56 | .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); 57 | .box-sizing(border-box); 58 | .transition(width .6s ease); 59 | } 60 | 61 | // Striped bars 62 | .progress-striped .bar { 63 | #gradient > .striped(#149bdf); 64 | .background-size(40px 40px); 65 | } 66 | 67 | // Call animation for the active one 68 | .progress.active .bar { 69 | -webkit-animation: progress-bar-stripes 2s linear infinite; 70 | -moz-animation: progress-bar-stripes 2s linear infinite; 71 | animation: progress-bar-stripes 2s linear infinite; 72 | } 73 | 74 | 75 | 76 | // COLORS 77 | // ------ 78 | 79 | // Danger (red) 80 | .progress-danger .bar { 81 | #gradient > .vertical(#ee5f5b, #c43c35); 82 | } 83 | .progress-danger.progress-striped .bar { 84 | #gradient > .striped(#ee5f5b); 85 | } 86 | 87 | // Success (green) 88 | .progress-success .bar { 89 | #gradient > .vertical(#62c462, #57a957); 90 | } 91 | .progress-success.progress-striped .bar { 92 | #gradient > .striped(#62c462); 93 | } 94 | 95 | // Info (teal) 96 | .progress-info .bar { 97 | #gradient > .vertical(#5bc0de, #339bb9); 98 | } 99 | .progress-info.progress-striped .bar { 100 | #gradient > .striped(#5bc0de); 101 | } 102 | 103 | // Warning (orange) 104 | .progress-warning .bar { 105 | #gradient > .vertical(lighten(@orange, 15%), @orange); 106 | } 107 | .progress-warning.progress-striped .bar { 108 | #gradient > .striped(lighten(@orange, 15%)); 109 | } 110 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/reset.less: -------------------------------------------------------------------------------- 1 | // Reset.less 2 | // Adapted from Normalize.css http://github.com/necolas/normalize.css 3 | // ------------------------------------------------------------------------ 4 | 5 | // Display in IE6-9 and FF3 6 | // ------------------------- 7 | 8 | article, 9 | aside, 10 | details, 11 | figcaption, 12 | figure, 13 | footer, 14 | header, 15 | hgroup, 16 | nav, 17 | section { 18 | display: block; 19 | } 20 | 21 | // Display block in IE6-9 and FF3 22 | // ------------------------- 23 | 24 | audio, 25 | canvas, 26 | video { 27 | display: inline-block; 28 | *display: inline; 29 | *zoom: 1; 30 | } 31 | 32 | // Prevents modern browsers from displaying 'audio' without controls 33 | // ------------------------- 34 | 35 | audio:not([controls]) { 36 | display: none; 37 | } 38 | 39 | // Base settings 40 | // ------------------------- 41 | 42 | html { 43 | font-size: 100%; 44 | -webkit-text-size-adjust: 100%; 45 | -ms-text-size-adjust: 100%; 46 | } 47 | // Focus states 48 | a:focus { 49 | .tab-focus(); 50 | } 51 | // Hover & Active 52 | a:hover, 53 | a:active { 54 | outline: 0; 55 | } 56 | 57 | // Prevents sub and sup affecting line-height in all browsers 58 | // ------------------------- 59 | 60 | sub, 61 | sup { 62 | position: relative; 63 | font-size: 75%; 64 | line-height: 0; 65 | vertical-align: baseline; 66 | } 67 | sup { 68 | top: -0.5em; 69 | } 70 | sub { 71 | bottom: -0.25em; 72 | } 73 | 74 | // Img border in a's and image quality 75 | // ------------------------- 76 | 77 | img { 78 | height: auto; 79 | border: 0; 80 | -ms-interpolation-mode: bicubic; 81 | vertical-align: middle; 82 | } 83 | 84 | // Forms 85 | // ------------------------- 86 | 87 | // Font size in all browsers, margin changes, misc consistency 88 | button, 89 | input, 90 | select, 91 | textarea { 92 | margin: 0; 93 | font-size: 100%; 94 | vertical-align: middle; 95 | } 96 | button, 97 | input { 98 | *overflow: visible; // Inner spacing ie IE6/7 99 | line-height: normal; // FF3/4 have !important on line-height in UA stylesheet 100 | } 101 | button::-moz-focus-inner, 102 | input::-moz-focus-inner { // Inner padding and border oddities in FF3/4 103 | padding: 0; 104 | border: 0; 105 | } 106 | button, 107 | input[type="button"], 108 | input[type="reset"], 109 | input[type="submit"] { 110 | cursor: pointer; // Cursors on all buttons applied consistently 111 | -webkit-appearance: button; // Style clickable inputs in iOS 112 | } 113 | input[type="search"] { // Appearance in Safari/Chrome 114 | -webkit-appearance: textfield; 115 | -webkit-box-sizing: content-box; 116 | -moz-box-sizing: content-box; 117 | box-sizing: content-box; 118 | } 119 | input[type="search"]::-webkit-search-decoration, 120 | input[type="search"]::-webkit-search-cancel-button { 121 | -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5 122 | } 123 | textarea { 124 | overflow: auto; // Remove vertical scrollbar in IE6-9 125 | vertical-align: top; // Readability and alignment cross-browser 126 | } 127 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/scaffolding.less: -------------------------------------------------------------------------------- 1 | // Scaffolding 2 | // Basic and global styles for generating a grid system, structural layout, and page templates 3 | // ------------------------------------------------------------------------------------------- 4 | 5 | 6 | // Body reset 7 | // ---------- 8 | 9 | body { 10 | margin: 0; 11 | font-family: @baseFontFamily; 12 | font-size: @baseFontSize; 13 | line-height: @baseLineHeight; 14 | color: @textColor; 15 | background-color: @bodyBackground; 16 | } 17 | 18 | 19 | // Links 20 | // ----- 21 | 22 | a { 23 | color: @linkColor; 24 | text-decoration: none; 25 | } 26 | a:hover { 27 | color: @linkColorHover; 28 | text-decoration: underline; 29 | } 30 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/tables.less: -------------------------------------------------------------------------------- 1 | // 2 | // Tables.less 3 | // Tables for, you guessed it, tabular data 4 | // ---------------------------------------- 5 | 6 | 7 | // BASE TABLES 8 | // ----------------- 9 | 10 | table { 11 | max-width: 100%; 12 | border-collapse: collapse; 13 | border-spacing: 0; 14 | background-color: @tableBackground; 15 | } 16 | 17 | // BASELINE STYLES 18 | // --------------- 19 | 20 | .table { 21 | width: 100%; 22 | margin-bottom: @baseLineHeight; 23 | // Cells 24 | th, 25 | td { 26 | padding: 8px; 27 | line-height: @baseLineHeight; 28 | text-align: left; 29 | vertical-align: top; 30 | border-top: 1px solid @tableBorder; 31 | } 32 | th { 33 | font-weight: bold; 34 | } 35 | // Bottom align for column headings 36 | thead th { 37 | vertical-align: bottom; 38 | } 39 | // Remove top border from thead by default 40 | colgroup + thead tr:first-child th, 41 | colgroup + thead tr:first-child td, 42 | thead:first-child tr:first-child th, 43 | thead:first-child tr:first-child td { 44 | border-top: 0; 45 | } 46 | // Account for multiple tbody instances 47 | tbody + tbody { 48 | border-top: 2px solid @tableBorder; 49 | } 50 | } 51 | 52 | 53 | 54 | // CONDENSED TABLE W/ HALF PADDING 55 | // ------------------------------- 56 | 57 | .table-condensed { 58 | th, 59 | td { 60 | padding: 4px 5px; 61 | } 62 | } 63 | 64 | 65 | // BORDERED VERSION 66 | // ---------------- 67 | 68 | .table-bordered { 69 | border: 1px solid @tableBorder; 70 | border-left: 0; 71 | border-collapse: separate; // Done so we can round those corners! 72 | *border-collapse: collapsed; // IE7 can't round corners anyway 73 | .border-radius(4px); 74 | th, 75 | td { 76 | border-left: 1px solid @tableBorder; 77 | } 78 | // Prevent a double border 79 | thead:first-child tr:first-child th, 80 | tbody:first-child tr:first-child th, 81 | tbody:first-child tr:first-child td { 82 | border-top: 0; 83 | } 84 | // For first th or td in the first row in the first thead or tbody 85 | thead:first-child tr:first-child th:first-child, 86 | tbody:first-child tr:first-child td:first-child { 87 | .border-radius(4px 0 0 0); 88 | } 89 | thead:first-child tr:first-child th:last-child, 90 | tbody:first-child tr:first-child td:last-child { 91 | .border-radius(0 4px 0 0); 92 | } 93 | // For first th or td in the first row in the first thead or tbody 94 | thead:last-child tr:last-child th:first-child, 95 | tbody:last-child tr:last-child td:first-child { 96 | .border-radius(0 0 0 4px); 97 | } 98 | thead:last-child tr:last-child th:last-child, 99 | tbody:last-child tr:last-child td:last-child { 100 | .border-radius(0 0 4px 0); 101 | } 102 | } 103 | 104 | 105 | // ZEBRA-STRIPING 106 | // -------------- 107 | 108 | // Default zebra-stripe styles (alternating gray and transparent backgrounds) 109 | .table-striped { 110 | tbody { 111 | tr:nth-child(odd) td, 112 | tr:nth-child(odd) th { 113 | background-color: @tableBackgroundAccent; 114 | } 115 | } 116 | } 117 | 118 | 119 | // HOVER EFFECT 120 | // ------------ 121 | // Placed here since it has to come after the potential zebra striping 122 | .table { 123 | tbody tr:hover td, 124 | tbody tr:hover th { 125 | background-color: @tableBackgroundHover; 126 | } 127 | } 128 | 129 | 130 | // TABLE CELL SIZING 131 | // ----------------- 132 | 133 | // Change the columns 134 | table { 135 | .span1 { .tableColumns(1); } 136 | .span2 { .tableColumns(2); } 137 | .span3 { .tableColumns(3); } 138 | .span4 { .tableColumns(4); } 139 | .span5 { .tableColumns(5); } 140 | .span6 { .tableColumns(6); } 141 | .span7 { .tableColumns(7); } 142 | .span8 { .tableColumns(8); } 143 | .span9 { .tableColumns(9); } 144 | .span10 { .tableColumns(10); } 145 | .span11 { .tableColumns(11); } 146 | .span12 { .tableColumns(12); } 147 | .span13 { .tableColumns(13); } 148 | .span14 { .tableColumns(14); } 149 | .span15 { .tableColumns(15); } 150 | .span16 { .tableColumns(16); } 151 | .span17 { .tableColumns(17); } 152 | .span18 { .tableColumns(18); } 153 | .span19 { .tableColumns(19); } 154 | .span20 { .tableColumns(20); } 155 | .span21 { .tableColumns(21); } 156 | .span22 { .tableColumns(22); } 157 | .span23 { .tableColumns(23); } 158 | .span24 { .tableColumns(24); } 159 | } 160 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // THUMBNAILS 2 | // ---------- 3 | 4 | .thumbnails { 5 | margin-left: -@gridGutterWidth; 6 | list-style: none; 7 | .clearfix(); 8 | } 9 | .thumbnails > li { 10 | float: left; 11 | margin: 0 0 @baseLineHeight @gridGutterWidth; 12 | } 13 | .thumbnail { 14 | display: block; 15 | padding: 4px; 16 | line-height: 1; 17 | border: 1px solid #ddd; 18 | .border-radius(4px); 19 | .box-shadow(0 1px 1px rgba(0,0,0,.075)); 20 | } 21 | // Add a hover state for linked versions only 22 | a.thumbnail:hover { 23 | border-color: @linkColor; 24 | .box-shadow(0 1px 4px rgba(0,105,214,.25)); 25 | } 26 | // Images and captions 27 | .thumbnail > img { 28 | display: block; 29 | max-width: 100%; 30 | margin-left: auto; 31 | margin-right: auto; 32 | } 33 | .thumbnail .caption { 34 | padding: 9px; 35 | } 36 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/tooltip.less: -------------------------------------------------------------------------------- 1 | // TOOLTIP 2 | // ------= 3 | 4 | .tooltip { 5 | position: absolute; 6 | z-index: @zindexTooltip; 7 | display: block; 8 | visibility: visible; 9 | padding: 5px; 10 | font-size: 11px; 11 | .opacity(0); 12 | &.in { .opacity(80); } 13 | &.top { margin-top: -2px; } 14 | &.right { margin-left: 2px; } 15 | &.bottom { margin-top: 2px; } 16 | &.left { margin-left: -2px; } 17 | &.top .tooltip-arrow { #popoverArrow > .top(); } 18 | &.left .tooltip-arrow { #popoverArrow > .left(); } 19 | &.bottom .tooltip-arrow { #popoverArrow > .bottom(); } 20 | &.right .tooltip-arrow { #popoverArrow > .right(); } 21 | } 22 | .tooltip-inner { 23 | max-width: 200px; 24 | padding: 3px 8px; 25 | color: @white; 26 | text-align: center; 27 | text-decoration: none; 28 | background-color: @black; 29 | .border-radius(4px); 30 | } 31 | .tooltip-arrow { 32 | position: absolute; 33 | width: 0; 34 | height: 0; 35 | } 36 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/type.less: -------------------------------------------------------------------------------- 1 | // Typography.less 2 | // Headings, body text, lists, code, and more for a versatile and durable typography system 3 | // ---------------------------------------------------------------------------------------- 4 | 5 | 6 | // BODY TEXT 7 | // --------- 8 | 9 | p { 10 | margin: 0 0 @baseLineHeight / 2; 11 | font-family: @baseFontFamily; 12 | font-size: @baseFontSize; 13 | line-height: @baseLineHeight; 14 | small { 15 | font-size: @baseFontSize - 2; 16 | color: @grayLight; 17 | } 18 | } 19 | .lead { 20 | margin-bottom: @baseLineHeight; 21 | font-size: 20px; 22 | font-weight: 200; 23 | line-height: @baseLineHeight * 1.5; 24 | } 25 | 26 | // HEADINGS 27 | // -------- 28 | 29 | h1, h2, h3, h4, h5, h6 { 30 | margin: 0; 31 | font-family: @headingsFontFamily; 32 | font-weight: @headingsFontWeight; 33 | color: @headingsColor; 34 | text-rendering: optimizelegibility; // Fix the character spacing for headings 35 | small { 36 | font-weight: normal; 37 | color: @grayLight; 38 | } 39 | } 40 | h1 { 41 | font-size: 30px; 42 | line-height: @baseLineHeight * 2; 43 | small { 44 | font-size: 18px; 45 | } 46 | } 47 | h2 { 48 | font-size: 24px; 49 | line-height: @baseLineHeight * 2; 50 | small { 51 | font-size: 18px; 52 | } 53 | } 54 | h3 { 55 | line-height: @baseLineHeight * 1.5; 56 | font-size: 18px; 57 | small { 58 | font-size: 14px; 59 | } 60 | } 61 | h4, h5, h6 { 62 | line-height: @baseLineHeight; 63 | } 64 | h4 { 65 | font-size: 14px; 66 | small { 67 | font-size: 12px; 68 | } 69 | } 70 | h5 { 71 | font-size: 12px; 72 | } 73 | h6 { 74 | font-size: 11px; 75 | color: @grayLight; 76 | text-transform: uppercase; 77 | } 78 | 79 | // Page header 80 | .page-header { 81 | padding-bottom: @baseLineHeight - 1; 82 | margin: @baseLineHeight 0; 83 | border-bottom: 1px solid @grayLighter; 84 | } 85 | .page-header h1 { 86 | line-height: 1; 87 | } 88 | 89 | 90 | 91 | // LISTS 92 | // ----- 93 | 94 | // Unordered and Ordered lists 95 | ul, ol { 96 | padding: 0; 97 | margin: 0 0 @baseLineHeight / 2 25px; 98 | } 99 | ul ul, 100 | ul ol, 101 | ol ol, 102 | ol ul { 103 | margin-bottom: 0; 104 | } 105 | ul { 106 | list-style: disc; 107 | } 108 | ol { 109 | list-style: decimal; 110 | } 111 | li { 112 | line-height: @baseLineHeight; 113 | } 114 | ul.unstyled, 115 | ol.unstyled { 116 | margin-left: 0; 117 | list-style: none; 118 | } 119 | 120 | // Description Lists 121 | dl { 122 | margin-bottom: @baseLineHeight; 123 | } 124 | dt, 125 | dd { 126 | line-height: @baseLineHeight; 127 | } 128 | dt { 129 | font-weight: bold; 130 | line-height: @baseLineHeight - 1; // fix jank Helvetica Neue font bug 131 | } 132 | dd { 133 | margin-left: @baseLineHeight / 2; 134 | } 135 | // Horizontal layout (like forms) 136 | .dl-horizontal { 137 | dt { 138 | float: left; 139 | clear: left; 140 | width: 120px; 141 | text-align: right; 142 | } 143 | dd { 144 | margin-left: 130px; 145 | } 146 | } 147 | 148 | // MISC 149 | // ---- 150 | 151 | // Horizontal rules 152 | hr { 153 | margin: @baseLineHeight 0; 154 | border: 0; 155 | border-top: 1px solid @hrBorder; 156 | border-bottom: 1px solid @white; 157 | } 158 | 159 | // Emphasis 160 | strong { 161 | font-weight: bold; 162 | } 163 | em { 164 | font-style: italic; 165 | } 166 | .muted { 167 | color: @grayLight; 168 | } 169 | 170 | // Abbreviations and acronyms 171 | abbr[title] { 172 | border-bottom: 1px dotted #ddd; 173 | cursor: help; 174 | } 175 | abbr.initialism { 176 | font-size: 90%; 177 | text-transform: uppercase; 178 | } 179 | 180 | // Blockquotes 181 | blockquote { 182 | padding: 0 0 0 15px; 183 | margin: 0 0 @baseLineHeight; 184 | border-left: 5px solid @grayLighter; 185 | p { 186 | margin-bottom: 0; 187 | #font > .shorthand(16px,300,@baseLineHeight * 1.25); 188 | } 189 | small { 190 | display: block; 191 | line-height: @baseLineHeight; 192 | color: @grayLight; 193 | &:before { 194 | content: '\2014 \00A0'; 195 | } 196 | } 197 | 198 | // Float right with text-align: right 199 | &.pull-right { 200 | float: right; 201 | padding-left: 0; 202 | padding-right: 15px; 203 | border-left: 0; 204 | border-right: 5px solid @grayLighter; 205 | p, 206 | small { 207 | text-align: right; 208 | } 209 | } 210 | } 211 | 212 | // Quotes 213 | q:before, 214 | q:after, 215 | blockquote:before, 216 | blockquote:after { 217 | content: ""; 218 | } 219 | 220 | // Addresses 221 | address { 222 | display: block; 223 | margin-bottom: @baseLineHeight; 224 | line-height: @baseLineHeight; 225 | font-style: normal; 226 | } 227 | 228 | // Misc 229 | small { 230 | font-size: 100%; 231 | } 232 | cite { 233 | font-style: normal; 234 | } 235 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/utilities.less: -------------------------------------------------------------------------------- 1 | // UTILITY CLASSES 2 | // --------------- 3 | 4 | // Quick floats 5 | .pull-right { 6 | float: right; 7 | } 8 | .pull-left { 9 | float: left; 10 | } 11 | 12 | // Toggling content 13 | .hide { 14 | display: none; 15 | } 16 | .show { 17 | display: block; 18 | } 19 | 20 | // Visibility 21 | .invisible { 22 | visibility: hidden; 23 | } 24 | -------------------------------------------------------------------------------- /src/test/resources/bootstrap/less/wells.less: -------------------------------------------------------------------------------- 1 | // WELLS 2 | // ----- 3 | 4 | .well { 5 | min-height: 20px; 6 | padding: 19px; 7 | margin-bottom: 20px; 8 | background-color: #f5f5f5; 9 | border: 1px solid #eee; 10 | border: 1px solid rgba(0,0,0,.05); 11 | .border-radius(4px); 12 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 13 | blockquote { 14 | border-color: #ddd; 15 | border-color: rgba(0,0,0,.15); 16 | } 17 | } 18 | 19 | // Sizes 20 | .well-large { 21 | padding: 24px; 22 | .border-radius(6px); 23 | } 24 | .well-small { 25 | padding: 9px; 26 | .border-radius(3px); 27 | } 28 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/a_source.less: -------------------------------------------------------------------------------- 1 | content -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/colors.css: -------------------------------------------------------------------------------- 1 | #yelow #short { 2 | color: #fea; 3 | } 4 | #yelow #long { 5 | color: #ffeeaa; 6 | } 7 | #yelow #rgba { 8 | color: rgba(255, 238, 170, 0.1); 9 | } 10 | #yelow #argb { 11 | color: #1affeeaa; 12 | } 13 | #blue #short { 14 | color: #00f; 15 | } 16 | #blue #long { 17 | color: #0000ff; 18 | } 19 | #blue #rgba { 20 | color: rgba(0, 0, 255, 0.1); 21 | } 22 | #blue #argb { 23 | color: #1a0000ff; 24 | } 25 | #alpha #hsla { 26 | color: rgba(61, 45, 41, 0.6); 27 | } 28 | #overflow .a { 29 | color: #000000; 30 | } 31 | #overflow .b { 32 | color: #ffffff; 33 | } 34 | #overflow .c { 35 | color: #ffffff; 36 | } 37 | #overflow .d { 38 | color: #00ff00; 39 | } 40 | #grey { 41 | color: #c8c8c8; 42 | } 43 | #808080 { 44 | color: #808080; 45 | } 46 | #00ff00 { 47 | color: #00ff00; 48 | } 49 | .lightenblue { 50 | color: #3333ff; 51 | } 52 | .darkenblue { 53 | color: #0000cc; 54 | } 55 | .unknowncolors { 56 | color: blue2; 57 | border: 2px solid superred; 58 | } 59 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/comments.css: -------------------------------------------------------------------------------- 1 | /******************\ 2 | * * 3 | * Comment Header * 4 | * * 5 | \******************/ 6 | /* 7 | 8 | Comment 9 | 10 | */ 11 | /* 12 | * Comment Test 13 | * 14 | * - cloudhead (http://cloudhead.net) 15 | * 16 | */ 17 | /* Colors 18 | * ------ 19 | * #EDF8FC (background blue) 20 | * #166C89 (darkest blue) 21 | * 22 | * Text: 23 | * #333 (standard text) // A comment within a comment! 24 | * #1F9EC9 (standard link) 25 | * 26 | */ 27 | /* @group Variables 28 | ------------------- */ 29 | #comments { 30 | /**/ 31 | color: red; 32 | /* A C-style comment */ 33 | background-color: orange; 34 | font-size: 12px; 35 | /* lost comment */ 36 | content: "content"; 37 | border: 1px solid black; 38 | padding: 0; 39 | margin: 2em; 40 | } 41 | /* commented out 42 | #more-comments { 43 | color: grey; 44 | } 45 | */ 46 | .selector, 47 | .lots, 48 | .comments { 49 | color: #808080, /* blue */ #ffa500; 50 | -webkit-border-radius: 2px /* webkit only */; 51 | -moz-border-radius: 8px /* moz only with operation */; 52 | } 53 | #last { 54 | color: #0000ff; 55 | } 56 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/css-3.css: -------------------------------------------------------------------------------- 1 | .comma-delimited { 2 | background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); 3 | text-shadow: -1px -1px 1px #ff0000, 6px 5px 5px #ffff00; 4 | -moz-box-shadow: 0pt 0pt 2px rgba(255, 255, 255, 0.4) inset, 0pt 4px 6px rgba(255, 255, 255, 0.4) inset; 5 | } 6 | @font-face { 7 | font-family: Headline; 8 | src: local(Futura-Medium), url(fonts.svg#MyGeometricModern) format("svg"); 9 | } 10 | .other { 11 | -moz-transform: translate(0, 11em) rotate(-90deg); 12 | } 13 | p:not([class*="lead"]) { 14 | color: black; 15 | } 16 | input[type="text"].class#id[attr=32]:not(1) { 17 | color: white; 18 | } 19 | div#id.class[a=1][b=2].class:not(1) { 20 | color: white; 21 | } 22 | ul.comma > li:not(:only-child)::after { 23 | color: white; 24 | } 25 | ol.comma > li:nth-last-child(2)::after { 26 | color: white; 27 | } 28 | li:nth-child(4n+1), 29 | li:nth-child(-5n), 30 | li:nth-child(-n+2) { 31 | color: white; 32 | } 33 | a[href^="http://"] { 34 | color: black; 35 | } 36 | a[href$="http://"] { 37 | color: black; 38 | } 39 | form[data-disabled] { 40 | color: black; 41 | } 42 | p::before { 43 | color: black; 44 | } 45 | #issue322 { 46 | -webkit-animation: anim2 7s infinite ease-in-out; 47 | } 48 | @-webkit-keyframes frames { 49 | 0% { 50 | border: 1px; 51 | } 52 | 5.5% { 53 | border: 2px; 54 | } 55 | 100% { 56 | border: 3px; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/css-escapes.css: -------------------------------------------------------------------------------- 1 | .escape\|random\|char { 2 | color: red; 3 | } 4 | .mixin\!tUp { 5 | font-weight: bold; 6 | } 7 | .\34 04 { 8 | background: red; 9 | } 10 | .\34 04 strong { 11 | color: #ff00ff; 12 | font-weight: bold; 13 | } 14 | .trailingTest\+ { 15 | color: red; 16 | } 17 | /* This hideous test of hideousness checks for the selector "blockquote" with various permutations of hex escapes */ 18 | \62\6c\6f \63 \6B \0071 \000075o\74 e { 19 | color: silver; 20 | } 21 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/css.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | div { 3 | color: black; 4 | } 5 | div { 6 | width: 99%; 7 | } 8 | * { 9 | min-width: 45em; 10 | } 11 | h1, 12 | h2 > a > p, 13 | h3 { 14 | color: none; 15 | } 16 | div.class { 17 | color: blue; 18 | } 19 | div#id { 20 | color: green; 21 | } 22 | .class#id { 23 | color: purple; 24 | } 25 | .one.two.three { 26 | color: grey; 27 | } 28 | @media print { 29 | font-size: 3em; 30 | } 31 | @media screen { 32 | font-size: 10px; 33 | } 34 | @font-face { 35 | font-family: 'Garamond Pro'; 36 | src: url("/fonts/garamond-pro.ttf"); 37 | } 38 | a:hover, 39 | a:link { 40 | color: #999; 41 | } 42 | p, 43 | p:first-child { 44 | text-transform: none; 45 | } 46 | q:lang(no) { 47 | quotes: none; 48 | } 49 | p + h1 { 50 | font-size: 2.2em; 51 | } 52 | #shorthands { 53 | border: 1px solid #000; 54 | font: 12px/16px Arial; 55 | font: 100%/16px Arial; 56 | margin: 1px 0; 57 | padding: 0 auto; 58 | background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; 59 | } 60 | #more-shorthands { 61 | margin: 0; 62 | padding: 1px 0 2px 0; 63 | font: normal small / 20px 'Trebuchet MS', Verdana, sans-serif; 64 | } 65 | .misc { 66 | -moz-border-radius: 2px; 67 | display: -moz-inline-stack; 68 | width: .1em; 69 | background-color: #009998; 70 | background-image: url(images/image.jpg); 71 | background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), to(#0000ff)); 72 | margin: ; 73 | filter: alpha(opacity=100); 74 | } 75 | #important { 76 | color: red !important; 77 | width: 100%!important; 78 | height: 20px ! important; 79 | } 80 | #data-uri { 81 | background: url(data:image/png;charset=utf-8;base64, 82 | kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ 83 | k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U 84 | kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); 85 | background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); 86 | } 87 | #svg-data-uri { 88 | background: transparent url('data:image/svg+xml, '); 89 | } 90 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/functions.css: -------------------------------------------------------------------------------- 1 | #functions { 2 | color: #660000; 3 | width: 16; 4 | height: undefined("self"); 5 | border-width: 5; 6 | variable: 11; 7 | } 8 | #built-in { 9 | escaped: -Some::weird(#thing, y); 10 | lighten: #ffcccc; 11 | darken: #330000; 12 | saturate: #203c31; 13 | desaturate: #29332f; 14 | greyscale: #2e2e2e; 15 | spin-p: #bf6a40; 16 | spin-n: #bf4055; 17 | format: "rgb(32, 128, 64)"; 18 | format-string: "hello world"; 19 | format-multiple: "hello earth 2"; 20 | format-url-encode: 'red is %23ff0000'; 21 | eformat: rgb(32, 128, 64); 22 | hue: 98; 23 | saturation: 12%; 24 | lightness: 95%; 25 | rounded: 11; 26 | roundedpx: 3px; 27 | percentage: 20%; 28 | color: #ff0011; 29 | } 30 | #built-in .is-a { 31 | color: true; 32 | keyword: true; 33 | number: true; 34 | string: true; 35 | pixel: true; 36 | percent: true; 37 | em: true; 38 | } 39 | #alpha { 40 | alpha: rgba(153, 94, 51, 0.6); 41 | } 42 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/ie-filters.css: -------------------------------------------------------------------------------- 1 | .nav { 2 | filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20); 3 | filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); 4 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr="#000000", GradientType=0); 5 | } 6 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/import.css: -------------------------------------------------------------------------------- 1 | @import "import-test-d.css"; 2 | @import url(http://fonts.googleapis.com/css?family=Open+Sans); 3 | @import url(something.css) screen and (color) and (max-width: 600px); 4 | #import { 5 | color: #ff0000; 6 | } 7 | .mixin { 8 | height: 10px; 9 | color: #ff0000; 10 | } 11 | #import-test { 12 | height: 10px; 13 | color: #ff0000; 14 | width: 10px; 15 | height: 30%; 16 | } 17 | @media screen and (max-width: 600px) { 18 | body { 19 | width: 100%; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/import_custom.css: -------------------------------------------------------------------------------- 1 | @import "import-test-d.css"; 2 | @import url(http://fonts.googleapis.com/css?family=Open+Sans); 3 | @import url(something.css) screen and (color) and (max-width: 600px); 4 | #import { 5 | color: #ff0000; 6 | } 7 | .mixin { 8 | height: 10px; 9 | color: #ff0000; 10 | } 11 | #import-test { 12 | height: 10px; 13 | color: #ff0000; 14 | width: 10px; 15 | height: 30%; 16 | } 17 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/javascript.css: -------------------------------------------------------------------------------- 1 | .eval { 2 | js: 42; 3 | js: 2; 4 | js: "hello world"; 5 | js: 1, 2, 3; 6 | title: "node"; 7 | ternary: true; 8 | } 9 | .scope { 10 | var: "42"; 11 | escaped: 7px; 12 | } 13 | .vars { 14 | width: 8; 15 | } 16 | .escape-interpol { 17 | width: hello world; 18 | } 19 | .arrays { 20 | ary: "1, 2, 3"; 21 | } 22 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/lazy-eval.css: -------------------------------------------------------------------------------- 1 | .lazy-eval { 2 | width: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/media.css: -------------------------------------------------------------------------------- 1 | @media print { 2 | .class { 3 | color: blue; 4 | } 5 | .class .sub { 6 | width: 42; 7 | } 8 | .top, 9 | header > h1 { 10 | color: #444444; 11 | } 12 | } 13 | @media screen { 14 | body { 15 | max-width: 480; 16 | } 17 | } 18 | @media all and (orientation: portrait) { 19 | aside { 20 | float: none; 21 | } 22 | } 23 | @media handheld and (min-width: 42), screen and (min-width: 20em) { 24 | body { 25 | max-width: 480px; 26 | } 27 | } 28 | @media print { 29 | body { 30 | padding: 20px; 31 | } 32 | body header { 33 | background-color: red; 34 | } 35 | } 36 | @media print and (orientation: landscape) { 37 | body { 38 | margin-left: 20px; 39 | } 40 | } 41 | @media a, b and c { 42 | body { 43 | width: 95%; 44 | } 45 | } 46 | @media a and x, b and c and x, a and y, b and c and y { 47 | body { 48 | width: 100%; 49 | } 50 | } 51 | .a { 52 | background: black; 53 | } 54 | @media handheld { 55 | .a { 56 | background: white; 57 | } 58 | } 59 | @media handheld and (max-width: 100px) { 60 | .a { 61 | background: red; 62 | } 63 | } 64 | .b { 65 | background: black; 66 | } 67 | @media handheld { 68 | .b { 69 | background: white; 70 | } 71 | } 72 | @media handheld and (max-width: 200px) { 73 | .b { 74 | background: red; 75 | } 76 | } 77 | @media only screen and (max-width: 200px) { 78 | width: 480px; 79 | } 80 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/mixins-args.css: -------------------------------------------------------------------------------- 1 | #hidden { 2 | color: transparent; 3 | } 4 | .two-args { 5 | color: blue; 6 | width: 10px; 7 | height: 99%; 8 | border: 2px dotted #000000; 9 | } 10 | .one-arg { 11 | width: 15px; 12 | height: 49%; 13 | } 14 | .no-parens { 15 | width: 5px; 16 | height: 49%; 17 | } 18 | .no-args { 19 | width: 5px; 20 | height: 49%; 21 | } 22 | .var-args { 23 | width: 45; 24 | height: 17%; 25 | } 26 | .multi-mix { 27 | width: 10px; 28 | height: 29%; 29 | margin: 4; 30 | padding: 5; 31 | } 32 | body { 33 | padding: 30px; 34 | color: #ff0000; 35 | } 36 | .scope-mix { 37 | width: 8; 38 | } 39 | .content { 40 | width: 600px; 41 | } 42 | .content .column { 43 | margin: 600px; 44 | } 45 | #same-var-name { 46 | radius: 5px; 47 | } 48 | #var-inside { 49 | width: 10px; 50 | } 51 | .id-class { 52 | color: red; 53 | } 54 | .arguments { 55 | border: 1px solid #000000; 56 | width: 1px; 57 | } 58 | .arguments2 { 59 | border: 0px; 60 | width: 0px; 61 | } 62 | .arguments3 { 63 | border: 0px; 64 | width: 0px; 65 | } 66 | .arguments4 { 67 | border: 0 1 2 3 4; 68 | rest: 1 2 3 4; 69 | width: 0; 70 | } 71 | .edge-case { 72 | border: "{"; 73 | width: "{"; 74 | } 75 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/mixins-closure.css: -------------------------------------------------------------------------------- 1 | .class { 2 | width: 99px; 3 | } 4 | .overwrite { 5 | width: 99px; 6 | } 7 | .nested .class { 8 | width: 5px; 9 | } 10 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/mixins-guards.css: -------------------------------------------------------------------------------- 1 | .light1 { 2 | color: white; 3 | margin: 1px; 4 | } 5 | .light2 { 6 | color: black; 7 | margin: 1px; 8 | } 9 | .max1 { 10 | width: 6; 11 | } 12 | .max2 { 13 | width: 8; 14 | } 15 | .glob1 { 16 | margin: auto auto; 17 | } 18 | .ops1 { 19 | height: gt-or-eq; 20 | height: lt-or-eq; 21 | } 22 | .ops2 { 23 | height: gt-or-eq; 24 | height: not-eq; 25 | } 26 | .ops3 { 27 | height: lt-or-eq; 28 | height: not-eq; 29 | } 30 | .default1 { 31 | content: default; 32 | } 33 | .test1 { 34 | content: "true."; 35 | } 36 | .test2 { 37 | content: "false."; 38 | } 39 | .test3 { 40 | content: "false."; 41 | } 42 | .test4 { 43 | content: "false."; 44 | } 45 | .test5 { 46 | content: "false."; 47 | } 48 | .bool1 { 49 | content: true and true; 50 | content: true; 51 | content: false, true; 52 | content: false and true and true, true; 53 | content: false, true and true; 54 | content: false, false, true; 55 | content: false, true and true and true, false; 56 | content: not false; 57 | content: not false and false, not false; 58 | } 59 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/mixins-important.css: -------------------------------------------------------------------------------- 1 | .class { 2 | border: 1; 3 | boxer: 1; 4 | border: 2 !important; 5 | boxer: 2 !important; 6 | border: 3; 7 | boxer: 3; 8 | border: 4 !important; 9 | boxer: 4 !important; 10 | border: 5; 11 | boxer: 5; 12 | border: 0 !important; 13 | boxer: 0 !important; 14 | border: 9 !important; 15 | border: 9; 16 | boxer: 9; 17 | } 18 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/mixins-nested.css: -------------------------------------------------------------------------------- 1 | .class .inner { 2 | height: 300; 3 | } 4 | .class .inner .innest { 5 | width: 30; 6 | border-width: 60; 7 | } 8 | .class2 .inner { 9 | height: 600; 10 | } 11 | .class2 .inner .innest { 12 | width: 60; 13 | border-width: 120; 14 | } 15 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/mixins-pattern.css: -------------------------------------------------------------------------------- 1 | .zero { 2 | variadic: true; 3 | zero: 0; 4 | one: 1; 5 | two: 2; 6 | three: 3; 7 | } 8 | .one { 9 | variadic: true; 10 | one: 1; 11 | one-req: 1; 12 | two: 2; 13 | three: 3; 14 | } 15 | .two { 16 | variadic: true; 17 | two: 2; 18 | three: 3; 19 | } 20 | .three { 21 | variadic: true; 22 | three-req: 3; 23 | three: 3; 24 | } 25 | .left { 26 | left: 1; 27 | } 28 | .right { 29 | right: 1; 30 | } 31 | .border-right { 32 | color: black; 33 | border-right: 4px; 34 | } 35 | .border-left { 36 | color: black; 37 | border-left: 4px; 38 | } 39 | .only-right { 40 | right: 33; 41 | } 42 | .only-left { 43 | left: 33; 44 | } 45 | .left-right { 46 | both: 330; 47 | } 48 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/mixins.css: -------------------------------------------------------------------------------- 1 | .mixin { 2 | border: 1px solid black; 3 | } 4 | .mixout { 5 | border-color: orange; 6 | } 7 | .borders { 8 | border-style: dashed; 9 | } 10 | #namespace .borders { 11 | border-style: dotted; 12 | } 13 | #namespace .biohazard { 14 | content: "death"; 15 | } 16 | #namespace .biohazard .man { 17 | color: transparent; 18 | } 19 | #theme > .mixin { 20 | background-color: grey; 21 | } 22 | #container { 23 | color: black; 24 | border: 1px solid black; 25 | border-color: orange; 26 | background-color: grey; 27 | } 28 | #header .milk { 29 | color: white; 30 | border: 1px solid black; 31 | background-color: grey; 32 | } 33 | #header #cookie { 34 | border-style: dashed; 35 | } 36 | #header #cookie .chips { 37 | border-style: dotted; 38 | } 39 | #header #cookie .chips .calories { 40 | color: black; 41 | border: 1px solid black; 42 | border-color: orange; 43 | background-color: grey; 44 | } 45 | .secure-zone { 46 | color: transparent; 47 | } 48 | .direct { 49 | border-style: dotted; 50 | } 51 | .bo, 52 | .bar { 53 | width: 100%; 54 | } 55 | .bo { 56 | border: 1px; 57 | } 58 | .ar.bo.ca { 59 | color: black; 60 | } 61 | .jo.ki { 62 | background: none; 63 | } 64 | .extended { 65 | width: 100%; 66 | border: 1px; 67 | background: none; 68 | } 69 | .foo .bar { 70 | width: 100%; 71 | } 72 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/operations.css: -------------------------------------------------------------------------------- 1 | #operations { 2 | color: #111111; 3 | height: 9px; 4 | width: 3em; 5 | substraction: 0; 6 | division: 1; 7 | } 8 | #operations .spacing { 9 | height: 9px; 10 | width: 3em; 11 | } 12 | .with-variables { 13 | height: 16em; 14 | width: 24em; 15 | size: 1cm; 16 | } 17 | .with-functions { 18 | color: #646464; 19 | color: #ff8080; 20 | color: #c94a4a; 21 | } 22 | .negative { 23 | height: 0px; 24 | width: 4px; 25 | } 26 | .shorthands { 27 | padding: -1px 2px 0 -4px; 28 | } 29 | .rem-dimensions { 30 | font-size: 5.5rem; 31 | } 32 | .colors { 33 | color: #123; 34 | border-color: #334455; 35 | background-color: #000000; 36 | } 37 | .colors .other { 38 | color: #222222; 39 | border-color: #222222; 40 | } 41 | .negations { 42 | variable: -4px; 43 | variable1: 0px; 44 | variable2: 0px; 45 | variable3: 8px; 46 | variable4: 0px; 47 | paren: -4px; 48 | paren2: 16px; 49 | } 50 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/parens.css: -------------------------------------------------------------------------------- 1 | .parens { 2 | border: 2px solid #000000; 3 | margin: 1px 3px 16 3; 4 | width: 36; 5 | padding: 2px 36px; 6 | } 7 | .more-parens { 8 | padding: 8 4 4 4px; 9 | width: 96; 10 | height: 113; 11 | margin: 12; 12 | } 13 | .nested-parens { 14 | width: 71; 15 | height: 6; 16 | } 17 | .mixed-units { 18 | margin: 2px 4em 1 5pc; 19 | padding: 6px 1em 2px 2; 20 | } 21 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/rulesets.css: -------------------------------------------------------------------------------- 1 | #first > .one { 2 | font-size: 2em; 3 | } 4 | #first > .one > #second .two > #deux { 5 | width: 50%; 6 | } 7 | #first > .one > #second .two > #deux #third { 8 | height: 100%; 9 | } 10 | #first > .one > #second .two > #deux #third:focus { 11 | color: black; 12 | } 13 | #first > .one > #second .two > #deux #third:focus #fifth > #sixth .seventh #eighth + #ninth { 14 | color: purple; 15 | } 16 | #first > .one > #second .two > #deux #fourth, 17 | #first > .one > #second .two > #deux #five, 18 | #first > .one > #second .two > #deux #six { 19 | color: #110000; 20 | } 21 | #first > .one > #second .two > #deux #fourth .seven, 22 | #first > .one > #second .two > #deux #five .seven, 23 | #first > .one > #second .two > #deux #six .seven, 24 | #first > .one > #second .two > #deux #fourth .eight > #nine, 25 | #first > .one > #second .two > #deux #five .eight > #nine, 26 | #first > .one > #second .two > #deux #six .eight > #nine { 27 | border: 1px solid black; 28 | } 29 | #first > .one > #second .two > #deux #fourth #ten, 30 | #first > .one > #second .two > #deux #five #ten, 31 | #first > .one > #second .two > #deux #six #ten { 32 | color: red; 33 | } 34 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/scope.css: -------------------------------------------------------------------------------- 1 | .tiny-scope { 2 | color: #998899; 3 | } 4 | .scope1 { 5 | color: #0000ff; 6 | border-color: #000000; 7 | } 8 | .scope1 .scope2 { 9 | color: #0000ff; 10 | } 11 | .scope1 .scope2 .scope3 { 12 | color: #ff0000; 13 | border-color: #000000; 14 | background-color: #ffffff; 15 | } 16 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/selectors.css: -------------------------------------------------------------------------------- 1 | h1 a:hover, 2 | h2 a:hover, 3 | h3 a:hover, 4 | h1 p:hover, 5 | h2 p:hover, 6 | h3 p:hover { 7 | color: red; 8 | } 9 | #all { 10 | color: blue; 11 | } 12 | #the { 13 | color: blue; 14 | } 15 | #same { 16 | color: blue; 17 | } 18 | ul, 19 | li, 20 | div, 21 | q, 22 | blockquote, 23 | textarea { 24 | margin: 0; 25 | } 26 | td { 27 | margin: 0; 28 | padding: 0; 29 | } 30 | td, 31 | input { 32 | line-height: 1em; 33 | } 34 | a { 35 | color: red; 36 | } 37 | a:hover { 38 | color: blue; 39 | } 40 | div a { 41 | color: green; 42 | } 43 | p a span { 44 | color: yellow; 45 | } 46 | .foo .bar .qux, 47 | .foo .baz .qux { 48 | display: block; 49 | } 50 | .qux .foo .bar, 51 | .qux .foo .baz { 52 | display: inline; 53 | } 54 | .qux .foo .bar .biz, 55 | .qux .foo .baz .biz { 56 | display: none; 57 | } 58 | .other ::fnord { 59 | color: #ff0000; 60 | } 61 | .other::fnord { 62 | color: #ff0000; 63 | } 64 | .other ::bnord { 65 | color: #ff0000; 66 | } 67 | .other::bnord { 68 | color: #ff0000; 69 | } 70 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/strings.css: -------------------------------------------------------------------------------- 1 | #strings { 2 | background-image: url("http://son-of-a-banana.com"); 3 | quotes: "~" "~"; 4 | content: "#*%:&^,)!.(~*})"; 5 | empty: ""; 6 | brackets: "{" "}"; 7 | escapes: "\"hello\" \\world"; 8 | escapes2: "\"llo"; 9 | } 10 | #comments { 11 | content: "/* hello */ // not-so-secret"; 12 | } 13 | #single-quote { 14 | quotes: "'" "'"; 15 | content: '""#!&""'; 16 | empty: ''; 17 | semi-colon: ';'; 18 | } 19 | #escaped { 20 | filter: DX.Transform.MS.BS.filter(opacity=50); 21 | } 22 | #one-line { 23 | image: url(http://tooks.com); 24 | } 25 | #crazy { 26 | image: url(http://), "}", url("http://}"); 27 | } 28 | #interpolation { 29 | url: "http://lesscss.org/dev/image.jpg"; 30 | url2: "http://lesscss.org/image-256.jpg"; 31 | url3: "http://lesscss.org#445566"; 32 | url4: "http://lesscss.org/hello"; 33 | url5: "http://lesscss.org/54.4px"; 34 | } 35 | .mix-mul-class { 36 | color: #ff0000; 37 | color: #0000ff; 38 | color: #ffa500; 39 | } 40 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/variables.css: -------------------------------------------------------------------------------- 1 | .variables { 2 | width: 14cm; 3 | } 4 | .variables { 5 | height: 24px; 6 | color: #888888; 7 | font-family: "Trebuchet MS", Verdana, sans-serif; 8 | quotes: "~" "~"; 9 | } 10 | .redefinition { 11 | three: 3; 12 | } 13 | .values { 14 | font-family: 'Trebuchet', 'Trebuchet', 'Trebuchet'; 15 | color: #888888 !important; 16 | url: url('Trebuchet'); 17 | multi: something 'A', B, C, 'Trebuchet'; 18 | } 19 | .variable-names { 20 | name: 'hello'; 21 | } 22 | .alpha { 23 | filter: alpha(opacity=42); 24 | } 25 | a:nth-child(2) { 26 | border: 1px; 27 | } 28 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/css/whitespace.css: -------------------------------------------------------------------------------- 1 | .whitespace { 2 | color: white; 3 | } 4 | .whitespace { 5 | color: white; 6 | } 7 | .whitespace { 8 | color: white; 9 | } 10 | .whitespace { 11 | color: white; 12 | } 13 | .whitespace { 14 | color: white ; 15 | } 16 | .white, 17 | .space, 18 | .mania { 19 | color: white; 20 | } 21 | .no-semi-column { 22 | color: #ffffff; 23 | } 24 | .no-semi-column { 25 | color: white; 26 | white-space: pre; 27 | } 28 | .no-semi-column { 29 | border: 2px solid #ffffff; 30 | } 31 | .newlines { 32 | background: the, 33 | great, 34 | wall; 35 | border: 2px 36 | solid 37 | black; 38 | } 39 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/custom.color.js: -------------------------------------------------------------------------------- 1 | less.tree.functions._color = function (str) { 2 | if (str.value === "evil red") { return new(less.tree.Color)("600"); } 3 | }; 4 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/custom.math.js: -------------------------------------------------------------------------------- 1 | less.tree.functions.add = function (a, b) { 2 | return new(less.tree.Dimension)(a.value + b.value); 3 | }; 4 | less.tree.functions.increment = function (a) { 5 | return new(less.tree.Dimension)(a.value + 1); 6 | }; -------------------------------------------------------------------------------- /src/test/resources/compatibility/custom.process.title.js: -------------------------------------------------------------------------------- 1 | function process() { 2 | this.title = 'node'; 3 | } 4 | 5 | var process = new process(); -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/colors.less: -------------------------------------------------------------------------------- 1 | #yelow { 2 | #short { 3 | color: #fea; 4 | } 5 | #long { 6 | color: #ffeeaa; 7 | } 8 | #rgba { 9 | color: rgba(255, 238, 170, 0.1); 10 | } 11 | #argb { 12 | color: argb(rgba(255, 238, 170, 0.1)); 13 | } 14 | } 15 | 16 | #blue { 17 | #short { 18 | color: #00f; 19 | } 20 | #long { 21 | color: #0000ff; 22 | } 23 | #rgba { 24 | color: rgba(0, 0, 255, 0.1); 25 | } 26 | #argb { 27 | color: argb(rgba(0, 0, 255, 0.1)); 28 | } 29 | } 30 | 31 | #alpha #hsla { 32 | color: hsla(11, 20%, 20%, 0.6); 33 | } 34 | 35 | #overflow { 36 | .a { color: #111111 - #444444; } // #000000 37 | .b { color: #eee + #fff; } // #ffffff 38 | .c { color: #aaa * 3; } // #ffffff 39 | .d { color: #00ee00 + #009900; } // #00ff00 40 | } 41 | 42 | #grey { 43 | color: rgb(200, 200, 200); 44 | } 45 | 46 | #808080 { 47 | color: hsl(50, 0%, 50%); 48 | } 49 | 50 | #00ff00 { 51 | color: hsl(120, 100%, 50%); 52 | } 53 | 54 | .lightenblue { 55 | color: lighten(blue, 10%); 56 | } 57 | 58 | .darkenblue { 59 | color: darken(blue, 10%); 60 | } 61 | 62 | .unknowncolors { 63 | color: blue2; 64 | border: 2px solid superred; 65 | } 66 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/comments.less: -------------------------------------------------------------------------------- 1 | /******************\ 2 | * * 3 | * Comment Header * 4 | * * 5 | \******************/ 6 | 7 | /* 8 | 9 | Comment 10 | 11 | */ 12 | 13 | /* 14 | * Comment Test 15 | * 16 | * - cloudhead (http://cloudhead.net) 17 | * 18 | */ 19 | 20 | //////////////// 21 | @var: "content"; 22 | //////////////// 23 | 24 | /* Colors 25 | * ------ 26 | * #EDF8FC (background blue) 27 | * #166C89 (darkest blue) 28 | * 29 | * Text: 30 | * #333 (standard text) // A comment within a comment! 31 | * #1F9EC9 (standard link) 32 | * 33 | */ 34 | 35 | /* @group Variables 36 | ------------------- */ 37 | #comments /* boo */ { 38 | /**/ // An empty comment 39 | color: red; /* A C-style comment */ 40 | background-color: orange; // A little comment 41 | font-size: 12px; 42 | 43 | /* lost comment */ content: @var; 44 | 45 | border: 1px solid black; 46 | 47 | // padding & margin // 48 | padding: 0; // }{ '" 49 | margin: 2em; 50 | } // 51 | 52 | /* commented out 53 | #more-comments { 54 | color: grey; 55 | } 56 | */ 57 | 58 | .selector /* .with */, .lots, /* of */ .comments { 59 | color: grey, /* blue */ orange; 60 | -webkit-border-radius: 2px /* webkit only */; 61 | -moz-border-radius: 2px * 4 /* moz only with operation */; 62 | } 63 | 64 | #last { color: blue } 65 | // 66 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/css-3.less: -------------------------------------------------------------------------------- 1 | .comma-delimited { 2 | background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); 3 | text-shadow: -1px -1px 1px red, 6px 5px 5px yellow; 4 | -moz-box-shadow: 0pt 0pt 2px rgba(255, 255, 255, 0.4) inset, 5 | 0pt 4px 6px rgba(255, 255, 255, 0.4) inset; 6 | } 7 | @font-face { 8 | font-family: Headline; 9 | src: local(Futura-Medium), 10 | url(fonts.svg#MyGeometricModern) format("svg"); 11 | } 12 | .other { 13 | -moz-transform: translate(0, 11em) rotate(-90deg); 14 | } 15 | p:not([class*="lead"]) { 16 | color: black; 17 | } 18 | 19 | input[type="text"].class#id[attr=32]:not(1) { 20 | color: white; 21 | } 22 | 23 | div#id.class[a=1][b=2].class:not(1) { 24 | color: white; 25 | } 26 | 27 | ul.comma > li:not(:only-child)::after { 28 | color: white; 29 | } 30 | 31 | ol.comma > li:nth-last-child(2)::after { 32 | color: white; 33 | } 34 | 35 | li:nth-child(4n+1), 36 | li:nth-child(-5n), 37 | li:nth-child(-n+2) { 38 | color: white; 39 | } 40 | 41 | a[href^="http://"] { 42 | color: black; 43 | } 44 | 45 | a[href$="http://"] { 46 | color: black; 47 | } 48 | 49 | form[data-disabled] { 50 | color: black; 51 | } 52 | 53 | p::before { 54 | color: black; 55 | } 56 | 57 | #issue322 { 58 | -webkit-animation: anim2 7s infinite ease-in-out; 59 | } 60 | 61 | @-webkit-keyframes frames { 62 | 0% { border: 1px } 63 | 5.5% { border: 2px } 64 | 100% { border: 3px } 65 | } 66 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/css-escapes.less: -------------------------------------------------------------------------------- 1 | @ugly: fuchsia; 2 | 3 | .escape\|random\|char { 4 | color: red; 5 | } 6 | 7 | .mixin\!tUp { 8 | font-weight: bold; 9 | } 10 | 11 | // class="404" 12 | .\34 04 { 13 | background: red; 14 | 15 | strong { 16 | color: @ugly; 17 | .mixin\!tUp; 18 | } 19 | } 20 | 21 | .trailingTest\+ { 22 | color: red; 23 | } 24 | 25 | /* This hideous test of hideousness checks for the selector "blockquote" with various permutations of hex escapes */ 26 | \62\6c\6f \63 \6B \0071 \000075o\74 e { 27 | color: silver; 28 | } 29 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/css.less: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | div { color: black; } 3 | div { width: 99%; } 4 | 5 | * { 6 | min-width: 45em; 7 | } 8 | 9 | h1, h2 > a > p, h3 { 10 | color: none; 11 | } 12 | 13 | div.class { 14 | color: blue; 15 | } 16 | 17 | div#id { 18 | color: green; 19 | } 20 | 21 | .class#id { 22 | color: purple; 23 | } 24 | 25 | .one.two.three { 26 | color: grey; 27 | } 28 | 29 | @media print { 30 | font-size: 3em; 31 | } 32 | 33 | @media screen { 34 | font-size: 10px; 35 | } 36 | 37 | @font-face { 38 | font-family: 'Garamond Pro'; 39 | src: url("/fonts/garamond-pro.ttf"); 40 | } 41 | 42 | a:hover, a:link { 43 | color: #999; 44 | } 45 | 46 | p, p:first-child { 47 | text-transform: none; 48 | } 49 | 50 | q:lang(no) { 51 | quotes: none; 52 | } 53 | 54 | p + h1 { 55 | font-size: 2.2em; 56 | } 57 | 58 | #shorthands { 59 | border: 1px solid #000; 60 | font: 12px/16px Arial; 61 | font: 100%/16px Arial; 62 | margin: 1px 0; 63 | padding: 0 auto; 64 | background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; 65 | } 66 | 67 | #more-shorthands { 68 | margin: 0; 69 | padding: 1px 0 2px 0; 70 | font: normal small/20px 'Trebuchet MS', Verdana, sans-serif; 71 | } 72 | 73 | .misc { 74 | -moz-border-radius: 2px; 75 | display: -moz-inline-stack; 76 | width: .1em; 77 | background-color: #009998; 78 | background-image: url(images/image.jpg); 79 | background: -webkit-gradient(linear, left top, left bottom, from(red), to(blue)); 80 | margin: ; 81 | filter: alpha(opacity=100); 82 | } 83 | 84 | #important { 85 | color: red !important; 86 | width: 100%!important; 87 | height: 20px ! important; 88 | } 89 | 90 | #data-uri { 91 | background: url(data:image/png;charset=utf-8;base64, 92 | kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ 93 | k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U 94 | kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); 95 | background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); 96 | } 97 | 98 | #svg-data-uri { 99 | background: transparent url('data:image/svg+xml, '); 100 | } 101 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/functions.less: -------------------------------------------------------------------------------- 1 | #functions { 2 | @var: 10; 3 | color: _color("evil red"); // #660000 4 | width: increment(15); 5 | height: undefined("self"); 6 | border-width: add(2, 3); 7 | variable: increment(@var); 8 | } 9 | 10 | #built-in { 11 | @r: 32; 12 | escaped: e("-Some::weird(#thing, y)"); 13 | lighten: lighten(#ff0000, 40%); 14 | darken: darken(#ff0000, 40%); 15 | saturate: saturate(#29332f, 20%); 16 | desaturate: desaturate(#203c31, 20%); 17 | greyscale: greyscale(#203c31); 18 | spin-p: spin(hsl(340, 50%, 50%), 40); 19 | spin-n: spin(hsl(30, 50%, 50%), -40); 20 | format: %("rgb(%d, %d, %d)", @r, 128, 64); 21 | format-string: %("hello %s", "world"); 22 | format-multiple: %("hello %s %d", "earth", 2); 23 | format-url-encode: %('red is %A', #ff0000); 24 | eformat: e(%("rgb(%d, %d, %d)", @r, 128, 64)); 25 | 26 | hue: hue(hsl(98, 12%, 95%)); 27 | saturation: saturation(hsl(98, 12%, 95%)); 28 | lightness: lightness(hsl(98, 12%, 95%)); 29 | rounded: round(@r/3); 30 | roundedpx: round(10px / 3); 31 | percentage: percentage(10px / 50); 32 | color: color("#ff0011"); 33 | 34 | .is-a { 35 | color: iscolor(#ddd); 36 | color: iscolor(red); 37 | color: iscolor(rgb(0, 0, 0)); 38 | keyword: iskeyword(hello); 39 | number: isnumber(32); 40 | string: isstring("hello"); 41 | pixel: ispixel(32px); 42 | percent: ispercentage(32%); 43 | em: isem(32em); 44 | } 45 | } 46 | 47 | #alpha { 48 | alpha: darken(hsla(25, 50%, 50%, 0.6), 10%); 49 | } 50 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/ie-filters.less: -------------------------------------------------------------------------------- 1 | @fat: 0; 2 | @cloudhead: "#000000"; 3 | 4 | .nav { 5 | filter: progid:DXImageTransform.Microsoft.Alpha(opacity = 20); 6 | filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@fat); 7 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr=@cloudhead, GradientType=@fat); 8 | } 9 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/import.less: -------------------------------------------------------------------------------- 1 | @import url("import/import-test-a.less"); 2 | @import url("import/import-test-a.less"); 3 | 4 | @import url(http://fonts.googleapis.com/css?family=Open+Sans); 5 | 6 | @import url(something.css) screen and (color) and (max-width: 600px); 7 | 8 | #import-test { 9 | .mixin; 10 | width: 10px; 11 | height: @a + 10%; 12 | } 13 | @import "import/import-test-e" screen and (max-width: 600px); 14 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/import/import-test-a.less: -------------------------------------------------------------------------------- 1 | @import "import-test-b.less"; 2 | @a: 20%; 3 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/import/import-test-b.less: -------------------------------------------------------------------------------- 1 | @import "import-test-c"; 2 | 3 | @b: 100%; 4 | 5 | .mixin { 6 | height: 10px; 7 | color: @c; 8 | } 9 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/import/import-test-c.less: -------------------------------------------------------------------------------- 1 | 2 | @import "import-test-d.css"; 3 | @c: red; 4 | 5 | #import { 6 | color: @c; 7 | } 8 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/import/import-test-d.css: -------------------------------------------------------------------------------- 1 | #css { color: yellow; } 2 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/import/import-test-e.less: -------------------------------------------------------------------------------- 1 | 2 | body { width: 100% } 3 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/import_custom.less: -------------------------------------------------------------------------------- 1 | @import url("import/import-test-a.less"); 2 | 3 | @import url(http://fonts.googleapis.com/css?family=Open+Sans); 4 | 5 | @import url(something.css) screen and (color) and (max-width: 600px); 6 | 7 | #import-test { 8 | .mixin; 9 | width: 10px; 10 | height: @a + 10%; 11 | } 12 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/javascript.less: -------------------------------------------------------------------------------- 1 | .eval { 2 | js: `42`; 3 | js: `1 + 1`; 4 | js: `"hello world"`; 5 | js: `[1, 2, 3]`; 6 | title: `process.title`; 7 | ternary: `(1 + 1 == 2 ? true : false)`; 8 | } 9 | .scope { 10 | @foo: 42; 11 | var: `this.foo.toJS()`; 12 | escaped: ~`2 + 5 + 'px'`; 13 | } 14 | .vars { 15 | @var: `4 + 4`; 16 | width: @var; 17 | } 18 | .escape-interpol { 19 | @world: "world"; 20 | width: ~`"hello" + " " + @{world}`; 21 | } 22 | .arrays { 23 | @ary: 1, 2, 3; 24 | @ary2: 1 2 3; 25 | ary: `@{ary}.join(', ')`; 26 | ary: `@{ary2}.join(', ')`; 27 | } 28 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/lazy-eval.less: -------------------------------------------------------------------------------- 1 | @var: @a; 2 | @a: 100%; 3 | 4 | .lazy-eval { 5 | width: @var; 6 | } 7 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/media.less: -------------------------------------------------------------------------------- 1 | 2 | // For now, variables can't be declared inside @media blocks. 3 | 4 | @var: 42; 5 | 6 | @media print { 7 | .class { 8 | color: blue; 9 | .sub { 10 | width: @var; 11 | } 12 | } 13 | .top, header > h1 { 14 | color: #222 * 2; 15 | } 16 | } 17 | 18 | @media screen { 19 | @base: 8; 20 | body { max-width: @base * 60; } 21 | } 22 | 23 | @media all and (orientation:portrait) { 24 | aside { float: none; } 25 | } 26 | 27 | @media handheld and (min-width: @var), screen and (min-width: 20em) { 28 | body { 29 | max-width: 480px; 30 | } 31 | } 32 | 33 | body { 34 | @media print { 35 | padding: 20px; 36 | 37 | header { 38 | background-color: red; 39 | } 40 | 41 | @media (orientation:landscape) { 42 | margin-left: 20px; 43 | } 44 | } 45 | } 46 | 47 | body { 48 | @media a, b and c { 49 | width: 95%; 50 | 51 | @media x, y { 52 | width: 100%; 53 | } 54 | } 55 | } 56 | 57 | .mediaMixin(@fallback: 200px) { 58 | background: black; 59 | 60 | @media handheld { 61 | background: white; 62 | 63 | @media (max-width: @fallback) { 64 | background: red; 65 | } 66 | } 67 | } 68 | 69 | .a { 70 | .mediaMixin(100px); 71 | } 72 | 73 | .b { 74 | .mediaMixin(); 75 | } 76 | @smartphone: ~"only screen and (max-width: 200px)"; 77 | @media @smartphone { 78 | width: 480px; 79 | } 80 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/mixins-args.less: -------------------------------------------------------------------------------- 1 | .mixin (@a: 1px, @b: 50%) { 2 | width: @a * 5; 3 | height: @b - 1%; 4 | } 5 | 6 | .mixina (@style, @width, @color: black) { 7 | border: @width @style @color; 8 | } 9 | 10 | .mixiny 11 | (@a: 0, @b: 0) { 12 | margin: @a; 13 | padding: @b; 14 | } 15 | 16 | .hidden() { 17 | color: transparent; // asd 18 | } 19 | 20 | #hidden { 21 | .hidden; 22 | .hidden(); 23 | } 24 | 25 | .two-args { 26 | color: blue; 27 | .mixin(2px, 100%); 28 | .mixina(dotted, 2px); 29 | } 30 | 31 | .one-arg { 32 | .mixin(3px); 33 | } 34 | 35 | .no-parens { 36 | .mixin; 37 | } 38 | 39 | .no-args { 40 | .mixin(); 41 | } 42 | 43 | .var-args { 44 | @var: 9; 45 | .mixin(@var, @var * 2); 46 | } 47 | 48 | .multi-mix { 49 | .mixin(2px, 30%); 50 | .mixiny(4, 5); 51 | } 52 | 53 | .maxa(@arg1: 10, @arg2: #f00) { 54 | padding: @arg1 * 2px; 55 | color: @arg2; 56 | } 57 | 58 | body { 59 | .maxa(15); 60 | } 61 | 62 | @glob: 5; 63 | .global-mixin(@a:2) { 64 | width: @glob + @a; 65 | } 66 | 67 | .scope-mix { 68 | .global-mixin(3); 69 | } 70 | 71 | .nested-ruleset (@width: 200px) { 72 | width: @width; 73 | .column { margin: @width; } 74 | } 75 | .content { 76 | .nested-ruleset(600px); 77 | } 78 | 79 | // 80 | 81 | .same-var-name2(@radius) { 82 | radius: @radius; 83 | } 84 | .same-var-name(@radius) { 85 | .same-var-name2(@radius); 86 | } 87 | #same-var-name { 88 | .same-var-name(5px); 89 | } 90 | 91 | // 92 | 93 | .var-inside () { 94 | @var: 10px; 95 | width: @var; 96 | } 97 | #var-inside { .var-inside; } 98 | 99 | // # mixins 100 | 101 | #id-mixin () { 102 | color: red; 103 | } 104 | .id-class { 105 | #id-mixin(); 106 | #id-mixin; 107 | } 108 | 109 | .mixin-arguments (@width: 0px, ...) { 110 | border: @arguments; 111 | width: @width; 112 | } 113 | 114 | .arguments { 115 | .mixin-arguments(1px, solid, black); 116 | } 117 | .arguments2 { 118 | .mixin-arguments(); 119 | } 120 | .arguments3 { 121 | .mixin-arguments; 122 | } 123 | 124 | .mixin-arguments2 (@width, @rest...) { 125 | border: @arguments; 126 | rest: @rest; 127 | width: @width; 128 | } 129 | .arguments4 { 130 | .mixin-arguments2(0, 1, 2, 3, 4); 131 | } 132 | 133 | // Edge cases 134 | 135 | .edge-case { 136 | .mixin-arguments("{"); 137 | } 138 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/mixins-closure.less: -------------------------------------------------------------------------------- 1 | .scope { 2 | @var: 99px; 3 | .mixin () { 4 | width: @var; 5 | } 6 | } 7 | 8 | .class { 9 | .scope > .mixin; 10 | } 11 | 12 | .overwrite { 13 | @var: 0px; 14 | .scope > .mixin; 15 | } 16 | 17 | .nested { 18 | @var: 5px; 19 | .mixin () { 20 | width: @var; 21 | } 22 | .class { 23 | @var: 10px; 24 | .mixin; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/mixins-guards.less: -------------------------------------------------------------------------------- 1 | 2 | // Stacking, functions.. 3 | 4 | .light (@a) when (lightness(@a) > 50%) { 5 | color: white; 6 | } 7 | .light (@a) when (lightness(@a) < 50%) { 8 | color: black; 9 | } 10 | .light (@a) { 11 | margin: 1px; 12 | } 13 | 14 | .light1 { .light(#ddd) } 15 | .light2 { .light(#444) } 16 | 17 | // Arguments against each other 18 | 19 | .max (@a, @b) when (@a > @b) { 20 | width: @a; 21 | } 22 | .max (@a, @b) when (@a < @b) { 23 | width: @b; 24 | } 25 | 26 | .max1 { .max(3, 6) } 27 | .max2 { .max(8, 1) } 28 | 29 | // Globals inside guards 30 | 31 | @g: auto; 32 | 33 | .glob (@a) when (@a = @g) { 34 | margin: @a @g; 35 | } 36 | .glob1 { .glob(auto) } 37 | 38 | // Other operators 39 | 40 | .ops (@a) when (@a >= 0) { 41 | height: gt-or-eq; 42 | } 43 | .ops (@a) when (@a =< 0) { 44 | height: lt-or-eq; 45 | } 46 | .ops (@a) when not(@a = 0) { 47 | height: not-eq; 48 | } 49 | .ops1 { .ops(0) } 50 | .ops2 { .ops(1) } 51 | .ops3 { .ops(-1) } 52 | 53 | // Scope and default values 54 | 55 | @a: auto; 56 | 57 | .default (@a: inherit) when (@a = inherit) { 58 | content: default; 59 | } 60 | .default1 { .default } 61 | 62 | // true & false keywords 63 | .test (@a) when (@a) { 64 | content: "true."; 65 | } 66 | .test (@a) when not (@a) { 67 | content: "false."; 68 | } 69 | 70 | .test1 { .test(true) } 71 | .test2 { .test(false) } 72 | .test3 { .test(1) } 73 | .test4 { .test(boo) } 74 | .test5 { .test("true") } 75 | 76 | // Boolean expressions 77 | 78 | .bool () when (true) and (false) { content: true and false } // FALSE 79 | .bool () when (true) and (true) { content: true and true } // TRUE 80 | .bool () when (true) { content: true } // TRUE 81 | .bool () when (false) and (false) { content: true } // FALSE 82 | .bool () when (false), (true) { content: false, true } // TRUE 83 | .bool () when (false) and (true) and (true), (true) { content: false and true and true, true } // TRUE 84 | .bool () when (true) and (true) and (false), (false) { content: true and true and false, false } // FALSE 85 | .bool () when (false), (true) and (true) { content: false, true and true } // TRUE 86 | .bool () when (false), (false), (true) { content: false, false, true } // TRUE 87 | .bool () when (false), (false) and (true), (false) { content: false, false and true, false } // FALSE 88 | .bool () when (false), (true) and (true) and (true), (false) { content: false, true and true and true, false } // TRUE 89 | .bool () when not (false) { content: not false } 90 | .bool () when not (true) and not (false) { content: not true and not false } 91 | .bool () when not (true) and not (true) { content: not true and not true } 92 | .bool () when not (false) and (false), not (false) { content: not false and false, not false } 93 | 94 | .bool1 { .bool } 95 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/mixins-important.less: -------------------------------------------------------------------------------- 1 | 2 | .mixin (9) { 3 | border: 9 !important; 4 | } 5 | .mixin (@a: 0) { 6 | border: @a; 7 | boxer: @a; 8 | } 9 | 10 | .class { 11 | .mixin(1); 12 | .mixin(2) !important; 13 | .mixin(3); 14 | .mixin(4) !important; 15 | .mixin(5); 16 | .mixin !important; 17 | .mixin(9); 18 | } 19 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/mixins-nested.less: -------------------------------------------------------------------------------- 1 | .mix-inner (@var) { 2 | border-width: @var; 3 | } 4 | 5 | .mix (@a: 10) { 6 | .inner { 7 | height: @a * 10; 8 | 9 | .innest { 10 | width: @a; 11 | .mix-inner(@a * 2); 12 | } 13 | } 14 | } 15 | 16 | .class { 17 | .mix(30); 18 | } 19 | 20 | .class2 { 21 | .mix(60); 22 | } 23 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/mixins-pattern.less: -------------------------------------------------------------------------------- 1 | .mixin (...) { 2 | variadic: true; 3 | } 4 | .mixin () { 5 | zero: 0; 6 | } 7 | .mixin (@a: 1px) { 8 | one: 1; 9 | } 10 | .mixin (@a) { 11 | one-req: 1; 12 | } 13 | .mixin (@a: 1px, @b: 2px) { 14 | two: 2; 15 | } 16 | 17 | .mixin (@a, @b, @c) { 18 | three-req: 3; 19 | } 20 | 21 | .mixin (@a: 1px, @b: 2px, @c: 3px) { 22 | three: 3; 23 | } 24 | 25 | .zero { 26 | .mixin(); 27 | } 28 | 29 | .one { 30 | .mixin(1); 31 | } 32 | 33 | .two { 34 | .mixin(1, 2); 35 | } 36 | 37 | .three { 38 | .mixin(1, 2, 3); 39 | } 40 | 41 | // 42 | 43 | .mixout ('left') { 44 | left: 1; 45 | } 46 | 47 | .mixout ('right') { 48 | right: 1; 49 | } 50 | 51 | .left { 52 | .mixout('left'); 53 | } 54 | .right { 55 | .mixout('right'); 56 | } 57 | 58 | // 59 | 60 | .border (@side, @width) { 61 | color: black; 62 | .border-side(@side, @width); 63 | } 64 | .border-side (left, @w) { 65 | border-left: @w; 66 | } 67 | .border-side (right, @w) { 68 | border-right: @w; 69 | } 70 | 71 | .border-right { 72 | .border(right, 4px); 73 | } 74 | .border-left { 75 | .border(left, 4px); 76 | } 77 | 78 | // 79 | 80 | 81 | .border-radius (@r) { 82 | both: @r * 10; 83 | } 84 | .border-radius (@r, left) { 85 | left: @r; 86 | } 87 | .border-radius (@r, right) { 88 | right: @r; 89 | } 90 | 91 | .only-right { 92 | .border-radius(33, right); 93 | } 94 | .only-left { 95 | .border-radius(33, left); 96 | } 97 | .left-right { 98 | .border-radius(33); 99 | } 100 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/mixins.less: -------------------------------------------------------------------------------- 1 | .mixin { border: 1px solid black; } 2 | .mixout { border-color: orange; } 3 | .borders { border-style: dashed; } 4 | 5 | #namespace { 6 | .borders { 7 | border-style: dotted; 8 | } 9 | .biohazard { 10 | content: "death"; 11 | .man { 12 | color: transparent; 13 | } 14 | } 15 | } 16 | #theme { 17 | > .mixin { 18 | background-color: grey; 19 | } 20 | } 21 | #container { 22 | color: black; 23 | .mixin; 24 | .mixout; 25 | #theme > .mixin; 26 | } 27 | 28 | #header { 29 | .milk { 30 | color: white; 31 | .mixin; 32 | #theme > .mixin; 33 | } 34 | #cookie { 35 | .chips { 36 | #namespace .borders; 37 | .calories { 38 | #container; 39 | } 40 | } 41 | .borders; 42 | } 43 | } 44 | .secure-zone { #namespace .biohazard .man; } 45 | .direct { 46 | #namespace > .borders; 47 | } 48 | 49 | .bo, .bar { 50 | width: 100%; 51 | } 52 | .bo { 53 | border: 1px; 54 | } 55 | .ar.bo.ca { 56 | color: black; 57 | } 58 | .jo.ki { 59 | background: none; 60 | } 61 | .extended { 62 | .bo; 63 | .jo.ki; 64 | } 65 | .foo .bar { 66 | .bar; 67 | } 68 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/operations.less: -------------------------------------------------------------------------------- 1 | #operations { 2 | color: #110000 + #000011 + #001100; // #111111 3 | height: 10px / 2px + 6px - 1px * 2; // 9px 4 | width: 2 * 4 - 5em; // 3em 5 | .spacing { 6 | height: 10px / 2px+6px-1px*2; 7 | width: 2 * 4-5em; 8 | } 9 | substraction: 20 - 10 - 5 - 5; // 0 10 | division: 20 / 5 / 4; // 1 11 | } 12 | 13 | @x: 4; 14 | @y: 12em; 15 | 16 | .with-variables { 17 | height: @x + @y; // 16em 18 | width: 12 + @y; // 24em 19 | size: 5cm - @x; // 1cm 20 | } 21 | 22 | .with-functions { 23 | color: rgb(200, 200, 200) / 2; 24 | color: 2 * hsl(0, 50%, 50%); 25 | color: rgb(10, 10, 10) + hsl(0, 50%, 50%); 26 | } 27 | 28 | @z: -2; 29 | 30 | .negative { 31 | height: 2px + @z; // 0px 32 | width: 2px - @z; // 4px 33 | } 34 | 35 | .shorthands { 36 | padding: -1px 2px 0 -4px; // 37 | } 38 | 39 | .rem-dimensions { 40 | font-size: 20rem / 5 + 1.5rem; // 5.5rem 41 | } 42 | 43 | .colors { 44 | color: #123; // #112233 45 | border-color: #234 + #111111; // #334455 46 | background-color: #222222 - #fff; // #000000 47 | .other { 48 | color: 2 * #111; // #222222 49 | border-color: #333333 / 3 + #111; // #222222 50 | } 51 | } 52 | 53 | .negations { 54 | @var: 4px; 55 | variable: -@var; // 4 56 | variable1: -@var + @var; // 0 57 | variable2: @var + -@var; // 0 58 | variable3: @var - -@var; // 8 59 | variable4: -@var - -@var; // 0 60 | paren: -(@var); // -4px 61 | paren2: -(2 + 2) * -@var; // 16 62 | } 63 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/parens.less: -------------------------------------------------------------------------------- 1 | .parens { 2 | @var: 1px; 3 | border: (@var * 2) solid black; 4 | margin: (@var * 1) (@var + 2) (4 * 4) 3; 5 | width: (6 * 6); 6 | padding: 2px (6px * 6px); 7 | } 8 | 9 | .more-parens { 10 | @var: (2 * 2); 11 | padding: (2 * @var) 4 4 (@var * 1px); 12 | width: (@var * @var) * 6; 13 | height: (7 * 7) + (8 * 8); 14 | margin: 4 * (5 + 5) / 2 - (@var * 2); 15 | //margin: (6 * 6)px; 16 | } 17 | 18 | .nested-parens { 19 | width: 2 * (4 * (2 + (1 + 6))) - 1; 20 | height: ((2+3)*(2+3) / (9-4)) + 1; 21 | } 22 | 23 | .mixed-units { 24 | margin: 2px 4em 1 5pc; 25 | padding: (2px + 4px) 1em 2px 2; 26 | } 27 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/rulesets.less: -------------------------------------------------------------------------------- 1 | #first > .one { 2 | > #second .two > #deux { 3 | width: 50%; 4 | #third { 5 | &:focus { 6 | color: black; 7 | #fifth { 8 | > #sixth { 9 | .seventh #eighth { 10 | + #ninth { 11 | color: purple; 12 | } 13 | } 14 | } 15 | } 16 | } 17 | height: 100%; 18 | } 19 | #fourth, #five, #six { 20 | color: #110000; 21 | .seven, .eight > #nine { 22 | border: 1px solid black; 23 | } 24 | #ten { 25 | color: red; 26 | } 27 | } 28 | } 29 | font-size: 2em; 30 | } 31 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/scope.less: -------------------------------------------------------------------------------- 1 | @x: blue; 2 | @z: transparent; 3 | @mix: none; 4 | 5 | .mixin { 6 | @mix: #989; 7 | } 8 | 9 | .tiny-scope { 10 | color: @mix; // #989 11 | .mixin; 12 | } 13 | 14 | .scope1 { 15 | @y: orange; 16 | @z: black; 17 | color: @x; // blue 18 | border-color: @z; // black 19 | .hidden { 20 | @x: #131313; 21 | } 22 | .scope2 { 23 | @y: red; 24 | color: @x; // blue 25 | .scope3 { 26 | @local: white; 27 | color: @y; // red 28 | border-color: @z; // black 29 | background-color: @local; // white 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/selectors.less: -------------------------------------------------------------------------------- 1 | h1, h2, h3 { 2 | a, p { 3 | &:hover { 4 | color: red; 5 | } 6 | } 7 | } 8 | 9 | #all { color: blue; } 10 | #the { color: blue; } 11 | #same { color: blue; } 12 | 13 | ul, li, div, q, blockquote, textarea { 14 | margin: 0; 15 | } 16 | 17 | td { 18 | margin: 0; 19 | padding: 0; 20 | } 21 | 22 | td, input { 23 | line-height: 1em; 24 | } 25 | 26 | a { 27 | color: red; 28 | 29 | &:hover { color: blue; } 30 | 31 | div & { color: green; } 32 | 33 | p & span { color: yellow; } 34 | } 35 | 36 | .foo { 37 | .bar, .baz { 38 | & .qux { 39 | display: block; 40 | } 41 | .qux & { 42 | display: inline; 43 | } 44 | .qux & .biz { 45 | display: none; 46 | } 47 | } 48 | } 49 | 50 | .other ::fnord { color: red } 51 | .other::fnord { color: red } 52 | .other { 53 | ::bnord {color: red } 54 | &::bnord {color: red } 55 | } 56 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/strings.less: -------------------------------------------------------------------------------- 1 | #strings { 2 | background-image: url("http://son-of-a-banana.com"); 3 | quotes: "~" "~"; 4 | content: "#*%:&^,)!.(~*})"; 5 | empty: ""; 6 | brackets: "{" "}"; 7 | escapes: "\"hello\" \\world"; 8 | escapes2: "\"llo"; 9 | } 10 | #comments { 11 | content: "/* hello */ // not-so-secret"; 12 | } 13 | #single-quote { 14 | quotes: "'" "'"; 15 | content: '""#!&""'; 16 | empty: ''; 17 | semi-colon: ';'; 18 | } 19 | #escaped { 20 | filter: ~"DX.Transform.MS.BS.filter(opacity=50)"; 21 | } 22 | #one-line { image: url(http://tooks.com) } 23 | #crazy { image: url(http://), "}", url("http://}") } 24 | #interpolation { 25 | @var: '/dev'; 26 | url: "http://lesscss.org@{var}/image.jpg"; 27 | 28 | @var2: 256; 29 | url2: "http://lesscss.org/image-@{var2}.jpg"; 30 | 31 | @var3: #456; 32 | url3: "http://lesscss.org@{var3}"; 33 | 34 | @var4: hello; 35 | url4: "http://lesscss.org/@{var4}"; 36 | 37 | @var5: 54.4px; 38 | url5: "http://lesscss.org/@{var5}"; 39 | } 40 | 41 | // multiple calls with string interpolation 42 | 43 | .mix-mul (@a: green) { 44 | color: ~"@{a}"; 45 | } 46 | .mix-mul-class { 47 | .mix-mul(blue); 48 | .mix-mul(red); 49 | .mix-mul(blue); 50 | .mix-mul(orange); 51 | } 52 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/variables.less: -------------------------------------------------------------------------------- 1 | @a: 2; 2 | @x: @a * @a; 3 | @y: @x + 1; 4 | @z: @x * 2 + @y; 5 | 6 | .variables { 7 | width: @z + 1cm; // 14cm 8 | } 9 | 10 | @b: @a * 10; 11 | @c: #888; 12 | 13 | @fonts: "Trebuchet MS", Verdana, sans-serif; 14 | @f: @fonts; 15 | 16 | @quotes: "~" "~"; 17 | @q: @quotes; 18 | 19 | .variables { 20 | height: @b + @x + 0px; // 24px 21 | color: @c; 22 | font-family: @f; 23 | quotes: @q; 24 | } 25 | 26 | .redefinition { 27 | @var: 4; 28 | @var: 2; 29 | @var: 3; 30 | three: @var; 31 | } 32 | 33 | .values { 34 | @a: 'Trebuchet'; 35 | @multi: 'A', B, C; 36 | font-family: @a, @a, @a; 37 | color: @c !important; 38 | url: url(@a); 39 | multi: something @multi, @a; 40 | } 41 | 42 | .variable-names { 43 | @var: 'hello'; 44 | @name: 'var'; 45 | name: @@name; 46 | } 47 | .alpha { 48 | @var: 42; 49 | filter: alpha(opacity=@var); 50 | } 51 | 52 | a:nth-child(@{a}) { 53 | border: 1px; 54 | } 55 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/less/whitespace.less: -------------------------------------------------------------------------------- 1 | 2 | 3 | .whitespace 4 | { color: white; } 5 | 6 | .whitespace 7 | { 8 | color: white; 9 | } 10 | .whitespace 11 | { color: white; } 12 | 13 | .whitespace{color:white;} 14 | .whitespace { color : white ; } 15 | 16 | .white, 17 | .space, 18 | .mania 19 | { color: white; } 20 | 21 | .no-semi-column { color: white } 22 | .no-semi-column { 23 | color: white; 24 | white-space: pre 25 | } 26 | .no-semi-column {border: 2px solid white} 27 | .newlines { 28 | background: the, 29 | great, 30 | wall; 31 | border: 2px 32 | solid 33 | black; 34 | } 35 | .empty { 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/test/resources/compatibility/utf8-content.less: -------------------------------------------------------------------------------- 1 | .sort-true::before{ content:'↓ '; } 2 | -------------------------------------------------------------------------------- /src/test/resources/env.rhino.test.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloverdijk/lesscss-java/a7102a49d891b034b3dbcc6e5ccd74fbb3d2fa05/src/test/resources/env.rhino.test.js -------------------------------------------------------------------------------- /src/test/resources/import/css/import.css: -------------------------------------------------------------------------------- 1 | import1a { 2 | color: blue; 3 | } 4 | import1b { 5 | color: blue; 6 | } 7 | import4 { 8 | color: blue; 9 | } 10 | @media screen { 11 | import5 { 12 | color: green; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/test/resources/import/endsinless/css/import.css: -------------------------------------------------------------------------------- 1 | iendinless { 2 | color: blue; 3 | } 4 | -------------------------------------------------------------------------------- /src/test/resources/import/endsinless/less/iendinless.less: -------------------------------------------------------------------------------- 1 | iendinless { 2 | color: blue; 3 | } 4 | -------------------------------------------------------------------------------- /src/test/resources/import/endsinless/less/import.less: -------------------------------------------------------------------------------- 1 | @import "iendinless"; 2 | -------------------------------------------------------------------------------- /src/test/resources/import/less/http_import.less: -------------------------------------------------------------------------------- 1 | //@import "http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css"; 2 | @import "https://raw2.github.com/FortAwesome/Font-Awesome/master/less/font-awesome.less"; 3 | 4 | body { 5 | background-color: #eeeeee; 6 | } -------------------------------------------------------------------------------- /src/test/resources/import/less/import.less: -------------------------------------------------------------------------------- 1 | @import "import1.less"; 2 | //@import "import2.less"; 3 | // @import "import3.less"; 4 | @import "import4"; 5 | 6 | @media screen { @import "import5"; } -------------------------------------------------------------------------------- /src/test/resources/import/less/import1.less: -------------------------------------------------------------------------------- 1 | @import "import1/import1a.less"; 2 | @import "import1/import1b.less"; 3 | // @import "import1/import1c.less"; -------------------------------------------------------------------------------- /src/test/resources/import/less/import1/import1a.less: -------------------------------------------------------------------------------- 1 | import1a { 2 | color: blue; 3 | } -------------------------------------------------------------------------------- /src/test/resources/import/less/import1/import1b.less: -------------------------------------------------------------------------------- 1 | import1b { 2 | color: blue; 3 | } -------------------------------------------------------------------------------- /src/test/resources/import/less/import1/import1c.less: -------------------------------------------------------------------------------- 1 | import1c { 2 | color: blue; 3 | } -------------------------------------------------------------------------------- /src/test/resources/import/less/import4.less: -------------------------------------------------------------------------------- 1 | import4 { 2 | color: blue; 3 | } -------------------------------------------------------------------------------- /src/test/resources/import/less/import5.less: -------------------------------------------------------------------------------- 1 | import5 { 2 | color: green; 3 | } -------------------------------------------------------------------------------- /src/test/resources/import/less/import_quotes.less: -------------------------------------------------------------------------------- 1 | @import 'import1.less'; 2 | //@import 'import2.less'; 3 | // @import 'import3.less'; 4 | @import "import4"; 5 | 6 | @media screen { @import 'import5'; } -------------------------------------------------------------------------------- /src/test/resources/less.test.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloverdijk/lesscss-java/a7102a49d891b034b3dbcc6e5ccd74fbb3d2fa05/src/test/resources/less.test.js --------------------------------------------------------------------------------