You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2018/09/21 10:16:00 UTC
[49/70] [abbrv] [partial] jena git commit: JENA-1597: separate
jena-fuseki-webapp module
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/webapp/ShiroEnvironmentLoader.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/webapp/ShiroEnvironmentLoader.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/webapp/ShiroEnvironmentLoader.java
deleted file mode 100644
index b8eaa9b..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/webapp/ShiroEnvironmentLoader.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.webapp;
-
-import java.io.IOException ;
-import java.io.InputStream ;
-import java.nio.file.Path ;
-import java.nio.file.Paths ;
-
-import javax.servlet.ServletContext ;
-import javax.servlet.ServletContextEvent ;
-import javax.servlet.ServletContextListener ;
-
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.util.FileUtils ;
-import org.apache.shiro.config.ConfigurationException ;
-import org.apache.shiro.io.ResourceUtils ;
-import org.apache.shiro.web.env.EnvironmentLoader ;
-import org.apache.shiro.web.env.ResourceBasedWebEnvironment ;
-import org.apache.shiro.web.env.WebEnvironment ;
-
-/** A place to perform Fuseki-specific initialization of Apache Shiro.
- * Runs after listener {@link FusekiServerEnvironmentInit} and before {@link FusekiServerListener}.
- * This means finding shiro.ini in multiple possible places, based on
- * different deployment setups.
- */
-public class ShiroEnvironmentLoader extends EnvironmentLoader implements ServletContextListener {
- private ServletContext servletContext ;
-
- public ShiroEnvironmentLoader() {}
-
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- FusekiSystem.formatBaseArea() ;
- this.servletContext = sce.getServletContext() ;
- try {
- // Shiro.
- initEnvironment(servletContext);
- } catch (ConfigurationException ex) {
- Fuseki.configLog.error("Shiro initialization failed: "+ex.getMessage());
- // Exit?
- throw ex ;
- }
- }
-
- @Override
- public void contextDestroyed(ServletContextEvent sce) {
- destroyEnvironment(sce.getServletContext());
- }
-
- /**
- * Normal Shiro initialization only supports one location for an INI file.
- *
- * When given multiple locations for the shiro.ini file, and
- * if a {@link ResourceBasedWebEnvironment}, check the list of configuration
- * locations, testing whether the name identified an existing resource.
- * For the first resource name found to exist, reset the {@link ResourceBasedWebEnvironment}
- * to name that resource alone so the normal Shiro initialization
- */
- @Override
- protected void customizeEnvironment(WebEnvironment environment) {
- if ( environment instanceof ResourceBasedWebEnvironment ) {
- ResourceBasedWebEnvironment env = (ResourceBasedWebEnvironment)environment ;
- String[] locations = env.getConfigLocations() ;
- String loc = huntForShiroIni(locations) ;
- Fuseki.configLog.info("Shiro file: "+loc);
- if (loc != null )
- locations = new String[] {loc} ;
- env.setConfigLocations(locations);
- }
- }
-
- private static final String FILE = "file" ;
-
- /** Look for a Shiro ini file, or return null */
- private static String huntForShiroIni(String[] locations) {
- FusekiEnv.setEnvironment() ;
- Fuseki.init();
- for ( String loc : locations ) {
- // If file:, look for that file.
- // If a relative name without scheme, look in FUSEKI_BASE, FUSEKI_HOME, webapp.
- String scheme = FileUtils.getScheme(loc) ;
-
- // Covers C:\\ as a "scheme name"
- if ( scheme != null ) {
- if ( scheme.equalsIgnoreCase(FILE)) {
- // Test file: for exists
- Path p = Paths.get(loc.substring(FILE.length()+1)) ;
- if ( ! p.toFile().exists() )
- continue ;
- // Fall through.
- }
- // Can't test - try
- return loc ;
- }
- // No scheme .
- Path p = Paths.get(loc) ;
-
- String fn = resolve(FusekiEnv.FUSEKI_BASE, p) ;
- if ( fn != null )
- return "file://"+fn ;
- fn = resolve(FusekiEnv.FUSEKI_HOME, p) ;
- if ( fn != null )
- return "file://"+fn ;
-
- // Try in webapp.
-
- try ( InputStream is = ResourceUtils.getInputStreamForPath(loc); ) {
- boolean exists = (is != null ) ;
- return loc ;
- } catch (IOException e) { }
- }
- return null ;
- }
-
- /** Directory + name -> filename if it exists */
- private static String resolve(Path dir, Path file) {
- Path p = dir.resolve(file) ;
- if ( p.toFile().exists() )
- return p.normalize().toString() ;
- return null ;
- }
-
-// /**
-// * Test whether a name identified an existing resource
-// * @param resource A String in Shiro-resource name format (e.g. URL scheme names)
-// * @return True/false as to whether the resource can be found or not.
-// */
-//
-// private boolean resourceExists(String resource) {
-// try {
-// // See IniWebEnvironment.convertPathToIni
-// if (!ResourceUtils.hasResourcePrefix(resource)) {
-// //Sort out "path" and open as a webapp resource.
-// resource = WebUtils.normalize(resource);
-// URL url = servletContext.getResource(resource) ;
-// return ( url == null ) ;
-// } else {
-// // Treat as a plain name.
-// InputStream is = ResourceUtils.getInputStreamForPath(resource);
-// boolean exists = (is != null ) ;
-// is.close() ;
-// return exists ;
-// }
-// } catch (IOException e) { return false ; }
-// }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/webapp/SystemState.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/webapp/SystemState.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/webapp/SystemState.java
deleted file mode 100644
index c5431a2..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/webapp/SystemState.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.webapp;
-
-import org.apache.jena.atlas.lib.FileOps ;
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.query.Dataset ;
-import org.apache.jena.tdb.StoreConnection ;
-import org.apache.jena.tdb.TDB ;
-import org.apache.jena.tdb.TDBFactory ;
-import org.apache.jena.tdb.base.block.FileMode ;
-import org.apache.jena.tdb.base.file.Location ;
-import org.apache.jena.tdb.setup.StoreParams ;
-import org.apache.jena.tdb.transaction.DatasetGraphTransaction ;
-
-/**
- * Small database to record the system state.
- * Used in the Full Fuseki server.
- */
-public class SystemState {
- private static String SystemDatabaseLocation ;
- // Testing may reset this.
- public static Location location ;
-
- private static Dataset dataset = null ;
- private static DatasetGraphTransaction dsg = null ;
-
- public static Dataset getDataset() {
- init() ;
- return dataset ;
- }
-
- public static DatasetGraphTransaction getDatasetGraph() {
- init() ;
- return dsg ;
- }
-
- private static boolean initialized = false ;
- private static void init() {
- init$() ;
- }
-
- /** Small footprint database. The system database records the server state.
- * It should not be performance critical, mainly being used for system admin
- * functions.
- * <p>Direct mode so that it is not competing for OS file cache space.
- * <p>Small caches -
- */
- private static final StoreParams systemDatabaseParams = StoreParams.builder()
- .fileMode(FileMode.direct)
- .blockSize(1024)
- .blockReadCacheSize(50)
- .blockWriteCacheSize(20)
- .node2NodeIdCacheSize(500)
- .nodeId2NodeCacheSize(500)
- .nodeMissCacheSize(100)
- .build() ;
-
- public /* for testing */ static void init$() {
- if ( initialized )
- return ;
- initialized = true ;
-
- if ( location == null )
- location = Location.create(FusekiSystem.dirSystemDatabase.toString()) ;
-
- if ( ! location.isMem() )
- FileOps.ensureDir(location.getDirectoryPath()) ;
-
- // Force it into the store connection as a low footprint
- if ( StoreConnection.getExisting(location) != null )
- Fuseki.serverLog.warn("System database already in the StoreConnection cache") ;
- StoreConnection.make(location, systemDatabaseParams) ;
-
- dataset = TDBFactory.createDataset(location) ;
- dsg = (DatasetGraphTransaction)(dataset.asDatasetGraph()) ;
- dsg.getContext().set(TDB.symUnionDefaultGraph, false) ;
- }
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/config.ttl
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/config.ttl b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/config.ttl
deleted file mode 100644
index 7b9ac5b..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/config.ttl
+++ /dev/null
@@ -1,30 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-## Fuseki Server configuration file.
-
-@prefix : <#> .
-@prefix fuseki: <http://jena.apache.org/fuseki#> .
-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
-
-[] rdf:type fuseki:Server ;
- # Example::
- # Server-wide query timeout.
- #
- # Timeout - server-wide default: milliseconds.
- # Format 1: "1000" -- 1 second timeout
- # Format 2: "10000,60000" -- 10s timeout to first result,
- # then 60s timeout for the rest of query.
- #
- # See javadoc for ARQ.queryTimeout for details.
- # This can also be set on a per dataset basis in the dataset assembler.
- #
- # ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "30000" ] ;
-
- # Add any custom classes you want to load.
- # Must have a "public static void init()" method.
- # ja:loadClass "your.code.Class" ;
-
- # End triples.
- .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/shiro.ini
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/shiro.ini b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/shiro.ini
deleted file mode 100644
index 595fc83..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/shiro.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-[main]
-# Development
-ssl.enabled = false
-
-plainMatcher=org.apache.shiro.authc.credential.SimpleCredentialsMatcher
-#iniRealm=org.apache.shiro.realm.text.IniRealm
-iniRealm.credentialsMatcher = $plainMatcher
-
-localhostFilter=org.apache.jena.fuseki.authz.LocalhostFilter
-
-[users]
-# Implicitly adds "iniRealm = org.apache.shiro.realm.text.IniRealm"
-admin=pw
-
-[roles]
-
-[urls]
-## Control functions open to anyone
-/$/status = anon
-/$/ping = anon
-
-## and the rest are restricted to localhost.
-/$/** = localhostFilter
-
-## If you want simple, basic authentication user/password
-## on the operations,
-## 1 - set a better password in [users] above.
-## 2 - comment out the "/$/** = localhost" line and use:
-## "/$/** = authcBasic,user[admin]"
-
-## or to allow any access.
-##/$/** = anon
-
-# Everything else
-/**=anon
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-mem
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-mem b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-mem
deleted file mode 100644
index a8b4cd6..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-mem
+++ /dev/null
@@ -1,27 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-@prefix : <#> .
-@prefix fuseki: <http://jena.apache.org/fuseki#> .
-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
-@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
-
-## ---------------------------------------------------------------
-## Updatable in-memory dataset.
-
-<#service1> rdf:type fuseki:Service ;
- # URI of the dataset -- http://host:port/{NAME}
- fuseki:name "{NAME}" ;
- fuseki:serviceQuery "sparql" ;
- fuseki:serviceQuery "query" ;
- fuseki:serviceUpdate "update" ;
- fuseki:serviceUpload "upload" ;
- fuseki:serviceReadWriteGraphStore "data" ;
- fuseki:serviceReadGraphStore "get" ;
- fuseki:dataset <#dataset> ;
- .
-
-# Transactional, in-memory dataset. Initially empty.
-<#dataset> rdf:type ja:DatasetTxnMem .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-service
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-service b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-service
deleted file mode 100644
index a019496..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-service
+++ /dev/null
@@ -1,23 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-@prefix : <#> .
-@prefix fuseki: <http://jena.apache.org/fuseki#> .
-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
-@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
-
-## ---------------------------------------------------------------
-## Read-only in-memory dataset - used as a default, dummy datasets
-
-<#service1> rdf:type fuseki:Service ;
- fuseki:name "" ;
- fuseki:serviceQuery "sparql" ;
- fuseki:serviceQuery "query" ;
- fuseki:serviceReadGraphStore "get" ;
- fuseki:dataset <#dataset> ;
- .
-
-## In-memory, empty.
-<#dataset> rdf:type ja:RDFDataset .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb
deleted file mode 100644
index a16575b..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb
+++ /dev/null
@@ -1,31 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-@prefix : <#> .
-@prefix fuseki: <http://jena.apache.org/fuseki#> .
-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
-@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
-
-## ---------------------------------------------------------------
-## Updatable TDB dataset with all services enabled.
-
-<#service_tdb_all> rdf:type fuseki:Service ;
- rdfs:label "TDB {NAME}" ;
- fuseki:name "{NAME}" ;
- fuseki:serviceQuery "query" ;
- fuseki:serviceQuery "sparql" ;
- fuseki:serviceUpdate "update" ;
- fuseki:serviceUpload "upload" ;
- fuseki:serviceReadWriteGraphStore "data" ;
- # A separate read-only graph store endpoint:
- fuseki:serviceReadGraphStore "get" ;
- fuseki:dataset <#tdb_dataset_readwrite> ;
-
- .
-
-<#tdb_dataset_readwrite> rdf:type tdb:DatasetTDB ;
- tdb:location "{FUSEKI_BASE}/databases/{NAME}" ;
- ##ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "3000" ] ;
- ##tdb:unionDefaultGraph true ;
- .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb-dir
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb-dir b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb-dir
deleted file mode 100644
index 4362f87..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb-dir
+++ /dev/null
@@ -1,30 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-@prefix : <#> .
-@prefix fuseki: <http://jena.apache.org/fuseki#> .
-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
-@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
-
-## ---------------------------------------------------------------
-## Updatable TDB dataset with all services enabled.
-
-<#service_tdb_all> rdf:type fuseki:Service ;
- rdfs:label "TDB {NAME}" ;
- fuseki:name "{NAME}" ;
- fuseki:serviceQuery "query" ;
- fuseki:serviceQuery "sparql" ;
- fuseki:serviceUpdate "update" ;
- fuseki:serviceUpload "upload" ;
- fuseki:serviceReadWriteGraphStore "data" ;
- # A separate read-only graph store endpoint:
- fuseki:serviceReadGraphStore "get" ;
- fuseki:dataset <#tdb_dataset_readwrite> ;
-
- .
-
-<#tdb_dataset_readwrite> rdf:type tdb:DatasetTDB ;
- tdb:location "{DIR}" ;
- ##tdb:unionDefaultGraph true ;
- .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb-mem
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb-mem b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb-mem
deleted file mode 100644
index 449de5e..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb-mem
+++ /dev/null
@@ -1,30 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-@prefix : <#> .
-@prefix fuseki: <http://jena.apache.org/fuseki#> .
-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
-@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
-
-## ---------------------------------------------------------------
-## Updatable TDB dataset im-memory with all services enabled.
-
-<#service_tdb_all> rdf:type fuseki:Service ;
- rdfs:label "TDB {NAME}" ;
- fuseki:name "{NAME}" ;
- fuseki:serviceQuery "query" ;
- fuseki:serviceQuery "sparql" ;
- fuseki:serviceUpdate "update" ;
- fuseki:serviceUpload "upload" ;
- fuseki:serviceReadWriteGraphStore "data" ;
- # A separate read-only graph store endpoint:
- fuseki:serviceReadGraphStore "get" ;
- fuseki:dataset <#tdb_dataset_readwrite> ;
-
- .
-
-<#tdb_dataset_readwrite> rdf:type tdb:DatasetTDB ;
- tdb:location "--mem--" ;
- ## tdb:unionDefaultGraph true ;
- .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2 b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2
deleted file mode 100644
index 835d3f8..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2
+++ /dev/null
@@ -1,31 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-PREFIX : <#>
-PREFIX fuseki: <http://jena.apache.org/fuseki#>
-PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
-PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
-PREFIX tdb2: <http://jena.apache.org/2016/tdb#>
-PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
-
-## ---------------------------------------------------------------
-## Updatable TDB dataset with all services enabled.
-
-<#service_tdb_all> rdf:type fuseki:Service ;
- rdfs:label "TDB2 {NAME}" ;
- fuseki:name "{NAME}" ;
- fuseki:serviceQuery "query" ;
- fuseki:serviceQuery "sparql" ;
- fuseki:serviceUpdate "update" ;
- fuseki:serviceUpload "upload" ;
- fuseki:serviceReadWriteGraphStore "data" ;
- # A separate read-only graph store endpoint:
- fuseki:serviceReadGraphStore "get" ;
- fuseki:dataset <#tdb_dataset_readwrite> ;
-
- .
-
-<#tdb_dataset_readwrite> rdf:type tdb2:DatasetTDB2 ;
- tdb2:location "{FUSEKI_BASE}/databases/{NAME}" ;
- ##ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "3000" ] ;
- ##tdb2:unionDefaultGraph true ;
- .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2-dir
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2-dir b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2-dir
deleted file mode 100644
index 4a89278..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2-dir
+++ /dev/null
@@ -1,30 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-PREFIX : <#>
-PREFIX fuseki: <http://jena.apache.org/fuseki#>
-PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
-PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
-PREFIX tdb2: <http://jena.apache.org/2016/tdb#>
-PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
-
-## ---------------------------------------------------------------
-## Updatable TDB2 dataset with all services enabled.
-
-<#service_tdb_all> rdf:type fuseki:Service ;
- rdfs:label "TDB2 {NAME}" ;
- fuseki:name "{NAME}" ;
- fuseki:serviceQuery "query" ;
- fuseki:serviceQuery "sparql" ;
- fuseki:serviceUpdate "update" ;
- fuseki:serviceUpload "upload" ;
- fuseki:serviceReadWriteGraphStore "data" ;
- # A separate read-only graph store endpoint:
- fuseki:serviceReadGraphStore "get" ;
- fuseki:dataset <#tdb_dataset_readwrite> ;
-
- .
-
-<#tdb_dataset_readwrite> rdf:type tdb2:DatasetTDB2 ;
- tdb2:location "{DIR}" ;
- ##tdb2:unionDefaultGraph true ;
- .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2-mem
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2-mem b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2-mem
deleted file mode 100644
index f53be7f..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/webapp/templates/config-tdb2-mem
+++ /dev/null
@@ -1,30 +0,0 @@
-# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
-
-PREFIX : <#>
-PREFIX fuseki: <http://jena.apache.org/fuseki#>
-PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
-PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
-PREFIX tdb2: <http://jena.apache.org/2016/tdb#>
-PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
-
-## ---------------------------------------------------------------
-## Updatable TDB2 dataset im-memory with all services enabled.
-
-<#service_tdb_all> rdf:type fuseki:Service ;
- rdfs:label "TDB2 {NAME}" ;
- fuseki:name "{NAME}" ;
- fuseki:serviceQuery "query" ;
- fuseki:serviceQuery "sparql" ;
- fuseki:serviceUpdate "update" ;
- fuseki:serviceUpload "upload" ;
- fuseki:serviceReadWriteGraphStore "data" ;
- # A separate read-only graph store endpoint:
- fuseki:serviceReadGraphStore "get" ;
- fuseki:dataset <#tdb_dataset_readwrite> ;
-
- .
-
-<#tdb_dataset_readwrite> rdf:type tdb2:DatasetTDB2 ;
- tdb2:location "--mem--" ;
- ## tdb2:unionDefaultGraph true ;
- .
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml b/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 0737e76..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,326 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- version="3.0">
-
- <display-name>Apache Jena Fuseki Server</display-name>
-
- <listener>
- <!-- Basic server initialiation, including logging -->
- <listener-class>org.apache.jena.fuseki.webapp.FusekiServerEnvironmentInit</listener-class>
- </listener>
-
- <!-- Apache Shiro setup -->
- <listener>
- <!-- This replaces org.apache.shiro.web.env.EnvironmentLoaderListener
- Support multiple locations and looks in Fuseki-relevant places.
- -->
- <listener-class>org.apache.jena.fuseki.webapp.ShiroEnvironmentLoader</listener-class>
- </listener>
-
- <!-- Apache Jena Fuseki setup -->
-
- <listener>
- <listener-class>org.apache.jena.fuseki.webapp.FusekiServerListener</listener-class>
- </listener>
-
- <!-- CORS -->
- <filter>
- <filter-name>cross-origin</filter-name>
- <!-- Ported and standalone version of org.eclipse.jetty.servlets.CrossOriginFilter -->
- <filter-class>org.apache.jena.fuseki.servlets.CrossOriginFilter</filter-class>
- <!-- Defaults may be fine -->
- <init-param>
- <param-name>allowedOrigins</param-name>
- <param-value>*</param-value>
- </init-param>
- <init-param>
- <param-name>allowedMethods</param-name>
- <param-value>GET,POST,DELETE,PUT,HEAD,OPTIONS,PATCH</param-value>
- </init-param>
- <init-param>
- <param-name>allowedHeaders</param-name>
- <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified, Authorization</param-value>
- </init-param>
- <init-param>
- <param-name>exposedHeaders</param-name>
- <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
- </init-param>
- </filter>
-
- <filter-mapping>
- <filter-name>cross-origin</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <!-- Before FusekiFilter -->
- <filter>
- <filter-name>ShiroFilter</filter-name>
- <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
- </filter>
-
- <filter-mapping>
- <filter-name>ShiroFilter</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- <dispatcher>ERROR</dispatcher>
- </filter-mapping>
-
- <context-param>
- <param-name>shiroConfigLocations</param-name>
- <!-- Try a path name in: FUSEKI_BASE, FUSEKI_HOME, war resource
- If a "file:" then look there and there only.
- -->
- <param-value>shiro.ini</param-value>
- </context-param>
-
- <!-- Fuseki datatset serviced calls -->
- <filter>
- <filter-name>Fuseki</filter-name>
- <filter-class>org.apache.jena.fuseki.servlets.FusekiFilter</filter-class>
- </filter>
-
- <filter-mapping>
- <filter-name>Fuseki</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- <dispatcher>ERROR</dispatcher>
- </filter-mapping>
-
- <!-- Validators -->
-
- <servlet>
- <servlet-name>QueryValidator</servlet-name>
- <servlet-class>org.apache.jena.fuseki.validation.QueryValidator</servlet-class>
- </servlet>
-
- <servlet>
- <servlet-name>UpdateValidator</servlet-name>
- <servlet-class>org.apache.jena.fuseki.validation.UpdateValidator</servlet-class>
- </servlet>
-
- <servlet>
- <servlet-name>DataValidator</servlet-name>
- <servlet-class>org.apache.jena.fuseki.validation.DataValidator</servlet-class>
- </servlet>
-
- <servlet>
- <servlet-name>IRIValidator</servlet-name>
- <servlet-class>org.apache.jena.fuseki.validation.IRIValidator</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>QueryValidator</servlet-name>
- <url-pattern>/validate/query</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>UpdateValidator</servlet-name>
- <url-pattern>/validate/update</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>IRIValidator</servlet-name>
- <url-pattern>/validate/iri</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>DataValidator</servlet-name>
- <url-pattern>/validate/data</url-pattern>
- </servlet-mapping>
-
- <!-- Server controls-->
-
- <servlet>
- <servlet-name>PingServlet</servlet-name>
- <servlet-class>org.apache.jena.fuseki.ctl.ActionPing</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>PingServlet</servlet-name>
- <url-pattern>/$/ping</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>ActionStats</servlet-name>
- <servlet-class>org.apache.jena.fuseki.ctl.ActionStats</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>ActionStats</servlet-name>
- <url-pattern>/$/stats/*</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>ActionTasks</servlet-name>
- <servlet-class>org.apache.jena.fuseki.ctl.ActionTasks</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>ActionTasks</servlet-name>
- <url-pattern>/$/tasks/*</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>ActionBackup</servlet-name>
- <servlet-class>org.apache.jena.fuseki.mgt.ActionBackup</servlet-class>
- </servlet>
-
- <servlet>
- <servlet-name>BackupListServlet</servlet-name>
- <servlet-class>org.apache.jena.fuseki.mgt.ActionBackupList</servlet-class>
- </servlet>
-
- <!-- An action that only creates a background task that sleeps. -->
- <servlet>
- <servlet-name>ActionSleep</servlet-name>
- <servlet-class>org.apache.jena.fuseki.ctl.ActionSleep</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>ActionSleep</servlet-name>
- <url-pattern>/$/sleep/*</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>ActionBackup</servlet-name>
- <url-pattern>/$/backup/*</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>ActionBackup</servlet-name>
- <url-pattern>/$/backups/*</url-pattern> <!-- Alt spelling -->
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>BackupListServlet</servlet-name>
- <url-pattern>/$/backups-list</url-pattern>
- </servlet-mapping>
-
- <!-- Admin controls-->
-
- <servlet>
- <servlet-name>DumpServlet</servlet-name>
- <servlet-class>org.apache.jena.fuseki.mgt.DumpServlet</servlet-class>
- </servlet>
-
- <servlet>
- <servlet-name>ServerStatusServlet</servlet-name>
- <servlet-class>org.apache.jena.fuseki.mgt.ActionServerStatus</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>DumpServlet</servlet-name>
- <url-pattern>/$/dump</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>ServerStatusServlet</servlet-name>
- <url-pattern>/$/server</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>ActionDatasets</servlet-name>
- <servlet-class>org.apache.jena.fuseki.mgt.ActionDatasets</servlet-class>
- </servlet>
-
- <servlet>
- <servlet-name>ActionLogs</servlet-name>
- <servlet-class>org.apache.jena.fuseki.mgt.ActionLogs</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>ActionDatasets</servlet-name>
- <url-pattern>/$/datasets/*</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>ActionLogs</servlet-name>
- <url-pattern>/$/logs</url-pattern>
- </servlet-mapping>
-
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
-
- <!-- For serving static files -->
-
- <mime-mapping>
- <extension>rdf</extension>
- <mime-type>application/rdf+xml</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>ttl</extension>
- <mime-type>text/turtle;charset=utf-8</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>nt</extension>
- <mime-type>application/n-triples</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>nq</extension>
- <mime-type>application/n-quads</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>trig</extension>
- <mime-type>application/trig</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>jsonld</extension>
- <mime-type>application/ld+json</mime-type>
- </mime-mapping>
-
- <mime-mapping>
- <extension>tr</extension>
- <mime-type>application/rdf+thrift</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>trdf</extension>
- <mime-type>application/rdf+thrift</mime-type>
- </mime-mapping>
-
- <mime-mapping>
- <extension>rq</extension>
- <mime-type>application/sparql-query</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>ru</extension>
- <mime-type>application/sparql-update</mime-type>
- </mime-mapping>
-
- <mime-mapping>
- <extension>srx</extension>
- <mime-type>application/sparql-results+xml</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>srj</extension>
- <mime-type>application/sparql-results+json</mime-type>
- </mime-mapping>
- <mime-mapping>
- <extension>srt</extension>
- <mime-type>application/sparql-results+thrift</mime-type>
- </mime-mapping>
-
-</web-app>
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/webapp/admin-logs.html
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/webapp/admin-logs.html b/jena-fuseki2/jena-fuseki-core/src/main/webapp/admin-logs.html
deleted file mode 100644
index 10660e4..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/webapp/admin-logs.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <title>Apache Jena Fuseki</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <link href="../css/bootstrap.min.css" rel="stylesheet" media="screen">
- <link href="../css/font-awesome.min.css" rel="stylesheet" media="screen">
- <link href="../css/codemirror.css" rel="stylesheet" media="screen">
- <link href="../css/qonsole.css" rel="stylesheet" media="screen">
- <link href="../css/jquery.dataTables.css" rel="stylesheet" media="screen">
- <link href="../css/fui.css" rel="stylesheet" media="screen">
-
- <!--[if lt IE 9]>
- <script src="../js/lib/html5shiv.js"></script>
- <script src="../js/lib/respond.min.js"></script>
- <![endif]-->
- </head>
- <body>
- <nav class="navbar navbar-default" role="navigation">
- <div class="container">
- <div class="row">
- <!-- Brand and toggle get grouped for better mobile display -->
- <div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="index.html">
- <img src="images/jena-logo-notext-small.png" alt="Apache Jena logo" title="Apache Jena" />
- <div>Apache<br />Jena<br /><strong>Fuseki</strong></div>
- </a>
- </div>
-
- <!-- Collect the nav links, forms, and other content for toggling -->
- <div class="collapse navbar-collapse navbar-ex1-collapse">
- <ul class="nav navbar-nav">
- <li class=""><a href="index.html"><i class="fa fa-home"></i></a></li>
- <li class=""><a href="query.html"><i class="fa fa-question-circle"></i> query</a></li>
- <li class=""><a href="validate.html"><i class="fa fa-check-circle"></i> validate</a></li>
- <li class="admin"><a href="admin-data-management.html"><i class="fa fa-cogs"></i> administer</a></li>
- <li class="admin"><a href="admin-stats.html"><i class="fa fa-dashboard"></i> stats</a></li>
- <li class="admin active"><a href="admin-logs.html"><i class="fa fa-book"></i> logs</a></li>
- <li class=""><a href="documentation.html"><i class="fa fa-info-circle"></i> help</a></li>
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li class="status-indicator">
- <div>Server<br />status:</div>
- </li>
- <li class="status-indicator">
- <a class="" href="#admin/server-log.html" id="server-status-light" title="current server status">
- <span class="server-up"></span>
- </a>
- </li>
- </ul>
- </div><!-- /.navbar-collapse -->
- </div><!-- /row -->
- </div><!-- /container -->
- </nav>
-
- <div class="container">
- <div class="row">
- <h1>Server logs</h1>
- <p class="text-danger">Forthcoming feature. Show some or all of the recent log file, assuming it is in the usual place.</p>
- </div>
- </div>
-
- <script src="../js/lib/jquery-1.10.2.min.js"></script>
- <script src="../js/lib/bootstrap.min.js"></script>
- </body>
-</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/webapp/css/bootstrap-select.min.css
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/webapp/css/bootstrap-select.min.css b/jena-fuseki2/jena-fuseki-core/src/main/webapp/css/bootstrap-select.min.css
deleted file mode 100644
index edb090c..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/webapp/css/bootstrap-select.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * bootstrap-select v1.5.4
- * http://silviomoreto.github.io/bootstrap-select/
- *
- * Copyright 2013 bootstrap-select
- * Licensed under the MIT license
- */.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*="span"]{float:none;display:inline-block;margin-bottom:10px;margin-left:0}.form-search .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group{margin-bottom:0}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:0}.bootstrap-select.btn-group.pull-right,.bootstrap-select.btn-group[class*="span"].pull-right,.row-fluid .bootstrap-select.btn-group[class*="span"].pull-right{float:right}.input-append .bootstrap-select.btn-group{margin-left:-1px}.input-prepend .bootstrap-select.btn-group{margin-right:-1px}.bootstrap-select:not([class*="span"]):not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn){width:220px}.bootstrap-select{width:220px\0}.bootstrap-select.form-control:not([class*="span"]){width:100%}.bootstrap-select>.btn{width:100%;padding-right:25px}.error .bootstrap-select .btn{border:1px solid #b94a48}.bootstrap-
select.show-menu-arrow.open>.btn{z-index:2051}.bootstrap-select .btn:focus{outline:thin dotted #333 !important;outline:5px auto -webkit-focus-ring-color !important;outline-offset:-2px}.bootstrap-select.btn-group .btn .filter-option{display:inline-block;overflow:hidden;width:100%;float:left;text-align:left}.bootstrap-select.btn-group .btn .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group>.disabled,.bootstrap-select.btn-group .dropdown-menu li.disabled>a{cursor:not-allowed}.bootstrap-select.btn-group>.disabled:focus{outline:none !important}.bootstrap-select.btn-group[class*="span"] .btn{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;z-index:2000;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;border:0;padding:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-b
ox-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu dt{display:block;padding:3px 20px;cursor:default}.bootstrap-select.btn-group .div-contain{overflow:hidden}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li>a.opt{position:relative;padding-left:35px}.bootstrap-select.btn-group .dropdown-menu li>a{cursor:pointer}.bootstrap-select.btn-group .dropdown-menu li>dt small{font-weight:normal}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a i.check-mark{position:absolute;display:inline-block;right:15px;margin-top:2.5px}.bootstrap-select.btn-group .dropdown-menu li a i.check-mark{display:none}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu li:not(.disabled)>a:hover small,.bootstrap-select.btn-group .dropdown-menu li:not(.disabled)>a:focus small,.
bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled)>a small{color:#64b1d8;color:rgba(255,255,255,0.4)}.bootstrap-select.btn-group .dropdown-menu li>dt small{font-weight:normal}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #CCC;border-bottom-color:rgba(0,0,0,0.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid white;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.
bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after{display:block}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mobile-device{position:absolute;top:0;left:0;display:block !important;width:100%;height:100% !important;opacity:0}.bootstrap-select.fit-width{width:auto !important}.bootstrap-select.btn-group.fit-width .btn .filter-option{position:static}.bootstrap-select.btn-gro
up.fit-width .btn .caret{position:static;top:auto;margin-top:-1px}.control-group.error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select-searchbox,.bootstrap-select .bs-actionsbox{padding:4px 8px}.bootstrap-select .bs-actionsbox{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select-searchbox+.bs-actionsbox{padding:0 8px 4px}.bootstrap-select-searchbox input{margin-bottom:0}.bootstrap-select .bs-actionsbox .btn-group button{width:50%}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/e8abcbb6/jena-fuseki2/jena-fuseki-core/src/main/webapp/css/bootstrap-theme.css.map
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/webapp/css/bootstrap-theme.css.map b/jena-fuseki2/jena-fuseki-core/src/main/webapp/css/bootstrap-theme.css.map
deleted file mode 100644
index b36fc9a..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/webapp/css/bootstrap-theme.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styl
es\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active s
tate\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu
> .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inve
rse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start
-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-i
nfo-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the
mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\
n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height:
@height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.
com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers tha
t have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: trans
form @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n tra
nsform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n
animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @
boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\
n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorst
r='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\
n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image:
-webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50
%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep
images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n
}\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{sta
te}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @backgrou
nd;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizonta
l; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically cen
ter elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n
margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-column
s));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n flo
at: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width
: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from
collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns)
);\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-contro
l-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any inpu
t with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n
// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n"]}
\ No newline at end of file