http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
----------------------------------------------------------------------
diff --git 
a/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf 
b/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000..1413fc6
Binary files /dev/null and 
b/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf differ

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
----------------------------------------------------------------------
diff --git 
a/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff 
b/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000..9e61285
Binary files /dev/null and 
b/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff differ

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2
----------------------------------------------------------------------
diff --git 
a/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 
b/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000..64539b5
Binary files /dev/null and 
b/ui/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 differ

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/grunt/.jshintrc
----------------------------------------------------------------------
diff --git a/ui/bower_components/bootstrap/grunt/.jshintrc 
b/ui/bower_components/bootstrap/grunt/.jshintrc
new file mode 100644
index 0000000..0ea0495
--- /dev/null
+++ b/ui/bower_components/bootstrap/grunt/.jshintrc
@@ -0,0 +1,7 @@
+{
+  "extends" : "../js/.jshintrc",
+  "asi"     : false,
+  "browser" : false,
+  "es3"     : false,
+  "node"    : true
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/grunt/bs-commonjs-generator.js
----------------------------------------------------------------------
diff --git a/ui/bower_components/bootstrap/grunt/bs-commonjs-generator.js 
b/ui/bower_components/bootstrap/grunt/bs-commonjs-generator.js
new file mode 100644
index 0000000..0b4ebbf
--- /dev/null
+++ b/ui/bower_components/bootstrap/grunt/bs-commonjs-generator.js
@@ -0,0 +1,30 @@
+/*!
+ * Bootstrap Grunt task for the CommonJS module generation
+ * http://getbootstrap.com
+ * Copyright 2014-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+
+var COMMONJS_BANNER = '// This file is autogenerated via the `commonjs` Grunt 
task. You can require() this file in a CommonJS environment.\n';
+
+module.exports = function generateCommonJSModule(grunt, srcFiles, 
destFilepath) {
+  var destDir = path.dirname(destFilepath);
+
+  function srcPathToDestRequire(srcFilepath) {
+    var requirePath = path.relative(destDir, srcFilepath).replace(/\\/g, '/');
+    return 'require(\'' + requirePath + '\')';
+  }
+
+  var moduleOutputJs = COMMONJS_BANNER + 
srcFiles.map(srcPathToDestRequire).join('\n');
+  try {
+    fs.writeFileSync(destFilepath, moduleOutputJs);
+  } catch (err) {
+    grunt.fail.warn(err);
+  }
+  grunt.log.writeln('File ' + destFilepath.cyan + ' created.');
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js
----------------------------------------------------------------------
diff --git 
a/ui/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js 
b/ui/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js
new file mode 100644
index 0000000..af2a82e
--- /dev/null
+++ b/ui/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js
@@ -0,0 +1,42 @@
+/*!
+ * Bootstrap Grunt task for Glyphicons data generation
+ * http://getbootstrap.com
+ * Copyright 2014-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+'use strict';
+
+var fs = require('fs');
+
+module.exports = function generateGlyphiconsData(grunt) {
+  // Pass encoding, utf8, so `readFileSync` will return a string instead of a
+  // buffer
+  var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8');
+  var glyphiconsLines = glyphiconsFile.split('\n');
+
+  // Use any line that starts with ".glyphicon-" and capture the class name
+  var iconClassName = /^\.(glyphicon-[a-zA-Z0-9-]+)/;
+  var glyphiconsData = '# This file is generated via Grunt task. **Do not edit 
directly.**\n' +
+                       '# See the \'build-glyphicons-data\' task in 
Gruntfile.js.\n\n';
+  var glyphiconsYml = 'docs/_data/glyphicons.yml';
+  for (var i = 0, len = glyphiconsLines.length; i < len; i++) {
+    var match = glyphiconsLines[i].match(iconClassName);
+
+    if (match !== null) {
+      glyphiconsData += '- ' + match[1] + '\n';
+    }
+  }
+
+  // Create the `_data` directory if it doesn't already exist
+  if (!fs.existsSync('docs/_data')) {
+    fs.mkdirSync('docs/_data');
+  }
+
+  try {
+    fs.writeFileSync(glyphiconsYml, glyphiconsData);
+  } catch (err) {
+    grunt.fail.warn(err);
+  }
+  grunt.log.writeln('File ' + glyphiconsYml.cyan + ' created.');
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/grunt/bs-lessdoc-parser.js
----------------------------------------------------------------------
diff --git a/ui/bower_components/bootstrap/grunt/bs-lessdoc-parser.js 
b/ui/bower_components/bootstrap/grunt/bs-lessdoc-parser.js
new file mode 100644
index 0000000..5a9ed2b
--- /dev/null
+++ b/ui/bower_components/bootstrap/grunt/bs-lessdoc-parser.js
@@ -0,0 +1,237 @@
+/*!
+ * Bootstrap Grunt task for parsing Less docstrings
+ * http://getbootstrap.com
+ * Copyright 2014-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+'use strict';
+
+var Markdown = require('markdown-it');
+
+function markdown2html(markdownString) {
+  var md = new Markdown();
+
+  // the slice removes the <p>...</p> wrapper output by Markdown processor
+  return md.render(markdownString.trim()).slice(3, -5);
+}
+
+
+/*
+Mini-language:
+  //== This is a normal heading, which starts a section. Sections group 
variables together.
+  //## Optional description for the heading
+
+  //=== This is a subheading.
+
+  //** Optional description for the following variable. You **can** use 
Markdown in descriptions to discuss `<html>` stuff.
+  @foo: #fff;
+
+  //-- This is a heading for a section whose variables shouldn't be 
customizable
+
+  All other lines are ignored completely.
+*/
+
+
+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}(.+)$/;
+
+function Section(heading, customizable) {
+  this.heading = heading.trim();
+  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 = [];
+}
+
+SubSection.prototype.addVar = function (variable) {
+  this.variables.push(variable);
+};
+
+function VarDocstring(markdownString) {
+  this.html = markdown2html(markdownString);
+}
+
+function SectionDocstring(markdownString) {
+  this.html = markdown2html(markdownString);
+}
+
+function Variable(name, defaultValue) {
+  this.name = name;
+  this.defaultValue = defaultValue;
+  this.docstring = null;
+}
+
+function Tokenizer(fileContent) {
+  this._lines = fileContent.split('\n');
+  this._next = undefined;
+}
+
+Tokenizer.prototype.unshift = function (token) {
+  if (this._next !== undefined) {
+    throw new Error('Attempted to unshift twice!');
+  }
+  this._next = token;
+};
+
+Tokenizer.prototype._shift = function () {
+  // returning null signals EOF
+  // returning undefined means the line was ignored
+  if (this._next !== undefined) {
+    var result = this._next;
+    this._next = undefined;
+    return result;
+  }
+  if (this._lines.length <= 0) {
+    return null;
+  }
+  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);
+  }
+  match = UNCUSTOMIZABLE_HEADING.exec(line);
+  if (match !== null) {
+    return new Section(match[1], false);
+  }
+  match = SECTION_DOCSTRING.exec(line);
+  if (match !== null) {
+    return new SectionDocstring(match[1]);
+  }
+  match = VAR_DOCSTRING.exec(line);
+  if (match !== null) {
+    return new VarDocstring(match[1]);
+  }
+  var commentStart = line.lastIndexOf('//');
+  var varLine = commentStart === -1 ? line : line.slice(0, commentStart);
+  match = VAR_ASSIGNMENT.exec(varLine);
+  if (match !== null) {
+    return new Variable(match[1], match[2]);
+  }
+  return undefined;
+};
+
+Tokenizer.prototype.shift = function () {
+  while (true) {
+    var result = this._shift();
+    if (result === undefined) {
+      continue;
+    }
+    return result;
+  }
+};
+
+function Parser(fileContent) {
+  this._tokenizer = new Tokenizer(fileContent);
+}
+
+Parser.prototype.parseFile = function () {
+  var sections = [];
+  while (true) {
+    var section = this.parseSection();
+    if (section === null) {
+      if (this._tokenizer.shift() !== null) {
+        throw new Error('Unexpected unparsed section of file remains!');
+      }
+      return sections;
+    }
+    sections.push(section);
+  }
+};
+
+Parser.prototype.parseSection = function () {
+  var section = this._tokenizer.shift();
+  if (section === null) {
+    return null;
+  }
+  if (!(section instanceof Section)) {
+    throw new Error('Expected section heading; got: ' + 
JSON.stringify(section));
+  }
+  var docstring = this._tokenizer.shift();
+  if (docstring instanceof SectionDocstring) {
+    section.docstring = docstring;
+  } else {
+    this._tokenizer.unshift(docstring);
+  }
+  this.parseSubSections(section);
+
+  return 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;
+    }
+    subsection.addVar(variable);
+  }
+};
+
+Parser.prototype.parseVar = function () {
+  var docstring = this._tokenizer.shift();
+  if (!(docstring instanceof VarDocstring)) {
+    this._tokenizer.unshift(docstring);
+    docstring = null;
+  }
+  var variable = this._tokenizer.shift();
+  if (variable instanceof Variable) {
+    variable.docstring = docstring;
+    return variable;
+  }
+  this._tokenizer.unshift(variable);
+  return null;
+};
+
+
+module.exports = Parser;

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/grunt/bs-raw-files-generator.js
----------------------------------------------------------------------
diff --git a/ui/bower_components/bootstrap/grunt/bs-raw-files-generator.js 
b/ui/bower_components/bootstrap/grunt/bs-raw-files-generator.js
new file mode 100644
index 0000000..39224e4
--- /dev/null
+++ b/ui/bower_components/bootstrap/grunt/bs-raw-files-generator.js
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap Grunt task for generating raw-files.min.js for the Customizer
+ * http://getbootstrap.com
+ * Copyright 2014-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+'use strict';
+
+var fs = require('fs');
+var btoa = require('btoa');
+var glob = require('glob');
+
+function getFiles(type) {
+  var files = {};
+  var recursive = type === 'less';
+  var globExpr = recursive ? '/**/*' : '/*';
+  glob.sync(type + globExpr)
+    .filter(function (path) {
+      return type === 'fonts' ? true : new RegExp('\\.' + type + 
'$').test(path);
+    })
+    .forEach(function (fullPath) {
+      var relativePath = fullPath.replace(/^[^/]+\//, '');
+      files[relativePath] = type === 'fonts' ? btoa(fs.readFileSync(fullPath)) 
: fs.readFileSync(fullPath, 'utf8');
+    });
+  return 'var __' + type + ' = ' + JSON.stringify(files) + '\n';
+}
+
+module.exports = function generateRawFilesJs(grunt, banner) {
+  if (!banner) {
+    banner = '';
+  }
+  var dirs = ['js', 'less', 'fonts'];
+  var files = banner + dirs.map(getFiles).reduce(function (combined, file) {
+    return combined + file;
+  }, '');
+  var rawFilesJs = 'docs/assets/js/raw-files.min.js';
+  try {
+    fs.writeFileSync(rawFilesJs, files);
+  } catch (err) {
+    grunt.fail.warn(err);
+  }
+  grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.');
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/grunt/change-version.js
----------------------------------------------------------------------
diff --git a/ui/bower_components/bootstrap/grunt/change-version.js 
b/ui/bower_components/bootstrap/grunt/change-version.js
new file mode 100755
index 0000000..aa155fc
--- /dev/null
+++ b/ui/bower_components/bootstrap/grunt/change-version.js
@@ -0,0 +1,109 @@
+#!/usr/bin/env node
+'use strict';
+
+/* globals Set */
+/*!
+ * Script to update version number references in the project.
+ * Copyright 2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+var fs = require('fs');
+var path = require('path');
+var sh = require('shelljs');
+sh.config.fatal = true;
+var sed = sh.sed;
+
+// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
+RegExp.quote = function (string) {
+  return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
+};
+RegExp.quoteReplacement = function (string) {
+  return string.replace(/[$]/g, '$$');
+};
+
+var DRY_RUN = false;
+
+function walkAsync(directory, excludedDirectories, fileCallback, errback) {
+  if (excludedDirectories.has(path.parse(directory).base)) {
+    return;
+  }
+  fs.readdir(directory, function (err, names) {
+    if (err) {
+      errback(err);
+      return;
+    }
+    names.forEach(function (name) {
+      var filepath = path.join(directory, name);
+      fs.lstat(filepath, function (err, stats) {
+        if (err) {
+          process.nextTick(errback, err);
+          return;
+        }
+        if (stats.isSymbolicLink()) {
+          return;
+        }
+        else if (stats.isDirectory()) {
+          process.nextTick(walkAsync, filepath, excludedDirectories, 
fileCallback, errback);
+        }
+        else if (stats.isFile()) {
+          process.nextTick(fileCallback, filepath);
+        }
+      });
+    });
+  });
+}
+
+function replaceRecursively(directory, excludedDirectories, allowedExtensions, 
original, replacement) {
+  original = new RegExp(RegExp.quote(original), 'g');
+  replacement = RegExp.quoteReplacement(replacement);
+  var updateFile = !DRY_RUN ? function (filepath) {
+    if (allowedExtensions.has(path.parse(filepath).ext)) {
+      sed('-i', original, replacement, filepath);
+    }
+  } : function (filepath) {
+    if (allowedExtensions.has(path.parse(filepath).ext)) {
+      console.log('FILE: ' + filepath);
+    }
+    else {
+      console.log('EXCLUDED:' + filepath);
+    }
+  };
+  walkAsync(directory, excludedDirectories, updateFile, function (err) {
+    console.error('ERROR while traversing directory!:');
+    console.error(err);
+    process.exit(1);
+  });
+}
+
+function main(args) {
+  if (args.length !== 2) {
+    console.error('USAGE: change-version old_version new_version');
+    console.error('Got arguments:', args);
+    process.exit(1);
+  }
+  var oldVersion = args[0];
+  var newVersion = args[1];
+  var EXCLUDED_DIRS = new Set([
+    '.git',
+    'node_modules',
+    'vendor'
+  ]);
+  var INCLUDED_EXTENSIONS = new Set([
+    // This extension whitelist is how we avoid modifying binary files
+    '',
+    '.css',
+    '.html',
+    '.js',
+    '.json',
+    '.less',
+    '.md',
+    '.nuspec',
+    '.ps1',
+    '.scss',
+    '.txt',
+    '.yml'
+  ]);
+  replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, 
newVersion);
+}
+
+main(process.argv.slice(2));

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/bc1ffbcd/ui/bower_components/bootstrap/grunt/configBridge.json
----------------------------------------------------------------------
diff --git a/ui/bower_components/bootstrap/grunt/configBridge.json 
b/ui/bower_components/bootstrap/grunt/configBridge.json
new file mode 100644
index 0000000..9d1a142
--- /dev/null
+++ b/ui/bower_components/bootstrap/grunt/configBridge.json
@@ -0,0 +1,46 @@
+{
+  "paths": {
+    "customizerJs": [
+      "../assets/js/vendor/autoprefixer.js",
+      "../assets/js/vendor/less.min.js",
+      "../assets/js/vendor/jszip.min.js",
+      "../assets/js/vendor/uglify.min.js",
+      "../assets/js/vendor/Blob.js",
+      "../assets/js/vendor/FileSaver.js",
+      "../assets/js/raw-files.min.js",
+      "../assets/js/src/customizer.js"
+    ],
+    "docsJs": [
+      "../assets/js/vendor/holder.min.js",
+      "../assets/js/vendor/ZeroClipboard.min.js",
+      "../assets/js/vendor/anchor.min.js",
+      "../assets/js/src/application.js"
+    ]
+  },
+  "config": {
+    "autoprefixerBrowsers": [
+      "Android 2.3",
+      "Android >= 4",
+      "Chrome >= 20",
+      "Firefox >= 24",
+      "Explorer >= 8",
+      "iOS >= 6",
+      "Opera >= 12",
+      "Safari >= 6"
+    ],
+    "jqueryCheck": [
+      "if (typeof jQuery === 'undefined') {",
+      "  throw new Error('Bootstrap\\'s JavaScript requires jQuery')",
+      "}\n"
+    ],
+    "jqueryVersionCheck": [
+      "+function ($) {",
+      "  'use strict';",
+      "  var version = $.fn.jquery.split(' ')[0].split('.')",
+      "  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && 
version[1] == 9 && version[2] < 1) || (version[0] > 3)) {",
+      "    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 
1.9.1 or higher, but lower than version 4')",
+      "  }",
+      "}(jQuery);\n\n"
+    ]
+  }
+}

Reply via email to