You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2013/08/22 03:34:02 UTC

[4/4] git commit: Initial work on conversion to Bootstrap 3

Initial work on conversion to Bootstrap 3


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/bb23cdc2
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/bb23cdc2
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/bb23cdc2

Branch: refs/heads/master
Commit: bb23cdc21f68a655f8f2c24bb8c2c2ce5369ca12
Parents: cc5c53d
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Wed Aug 21 18:33:53 2013 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Wed Aug 21 18:33:53 2013 -0700

----------------------------------------------------------------------
 .../src/main/resources/components/Layout.tml    |    6 +-
 .../META-INF/modules/t5/core/alert.coffee       |   16 +-
 .../META-INF/modules/t5/core/bootstrap.coffee   |   29 +
 .../META-INF/modules/t5/core/console.coffee     |   22 +-
 .../tapestry5/corelib/components/Checkbox.java  |    5 +-
 .../tapestry5/corelib/components/Checklist.java |   30 +-
 .../tapestry5/corelib/components/DateField.java |   27 +-
 .../tapestry5/corelib/components/Errors.java    |    5 +-
 .../corelib/components/PasswordField.java       |    4 +-
 .../tapestry5/corelib/components/Radio.java     |   17 +-
 .../tapestry5/corelib/components/Select.java    |    7 +-
 .../tapestry5/corelib/components/TextArea.java  |   14 +-
 .../tapestry5/corelib/components/TextField.java |    4 +-
 .../tapestry5/corelib/mixins/ControlGroup.java  |   11 +-
 .../tapestry5/modules/JavaScriptModule.java     |   22 +-
 .../tapestry5/modules/TapestryModule.java       |    2 +-
 .../css/bootstrap-responsive.css                | 1109 ----
 .../tapestry5/bootstrap_2_3_2/css/bootstrap.css | 6167 ------------------
 .../img/glyphicons-halflings-white.png          |  Bin 8777 -> 0 bytes
 .../img/glyphicons-halflings.png                |  Bin 12799 -> 0 bytes
 .../tapestry5/bootstrap_2_3_2/js/bootstrap.js   | 2280 -------
 .../tapestry5/bootstrap_3_0_0/js/affix.js       |  126 +
 .../tapestry5/bootstrap_3_0_0/js/alert.js       |   98 +
 .../tapestry5/bootstrap_3_0_0/js/button.js      |  109 +
 .../tapestry5/bootstrap_3_0_0/js/carousel.js    |  217 +
 .../tapestry5/bootstrap_3_0_0/js/collapse.js    |  179 +
 .../tapestry5/bootstrap_3_0_0/js/dropdown.js    |  154 +
 .../tapestry5/bootstrap_3_0_0/js/modal.js       |  246 +
 .../tapestry5/bootstrap_3_0_0/js/popover.js     |  117 +
 .../tapestry5/bootstrap_3_0_0/js/scrollspy.js   |  158 +
 .../assets/tapestry5/bootstrap_3_0_0/js/tab.js  |  135 +
 .../tapestry5/bootstrap_3_0_0/js/tooltip.js     |  386 ++
 .../tapestry5/bootstrap_3_0_0/js/transition.js  |   56 +
 .../corelib/components/BeanEditForm.tml         |    2 +-
 .../tapestry5/corelib/components/BeanEditor.tml |    4 +-
 .../corelib/pages/PropertyEditBlocks.tml        |   34 +-
 tapestry-core/src/test/app1/BeanEditorDemo.tml  |   20 +-
 tapestry-core/src/test/app1/Index.tml           |    4 +-
 .../integration/app1/components/Border.java     |    3 +-
 .../integration/app1/components/Border.tml      |    8 +-
 40 files changed, 2164 insertions(+), 9669 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/quickstart/filtered/archetype-resources/src/main/resources/components/Layout.tml
----------------------------------------------------------------------
diff --git a/quickstart/filtered/archetype-resources/src/main/resources/components/Layout.tml b/quickstart/filtered/archetype-resources/src/main/resources/components/Layout.tml
index f5ab93f..444770c 100644
--- a/quickstart/filtered/archetype-resources/src/main/resources/components/Layout.tml
+++ b/quickstart/filtered/archetype-resources/src/main/resources/components/Layout.tml
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en" xmlns="http://www.w3.org/1999/xhtml"
       xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
-      xmlns:p="tapestry:parameter">
+        >
 <head>
     <meta charset="utf-8" />
     <title>${D}{title}</title>
@@ -29,9 +29,9 @@
 <body>
 
 <div class="navbar navbar-inverse navbar-fixed-top">
-    <div class="navbar-inner">
+    <div class="navbar-header">
         <div class="container">
-            <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+            <button type="button" class="btn navbar-btn" data-toggle="collapse" data-target=".nav-collapse">
                 <span class="icon-bar"></span>
                 <span class="icon-bar"></span>
                 <span class="icon-bar"></span>

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/alert.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/alert.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/alert.coffee
index 0a015e6..bdbdea4 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/alert.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/alert.coffee
@@ -20,10 +20,10 @@ define ["./dom", "./console", "./messages", "./ajax", "underscore"],
   (dom, console, messages, ajax, _) ->
 
     severityToClass =
-      info: "alert alert-info"
-      success: "alert alert-success"
-      warn: "alert alert-warning"
-      error: "alert alert-error"
+      info: "alert-info"
+      success: "alert-success"
+      warn: "alert-warning"
+      error: "alert-error"
 
     getURL = (container) -> container.attribute "data-dismiss-url"
 
@@ -66,7 +66,7 @@ define ["./dom", "./console", "./messages", "./ajax", "underscore"],
 
       if (outer.attribute "data-show-dismiss-all") is "true"
         outer.append """
-          <div class="row-fluid">
+          <div class="row">
             <button class="btn btn-mini pull-right" data-action="dismiss-all">
               <strong>&times;</strong>
               #{messages "core-dismiss-label"}
@@ -116,10 +116,10 @@ define ["./dom", "./console", "./messages", "./ajax", "underscore"],
       # Also, the <span> tag makes it easier to pull out just the content when doing tests.
       element = dom.create "div",
         "data-alert-id": data.id
-        class: className
+        class: "alert alert-dismissable " + className
         """
-          <button class="close">&times;</button>
-          <span>#{content}</span>
+          <button type="button" class="close">&times;</button>
+          #{content}
         """
 
       container.append element

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/bootstrap.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/bootstrap.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/bootstrap.coffee
new file mode 100644
index 0000000..e4da9db
--- /dev/null
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/bootstrap.coffee
@@ -0,0 +1,29 @@
+# Copyright 2013 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# ## t5/core/bootstrap
+#
+# Utilities for leveraging Bootstrap
+define [],
+  ->
+
+    exports =
+      # Generates the CSS class name for an icon.
+      #
+      # * name - of icon, e.g., "arrow-left"
+      glyph: (name) -> """<span class="glyphicon glyphicon-#{name}"/>"""
+
+    return exports
+
+

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee
index 6a8c0eb..3e12c00 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee
@@ -15,8 +15,8 @@
 # ## t5/core/console
 #
 # A wrapper around the native console, when it exists.
-define ["./dom", "underscore"],
-  (dom, _) ->
+define ["./dom", "underscore", "./bootstrap"],
+  (dom, _, { glyph }) ->
 
     nativeConsole = {}
     floatingConsole = null
@@ -56,11 +56,15 @@ define ["./dom", "underscore"],
             class: "tapestry-console",
             """
               <div class="message-container"></div>
-              <div class="row-fluid">
-                <button data-action="clear" class="btn btn-mini"><i class="icon-remove"></i> Clear Console</button>
-                <button data-action="enable" class="btn btn-mini" disabled="true"><i class="icon-play"></i> Enable Console</button>
-                <button data-action="disable" class="btn btn-mini"><i class="icon-pause"></i> Disable Console</button>
-                <input class="search-query input-xlarge" size="40" placeholder="Filter console content">
+              <div class="row">
+                <div class="btn-group-sm col-lg-5">
+                  <button data-action="clear" class="btn btn-mini">#{glyph "remove"} Clear Console</button>
+                  <button data-action="enable" class="btn btn-mini" disabled="true">#{glyph "play"}</i> Enable Console</button>
+                  <button data-action="disable" class="btn btn-mini">#{glyph "pause"} Disable Console</button>
+                </div>
+                <div class="col-lg-6">
+                  <input class="form-control input-xlarge" size="40" placeholder="Filter console content">
+                </div>
               </div>
               """
 
@@ -163,13 +167,13 @@ define ["./dom", "underscore"],
 
     requirejs.onError = (err) ->
 
-      message = "RequireJS error: #{err.requireType}"
+      message = "RequireJS error: #{err?.requireType or 'unknown'}"
 
       if err.message
         message += """: #{err.message}"""
 
       if err.requireType
-        modules = err.requireModules
+        modules = err?.requireModules
         if modules and modules.length > 0
           message += """, modules #{modules.join(", ")}"""
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checkbox.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checkbox.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checkbox.java
index 38caf9f..3e4eea7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checkbox.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checkbox.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2011, 2012 The Apache Software Foundation
+// Copyright 2006-2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -48,11 +48,8 @@ public class Checkbox extends AbstractField
         boolean checked = asSubmitted != null ? Boolean.parseBoolean(asSubmitted) : value;
 
         writer.element("input", "type", "checkbox",
-
                 "name", getControlName(),
-
                 "id", getClientId(),
-
                 "checked", checked ? "checked" : null);
 
         resources.renderInformalParameters(writer);

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java
index 328bd0d..7e7131c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java
@@ -1,4 +1,4 @@
-// Copyright 2011, 2012 The Apache Software Foundation
+// Copyright 2011-2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -84,32 +84,36 @@ public class Checklist extends AbstractField
     @Property
     private List<Renderable> availableOptions;
 
-    private final class RenderRadio implements Renderable
+    private final class RenderCheckbox implements Renderable
     {
         private final OptionModel model;
 
-        private RenderRadio(final OptionModel model)
+        private RenderCheckbox(final OptionModel model)
         {
             this.model = model;
         }
 
         public void render(MarkupWriter writer)
         {
-            final String clientId = javaScriptSupport.allocateClientId(resources);
-
             final String clientValue = encoder.toClient(model.getValue());
 
-            final Element checkbox = writer.element("input", "type", "checkbox", "id", clientId, "name", getControlName(), "value", clientValue);
+            writer.element("label");
+
+            final Element checkbox = writer.element("input",
+                    "type", "checkbox",
+                    "name", getControlName(),
+                    "value", clientValue);
 
             if (getSelected().contains(model.getValue()))
             {
                 checkbox.attribute("checked", "checked");
             }
-            writer.end();
 
-            writer.element("label", "for", clientId);
             writer.write(model.getLabel());
             writer.end();
+
+            writer.end();
+
         }
     }
 
@@ -125,7 +129,7 @@ public class Checklist extends AbstractField
 
             public void option(final OptionModel optionModel)
             {
-                availableOptions.add(new RenderRadio(optionModel));
+                availableOptions.add(new RenderCheckbox(optionModel));
             }
 
             public void endOptionGroup(final OptionGroupModel groupModel)
@@ -204,5 +208,13 @@ public class Checklist extends AbstractField
     {
         return validate.isRequired();
     }
+
+    void beginRender(MarkupWriter writer) {
+        writer.element("div", "class", "checkbox");
+    }
+
+    void afterRender(MarkupWriter writer) {
+        writer.end();
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java
index d8b0aa2..99676de 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2009, 2010, 2011, 2012 The Apache Software Foundation
+// Copyright 2007-2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -210,14 +210,14 @@ public class DateField extends AbstractField
 
         if (!hideTextField)
         {
-            writer.attributes("class", "input-append");
+            writer.attributes("class", "input-group");
         }
 
         writer.element("input",
 
                 "type", hideTextField ? "hidden" : "text",
 
-                "class", "input-small",
+                "class", "form-control",
 
                 "name", getControlName(),
 
@@ -237,14 +237,27 @@ public class DateField extends AbstractField
 
         decorateInsideField();
 
-        writer.end();
+        writer.end();   // input
+
+        if (!hideTextField)
+        {
+            writer.element("span", "class", "input-group-btn");
+        }
 
         writer.element("button",
+                "type", "button",
                 "class", "btn",
                 "alt", "[Show]");
-        writer.element("i", "class", "icon-calendar");
-        writer.end();
-        writer.end();
+
+        writer.element("span", "class", "glyphicon glyphicon-calendar");
+        writer.end(); // span
+
+        writer.end(); // button
+
+        if (!hideTextField)
+        {
+            writer.end();        // span.input-group-btn
+        }
 
         writer.end(); // outer div
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Errors.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Errors.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Errors.java
index 8d06439..3861701 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Errors.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Errors.java
@@ -32,7 +32,7 @@ import java.util.List;
  * @tapestrydoc
  * @see Form
  */
-@Import(module = "bootstrap")
+@Import(module = "bootstrap-alert")
 public class Errors
 {
     /**
@@ -63,8 +63,9 @@ public class Errors
             return;
         }
 
-        writer.element("div", "class", className);
+        writer.element("div", "class", "alert-dismissable " + className);
         writer.element("button",
+                "type", "button",
                 "class", "close",
                 "data-dismiss", "alert");
         writer.writeRaw("&times;");

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PasswordField.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PasswordField.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PasswordField.java
index f699ee2..edd779b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PasswordField.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PasswordField.java
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2011 The Apache Software Foundation
+// Copyright 2007-2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -40,6 +40,8 @@ public class PasswordField extends AbstractTextField
 
                        "type", "password",
 
+                        "class", "form-control",
+
                        "name", getControlName(),
 
                        "id", getClientId(),

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Radio.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Radio.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Radio.java
index 884a95b..7fcf320 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Radio.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Radio.java
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2010, 2011 The Apache Software Foundation
+// Copyright 2007-2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,11 +14,7 @@
 
 package org.apache.tapestry5.corelib.components;
 
-import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.Field;
-import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.RadioContainer;
+import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Mixin;
 import org.apache.tapestry5.annotations.Parameter;
@@ -35,7 +31,7 @@ import org.apache.tapestry5.services.javascript.JavaScriptSupport;
  * <p/>
  * If the value parameter is not bound, then the default value is a property of the container component whose name
  * matches the Radio component's id.
- * 
+ *
  * @tapestrydoc
  * @see RadioGroup
  * @see Form
@@ -132,7 +128,12 @@ public class Radio implements Field
         clientId = jsSupport.allocateClientId(resources);
         controlName = container.getControlName();
 
-        writer.element("input", "type", "radio", "id", clientId, "name", controlName, "value", value);
+        writer.element("input",
+                "type", "radio",
+                "id", clientId,
+                "name", controlName,
+                "class", "form-control",
+                "value", value);
 
         if (container.isSelected(this.value))
             writer.attributes("checked", "checked");

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
index f424f07..63d6731 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2009, 2010, 2011, 2012 The Apache Software Foundation
+// Copyright 2007-2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -179,7 +179,10 @@ public class Select extends AbstractField
 
     void beginRender(MarkupWriter writer)
     {
-        writer.element("select", "name", getControlName(), "id", getClientId());
+        writer.element("select",
+                "name", getControlName(),
+                "id", getClientId(),
+                "class", "form-control");
 
         putPropertyNameIntoBeanValidationContext("value");
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextArea.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextArea.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextArea.java
index bbe2fdf..bf0310f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextArea.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextArea.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2011 The Apache Software Foundation
+// Copyright 2006-2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -24,9 +24,9 @@ import org.apache.tapestry5.corelib.base.AbstractTextField;
  * <p/>
  * Includes the <code>cols</code> attribute, if a {@link org.apache.tapestry5.beaneditor.Width} annotation is present on
  * the property bound to the value parameter.
- * 
- * @see org.apache.tapestry5.corelib.components.TextOutput
+ *
  * @tapestrydoc
+ * @see org.apache.tapestry5.corelib.components.TextOutput
  * @see TextField
  * @see Form
  */
@@ -39,11 +39,13 @@ public class TextArea extends AbstractTextField
     {
         writer.element("textarea",
 
-        "name", getControlName(),
+                "name", getControlName(),
+
+                "class", "form-control",
 
-        "id", getClientId(),
+                "id", getClientId(),
 
-        "cols", getWidth());
+                "cols", getWidth());
 
         // Save until needed in after()
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextField.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextField.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextField.java
index 3dd8177..2c1c40c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextField.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/TextField.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2011 The Apache Software Foundation
+// Copyright 2006-2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -48,6 +48,8 @@ public class TextField extends AbstractTextField
 
                        "name", getControlName(),
 
+                    "class", "form-control",
+
                        "id", getClientId(),
 
                        "value", value,

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ControlGroup.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ControlGroup.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ControlGroup.java
index e0f8296..5835aa5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ControlGroup.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ControlGroup.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2013. The Apache Software Foundation
+// Copyright 2013 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -41,11 +41,9 @@ public class ControlGroup
 
     void beginRender(MarkupWriter writer)
     {
-        writer.element("div", "class", "control-group");
-        label = writer.element("label", "class", "control-label");
+        writer.element("div", "class", "form-group");
+        label = writer.element("label");
         writer.end();
-        writer.element("div", "class", "controls");
-
         fillInLabelAttributes();
     }
 
@@ -58,7 +56,6 @@ public class ControlGroup
 
     void afterRender(MarkupWriter writer)
     {
-        writer.end(); // div.controls
-        writer.end(); // div.control-group
+        writer.end(); // div.form-group
     }
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
index e2e9135..6807f4f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
@@ -98,7 +98,7 @@ public class JavaScriptModule
         }
 
         add(configuration, StackExtensionType.STYLESHEET,
-                "${tapestry.bootstrap-root}/css/bootstrap.css",
+                "${" + SymbolConstants.BOOTSTRAP_ROOT + "}/css/bootstrap.css",
 
                 ROOT + "/tapestry.css",
 
@@ -233,15 +233,29 @@ public class JavaScriptModule
                                         @Path("${tapestry.asset.root}/jquery-1.9.1.js")
                                         Resource jQuery,
 
-                                        @Path("${" + SymbolConstants.BOOTSTRAP_ROOT + "}/js/bootstrap.js")
-                                        Resource bootstrap)
+                                        @Path("${" + SymbolConstants.BOOTSTRAP_ROOT + "}/js/transition.js")
+                                        Resource transition)
     {
         configuration.add("underscore", new JavaScriptModuleConfiguration(underscore).exports("_"));
         // Hacking around https://github.com/jrburke/requirejs/issues/534
         configuration.add("jquery-library", new JavaScriptModuleConfiguration(jQuery));
         configuration.add("jquery", new JavaScriptModuleConfiguration(jqueryShim));
         configuration.add("prototype", new JavaScriptModuleConfiguration(prototype));
-        configuration.add("bootstrap", new JavaScriptModuleConfiguration(bootstrap).dependsOn("jquery"));
+
+        configuration.add("bootstrap-transition", new JavaScriptModuleConfiguration(transition).dependsOn("jquery"));
+
+        for (String name : new String[]{"affix", "alert", "button", "carousel", "collapse", "dropdown", "modal",
+                "scrollspy", "tab", "tooltip"})
+        {
+
+            Resource lib = transition.forFile(name + ".js");
+
+            configuration.add("bootstrap-" + name, new JavaScriptModuleConfiguration(lib).dependsOn("bootstrap-transition"));
+        }
+
+        Resource popover = transition.forFile("popover.js");
+
+        configuration.add("bootstrap-popover", new JavaScriptModuleConfiguration(popover).dependsOn("bootstrap-tooltip"));
     }
 
     @Contribute(SymbolProvider.class)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
index 8b7b969..8b2c2cb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
@@ -2090,7 +2090,7 @@ public final class TapestryModule
         // you are expected to override this symbol.
         configuration.add(SymbolConstants.HMAC_PASSPHRASE, "");
 
-        configuration.add(SymbolConstants.BOOTSTRAP_ROOT, "${tapestry.asset.root}/bootstrap_2_3_2");
+        configuration.add(SymbolConstants.BOOTSTRAP_ROOT, "${tapestry.asset.root}/bootstrap_3_0_0");
 
         configuration.add(SymbolConstants.SESSION_LOCKING_ENABLED, true);
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/bb23cdc2/tapestry-core/src/main/resources/META-INF/assets/tapestry5/bootstrap_2_3_2/css/bootstrap-responsive.css
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/resources/META-INF/assets/tapestry5/bootstrap_2_3_2/css/bootstrap-responsive.css b/tapestry-core/src/main/resources/META-INF/assets/tapestry5/bootstrap_2_3_2/css/bootstrap-responsive.css
deleted file mode 100644
index 09e88ce..0000000
--- a/tapestry-core/src/main/resources/META-INF/assets/tapestry5/bootstrap_2_3_2/css/bootstrap-responsive.css
+++ /dev/null
@@ -1,1109 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.2
- *
- * 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;
-}
-
-@-ms-viewport {
-  width: device-width;
-}
-
-.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;
-  }
-}
-
-.visible-print {
-  display: none !important;
-}
-
-@media print {
-  .visible-print {
-    display: inherit !important;
-  }
-  .hidden-print {
-    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 .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 2.564102564102564%;
-  }
-  .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 .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 2.7624309392265194%;
-  }
-  .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"],
-  .uneditable-input[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;
-  }
-  .row-fluid [class*="offset"]:first-child {
-    margin-left: 0;
-  }
-  .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 {
-    top: -100px;
-  }
-  .modal.fade.in {
-    top: 20px;
-  }
-}
-
-@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;
-  }
-  .media .pull-left,
-  .media .pull-right {
-    display: block;
-    float: none;
-    margin-bottom: 10px;
-  }
-  .media-object {
-    margin-right: 0;
-    margin-left: 0;
-  }
-  .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 .nav > li > a:focus,
-  .nav-collapse .dropdown-menu a:hover,
-  .nav-collapse .dropdown-menu a:focus {
-    background-color: #f2f2f2;
-  }
-  .navbar-inverse .nav-collapse .nav > li > a,
-  .navbar-inverse .nav-collapse .dropdown-menu a {
-    color: #999999;
-  }
-  .navbar-inverse .nav-collapse .nav > li > a:hover,
-  .navbar-inverse .nav-collapse .nav > li > a:focus,
-  .navbar-inverse .nav-collapse .dropdown-menu a:hover,
-  .navbar-inverse .nav-collapse .dropdown-menu a:focus {
-    background-color: #111111;
-  }
-  .nav-collapse.in .btn-group {
-    padding: 0;
-    margin-top: 5px;
-  }
-  .nav-collapse .dropdown-menu {
-    position: static;
-    top: auto;
-    left: auto;
-    display: none;
-    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 .open > .dropdown-menu {
-    display: block;
-  }
-  .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;
-  }
-}