]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
add support for '//===' for <h3>s in bs-lessdoc 11158/head
authorChris Rebert <code@rebertia.com>
Wed, 8 Jan 2014 05:43:12 +0000 (21:43 -0800)
committerChris Rebert <code@rebertia.com>
Wed, 8 Jan 2014 20:41:51 +0000 (12:41 -0800)
docs/_includes/customizer-variables.html
docs/customizer-variables.jade
docs/grunt/bs-lessdoc-parser.js
less/variables.less

index 5093bd5f321ec590e971ca94f5ca7eb74723bf3a..0b4429d7216c95d7448344665fc33152cacf1cc2 100644 (file)
 </div>
 <h2 id="navs">Navs</h2>
 <p></p>
-<div class="row">
-</div>
-<h2 id="shared-nav-styles">Shared nav styles</h2>
+<h3 id="shared-nav-styles">Shared nav styles</h3>
 <div class="row">
   <div class="bs-customizer-input">
     <label for="input-@nav-link-padding">@nav-link-padding</label>
index 0d6c83b0f1a0dc202ea45965dadaefb0f24cb6e1..19f3672b0bef9e349161508152c689e2746a5bb4 100644 (file)
@@ -4,15 +4,18 @@ each section in sections
     h2(id=section.id)= section.heading
     if section.docstring
       p!= section.docstring.html
-    div.row
-      each variable in section.variables
-        div.bs-customizer-input
-          label(for="input-" + variable.name)= variable.name
-          input.form-control(
-            id="input-" + variable.name
-            type="text"
-            value=variable.defaultValue
-            data-var=variable.name)
-          if variable.docstring
-            p.help-block!= variable.docstring.html
+    each subsection in section.subsections
+      if subsection.heading
+        h3(id=subsection.id)= subsection.heading
+      div.row
+        each variable in subsection.variables
+          div.bs-customizer-input
+            label(for="input-" + variable.name)= variable.name
+            input.form-control(
+              id="input-" + variable.name
+              type="text"
+              value=variable.defaultValue
+              data-var=variable.name)
+            if variable.docstring
+              p.help-block!= variable.docstring.html
 // NOTE: DO NOT EDIT THE PRECEDING SECTION DIRECTLY! It is autogenerated via the `build-customizer-vars-form` Grunt task using the customizer-variables.jade template.
index 8c232d80cc33c2a6b7ed5e27d25aa4ef8f79e0e4..f4da4238ee670200f28409cd7653ed8e721f36db 100644 (file)
@@ -24,6 +24,7 @@ Mini-language:
 
 var CUSTOMIZABLE_HEADING = /^[/]{2}={2}(.*)$/;
 var UNCUSTOMIZABLE_HEADING = /^[/]{2}-{2}(.*)$/;
+var SUBSECTION_HEADING = /^[/]{2}={3}(.*)$/;
 var SECTION_DOCSTRING = /^[/]{2}#{2}(.*)$/;
 var VAR_ASSIGNMENT = /^(@[a-zA-Z0-9_-]+):[ ]*([^ ;][^;]+);[ ]*$/;
 var VAR_DOCSTRING = /^[/]{2}[*]{2}(.*)$/;
@@ -33,12 +34,23 @@ function Section(heading, customizable) {
   this.id = this.heading.replace(/\s+/g, '-').toLowerCase();
   this.customizable = customizable;
   this.docstring = null;
+  this.subsections = [];
+}
+
+Section.prototype.addSubSection = function (subsection) {
+  this.subsections.push(subsection);
+}
+
+function SubSection(heading) {
+  this.heading = heading.trim();
+  this.id = this.heading.replace(/\s+/g, '-').toLowerCase();
   this.variables = [];
-  this.addVar = function (variable) {
-    this.variables.push(variable);
-  };
 }
 
+SubSection.prototype.addVar = function (variable) {
+  this.variables.push(variable);
+};
+
 function VarDocstring(markdownString) {
   this.html = markdown2html(markdownString);
 }
@@ -78,6 +90,10 @@ Tokenizer.prototype._shift = function () {
   }
   var line = this._lines.shift();
   var match = null;
+  match = SUBSECTION_HEADING.exec(line);
+  if (match !== null) {
+    return new SubSection(match[1]);
+  }
   match = CUSTOMIZABLE_HEADING.exec(line);
   if (match !== null) {
     return new Section(match[1], true);
@@ -146,17 +162,50 @@ Parser.prototype.parseSection = function () {
   else {
     this._tokenizer.unshift(docstring);
   }
-  this.parseVars(section);
+  this.parseSubSections(section);
+
   return section;
 };
 
-Parser.prototype.parseVars = function (section) {
+Parser.prototype.parseSubSections = function (section) {
+  while (true) {
+    var subsection = this.parseSubSection();
+    if (subsection === null) {
+      if (section.subsections.length === 0) {
+        // Presume an implicit initial subsection
+        subsection = new SubSection('');
+        this.parseVars(subsection);
+      }
+      else {
+        break;
+      }
+    }
+    section.addSubSection(subsection);
+  }
+
+  if (section.subsections.length === 1 && !(section.subsections[0].heading) && section.subsections[0].variables.length === 0) {
+    // Ignore lone empty implicit subsection
+    section.subsections = [];
+  }
+};
+
+Parser.prototype.parseSubSection = function () {
+  var subsection = this._tokenizer.shift();
+  if (subsection instanceof SubSection) {
+    this.parseVars(subsection);
+    return subsection;
+  }
+  this._tokenizer.unshift(subsection);
+  return null;
+};
+
+Parser.prototype.parseVars = function (subsection) {
   while (true) {
     var variable = this.parseVar();
     if (variable === null) {
       return;
     }
-    section.addVar(variable);
+    subsection.addVar(variable);
   }
 };
 
index 244b2309c4912e0df534ec3de59f7947399f134d..2bb443a6ca53ba88d6c4a2ea4a0d512e300c1136 100644 (file)
 //
 //##
 
-//== Shared nav styles
+//=== Shared nav styles
 @nav-link-padding:                          10px 15px;
 @nav-link-hover-bg:                         @gray-lighter;