http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/synth-log/src/test/java/org/apache/drill/synth/TermGeneratorTest.java ---------------------------------------------------------------------- diff --git a/sandbox/synth-log/src/test/java/org/apache/drill/synth/TermGeneratorTest.java b/sandbox/synth-log/src/test/java/org/apache/drill/synth/TermGeneratorTest.java deleted file mode 100644 index b983eb2..0000000 --- a/sandbox/synth-log/src/test/java/org/apache/drill/synth/TermGeneratorTest.java +++ /dev/null @@ -1,97 +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.drill.synth; - -import com.google.common.base.Function; -import com.google.common.collect.*; -import org.apache.commons.math3.distribution.NormalDistribution; -import org.apache.mahout.math.stats.LogLikelihood; -import org.junit.Test; - -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class TermGeneratorTest { - - private static final WordGenerator WORDS = new WordGenerator("word-frequency-seed", "other-words"); - - @Test - public void generateTerms() { - TermGenerator x = new TermGenerator(WORDS, 1, 0.8); - final Multiset<String> counts = HashMultiset.create(); - for (int i = 0; i < 10000; i++) { - counts.add(x.sample()); - } - - assertEquals(10000, counts.size()); - assertTrue("Should have some common words", counts.elementSet().size() < 10000); - List<Integer> k = Lists.newArrayList(Iterables.transform(counts.elementSet(), new Function<String, Integer>() { - public Integer apply(String s) { - return counts.count(s); - } - })); -// System.out.printf("%s\n", Ordering.natural().reverse().sortedCopy(k).subList(0, 30)); -// System.out.printf("%s\n", Iterables.transform(Iterables.filter(counts.elementSet(), new Predicate<String>() { -// public boolean apply(String s) { -// return counts.count(s) > 100; -// } -// }), new Function<String, String>() { -// public String apply(String s) { -// return s + ":" + counts.count(s); -// } -// })); - assertEquals(1, Ordering.natural().leastOf(k, 1).get(0).intValue()); - assertTrue(Ordering.natural().greatestOf(k, 1).get(0) > 300); - assertTrue(counts.count("the") > 300); - } - - @Test - public void distinctVocabularies() { - TermGenerator x1 = new TermGenerator(WORDS, 1, 0.8); - final Multiset<String> k1 = HashMultiset.create(); - for (int i = 0; i < 50000; i++) { - k1.add(x1.sample()); - } - - TermGenerator x2 = new TermGenerator(WORDS, 1, 0.8); - final Multiset<String> k2 = HashMultiset.create(); - for (int i = 0; i < 50000; i++) { - k2.add(x2.sample()); - } - - final NormalDistribution normal = new NormalDistribution(); - List<Double> scores = Ordering.natural().sortedCopy(Iterables.transform(k1.elementSet(), - new Function<String, Double>() { - public Double apply(String s) { - return normal.cumulativeProbability(LogLikelihood.rootLogLikelihoodRatio(k1.count(s), 50000 - k1.count(s), k2.count(s), 50000 - k2.count(s))); - } - })); - int n = scores.size(); -// System.out.printf("%.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f", scores.get(0), scores.get((int) (0.05*n)), scores.get(n / 4), scores.get(n / 2), scores.get(3 * n / 4), scores.get((int) (0.95 * n)), scores.get(n - 1)); - int i = 0; - for (Double score : scores) { - if (i % 10 == 0) { - System.out.printf("%.6f\t%.6f\n", (double) i / n, score); - } - - i++; - } - } -}
http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/synth-log/src/test/java/org/apache/drill/synth/WordGeneratorTest.java ---------------------------------------------------------------------- diff --git a/sandbox/synth-log/src/test/java/org/apache/drill/synth/WordGeneratorTest.java b/sandbox/synth-log/src/test/java/org/apache/drill/synth/WordGeneratorTest.java deleted file mode 100644 index 0bfdf06..0000000 --- a/sandbox/synth-log/src/test/java/org/apache/drill/synth/WordGeneratorTest.java +++ /dev/null @@ -1,39 +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.drill.synth; - -import org.junit.Test; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class WordGeneratorTest { - @Test - public void checkRealWords() { - WordGenerator words = new WordGenerator("word-frequency-seed", "other-words"); - for (int i = 0; i < 20000; i++) { - assertFalse(words.getString(i).matches("-[0-9]+")); - } - - for (int i = 0; i < 1000; i++) { - String w = words.getString(i + 200000); - assertTrue(w.matches(".*-[0-9]+")); - } - } - -} http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/.htaccess ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/.htaccess b/sandbox/web-frontend/.htaccess deleted file mode 100644 index b651e0b..0000000 --- a/sandbox/web-frontend/.htaccess +++ /dev/null @@ -1,2 +0,0 @@ -RewriteEngine on -RewriteRule ^q/(.*)$ http://140.203.155.169:6996/q/$1 [P] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/README.md ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/README.md b/sandbox/web-frontend/README.md deleted file mode 100644 index eb4423d..0000000 --- a/sandbox/web-frontend/README.md +++ /dev/null @@ -1,5 +0,0 @@ -#Apache Drill front-end - -A [bootstrap.js](http://twitter.github.com/bootstrap/ "Twitter Bootstrap")-based Web app front-end for Apache Drill. This software is licensed under Apache 2.0 Software License. In case you have any questions, ask [Michael Hausenblas](http://mhausenblas.info/ "Michael Hausenblas"). - -Note: for now, you have to *once* configure the back-end URL for the online demo: set it to `http://srvgal85.deri.ie/apache-drill/` in the configuration dialog. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/drill.css ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/drill.css b/sandbox/web-frontend/drill.css deleted file mode 100644 index 1524581..0000000 --- a/sandbox/web-frontend/drill.css +++ /dev/null @@ -1,98 +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.*/ - -body { - padding-top: 60px; - padding-bottom: 40px; -} -.hero-unit { - width: 60%; - padding: 50px; - text-align: justify; -} -.hero-unit h1 { - margin: 0 0 20px 0; -} -legend { - margin: 20px 0 10px 0; -} -label { - font-weight: bold; -} -.sidebar-nav { - padding: 10px; -} -.active { - background: #fefefe; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -#project-list { - margin: 40px 0; -} -.project-entry { - border-top: 1px solid #eaeaea; - margin: 40px 0 20px 0; - padding: 10px 10px 2px 15px; -} -.project-main { - cursor: pointer; -} -.project-meta { - font-size: 85%; - margin: 0; - padding: 0 0 0 0; -} -.datasource-entry-container { - margin: 10px 0 0 20px; -} -.datasource-entry { - margin: 5px 0 15px 20px; -} -.target { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - padding: 3px; -} -.renderjson-object { - border: 1px solid #c0c0c0; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - padding: 10px; - margin: 0 0 20px 20px; -} -.renderjson-key { - font-weight: bold; -} -.renderjson-value { - padding: 0 0 5px 10px; -} -.apache-logo { - text-align: right; -} -pre { - font-size: 80%; - margin: 0 0 25px 0; -} -footer { - border-top: 1px solid #eee; - margin: 4em 0 0 0; - padding: 20px; - text-align: justify; -} http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/drill.js ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/drill.js b/sandbox/web-frontend/drill.js deleted file mode 100644 index bbc1b9d..0000000 --- a/sandbox/web-frontend/drill.js +++ /dev/null @@ -1,449 +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. - */ - -// Drill frontend settings -var MAX_PROJECTS = 100; -var MAX_DATASOURCES = 100; -var DRILL_BACKEND_URL = 'http://localhost:6996'; - -// don't touch the following - internal settings -var drillstorage = window.localStorage; -var backendURL = DRILL_BACKEND_URL; -var projectnum = 0; - -$(function(){ - initForms(); - - // handling of configuration - $('#config, #menu-config').click(function(){ - $('#config-dialog').modal('toggle'); - return false; - }); - $('#config-form').submit(function() { - return saveConfiguration(); - }); - $('#config-drill-reset').click(function(){ - var dconfig = { backendURL: DRILL_BACKEND_URL }; - backendURL = DRILL_BACKEND_URL; - $('#config-drill-backend-url').val(backendURL); - _store('config', dconfig); - return false; - }); - - // handling of about - $('#menu-about').click(function(){ - $('#about-dialog').modal('toggle'); - return false; - }); - - // handling of projects - $('#project-create').click(function(){ - $('#project-title').val(''); - $('#current-project').text('NONE'); - $('#project-create-form').fadeIn('slow'); - return false; - }); - $('#project-create-cancel').click(function(){ - $('#project-create-form').hide(); - return false; - }); - $('#project-create-form').submit(function() { - var ptitle = $('#project-title').val(); - var project = { timestamp : new Date() , ptitle: ptitle }; - var apid; - - if (ptitle) { - if($('#current-project').text() == 'NONE') apid = _store('project', project); - else apid = _store('project', project, $('#current-project').text()); - $('#current-project').html(apid); - $('#project-create-form').hide(); - listProjects(); - return true; - } - return false; - }); - $('.project-entry .project-main').live('click', function(event){ // deal with project selection - var key = $(this).parent().attr('id'); // using @id of the selected project entry, with current element: div/div - $('#current-project').html(key); // ... remember it globaly ... - listProjects(); // ... and highlight in project list as the active one - return false; - }); - $('.project-entry .icon-trash').live('click', function(event){ // deal with project deletion - var response = confirm('Are you sure you want to delete this project and all data sources within it? Note that this action can not be undone ...'); - var pid = $(this).parent().parent().parent().attr('id'); // using @id of the project entry, with current element: div/div/a/i - var idx = 0; - var ds; - - if (response) { - // first, remove data sources in project, if they exist ... - while(true){ - ds = _read('drill_ds_' + pid + '_' + idx); - if (idx > MAX_DATASOURCES) { - break; - } - else { - if(ds){ - _remove('drill_ds_' + pid + '_' + idx); - resetTargetDataSource('drill_ds_' + pid + '_' + idx); - } - idx += 1; - } - } - // ... and then remove the project itself ... - _remove(pid); - listProjects(); - } - }); - $('.project-entry .icon-edit').live('click', function(event){ // deal with project rename - var pid = $(this).parent().parent().parent().attr('id'); // using @id of the project entry, with current element: div/div/a/i - var ptitle = _read(pid).ptitle; - $('#current-project').text(pid); - $('#project-title').val(ptitle); - $('#project-create-form').fadeIn('slow'); - listProjects(); - return false; - }); - $('#project-help').click(function(){ - $('#project-help-alert').fadeIn('slow'); - return false; - }); - - // handling of data sources - $('.project-entry .add-ds').live('click', function(event){ // deal with data source addition to project - var key = $(this).parent().parent().attr('id'); // using @id of the selected project entry, with current element: div/div/button - $('#current-project').html(key); // ... to remember it globaly ... - $('#datasource-id').val(''); - $('#datasource-add-form').fadeIn('slow'); - return false; - }); - $('#datasource-add-cancel').click(function(){ - $('#datasource-add-form').hide(); - return false; - }); - $('#datasource-add-form').submit(function() { - var pid = $('#current-project').text(); - var dsid = $('#datasource-id').val(); - var ds = { timestamp : new Date(), pid: pid, dsid: dsid }; - - if (dsid) { - _store('ds', ds); - $('#datasource-add-form').hide(); - listProjects(); - return true; - } - return false; - }); - $('.project-entry .project-main .datasource-entry').live('click', function(event){ // deal with data source selection - var key = $('.dsid', this).attr('id'); // using @id of the child span that has a dsid class on it ... - setTargetDataSource(key); // ... to remember it globaly ... - listProjects(); // ... and to highlight in project list as the active one - return false; - }); - - // execute a query - either via button click or by hitting ENTER in the text area - $('#drill-query-execute').click(function(){ - executeQuery(); - return false; - }); - $('#drill-query').keypress(function(e) { - if (e.keyCode == 13 && e.shiftKey) { - e.preventDefault(); - executeQuery(); - return false; - } - }); -}); - -// init all forms (about, config, project list, etc.) -function initForms() { - var dconfig = _read('drill_config'); - var apid = $('#current-project').text(); - var tmp; - - //TODO: store last selected target data source - if(dconfig) { - backendURL = dconfig.backendURL; - $('#config-drill-backend-url').val(backendURL); - console.log('CONFIG: using backend ' + backendURL); - if(dconfig.targetds) { - $('#current-ds').text(dconfig.targetds); // something like 'drill_ds_drill_project_3_1' - tmp = dconfig.targetds.split('_'); - apid = tmp[2] + '_' + tmp[3] + '_' + tmp[4]; // extraxt from targetds: 'drill_ds_drill_project_3_1' -> 'drill_project_3' - $('#current-project').html(apid); - console.log('CONFIG: active project is [' + apid + '], target data source is [' + dconfig.targetds + ']'); - } - } - else { - $('#config-drill-backend-url').val(backendURL); - } - listProjects(); - console.log('CONFIG: all projects ready.'); - - // UI setup: - $('#tutorial').popover({ - title : 'Apache Drill Tutorial', - html: true, - content : '<p><small>A screen cast about how to use the front-end will be available on 15 Oct 2012.</small></p><p><small>For now, configure the back-end with <code>http://srvgal85.deri.ie/apache-drill</code> and create a project that contains a data source with the identifier <code>apache_drill</code>.</small></p>', - placement : 'bottom' - }); - - $('#config-dialog').modal({ - backdrop: true, - keyboard: true, - show: false - }); - - $('#about-dialog').modal({ - backdrop: true, - keyboard: true, - show: false - }); - - $('#help-dialog').modal({ - backdrop: false, - keyboard: true, - show: false - }); -} - -// persists all user and system settings -function saveConfiguration(){ - var bURL = $('#config-drill-backend-url').val(); - var targetds = $('#current-ds').text(); - var dconfig = { backendURL: bURL, targetds : targetds }; - - if (bURL && targetds) { - backendURL = bURL; - _store('config', dconfig); - return true; - } - return false; -} - -// sets and automatically saves target data source -function setTargetDataSource(dsid){ - $('#current-ds').text(dsid); - return saveConfiguration(); -} - -// removes stored taarget data source if match -function resetTargetDataSource(dsid){ - var targetds = $('#current-ds').text(); - - if (targetds == dsid) { - $('#current-ds').text('NONE'); - return saveConfiguration(); - } - else return false; -} - -// executes the query against a Dummy Drill back-end -function executeQuery(){ - var drillquery = $('#drill-query').val(); - var seldsid = $('#current-ds').text(); - var ds = _read(seldsid); - - if(drillquery){ - if(ds){ - $('#drill-results-meta').html(''); - $('#drill-results').html(''); - $.ajax({ - type: "GET", - url: backendURL +'/q/' + ds.dsid + '/' + drillquery, - dataType : "json", - success: function(data){ - if(data) { - $('#drill-results-meta').html('<p class="text-info lead">Number of results: <strong>' + data.length + '</strong></p>'); - $('#drill-results').renderJSON(data); - } - }, - error: function(msg){ - $('#drill-results-meta').html(''); - $('#drill-results').html('<div class="alert alert-error"><button type="button" class="close" data-dismiss="alert">Ã</button><h4>Something went wrong. Might check your configuration, check if the data source exists and make sure your query is properly formatted.</h4><div style="margin: 20px"><pre>' + JSON.stringify(msg) + '</pre></div></div>'); - } - }); - } - else { - alert("Can't execute the query: please select a data source to execute the query against."); - } - } - else { - alert("Can't execute the query: please provided a query value, try for example 'name:jane' ..."); - } -} - - -///////////////////////////////////////////////////// -// low-level storage API using localStorage -// check http://caniuse.com/#feat=namevalue-storage -// if your browser supports it - -// lists all projects, the selected project and data source -function listProjects(){ - var i = 0; // project pointer - var j = 0; // data source pointer - var buf = ''; - var selpid = $('#current-project').text(); - var seldsid = $('#current-ds').text(); - - $('#project-list').html(''); - - while(true){ - var pid = 'drill_project_' + i; - var project = _read(pid); - - if (i > MAX_PROJECTS) return; // respect limit - - if(project) { - buf = ''; - - if(selpid && (pid == selpid)) { // highligt selected project - buf = '<div class="active project-entry" '; - console.log('The active project is: ' + selpid); - } - else { - buf = '<div class="project-entry" '; - } - buf += 'id="' + pid + '">'; - buf += '<div style="text-align: right"><button class="btn btn-small btn-primary add-ds" type="button" title="Add a new data source to this project ..."><i class="icon-plus icon-white"></i> Add Data Source</button> '; - buf += '<a class="btn btn-small" href="#" title="Edit project ..."><i class="icon-edit"></i></a> '; - buf += '<a class="btn btn-small" href="#" title="Delete project ..."><i class="icon-trash"></i></a></div>'; - buf += '<div class="project-main"><h4>' + project.ptitle + '</h4>'; - buf += '<p class="project-meta muted">Last update: ' + formatDateHuman(project.timestamp) + '</p>'; - if(selpid && (pid == selpid)) { // show data sources of selected project - buf += '<div class="datasource-entry-container"><h5>Data sources:</h5>'; - while(true){ - var dsid = 'drill_ds_drill_project_' + i + '_' + j; - var ds = _read(dsid); - - if (j > MAX_DATASOURCES) break; // respect limit - - if(ds){ - if(seldsid && (dsid == seldsid)) { // highligt selected data source - buf += '<div class="target datasource-entry btn-success"><i class="icon-file icon-white"></i> <span class="dsid" id="' + dsid +'">' + ds.dsid +'</span></div>'; - console.log('The target data source for the query is: ' + seldsid); - } - else { - buf += '<div class="datasource-entry"><i class="icon-file"></i> <span class="dsid" id="' + dsid +'">' + ds.dsid +'</span></div>'; - } - } - j += 1; - } - if(_find_latest_ds_in(pid) == 0) buf += '<div class="alert alert-info">No data sources added so far! Use the "Add Data Source" button above to add some ...</div></div>'; - else buf += '</div>'; - } - else { - buf += '<p class="project-meta muted">Data sources: ' + _find_latest_ds_in(pid) + '</p>'; - } - buf += '</div></div>'; - $('#project-list').append(buf); - projectnum = i; - } - i += 1; - } -} - -// takes a string in ISO8601 (http://en.wikipedia.org/wiki/ISO_8601) format such as `2012-10-14T12:48:28.478Z` and turns it in something human readable -function formatDateHuman(iso8601datetime) { - var now = new Date(Date.now()); - var today = now.toISOString().split('T')[0]; - var date = iso8601datetime.split('T')[0]; // 2012-10-14T12:48:28.478Z -> 2012-10-14 - var time = iso8601datetime.split('T')[1]; // 2012-10-14T12:48:28.478Z -> 12:48:28.478Z - var hms = time.split('.')[0]; // 12:48:28 - - if(date == today) return 'Today at ' + hms + ' UTC'; - else return date + ' at ' + hms + ' UTC'; -} - -// creates/stores an entry under the category; if key is provided, entry is updated -function _store(category, entry, ekey) { - var key = 'drill_'; - var project; - - if(category == 'config') { - key += 'config'; - } - else { - if(category == 'project') { - if(ekey){ - key = ekey; - } - else{ - projectnum += 1; - if (projectnum > MAX_PROJECTS) { - alert('Maximum number of projects reached!'); - return; - } - key += 'project_' + projectnum; - } - } - else { - if(category == 'ds') { - key += 'ds_' + entry.pid + '_' + (_find_latest_ds_in(entry.pid) + 1); - } - else return; // can only store known entry categories - } - } - drillstorage.setItem(key, JSON.stringify(entry)); - return key; -} - -function _find_latest_ds_in(pid){ - var idx = 0; - var ds; - var last_idx = idx; - - while(true){ - ds = _read('drill_ds_' + pid + '_' + idx); - - if (idx > MAX_DATASOURCES) { - return last_idx; - } - else { - if(ds){ - last_idx = idx; - } - idx += 1; - } - } -} - -function _remove(key){ - drillstorage.removeItem(key); -} - -function _read(key){ - return JSON.parse(drillstorage.getItem(key)); -} - - -/////////////////// -// utility methods - -// http://stackoverflow.com/questions/2573521/how-do-i-output-an-iso-8601-formatted-string-in-javascript -if (!Date.prototype.toISOString) { - Date.prototype.toISOString = function() { - function pad(n) { return n < 10 ? '0' + n : n } - return this.getUTCFullYear() + '-' - + pad(this.getUTCMonth() + 1) + '-' - + pad(this.getUTCDate()) + 'T' - + pad(this.getUTCHours()) + ':' - + pad(this.getUTCMinutes()) + ':' - + pad(this.getUTCSeconds()) + 'Z'; - }; -} http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/dummy-drill/README.md ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/dummy-drill/README.md b/sandbox/web-frontend/dummy-drill/README.md deleted file mode 100644 index 8b80652..0000000 --- a/sandbox/web-frontend/dummy-drill/README.md +++ /dev/null @@ -1,151 +0,0 @@ -# Dummy Drill - -This is a Drill dummy-backend, used in the Apache Drill front-end, to simulate the real backend (as long as we don't have one). - -## Usage - -### 0. Launching elasticsearch - -Got to the directory where you have [elasticsearch](http://www.elasticsearch.org/), ES for short in the following, installed and launch it: - - $ bin/elasticsearch -f - -If you now `curl http://localhost:9200/` you should see: - - HTTP/1.1 200 OK - Content-Length: 172 - Content-Type: application/json; charset=UTF-8 - - { - "name": "Blindspot", - "ok": true, - "status": 200, - "tagline": "You Know, for Search", - "version": { - "number": "0.19.9", - "snapshot_build": false - } - } - -### 1. Generate data sources - -First, you want to generate a number of data sources (here: JSON documents with random information about beer-preferences of people). Let's create 200 data sources: - - $ python gen_ds.py 200 - -The `gen_ds.py` script will generate as many data sources as you tell it to in a sub-directory of the current directory called `ds` and add each to the `apache_drill` index in ES. If you now inspect the `ds` directory, you should see 200 JSON documents, each looking something like: - - { - "beer": "Bud,Paulaner Hefe-Weizen,Bud", - "id": 1, - "name": "Jane Masters", - "created": "2012-09-30T18:02:16Z" - } - -You might want to check if all is well (note that I'm using [httpie](https://github.com/jkbr/httpie) here in the following to talk HTTP with the server but feel free to use `curl`). Now try the following - I'm assuming you're running ES at port `9200`: - - $ http http://localhost:9200/apache_drill/_search?q=name:jane - -... and you should get something like this: - - { - "took": 1, - "timed_out": false, - "_shards": { - "total": 5, - "successful": 5, - "failed": 0 - }, - "hits": { - "total": 41, - "max_score": 2.338025, - "hits": [{ - "_index": "apache_drill", - "_type": "beer_pref", - "_id": "9HORJCZtQFa-yTQyMGiAOg", - "_score": 2.338025, - "_source": { - "beer": "Guinness,Bud,Guinness", - "id": 259, - "name": "Jane Smith", - "created": "2012-10-13T17:29:48Z" - } - }, - ... - }] - } - } - -For a date-range query such as: - - $ http http://localhost:9200/apache_drill/_search?q=created:%5B2012-10-13T17:29:48Z%20TO%202012-10-13:17:29:48Z%5D - -... you should see approximately the following: - - { - "took": 2, - "timed_out": false, - "_shards": { - "total": 5, - "successful": 5, - "failed": 0 - }, - "hits": { - "total": 500, - "max_score": 1.0, - "hits": [{ - "_index": "apache_drill", - "_type": "beer_pref", - "_id": "2s34_2xxSUCYmPLJzG7FyQ", - "_score": 1.0, - "_source": { - "beer": "Paulaner Hefe-Weizen,Sierra Nevada's Pale Ale,Heineken", - "id": 4, - "name": "Sarah Masters", - "created": "2012-10-13T17:29:48Z" - } - }, - ... - }] - } - } - - - - -### 2. Launching the back-end - - $ python dummy_drill.py - - 2012-09-30T08:33:13 Apache Dummy Drill server started, use {Ctrl+C} to shut-down ... - 2012-09-30T08:33:13 Using elasticsearch interface at 127.0.0.1:9200 - -### 3. Testing the back-end - - $ http http://localhost:6996/q/name:jane - - [{ - "beer": "Guinness,Bud,Guinness", - "created": "2012-10-13T17:29:48Z", - "id": 259, - "name": "Jane Smith" - }, - ... - { - "beer": "Heineken,Paulaner Hefe-Weizen,Sierra Nevada's Pale Ale", - "created": "2012-10-13T17:29:49Z", - "id": 472, - "name": "Jane van Rhein" - }] - - - -## Dependencies - -* Python 2.7 -* [elasticsearch](http://www.elasticsearch.org/) -* [pyes](https://github.com/aparo/pyes) - Python ElasticSearch - -## License - -This software is licensed under Apache 2.0 Software License. In case you have any questions, ask [Michael Hausenblas](http://mhausenblas.info/ "Michael Hausenblas"). \ No newline at end of file http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/dummy-drill/dummy_drill.py ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/dummy-drill/dummy_drill.py b/sandbox/web-frontend/dummy-drill/dummy_drill.py deleted file mode 100644 index 364b5bd..0000000 --- a/sandbox/web-frontend/dummy-drill/dummy_drill.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -Provides a dummy back-end for the Apache Drill front-end. - -Copyright (c) 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. - -@author: Michael Hausenblas, http://mhausenblas.info/#i -@since: 2012-09-30 -@status: init -""" - -import sys, os, logging, datetime, random, json -from BaseHTTPServer import BaseHTTPRequestHandler -from pyes import * -from pyes.exceptions import * - -# configuration -DEBUG = True -DS_DIR = 'ds' -ES_INTERFACE = '127.0.0.1:9200' -DRILL_INDEX = 'apache_drill' -BEER_PREF_TYPE = 'beer_pref' -DRILL_DUMMY_PORT = 6996 - -if DEBUG: - FORMAT = '%(asctime)-0s %(levelname)s %(message)s [at line %(lineno)d]' - logging.basicConfig(level=logging.DEBUG, format=FORMAT, datefmt='%Y-%m-%dT%I:%M:%S') -else: - FORMAT = '%(asctime)-0s %(message)s' - logging.basicConfig(level=logging.INFO, format=FORMAT, datefmt='%Y-%m-%dT%I:%M:%S') - - -class ApacheDrillDummyServer(BaseHTTPRequestHandler): - - def do_GET(self): - # API calls - if self.path.startswith('/q/'): # pattern: /q/INDEX/QUERY - logging.debug("Processing %s" %(self.path)) - self.serve_query(self.path.split('/')[-2], self.path.split('/')[-1]) - else: - self.send_error(404,'File Not Found: %s' % self.path) - return - - # changes the default behavour of logging everything - only in DEBUG mode - def log_message(self, format, *args): - if DEBUG: - try: - BaseHTTPRequestHandler.log_message(self, format, *args) - except IOError: - pass - else: - return - - # serves remote content via forwarding the request - def serve_query(self, lucindex, q): - logging.debug('Querying ES on index %s with query %s' %(lucindex, q)) - try: - results = self.query(lucindex, q) - self.send_response(200) - self.send_header('Content-type', 'application/json') - self.send_header('Access-Control-Allow-Origin', '*') # enable CORS - http://enable-cors.org/#how - self.end_headers() - self.wfile.write(json.JSONEncoder().encode(results)) - except IndexMissingException: - self.send_error(404,'The data source %s does not exist.' % lucindex) - - def query(self, lucindex, query_str): - """Executes a query against the existing Drill index in elasticsearch.""" - result_list = [] - connection = ES(ES_INTERFACE) - connection.refresh() - q = Search(StringQuery(query_str)) - results = connection.search(q, indices=[lucindex]) - for r in results: - result_list.append(r) - return result_list - -if __name__ == '__main__': - try: - from BaseHTTPServer import HTTPServer - server = HTTPServer(('', DRILL_DUMMY_PORT), ApacheDrillDummyServer) - logging.info('Apache Dummy Drill server started, use {Ctrl+C} to shut-down ...') - logging.info("Using elasticsearch interface at %s" %(ES_INTERFACE)) - server.serve_forever() - except Exception, e: - logging.error(e) - sys.exit(2) http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/dummy-drill/gen_ds.py ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/dummy-drill/gen_ds.py b/sandbox/web-frontend/dummy-drill/gen_ds.py deleted file mode 100644 index de001c0..0000000 --- a/sandbox/web-frontend/dummy-drill/gen_ds.py +++ /dev/null @@ -1,100 +0,0 @@ -""" -Generates dummy data for the Apache Drill front-end. - -Copyright (c) 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. - -@author: Michael Hausenblas, http://mhausenblas.info/#i -@since: 2012-09-30 -@status: init -""" - -import sys, os, logging, datetime, random, json -from pyes import * - -# configuration -DEBUG = False -DS_DIR = 'ds' -ES_INTERFACE = '127.0.0.1:9200' -DRILL_INDEX = 'apache_drill' -BEER_PREF_TYPE = 'beer_pref' - -if DEBUG: - FORMAT = '%(asctime)-0s %(levelname)s %(message)s [at line %(lineno)d]' - logging.basicConfig(level=logging.DEBUG, format=FORMAT, datefmt='%Y-%m-%dT%I:%M:%S') -else: - FORMAT = '%(asctime)-0s %(message)s' - logging.basicConfig(level=logging.INFO, format=FORMAT, datefmt='%Y-%m-%dT%I:%M:%S') - - -def setup_ES(con_str): - """Sets up elasticsearch interface, resets existing Drill index and creates a new Drill index based on a simple mapping.""" - logging.info("Setting up elasticsearch interface at %s" %(con_str)) - connection = ES(con_str) - try: - connection.delete_index(DRILL_INDEX) # make sure to reset existing Drill index - except: - pass - - connection.create_index(DRILL_INDEX) - mapping = { u'id': { - 'index': 'not_analyzed', - 'store': 'yes', - 'type': u'integer' - }, - u'name': { - 'boost': 1.0, - 'index': 'analyzed', - 'store': 'yes', - 'type': u'string', - "term_vector" : "with_positions_offsets" - }, - u'created': { - 'boost': 1.0, - 'index': 'analyzed', - 'store': 'yes', - 'type': u'date', - "term_vector" : "with_positions_offsets" - }, - u'beer': { - 'boost': 1.0, - 'index': 'analyzed', - 'store': 'yes', - 'type': u'string', - "term_vector" : "with_positions_offsets" - } - } - connection.put_mapping(BEER_PREF_TYPE, {'properties':mapping}, [DRILL_INDEX]) - return connection - -def gen_datasources(numds, es_connection): - """Generates numds data sources in a sub-directory DS_DIR of the current directory and adds each data source to the elasticsearch index.""" - logging.info("Generating %s data sources in directory %s" %(numds, os.path.abspath(DS_DIR))) - - beers = ['Bud', 'Heineken', 'Guinness', 'Paulaner Hefe-Weizen', 'Sierra Nevada\'s Pale Ale', 'Hoegaarden'] - fnames = ['Jim', 'Jane', 'Jill', 'Ted', 'Michael', 'Fred', 'Sophie', 'Stefan', 'Sarah', 'Luis', 'Frank', 'Ben', 'Roberto', 'Kathy'] - lnames = ['Jones', 'Ding', 'Meyer', 'Smith', 'Cho', 'MacDonell', 'Lu', 'Masters', 'van Rhein', 'Becker', 'Garcia', 'Perez'] - - if not os.path.exists(DS_DIR): - os.makedirs(DS_DIR) - - for dsi in range(1, numds + 1): - ds_file_name = os.path.join(DS_DIR, ''.join(['ds_', str(dsi), '.json'])) - ds = open(ds_file_name, 'w') - payload = { 'id' : dsi, - 'created' : ''.join([datetime.datetime.utcnow().isoformat().split('.')[0], 'Z']), - 'name' : ' '.join([random.choice(fnames), random.choice(lnames)]), - 'beer' : ','.join([random.choice(beers), random.choice(beers), random.choice(beers)]) - } - es_connection.index(payload, DRILL_INDEX, BEER_PREF_TYPE) - ds.write(json.JSONEncoder().encode(payload)) - ds.close() - -if __name__ == '__main__': - try: - numds = int(sys.argv[1]) - es_connection = setup_ES(ES_INTERFACE) - gen_datasources(numds, es_connection) - except ValueError: - print 'Usage:\n $python gen_ds.py NUMBER_OF_DATASOURCES' - print 'Example:\n $python gen_ds.py 10' - sys.exit() http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/img/feather-small.gif ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/img/feather-small.gif b/sandbox/web-frontend/img/feather-small.gif deleted file mode 100644 index 94f1892..0000000 Binary files a/sandbox/web-frontend/img/feather-small.gif and /dev/null differ http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/index.html ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/index.html b/sandbox/web-frontend/index.html deleted file mode 100644 index 2d0ad31..0000000 --- a/sandbox/web-frontend/index.html +++ /dev/null @@ -1,162 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="utf-8"> - <title>Apache Drill</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - <link href="lib/bootstrap/css/bootstrap.css" rel="stylesheet"> - <link href="lib/bootstrap/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="drill.css" rel="stylesheet"> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> -</head> -<body> - <!-- The menu --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container-fluid"> - <a class="brand" href="http://incubator.apache.org/drill/" target="_blank">Apache Drill</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#" onclick="return false" id="menu-config">Configure</a></li> - <li><a href="#" onclick="return false" id="menu-about">About</a></li> - <li><a href="http://github.com/mhausenblas/apache-drill-frontend" target="_blank">Source</a></li> - </ul> - </div> - </div> - </div> - </div> - - <!-- @@TODO: include Ted's new logo --> - - <!-- About dialog box --> - <div class="modal hide" id="about-dialog" data-keyboard="true"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">Ã</button> - <h3>About Apache Drill</h3> - </div> - <div class="modal-body"> - <p>This is the <a href="http://incubator.apache.org/drill/" target="_blank">Apache Drill</a> front-end, a Web application that acts as a user interface to issue queries against a back-end. This software is licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" title="">Apache License, Version 2.0</a>. If you have any questions, ping <a href="http://mhausenblas.info/" target="_blank">Michael Hausenblas</a>.</p> - <p class="muted">Note that all information about projects and data sources is stored locally (in your browser) using HTML5 <a href="http://diveintohtml5.info/storage.html" title="Local Storage - Dive Into HTML5">localStorage</a>. So, if you're unsure if your browser supports this, you might want to <a href="http://caniuse.com/#feat=namevalue-storage" title="When can I use... Support tables for HTML5, CSS3, etc">check it</a> first.</p> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button> - </div> - </div> - - - <!-- Configuration dialog box --> - <div class="modal hide" id="config-dialog" data-keyboard="true"> - <form id="config-form"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">Ã</button> - <h3>Apache Drill configuration</h3> - </div> - <div class="modal-body"> - <fieldset> - <legend>Dummy Drill back-end</legend> - <label>Address:</label> - <input type="text" placeholder="http://..." id="config-drill-backend-url"> - <span class="help-block">Provide the URL of the Dummy Drill back-end, here.</span> - </fieldset> - <fieldset> - <legend>BigQuery</legend> - <span class="help-block">Alternatively, we're using <a href="https://developers.google.com/bigquery/" target="_blank">BigQuery</a> as a back-end. This will be implemented, soon.</span> - </fieldset> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button> - <button class="btn" id="config-drill-reset">Reset to defaults</button> - <button type="submit" class="btn btn-primary">Save changes</button> - </div> - </form> - </div> - - - <!-- The main content --> - <div class="container-fluid"> - <div class="row-fluid"> - <div class="span9"> - <div class="hero-unit alert muted"> - <button type="button" class="close" data-dismiss="alert">Ã</button> - <h1>Welcome to Apache Drill!</h1> - <p class="lead">To start using Apache Drill, you first want to <em>configure</em> the back-end and then create a project on the right hand side or, if you're new to Drill, take a guided tour using some example data first. If you don't have the <em>Dummy Drill</em> back-end running locally, change the address to <code>http://srvgal85.deri.ie/apache-drill/</code>, using the configure button below.</p> - <p><a class="btn btn-primary btn-large" id="tutorial">Tutorial »</a> <button type="button" class="btn btn-large" id="config">Configure »</button></p> - </div> - <div class="row-fluid"> - <div class="span12"> - <h2>Query</h2> - <textarea class="field span12" id="drill-query" rows="6" placeholder="Enter your query following Lucene query syntax, here." autofocus="autofocus"></textarea> - <p class="help-block">For example, try the following queries: <code>name:jane</code>, or <code>created:[2012-10-13T17:29:48Z TO 2012-10-13:17:29:48Z]</code>, or simply <code>Guinness</code>. - <span class="muted">Note: you can also execute the query by hitting ENTER while having the SHIFT key pressed.</span></p> - <div class="pull-right"><a class="btn btn-large btn btn-success" href="#" onclick="return false" id="drill-query-execute">Execute</a></div> - </div> - </div> - <div class="row-fluid"> - <div class="span12"> - <h2>Results</h2> - <div id="drill-results-meta"></div> - <div id="drill-results"></div> - </div> - </div> - </div> - <div class="span3"> - <div id="current-project" class="hide">NONE</div> - <div id="current-ds" class="hide">NONE</div> - <!-- Project create form @@TODO: turn this into modal dialog --> - <form class="hide" id="project-create-form"> - <fieldset> - <legend>Project</legend> - <label>Title:</label> - <input type="text" placeholder="Project title" id="project-title"> - <span class="help-block">Provide a title for your project here.</span> - </fieldset> - <div class="form-actions"> - <button type="button" class="btn" id="project-create-cancel">Cancel</button> - <button type="submit" class="btn btn-primary">Save changes</button> - </div> - </form> - <!-- Project help dialog box --> - <div class="alert alert-info alert-block hide" data-alert="alert" id="project-help-alert"> - <button type="button" class="close" data-dismiss="alert">Ã</button> - <h4>Help on projects</h4> - <p>Projects are a collection of datasets, for example grouped thematically or by the original data publisher. A query is executed against all active data sources across all projects.</p> - </div> - <!-- Data source add form --> - <form class="hide" id="datasource-add-form"> - <fieldset> - <legend>Data Source</legend> - <label>Identifier:</label> - <input type="text" placeholder="Data source identifier" id="datasource-id"> - <span class="help-block">Provide an unique identifier for the data source here (for now, this is the name of the Lucene index).</span> - </fieldset> - <div class="form-actions"> - <button type="button" class="btn" id="datasource-add-cancel">Cancel</button> - <button type="submit" class="btn btn-primary">Save changes</button> - </div> - </form> - <div class="well sidebar-nav"> - <button class="btn btn-small" type="button" id="project-help"><i class="i"></i>?</button> - <button class="pull-right btn btn-primary" type="button" id="project-create" title="Create a new project ..."><i class="icon-plus icon-white"></i> Create Project</button> - <div id="project-list"></div> - </div> - </div> - </div> - <footer> - <div class="apache-logo"><img src="img/feather-small.gif" width="100" alt="Apache feather" /></div> - <p class="muted"> - Copyright © 2012, <a href="http://www.apache.org/" title="Welcome to The Apache Software Foundation!">The Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" title="">Apache License, Version 2.0</a> — - Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p> - </footer> - </div> - - <script src="lib/jquery.js"></script> - <script src="lib/jquery.renderjson.js"></script> - <script src="lib/bootstrap/js/bootstrap.js"></script> - <script src="drill.js"></script> -</body> -</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/lib/bootstrap/css/bootstrap-responsive.css ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/lib/bootstrap/css/bootstrap-responsive.css b/sandbox/web-frontend/lib/bootstrap/css/bootstrap-responsive.css deleted file mode 100644 index 9259d26..0000000 --- a/sandbox/web-frontend/lib/bootstrap/css/bootstrap-responsive.css +++ /dev/null @@ -1,1058 +0,0 @@ -/*! - * Bootstrap Responsive v2.1.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.hidden { - display: none; - visibility: hidden; -} - -.visible-phone { - display: none !important; -} - -.visible-tablet { - display: none !important; -} - -.hidden-desktop { - display: none !important; -} - -.visible-desktop { - display: inherit !important; -} - -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} - -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} - -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 1156px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 1056px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 956px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 856px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 756px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 656px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 556px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 456px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 356px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 256px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 156px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} - -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 710px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 648px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 586px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 524px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 462px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 400px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 338px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 276px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 214px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 152px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 90px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 28px; - } -} - -@media (max-width: 767px) { - body { - padding-right: 20px; - padding-left: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-right: -20px; - margin-left: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - width: auto; - clear: none; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .row-fluid [class*="span"] { - display: block; - float: none; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - right: 20px; - left: 20px; - width: auto; - margin: 0; - } - .modal.fade.in { - top: auto; - } -} - -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 20px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-right: 10px; - padding-left: 10px; - } - .modal { - top: 10px; - right: 10px; - left: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} - -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 20px; - } - .navbar-fixed-bottom { - margin-top: 20px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-right: 10px; - padding-left: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 10px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .dropdown-menu a:hover { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:hover { - background-color: #111111; - } - .nav-collapse.in .btn-group { - padding: 0; - margin-top: 5px; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - display: block; - float: none; - max-width: none; - padding: 0; - margin: 0 15px; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 10px 15px; - margin: 10px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - height: 0; - overflow: hidden; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-right: 10px; - padding-left: 10px; - } -} - -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} http://git-wip-us.apache.org/repos/asf/drill/blob/9a48e688/sandbox/web-frontend/lib/bootstrap/css/bootstrap-responsive.min.css ---------------------------------------------------------------------- diff --git a/sandbox/web-frontend/lib/bootstrap/css/bootstrap-responsive.min.css b/sandbox/web-frontend/lib/bootstrap/css/bootstrap-responsive.min.css deleted file mode 100644 index 7b0158d..0000000 --- a/sandbox/web-frontend/lib/bootstrap/css/bootstrap-responsive.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap Responsive v2.1.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zo om:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block ;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-flu id .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.3 93162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017 094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.spa n2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{marg in-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width: 40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.0718232 0441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left: 28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6, .uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz- box-sizing:border-box;box-sizing:border-box}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade.in{top:auto}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-rig ht:10px;padding-left:10px}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-bo rder-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}