diff options
| author | Matias Niemelä | 2013-05-16 14:55:56 -0400 | 
|---|---|---|
| committer | Misko Hevery | 2013-05-20 14:27:34 -0700 | 
| commit | 2f571a9c830df814902fbdda1e9240b36bb64e3e (patch) | |
| tree | 87c330af480442b4c7eb52ff8a443db192043e2c /docs/components | |
| parent | 9f4f5937112655a9881d3281da8e72035bc8b180 (diff) | |
| download | angular.js-2f571a9c830df814902fbdda1e9240b36bb64e3e.tar.bz2 | |
chore(ngdocs): move angular-bootstrap.js to be generated only inside the docs and remove from the build process
Diffstat (limited to 'docs/components')
| -rw-r--r-- | docs/components/angular-bootstrap.js | 227 | ||||
| -rw-r--r-- | docs/components/bootstrap/bootstrap-prettify.js | 289 | ||||
| -rw-r--r-- | docs/components/bootstrap/bootstrap.js | 208 | ||||
| -rw-r--r-- | docs/components/bootstrap/css/bootstrap.css | 3990 | ||||
| -rw-r--r-- | docs/components/bootstrap/google-prettify/prettify.css | 30 | ||||
| -rw-r--r-- | docs/components/bootstrap/google-prettify/prettify.js | 1538 | 
6 files changed, 6282 insertions, 0 deletions
| diff --git a/docs/components/angular-bootstrap.js b/docs/components/angular-bootstrap.js new file mode 100644 index 00000000..b55bd475 --- /dev/null +++ b/docs/components/angular-bootstrap.js @@ -0,0 +1,227 @@ + +/*! + * $script.js Async loader & dependency manager + * https://github.com/ded/script.js + * (c) Dustin Diaz, Jacob Thornton 2011 + * License: MIT + */ +(function (name, definition, context) { +  if (typeof context['module'] != 'undefined' && context['module']['exports']) context['module']['exports'] = definition() +  else if (typeof context['define'] != 'undefined' && context['define'] == 'function' && context['define']['amd']) define(name, definition) +  else context[name] = definition() +})('$script', function () { +  var doc = document +    , head = doc.getElementsByTagName('head')[0] +    , validBase = /^https?:\/\// +    , list = {}, ids = {}, delay = {}, scriptpath +    , scripts = {}, s = 'string', f = false +    , push = 'push', domContentLoaded = 'DOMContentLoaded', readyState = 'readyState' +    , addEventListener = 'addEventListener', onreadystatechange = 'onreadystatechange' + +  function every(ar, fn) { +    for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f +    return 1 +  } +  function each(ar, fn) { +    every(ar, function(el) { +      return !fn(el) +    }) +  } + +  if (!doc[readyState] && doc[addEventListener]) { +    doc[addEventListener](domContentLoaded, function fn() { +      doc.removeEventListener(domContentLoaded, fn, f) +      doc[readyState] = 'complete' +    }, f) +    doc[readyState] = 'loading' +  } + +  function $script(paths, idOrDone, optDone) { +    paths = paths[push] ? paths : [paths] +    var idOrDoneIsDone = idOrDone && idOrDone.call +      , done = idOrDoneIsDone ? idOrDone : optDone +      , id = idOrDoneIsDone ? paths.join('') : idOrDone +      , queue = paths.length +    function loopFn(item) { +      return item.call ? item() : list[item] +    } +    function callback() { +      if (!--queue) { +        list[id] = 1 +        done && done() +        for (var dset in delay) { +          every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = []) +        } +      } +    } +    setTimeout(function () { +      each(paths, function (path) { +        if (scripts[path]) { +          id && (ids[id] = 1) +          return scripts[path] == 2 && callback() +        } +        scripts[path] = 1 +        id && (ids[id] = 1) +        create(!validBase.test(path) && scriptpath ? scriptpath + path + '.js' : path, callback) +      }) +    }, 0) +    return $script +  } + +  function create(path, fn) { +    var el = doc.createElement('script') +      , loaded = f +    el.onload = el.onerror = el[onreadystatechange] = function () { +      if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return; +      el.onload = el[onreadystatechange] = null +      loaded = 1 +      scripts[path] = 2 +      fn() +    } +    el.async = 1 +    el.src = path +    head.insertBefore(el, head.firstChild) +  } + +  $script.get = create + +  $script.order = function (scripts, id, done) { +    (function callback(s) { +      s = scripts.shift() +      if (!scripts.length) $script(s, id, done) +      else $script(s, callback) +    }()) +  } + +  $script.path = function (p) { +    scriptpath = p +  } +  $script.ready = function (deps, ready, req) { +    deps = deps[push] ? deps : [deps] +    var missing = []; +    !each(deps, function (dep) { +      list[dep] || missing[push](dep); +    }) && every(deps, function (dep) {return list[dep]}) ? +      ready() : !function (key) { +      delay[key] = delay[key] || [] +      delay[key][push](ready) +      req && req(missing) +    }(deps.join('|')) +    return $script +  } +  return $script +}, this); + + +/** + * @license AngularJS + * (c) 2010-2012 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, document) { + +  var filename = /^(.*\/)angular-bootstrap.js(#.*)?$/, +      scripts = document.getElementsByTagName("SCRIPT"), +      serverPath, +      match, +      globalVars = {}, +      IGNORE = { +        innerHeight: true, innerWidth: true, +        onkeyup: true, onkeydown: true, onresize: true, +        event: true, frames: true, external: true, +        sessionStorage: true, clipboardData: true, localStorage: true}; + +  for(var j = 0; j < scripts.length; j++) { +    match = (scripts[j].src || "").match(filename); +    if (match) { +      serverPath = match[1]; +    } +  } + +  document.write('<link rel="stylesheet" type="text/css" href="' + serverPath + '../css/angular.css"/>'); + +  $script.path(serverPath+'../'); +  $script('angularFiles', function() { +    var index = 0, +        scripts = angularFiles.angularSrc; + +    try { delete window.angularFiles; } catch(e) { window.angularFiles = undefined; } +    // initialize the window property cache +    for (var prop in window) { +      if (IGNORE[prop] || prop.match(/^moz[A-Z]/)) { //skip special variables which keep on changing +        continue; +      } +      try { +        globalVars[key(prop)] = window[prop]; +      } catch(e) {} //ignore properties that throw exception when accessed (common in FF) +    } + +    (function next() { +      if (index < scripts.length) { +        var file = scripts[index++], +            last = index == scripts.length, +            name = last ? 'angular' : file; + +        $script(file.replace(/\.js$/, ''), name, function() { +          angularClobberTest(file); +          next(); +        }); +      } else { +        // empty the cache to prevent mem leaks +        globalVars = {}; + +        bindJQuery(); +        publishExternalAPI(window.angular); + +        angularInit(document, angular.bootstrap); +      } +    })(); +  }); + +  function key(prop) { +    return "ng-clobber_" + prop; +  } + +  function angularClobberTest(file) { +    var varKey, prop, +        clobbered = {}; + +    for (prop in window) { +      varKey = key(prop); + +      if (IGNORE[prop] || prop.match(/^moz[A-Z]/)) { //skip special variables which keep on changing +        continue; +      } else if (!globalVars.hasOwnProperty(varKey)) { +        //console.log('new global variable found: ', prop); +        try { +          globalVars[varKey] = window[prop]; +        } catch(e) {} //ignore properties that throw exception when accessed (common in FF) +      } else if (globalVars[varKey] !== window[prop] && !isActuallyNaN(window[prop]) && prop != 'jqLite') { +        clobbered[prop] = true; +        console.error("Global variable clobbered by script " + file + "! Variable name: " + prop); +        globalVars[varKey] = window[prop]; +      } +    } +    for (varKey in globalVars) { +      prop = varKey.substr(11); +      if (prop === 'event' || prop.match(/^moz[A-Z]/)) { //skip special variables which keep on changing +        continue; +      } +      if (!clobbered[prop] && +          prop != 'event' && +          prop != 'jqLite' && +          !isActuallyNaN(globalVars[varKey]) && +          globalVars[varKey] !== window[prop]) { + +        delete globalVars[varKey]; +        console.warn("Global variable unexpectedly deleted in script " + file + "! " + +                     "Variable name: " + prop); +      } +    } + +    function isActuallyNaN(val) { +      return (typeof val === 'number') && isNaN(val); +    } +  } +})(window, document); + diff --git a/docs/components/bootstrap/bootstrap-prettify.js b/docs/components/bootstrap/bootstrap-prettify.js new file mode 100644 index 00000000..a9e61d4f --- /dev/null +++ b/docs/components/bootstrap/bootstrap-prettify.js @@ -0,0 +1,289 @@ +'use strict'; + +var directive = {}; +var service = { value: {} }; + +var DEPENDENCIES = { +  'angular.js': 'http://code.angularjs.org/' + angular.version.full + '/angular.min.js', +  'angular-resource.js': 'http://code.angularjs.org/' + angular.version.full + '/angular-resource.min.js', +  'angular-sanitize.js': 'http://code.angularjs.org/' + angular.version.full + '/angular-sanitize.min.js', +  'angular-cookies.js': 'http://code.angularjs.org/' + angular.version.full + '/angular-cookies.min.js' +}; + + +function escape(text) { +  return text. +    replace(/\&/g, '&'). +    replace(/\</g, '<'). +    replace(/\>/g, '>'). +    replace(/"/g, '"'); +} + +/** + * http://stackoverflow.com/questions/451486/pre-tag-loses-line-breaks-when-setting-innerhtml-in-ie + * http://stackoverflow.com/questions/195363/inserting-a-newline-into-a-pre-tag-ie-javascript + */ +function setHtmlIe8SafeWay(element, html) { +  var newElement = angular.element('<pre>' + html + '</pre>'); + +  element.html(''); +  element.append(newElement.contents()); +  return element; +} + + +directive.jsFiddle = function(getEmbeddedTemplate, escape, script) { +  return { +    terminal: true, +    link: function(scope, element, attr) { +      var name = '', +        stylesheet = '<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">\n', +        fields = { +          html: '', +          css: '', +          js: '' +        }; + +      angular.forEach(attr.jsFiddle.split(' '), function(file, index) { +        var fileType = file.split('.')[1]; + +        if (fileType == 'html') { +          if (index == 0) { +            fields[fileType] += +              '<div ng-app' + (attr.module ? '="' + attr.module + '"' : '') + '>\n' + +                getEmbeddedTemplate(file, 2); +          } else { +            fields[fileType] += '\n\n\n  <!-- CACHE FILE: ' + file + ' -->\n' + +              '  <script type="text/ng-template" id="' + file + '">\n' + +              getEmbeddedTemplate(file, 4) + +              '  </script>\n'; +          } +        } else { +          fields[fileType] += getEmbeddedTemplate(file) + '\n'; +        } +      }); + +      fields.html += '</div>\n'; + +      setHtmlIe8SafeWay(element, +        '<form class="jsfiddle" method="post" action="http://jsfiddle.net/api/post/library/pure/" target="_blank">' + +          hiddenField('title', 'AngularJS Example: ' + name) + +          hiddenField('css', '</style> <!-- Ugly Hack due to jsFiddle issue: http://goo.gl/BUfGZ --> \n' + +            stylesheet + +            script.angular + +            (attr.resource ? script.resource : '') + +            '<style>\n' + +            fields.css) + +          hiddenField('html', fields.html) + +          hiddenField('js', fields.js) + +          '<button class="btn btn-primary"><i class="icon-white icon-pencil"></i> Edit Me</button>' + +          '</form>'); + +      function hiddenField(name, value) { +        return '<input type="hidden" name="' +  name + '" value="' + escape(value) + '">'; +      } +    } +  } +}; + + +directive.code = function() { +  return {restrict: 'E', terminal: true}; +}; + + +directive.prettyprint = ['reindentCode', function(reindentCode) { +  return { +    restrict: 'C', +    terminal: true, +    compile: function(element) { +      element.html(window.prettyPrintOne(reindentCode(element.html()), undefined, true)); +    } +  }; +}]; + + +directive.ngSetText = ['getEmbeddedTemplate', function(getEmbeddedTemplate) { +  return { +    restrict: 'CA', +    priority: 10, +    compile: function(element, attr) { +      setHtmlIe8SafeWay(element, escape(getEmbeddedTemplate(attr.ngSetText))); +    } +  } +}] + + +directive.ngHtmlWrap = ['reindentCode', 'templateMerge', function(reindentCode, templateMerge) { +  return { +    compile: function(element, attr) { +      var properties = { +            head: '', +            module: '', +            body: element.text() +          }, +        html = "<!doctype html>\n<html ng-app{{module}}>\n  <head>\n{{head:4}}  </head>\n  <body>\n{{body:4}}  </body>\n</html>"; + +      angular.forEach((attr.ngHtmlWrap || '').split(' '), function(dep) { +        if (!dep) return; +        dep = DEPENDENCIES[dep] || dep; + +        var ext = dep.split(/\./).pop(); + +        if (ext == 'css') { +          properties.head += '<link rel="stylesheet" href="' + dep + '" type="text/css">\n'; +        } else if(ext == 'js') { +          properties.head += '<script src="' + dep + '"></script>\n'; +        } else { +          properties.module = '="' + dep + '"'; +        } +      }); + +      setHtmlIe8SafeWay(element, escape(templateMerge(html, properties))); +    } +  } +}]; + + +directive.ngSetHtml = ['getEmbeddedTemplate', function(getEmbeddedTemplate) { +  return { +    restrict: 'CA', +    priority: 10, +    compile: function(element, attr) { +      setHtmlIe8SafeWay(element, getEmbeddedTemplate(attr.ngSetHtml)); +    } +  } +}]; + + +directive.ngEvalJavascript = ['getEmbeddedTemplate', function(getEmbeddedTemplate) { +  return { +    compile: function (element, attr) { +      var script = getEmbeddedTemplate(attr.ngEvalJavascript); + +      try { +        if (window.execScript) { // IE +          window.execScript(script || '""'); // IE complains when evaling empty string +        } else { +          window.eval(script); +        } +      } catch (e) { +        if (window.console) { +          window.console.log(script, '\n', e); +        } else { +          window.alert(e); +        } +      } +    } +  }; +}]; + + +directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', '$sniffer', +                function($templateCache,   $browser,  docsRootScope, $location,   $sniffer) { +  return { +    terminal: true, +    link: function(scope, element, attrs) { +      var modules = []; + +      modules.push(['$provide', function($provide) { +        $provide.value('$templateCache', $templateCache); +        $provide.value('$anchorScroll', angular.noop); +        $provide.value('$browser', $browser); +        $provide.value('$sniffer', $sniffer); +        $provide.provider('$location', function() { +          this.$get = ['$rootScope', function($rootScope) { +            docsRootScope.$on('$locationChangeSuccess', function(event, oldUrl, newUrl) { +              $rootScope.$broadcast('$locationChangeSuccess', oldUrl, newUrl); +            }); +            return $location; +          }]; +          this.html5Mode = angular.noop; +        }); +        $provide.decorator('$timeout', ['$rootScope', '$delegate', function($rootScope, $delegate) { +          return angular.extend(function(fn, delay) { +            if (delay && delay > 50) { +              return setTimeout(function() { +                $rootScope.$apply(fn); +              }, delay); +            } else { +              return $delegate.apply(this, arguments); +            } +          }, $delegate); +        }]); +        $provide.decorator('$rootScope', ['$delegate', function(embedRootScope) { +          docsRootScope.$watch(function embedRootScopeDigestWatch() { +            embedRootScope.$digest(); +          }); +          return embedRootScope; +        }]); +      }]); +      if (attrs.ngEmbedApp)  modules.push(attrs.ngEmbedApp); + +      element.bind('click', function(event) { +        if (event.target.attributes.getNamedItem('ng-click')) { +          event.preventDefault(); +        } +      }); + +      angular.bootstrap(element, modules); +    } +  }; +}]; + +service.reindentCode = function() { +  return function (text, spaces) { +    if (!text) return text; +    var lines = text.split(/\r?\n/); +    var prefix = '      '.substr(0, spaces || 0); +    var i; + +    // remove any leading blank lines +    while (lines.length && lines[0].match(/^\s*$/)) lines.shift(); +    // remove any trailing blank lines +    while (lines.length && lines[lines.length - 1].match(/^\s*$/)) lines.pop(); +    var minIndent = 999; +    for (i = 0; i < lines.length; i++) { +      var line = lines[0]; +      var reindentCode = line.match(/^\s*/)[0]; +      if (reindentCode !== line && reindentCode.length < minIndent) { +        minIndent = reindentCode.length; +      } +    } + +    for (i = 0; i < lines.length; i++) { +      lines[i] = prefix + lines[i].substring(minIndent); +    } +    lines.push(''); +    return lines.join('\n'); +  } +}; + +service.templateMerge = ['reindentCode', function(indentCode) { +  return function(template, properties) { +    return template.replace(/\{\{(\w+)(?:\:(\d+))?\}\}/g, function(_, key, indent) { +      var value = properties[key]; + +      if (indent) { +        value = indentCode(value, indent); +      } + +      return value == undefined ? '' : value; +    }); +  }; +}]; + +service.getEmbeddedTemplate = ['reindentCode', function(reindentCode) { +  return function (id) { +    var element = document.getElementById(id); + +    if (!element) { +      return null; +    } + +    return reindentCode(angular.element(element).html(), 0); +  } +}]; + + +angular.module('bootstrapPrettify', []).directive(directive).factory(service); diff --git a/docs/components/bootstrap/bootstrap.js b/docs/components/bootstrap/bootstrap.js new file mode 100644 index 00000000..91d6590e --- /dev/null +++ b/docs/components/bootstrap/bootstrap.js @@ -0,0 +1,208 @@ +'use strict'; + +var directive = {}; + +directive.dropdownToggle = +          ['$document', '$location', '$window', +  function ($document,   $location,   $window) { +    var openElement = null, close; +    return { +      restrict: 'C', +      link: function(scope, element, attrs) { +        scope.$watch(function dropdownTogglePathWatch(){return $location.path();}, function dropdownTogglePathWatchAction() { +          close && close(); +        }); + +        element.parent().bind('click', function(event) { +          close && close(); +        }); + +        element.bind('click', function(event) { +          event.preventDefault(); +          event.stopPropagation(); + +          var iWasOpen = false; + +          if (openElement) { +            iWasOpen = openElement === element; +            close(); +          } + +          if (!iWasOpen){ +            element.parent().addClass('open'); +            openElement = element; + +            close = function (event) { +              event && event.preventDefault(); +              event && event.stopPropagation(); +              $document.unbind('click', close); +              element.parent().removeClass('open'); +              close = null; +              openElement = null; +            } + +            $document.bind('click', close); +          } +        }); +      } +    }; +  }]; + +directive.syntax = function() { +  return { +    restrict: 'A', +    link: function(scope, element, attrs) { +      function makeLink(type, text, link, icon) { +        return '<a href="' + link + '" class="btn syntax-' + type + '" target="_blank" rel="nofollow">' +  +                '<span class="' + icon + '"></span> ' + text + +               '</a>'; +      }; +      var html = '<nav class="syntax-links">'; +      var types = { +        'github' : { +          text : 'View on Github', +          key : 'syntaxGithub', +          icon : 'icon-github' +        }, +        'plunkr' : { +          text : 'View on Plunkr', +          key : 'syntaxPlunkr', +          icon : 'icon-arrow-down' +        }, +        'jsfiddle' : { +          text : 'View on JSFiddle', +          key : 'syntaxFiddle', +          icon : 'icon-cloud' +        } +      }; +      for(var type in types) { +        var data = types[type]; +        var link = attrs[data.key]; +        if(link) { +          html += makeLink(type, data.text, link, data.icon); +        } +      }; +      html += '</nav>'; +      var nav = angular.element(html); +      var node = element[0]; +      var par = node.parentNode; +      par.insertBefore(nav[0], node); +    } +  } +} + +directive.tabbable = function() { +  return { +    restrict: 'C', +    compile: function(element) { +      var navTabs = angular.element('<ul class="nav nav-tabs"></ul>'), +          tabContent = angular.element('<div class="tab-content"></div>'); + +      tabContent.append(element.contents()); +      element.append(navTabs).append(tabContent); +    }, +    controller: ['$scope', '$element', function($scope, $element) { +      var navTabs = $element.contents().eq(0), +          ngModel = $element.controller('ngModel') || {}, +          tabs = [], +          selectedTab; + +      ngModel.$render = function() { +        var $viewValue = this.$viewValue; + +        if (selectedTab ? (selectedTab.value != $viewValue) : $viewValue) { +          if(selectedTab) { +            selectedTab.paneElement.removeClass('active'); +            selectedTab.tabElement.removeClass('active'); +            selectedTab = null; +          } +          if($viewValue) { +            for(var i = 0, ii = tabs.length; i < ii; i++) { +              if ($viewValue == tabs[i].value) { +                selectedTab = tabs[i]; +                break; +              } +            } +            if (selectedTab) { +              selectedTab.paneElement.addClass('active'); +              selectedTab.tabElement.addClass('active'); +            } +          } + +        } +      }; + +      this.addPane = function(element, attr) { +        var li = angular.element('<li><a href></a></li>'), +            a = li.find('a'), +            tab = { +              paneElement: element, +              paneAttrs: attr, +              tabElement: li +            }; + +        tabs.push(tab); + +        attr.$observe('value', update)(); +        attr.$observe('title', function(){ update(); a.text(tab.title); })(); + +        function update() { +          tab.title = attr.title; +          tab.value = attr.value || attr.title; +          if (!ngModel.$setViewValue && (!ngModel.$viewValue || tab == selectedTab)) { +            // we are not part of angular +            ngModel.$viewValue = tab.value; +          } +          ngModel.$render(); +        } + +        navTabs.append(li); +        li.bind('click', function(event) { +          event.preventDefault(); +          event.stopPropagation(); +          if (ngModel.$setViewValue) { +            $scope.$apply(function() { +              ngModel.$setViewValue(tab.value); +              ngModel.$render(); +            }); +          } else { +            // we are not part of angular +            ngModel.$viewValue = tab.value; +            ngModel.$render(); +          } +        }); + +        return function() { +          tab.tabElement.remove(); +          for(var i = 0, ii = tabs.length; i < ii; i++ ) { +            if (tab == tabs[i]) { +              tabs.splice(i, 1); +            } +          } +        }; +      } +    }] +  }; +}; + +directive.table = function() { +  return { +    restrict: 'E', +    link: function(scope, element, attrs) { +      element[0].className = 'table table-bordered table-striped code-table'; +    } +  }; +}; + +directive.tabPane = function() { +  return { +    require: '^tabbable', +    restrict: 'C', +    link: function(scope, element, attrs, tabsCtrl) { +      element.bind('$remove', tabsCtrl.addPane(element, attrs)); +    } +  }; +}; + + +angular.module('bootstrap', []).directive(directive); diff --git a/docs/components/bootstrap/css/bootstrap.css b/docs/components/bootstrap/css/bootstrap.css new file mode 100644 index 00000000..d2e2a6bf --- /dev/null +++ b/docs/components/bootstrap/css/bootstrap.css @@ -0,0 +1,3990 @@ +/*! + * Bootstrap v2.0.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. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { +  display: block; +} +audio, +canvas, +video { +  display: inline-block; +  *display: inline; +  *zoom: 1; +} +audio:not([controls]) { +  display: none; +} +html { +  font-size: 100%; +  -webkit-text-size-adjust: 100%; +  -ms-text-size-adjust: 100%; +} +a:focus { +  outline: thin dotted #333; +  outline: 5px auto -webkit-focus-ring-color; +  outline-offset: -2px; +} +a:hover, +a:active { +  outline: 0; +} +sub, +sup { +  position: relative; +  font-size: 75%; +  line-height: 0; +  vertical-align: baseline; +} +sup { +  top: -0.5em; +} +sub { +  bottom: -0.25em; +} +img { +  height: auto; +  border: 0; +  -ms-interpolation-mode: bicubic; +  vertical-align: middle; +} +button, +input, +select, +textarea { +  margin: 0; +  font-size: 100%; +  vertical-align: middle; +} +button, +input { +  *overflow: visible; +  line-height: normal; +} +button::-moz-focus-inner, +input::-moz-focus-inner { +  padding: 0; +  border: 0; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { +  cursor: pointer; +  -webkit-appearance: button; +} +input[type="search"] { +  -webkit-appearance: textfield; +  -webkit-box-sizing: content-box; +  -moz-box-sizing: content-box; +  box-sizing: content-box; +} +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { +  -webkit-appearance: none; +} +textarea { +  overflow: auto; +  vertical-align: top; +} +.clearfix { +  *zoom: 1; +} +.clearfix:before, +.clearfix:after { +  display: table; +  content: ""; +} +.clearfix:after { +  clear: both; +} +.hide-text { +  overflow: hidden; +  text-indent: 100%; +  white-space: nowrap; +} +.input-block-level { +  display: block; +  width: 100%; +  min-height: 28px; +  /* Make inputs at least the height of their button counterpart */ + +  /* Makes inputs behave like true block-level elements */ + +  -webkit-box-sizing: border-box; +  -moz-box-sizing: border-box; +  -ms-box-sizing: border-box; +  box-sizing: border-box; +} +body { +  margin: 0; +  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +  font-size: 13px; +  line-height: 18px; +  color: #333333; +  background-color: #ffffff; +} +a { +  color: #0088cc; +  text-decoration: none; +} +a:hover { +  color: #005580; +  text-decoration: underline; +} +.row { +  margin-left: -20px; +  *zoom: 1; +} +.row:before, +.row:after { +  display: table; +  content: ""; +} +.row:after { +  clear: both; +} +[class*="span"] { +  float: left; +  margin-left: 20px; +} +.container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { +  width: 940px; +} +.span12 { +  width: 940px; +} +.span11 { +  width: 860px; +} +.span10 { +  width: 780px; +} +.span9 { +  width: 700px; +} +.span8 { +  width: 620px; +} +.span7 { +  width: 540px; +} +.span6 { +  width: 460px; +} +.span5 { +  width: 380px; +} +.span4 { +  width: 300px; +} +.span3 { +  width: 220px; +} +.span2 { +  width: 140px; +} +.span1 { +  width: 60px; +} +.offset12 { +  margin-left: 980px; +} +.offset11 { +  margin-left: 900px; +} +.offset10 { +  margin-left: 820px; +} +.offset9 { +  margin-left: 740px; +} +.offset8 { +  margin-left: 660px; +} +.offset7 { +  margin-left: 580px; +} +.offset6 { +  margin-left: 500px; +} +.offset5 { +  margin-left: 420px; +} +.offset4 { +  margin-left: 340px; +} +.offset3 { +  margin-left: 260px; +} +.offset2 { +  margin-left: 180px; +} +.offset1 { +  margin-left: 100px; +} +.row-fluid { +  width: 100%; +  *zoom: 1; +} +.row-fluid:before, +.row-fluid:after { +  display: table; +  content: ""; +} +.row-fluid:after { +  clear: both; +} +.row-fluid > [class*="span"] { +  float: left; +  margin-left: 2.127659574%; +} +.row-fluid > [class*="span"]:first-child { +  margin-left: 0; +} +.row-fluid > .span12 { +  width: 99.99999998999999%; +} +.row-fluid > .span11 { +  width: 91.489361693%; +} +.row-fluid > .span10 { +  width: 82.97872339599999%; +} +.row-fluid > .span9 { +  width: 74.468085099%; +} +.row-fluid > .span8 { +  width: 65.95744680199999%; +} +.row-fluid > .span7 { +  width: 57.446808505%; +} +.row-fluid > .span6 { +  width: 48.93617020799999%; +} +.row-fluid > .span5 { +  width: 40.425531911%; +} +.row-fluid > .span4 { +  width: 31.914893614%; +} +.row-fluid > .span3 { +  width: 23.404255317%; +} +.row-fluid > .span2 { +  width: 14.89361702%; +} +.row-fluid > .span1 { +  width: 6.382978723%; +} +.container { +  margin-left: auto; +  margin-right: auto; +  *zoom: 1; +} +.container:before, +.container:after { +  display: table; +  content: ""; +} +.container:after { +  clear: both; +} +.container-fluid { +  padding-left: 20px; +  padding-right: 20px; +  *zoom: 1; +} +.container-fluid:before, +.container-fluid:after { +  display: table; +  content: ""; +} +.container-fluid:after { +  clear: both; +} +p { +  margin: 0 0 9px; +  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +  font-size: 13px; +  line-height: 18px; +} +p small { +  font-size: 11px; +  color: #999999; +} +.lead { +  margin-bottom: 18px; +  font-size: 20px; +  font-weight: 200; +  line-height: 27px; +} +h1, +h2, +h3, +h4, +h5, +h6 { +  margin: 0; +  font-family: inherit; +  font-weight: bold; +  color: inherit; +  text-rendering: optimizelegibility; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { +  font-weight: normal; +  color: #999999; +} +h1 { +  font-size: 30px; +  line-height: 36px; +} +h1 small { +  font-size: 18px; +} +h2 { +  font-size: 24px; +  line-height: 36px; +} +h2 small { +  font-size: 18px; +} +h3 { +  line-height: 27px; +  font-size: 18px; +} +h3 small { +  font-size: 14px; +} +h4, +h5, +h6 { +  line-height: 18px; +} +h4 { +  font-size: 14px; +} +h4 small { +  font-size: 12px; +} +h5 { +  font-size: 12px; +} +h6 { +  font-size: 11px; +  color: #999999; +  text-transform: uppercase; +} +.page-header { +  padding-bottom: 17px; +  margin: 18px 0; +  border-bottom: 1px solid #eeeeee; +} +.page-header h1 { +  line-height: 1; +} +ul, +ol { +  padding: 0; +  margin: 0 0 9px 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { +  margin-bottom: 0; +} +ul { +  list-style: disc; +} +ol { +  list-style: decimal; +} +li { +  line-height: 18px; +} +ul.unstyled, +ol.unstyled { +  margin-left: 0; +  list-style: none; +} +dl { +  margin-bottom: 18px; +} +dt, +dd { +  line-height: 18px; +} +dt { +  font-weight: bold; +  line-height: 17px; +} +dd { +  margin-left: 9px; +} +.dl-horizontal dt { +  float: left; +  clear: left; +  width: 120px; +  text-align: right; +} +.dl-horizontal dd { +  margin-left: 130px; +} +hr { +  margin: 18px 0; +  border: 0; +  border-top: 1px solid #eeeeee; +  border-bottom: 1px solid #ffffff; +} +strong { +  font-weight: bold; +} +em { +  font-style: italic; +} +.muted { +  color: #999999; +} +abbr[title] { +  border-bottom: 1px dotted #ddd; +  cursor: help; +} +abbr.initialism { +  font-size: 90%; +  text-transform: uppercase; +} +blockquote { +  padding: 0 0 0 15px; +  margin: 0 0 18px; +  border-left: 5px solid #eeeeee; +} +blockquote p { +  margin-bottom: 0; +  font-size: 16px; +  font-weight: 300; +  line-height: 22.5px; +} +blockquote small { +  display: block; +  line-height: 18px; +  color: #999999; +} +blockquote small:before { +  content: '\2014 \00A0'; +} +blockquote.pull-right { +  float: right; +  padding-left: 0; +  padding-right: 15px; +  border-left: 0; +  border-right: 5px solid #eeeeee; +} +blockquote.pull-right p, +blockquote.pull-right small { +  text-align: right; +} +q:before, +q:after, +blockquote:before, +blockquote:after { +  content: ""; +} +address { +  display: block; +  margin-bottom: 18px; +  line-height: 18px; +  font-style: normal; +} +small { +  font-size: 100%; +} +cite { +  font-style: normal; +} +code, +pre { +  padding: 0 3px 2px; +  font-family: Menlo, Monaco, "Courier New", monospace; +  font-size: 12px; +  color: #333333; +  -webkit-border-radius: 3px; +  -moz-border-radius: 3px; +  border-radius: 3px; +} +code { +  padding: 2px 4px; +  color: #d14; +  background-color: #f7f7f9; +  border: 1px solid #e1e1e8; +} +pre { +  display: block; +  padding: 8.5px; +  margin: 0 0 9px; +  font-size: 12.025px; +  line-height: 18px; +  background-color: #f5f5f5; +  border: 1px solid #ccc; +  border: 1px solid rgba(0, 0, 0, 0.15); +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +  white-space: pre; +  white-space: pre-wrap; +  word-break: break-all; +  word-wrap: break-word; +} +pre.prettyprint { +  margin-bottom: 18px; +} +pre code { +  padding: 0; +  color: inherit; +  background-color: transparent; +  border: 0; +} +.pre-scrollable { +  max-height: 340px; +  overflow-y: scroll; +} +form { +  margin: 0 0 18px; +} +fieldset { +  padding: 0; +  margin: 0; +  border: 0; +} +legend { +  display: block; +  width: 100%; +  padding: 0; +  margin-bottom: 27px; +  font-size: 19.5px; +  line-height: 36px; +  color: #333333; +  border: 0; +  border-bottom: 1px solid #eee; +} +legend small { +  font-size: 13.5px; +  color: #999999; +} +label, +input, +button, +select, +textarea { +  font-size: 13px; +  font-weight: normal; +  line-height: 18px; +} +input, +button, +select, +textarea { +  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +label { +  display: block; +  margin-bottom: 5px; +  color: #333333; +} +input, +textarea, +select, +.uneditable-input { +  display: inline-block; +  width: 210px; +  height: 18px; +  padding: 4px; +  margin-bottom: 9px; +  font-size: 13px; +  line-height: 18px; +  color: #555555; +  border: 1px solid #cccccc; +  -webkit-border-radius: 3px; +  -moz-border-radius: 3px; +  border-radius: 3px; +} +.uneditable-textarea { +  width: auto; +  height: auto; +} +label input, +label textarea, +label select { +  display: block; +} +input[type="image"], +input[type="checkbox"], +input[type="radio"] { +  width: auto; +  height: auto; +  padding: 0; +  margin: 3px 0; +  *margin-top: 0; +  /* IE7 */ + +  line-height: normal; +  cursor: pointer; +  -webkit-border-radius: 0; +  -moz-border-radius: 0; +  border-radius: 0; +  border: 0 \9; +  /* IE9 and down */ + +} +input[type="image"] { +  border: 0; +} +input[type="file"] { +  width: auto; +  padding: initial; +  line-height: initial; +  border: initial; +  background-color: #ffffff; +  background-color: initial; +  -webkit-box-shadow: none; +  -moz-box-shadow: none; +  box-shadow: none; +} +input[type="button"], +input[type="reset"], +input[type="submit"] { +  width: auto; +  height: auto; +} +select, +input[type="file"] { +  height: 28px; +  /* In IE7, the height of the select element cannot be changed by height, only font-size */ + +  *margin-top: 4px; +  /* For IE7, add top margin to align select with labels */ + +  line-height: 28px; +} +input[type="file"] { +  line-height: 18px \9; +} +select { +  width: 220px; +  background-color: #ffffff; +} +select[multiple], +select[size] { +  height: auto; +} +input[type="image"] { +  -webkit-box-shadow: none; +  -moz-box-shadow: none; +  box-shadow: none; +} +textarea { +  height: auto; +} +input[type="hidden"] { +  display: none; +} +.radio, +.checkbox { +  padding-left: 18px; +} +.radio input[type="radio"], +.checkbox input[type="checkbox"] { +  float: left; +  margin-left: -18px; +} +.controls > .radio:first-child, +.controls > .checkbox:first-child { +  padding-top: 5px; +} +.radio.inline, +.checkbox.inline { +  display: inline-block; +  padding-top: 5px; +  margin-bottom: 0; +  vertical-align: middle; +} +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { +  margin-left: 10px; +} +input, +textarea { +  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; +  -moz-transition: border linear 0.2s, box-shadow linear 0.2s; +  -ms-transition: border linear 0.2s, box-shadow linear 0.2s; +  -o-transition: border linear 0.2s, box-shadow linear 0.2s; +  transition: border linear 0.2s, box-shadow linear 0.2s; +} +input:focus, +textarea:focus { +  border-color: rgba(82, 168, 236, 0.8); +  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +  outline: 0; +  outline: thin dotted \9; +  /* IE6-9 */ + +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus, +select:focus { +  -webkit-box-shadow: none; +  -moz-box-shadow: none; +  box-shadow: none; +  outline: thin dotted #333; +  outline: 5px auto -webkit-focus-ring-color; +  outline-offset: -2px; +} +.input-mini { +  width: 60px; +} +.input-small { +  width: 90px; +} +.input-medium { +  width: 150px; +} +.input-large { +  width: 210px; +} +.input-xlarge { +  width: 270px; +} +.input-xxlarge { +  width: 530px; +} +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input { +  float: none; +  margin-left: 0; +} +input, +textarea, +.uneditable-input { +  margin-left: 0; +} +input.span12, textarea.span12, .uneditable-input.span12 { +  width: 930px; +} +input.span11, textarea.span11, .uneditable-input.span11 { +  width: 850px; +} +input.span10, textarea.span10, .uneditable-input.span10 { +  width: 770px; +} +input.span9, textarea.span9, .uneditable-input.span9 { +  width: 690px; +} +input.span8, textarea.span8, .uneditable-input.span8 { +  width: 610px; +} +input.span7, textarea.span7, .uneditable-input.span7 { +  width: 530px; +} +input.span6, textarea.span6, .uneditable-input.span6 { +  width: 450px; +} +input.span5, textarea.span5, .uneditable-input.span5 { +  width: 370px; +} +input.span4, textarea.span4, .uneditable-input.span4 { +  width: 290px; +} +input.span3, textarea.span3, .uneditable-input.span3 { +  width: 210px; +} +input.span2, textarea.span2, .uneditable-input.span2 { +  width: 130px; +} +input.span1, textarea.span1, .uneditable-input.span1 { +  width: 50px; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { +  background-color: #eeeeee; +  border-color: #ddd; +  cursor: not-allowed; +} +.control-group.warning > label, +.control-group.warning .help-block, +.control-group.warning .help-inline { +  color: #c09853; +} +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { +  color: #c09853; +  border-color: #c09853; +} +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { +  border-color: #a47e3c; +  -webkit-box-shadow: 0 0 6px #dbc59e; +  -moz-box-shadow: 0 0 6px #dbc59e; +  box-shadow: 0 0 6px #dbc59e; +} +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { +  color: #c09853; +  background-color: #fcf8e3; +  border-color: #c09853; +} +.control-group.error > label, +.control-group.error .help-block, +.control-group.error .help-inline { +  color: #b94a48; +} +.control-group.error input, +.control-group.error select, +.control-group.error textarea { +  color: #b94a48; +  border-color: #b94a48; +} +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { +  border-color: #953b39; +  -webkit-box-shadow: 0 0 6px #d59392; +  -moz-box-shadow: 0 0 6px #d59392; +  box-shadow: 0 0 6px #d59392; +} +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { +  color: #b94a48; +  background-color: #f2dede; +  border-color: #b94a48; +} +.control-group.success > label, +.control-group.success .help-block, +.control-group.success .help-inline { +  color: #468847; +} +.control-group.success input, +.control-group.success select, +.control-group.success textarea { +  color: #468847; +  border-color: #468847; +} +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { +  border-color: #356635; +  -webkit-box-shadow: 0 0 6px #7aba7b; +  -moz-box-shadow: 0 0 6px #7aba7b; +  box-shadow: 0 0 6px #7aba7b; +} +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { +  color: #468847; +  background-color: #dff0d8; +  border-color: #468847; +} +input:focus:required:invalid, +textarea:focus:required:invalid, +select:focus:required:invalid { +  color: #b94a48; +  border-color: #ee5f5b; +} +input:focus:required:invalid:focus, +textarea:focus:required:invalid:focus, +select:focus:required:invalid:focus { +  border-color: #e9322d; +  -webkit-box-shadow: 0 0 6px #f8b9b7; +  -moz-box-shadow: 0 0 6px #f8b9b7; +  box-shadow: 0 0 6px #f8b9b7; +} +.form-actions { +  padding: 17px 20px 18px; +  margin-top: 18px; +  margin-bottom: 18px; +  background-color: #eeeeee; +  border-top: 1px solid #ddd; +  *zoom: 1; +} +.form-actions:before, +.form-actions:after { +  display: table; +  content: ""; +} +.form-actions:after { +  clear: both; +} +.uneditable-input { +  display: block; +  background-color: #ffffff; +  border-color: #eee; +  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +  cursor: not-allowed; +} +:-moz-placeholder { +  color: #999999; +} +::-webkit-input-placeholder { +  color: #999999; +} +.help-block, +.help-inline { +  color: #555555; +} +.help-block { +  display: block; +  margin-bottom: 9px; +} +.help-inline { +  display: inline-block; +  *display: inline; +  /* IE7 inline-block hack */ + +  *zoom: 1; +  vertical-align: middle; +  padding-left: 5px; +} +.input-prepend, +.input-append { +  margin-bottom: 5px; +} +.input-prepend input, +.input-append input, +.input-prepend select, +.input-append select, +.input-prepend .uneditable-input, +.input-append .uneditable-input { +  *margin-left: 0; +  -webkit-border-radius: 0 3px 3px 0; +  -moz-border-radius: 0 3px 3px 0; +  border-radius: 0 3px 3px 0; +} +.input-prepend input:focus, +.input-append input:focus, +.input-prepend select:focus, +.input-append select:focus, +.input-prepend .uneditable-input:focus, +.input-append .uneditable-input:focus { +  position: relative; +  z-index: 2; +} +.input-prepend .uneditable-input, +.input-append .uneditable-input { +  border-left-color: #ccc; +} +.input-prepend .add-on, +.input-append .add-on { +  display: inline-block; +  width: auto; +  min-width: 16px; +  height: 18px; +  padding: 4px 5px; +  font-weight: normal; +  line-height: 18px; +  text-align: center; +  text-shadow: 0 1px 0 #ffffff; +  vertical-align: middle; +  background-color: #eeeeee; +  border: 1px solid #ccc; +} +.input-prepend .add-on, +.input-append .add-on, +.input-prepend .btn, +.input-append .btn { +  -webkit-border-radius: 3px 0 0 3px; +  -moz-border-radius: 3px 0 0 3px; +  border-radius: 3px 0 0 3px; +} +.input-prepend .active, +.input-append .active { +  background-color: #a9dba9; +  border-color: #46a546; +} +.input-prepend .add-on, +.input-prepend .btn { +  margin-right: -1px; +} +.input-append input, +.input-append select .uneditable-input { +  -webkit-border-radius: 3px 0 0 3px; +  -moz-border-radius: 3px 0 0 3px; +  border-radius: 3px 0 0 3px; +} +.input-append .uneditable-input { +  border-left-color: #eee; +  border-right-color: #ccc; +} +.input-append .add-on, +.input-append .btn { +  margin-left: -1px; +  -webkit-border-radius: 0 3px 3px 0; +  -moz-border-radius: 0 3px 3px 0; +  border-radius: 0 3px 3px 0; +} +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { +  -webkit-border-radius: 0; +  -moz-border-radius: 0; +  border-radius: 0; +} +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { +  margin-right: -1px; +  -webkit-border-radius: 3px 0 0 3px; +  -moz-border-radius: 3px 0 0 3px; +  border-radius: 3px 0 0 3px; +} +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { +  margin-left: -1px; +  -webkit-border-radius: 0 3px 3px 0; +  -moz-border-radius: 0 3px 3px 0; +  border-radius: 0 3px 3px 0; +} +.search-query { +  padding-left: 14px; +  padding-right: 14px; +  margin-bottom: 0; +  -webkit-border-radius: 14px; +  -moz-border-radius: 14px; +  border-radius: 14px; +} +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { +  display: inline-block; +  margin-bottom: 0; +} +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { +  display: none; +} +.form-search label, +.form-inline label { +  display: inline-block; +} +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { +  margin-bottom: 0; +} +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { +  padding-left: 0; +  margin-bottom: 0; +  vertical-align: middle; +} +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { +  float: left; +  margin-left: 0; +  margin-right: 3px; +} +.control-group { +  margin-bottom: 9px; +} +legend + .control-group { +  margin-top: 18px; +  -webkit-margin-top-collapse: separate; +} +.form-horizontal .control-group { +  margin-bottom: 18px; +  *zoom: 1; +} +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { +  display: table; +  content: ""; +} +.form-horizontal .control-group:after { +  clear: both; +} +.form-horizontal .control-label { +  float: left; +  width: 140px; +  padding-top: 5px; +  text-align: right; +} +.form-horizontal .controls { +  margin-left: 160px; +  /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */ + +  *display: inline-block; +  *margin-left: 0; +  *padding-left: 20px; +} +.form-horizontal .help-block { +  margin-top: 9px; +  margin-bottom: 0; +} +.form-horizontal .form-actions { +  padding-left: 160px; +} +table { +  max-width: 100%; +  border-collapse: collapse; +  border-spacing: 0; +  background-color: transparent; +} +.table { +  width: 100%; +  margin-bottom: 18px; +} +.table th, +.table td { +  padding: 8px; +  line-height: 18px; +  text-align: left; +  vertical-align: top; +  border-top: 1px solid #dddddd; +} +.table th { +  font-weight: bold; +} +.table thead th { +  vertical-align: bottom; +} +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { +  border-top: 0; +} +.table tbody + tbody { +  border-top: 2px solid #dddddd; +} +.table-condensed th, +.table-condensed td { +  padding: 4px 5px; +} +.table-bordered { +  border: 1px solid #dddddd; +  border-left: 0; +  border-collapse: separate; +  *border-collapse: collapsed; +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +} +.table-bordered th, +.table-bordered td { +  border-left: 1px solid #dddddd; +} +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { +  border-top: 0; +} +.table-bordered thead:first-child tr:first-child th:first-child, +.table-bordered tbody:first-child tr:first-child td:first-child { +  -webkit-border-radius: 4px 0 0 0; +  -moz-border-radius: 4px 0 0 0; +  border-radius: 4px 0 0 0; +} +.table-bordered thead:first-child tr:first-child th:last-child, +.table-bordered tbody:first-child tr:first-child td:last-child { +  -webkit-border-radius: 0 4px 0 0; +  -moz-border-radius: 0 4px 0 0; +  border-radius: 0 4px 0 0; +} +.table-bordered thead:last-child tr:last-child th:first-child, +.table-bordered tbody:last-child tr:last-child td:first-child { +  -webkit-border-radius: 0 0 0 4px; +  -moz-border-radius: 0 0 0 4px; +  border-radius: 0 0 0 4px; +} +.table-bordered thead:last-child tr:last-child th:last-child, +.table-bordered tbody:last-child tr:last-child td:last-child { +  -webkit-border-radius: 0 0 4px 0; +  -moz-border-radius: 0 0 4px 0; +  border-radius: 0 0 4px 0; +} +.table-striped tbody tr:nth-child(odd) td, +.table-striped tbody tr:nth-child(odd) th { +  background-color: #f9f9f9; +} +.table tbody tr:hover td, +.table tbody tr:hover th { +  background-color: #f5f5f5; +} +table .span1 { +  float: none; +  width: 44px; +  margin-left: 0; +} +table .span2 { +  float: none; +  width: 124px; +  margin-left: 0; +} +table .span3 { +  float: none; +  width: 204px; +  margin-left: 0; +} +table .span4 { +  float: none; +  width: 284px; +  margin-left: 0; +} +table .span5 { +  float: none; +  width: 364px; +  margin-left: 0; +} +table .span6 { +  float: none; +  width: 444px; +  margin-left: 0; +} +table .span7 { +  float: none; +  width: 524px; +  margin-left: 0; +} +table .span8 { +  float: none; +  width: 604px; +  margin-left: 0; +} +table .span9 { +  float: none; +  width: 684px; +  margin-left: 0; +} +table .span10 { +  float: none; +  width: 764px; +  margin-left: 0; +} +table .span11 { +  float: none; +  width: 844px; +  margin-left: 0; +} +table .span12 { +  float: none; +  width: 924px; +  margin-left: 0; +} +table .span13 { +  float: none; +  width: 1004px; +  margin-left: 0; +} +table .span14 { +  float: none; +  width: 1084px; +  margin-left: 0; +} +table .span15 { +  float: none; +  width: 1164px; +  margin-left: 0; +} +table .span16 { +  float: none; +  width: 1244px; +  margin-left: 0; +} +table .span17 { +  float: none; +  width: 1324px; +  margin-left: 0; +} +table .span18 { +  float: none; +  width: 1404px; +  margin-left: 0; +} +table .span19 { +  float: none; +  width: 1484px; +  margin-left: 0; +} +table .span20 { +  float: none; +  width: 1564px; +  margin-left: 0; +} +table .span21 { +  float: none; +  width: 1644px; +  margin-left: 0; +} +table .span22 { +  float: none; +  width: 1724px; +  margin-left: 0; +} +table .span23 { +  float: none; +  width: 1804px; +  margin-left: 0; +} +table .span24 { +  float: none; +  width: 1884px; +  margin-left: 0; +} +[class^="icon-"], +[class*=" icon-"] { +  display: inline-block; +  width: 14px; +  height: 14px; +  line-height: 14px; +  vertical-align: text-top; +  background-image: url("../../../docs/img/glyphicons-halflings.png"); +  background-position: 14px 14px; +  background-repeat: no-repeat; +  *margin-right: .3em; +} +[class^="icon-"]:last-child, +[class*=" icon-"]:last-child { +  *margin-left: 0; +} +.icon-white { +  background-image: url("../../../docs/img/glyphicons-halflings-white.png"); +} +.icon-glass { +  background-position: 0      0; +} +.icon-music { +  background-position: -24px 0; +} +.icon-search { +  background-position: -48px 0; +} +.icon-envelope { +  background-position: -72px 0; +} +.icon-heart { +  background-position: -96px 0; +} +.icon-star { +  background-position: -120px 0; +} +.icon-star-empty { +  background-position: -144px 0; +} +.icon-user { +  background-position: -168px 0; +} +.icon-film { +  background-position: -192px 0; +} +.icon-th-large { +  background-position: -216px 0; +} +.icon-th { +  background-position: -240px 0; +} +.icon-th-list { +  background-position: -264px 0; +} +.icon-ok { +  background-position: -288px 0; +} +.icon-remove { +  background-position: -312px 0; +} +.icon-zoom-in { +  background-position: -336px 0; +} +.icon-zoom-out { +  background-position: -360px 0; +} +.icon-off { +  background-position: -384px 0; +} +.icon-signal { +  background-position: -408px 0; +} +.icon-cog { +  background-position: -432px 0; +} +.icon-trash { +  background-position: -456px 0; +} +.icon-home { +  background-position: 0 -24px; +} +.icon-file { +  background-position: -24px -24px; +} +.icon-time { +  background-position: -48px -24px; +} +.icon-road { +  background-position: -72px -24px; +} +.icon-download-alt { +  background-position: -96px -24px; +} +.icon-download { +  background-position: -120px -24px; +} +.icon-upload { +  background-position: -144px -24px; +} +.icon-inbox { +  background-position: -168px -24px; +} +.icon-play-circle { +  background-position: -192px -24px; +} +.icon-repeat { +  background-position: -216px -24px; +} +.icon-refresh { +  background-position: -240px -24px; +} +.icon-list-alt { +  background-position: -264px -24px; +} +.icon-lock { +  background-position: -287px -24px; +} +.icon-flag { +  background-position: -312px -24px; +} +.icon-headphones { +  background-position: -336px -24px; +} +.icon-volume-off { +  background-position: -360px -24px; +} +.icon-volume-down { +  background-position: -384px -24px; +} +.icon-volume-up { +  background-position: -408px -24px; +} +.icon-qrcode { +  background-position: -432px -24px; +} +.icon-barcode { +  background-position: -456px -24px; +} +.icon-tag { +  background-position: 0 -48px; +} +.icon-tags { +  background-position: -25px -48px; +} +.icon-book { +  background-position: -48px -48px; +} +.icon-bookmark { +  background-position: -72px -48px; +} +.icon-print { +  background-position: -96px -48px; +} +.icon-camera { +  background-position: -120px -48px; +} +.icon-font { +  background-position: -144px -48px; +} +.icon-bold { +  background-position: -167px -48px; +} +.icon-italic { +  background-position: -192px -48px; +} +.icon-text-height { +  background-position: -216px -48px; +} +.icon-text-width { +  background-position: -240px -48px; +} +.icon-align-left { +  background-position: -264px -48px; +} +.icon-align-center { +  background-position: -288px -48px; +} +.icon-align-right { +  background-position: -312px -48px; +} +.icon-align-justify { +  background-position: -336px -48px; +} +.icon-list { +  background-position: -360px -48px; +} +.icon-indent-left { +  background-position: -384px -48px; +} +.icon-indent-right { +  background-position: -408px -48px; +} +.icon-facetime-video { +  background-position: -432px -48px; +} +.icon-picture { +  background-position: -456px -48px; +} +.icon-pencil { +  background-position: 0 -72px; +} +.icon-map-marker { +  background-position: -24px -72px; +} +.icon-adjust { +  background-position: -48px -72px; +} +.icon-tint { +  background-position: -72px -72px; +} +.icon-edit { +  background-position: -96px -72px; +} +.icon-share { +  background-position: -120px -72px; +} +.icon-check { +  background-position: -144px -72px; +} +.icon-move { +  background-position: -168px -72px; +} +.icon-step-backward { +  background-position: -192px -72px; +} +.icon-fast-backward { +  background-position: -216px -72px; +} +.icon-backward { +  background-position: -240px -72px; +} +.icon-play { +  background-position: -264px -72px; +} +.icon-pause { +  background-position: -288px -72px; +} +.icon-stop { +  background-position: -312px -72px; +} +.icon-forward { +  background-position: -336px -72px; +} +.icon-fast-forward { +  background-position: -360px -72px; +} +.icon-step-forward { +  background-position: -384px -72px; +} +.icon-eject { +  background-position: -408px -72px; +} +.icon-chevron-left { +  background-position: -432px -72px; +} +.icon-chevron-right { +  background-position: -456px -72px; +} +.icon-plus-sign { +  background-position: 0 -96px; +} +.icon-minus-sign { +  background-position: -24px -96px; +} +.icon-remove-sign { +  background-position: -48px -96px; +} +.icon-ok-sign { +  background-position: -72px -96px; +} +.icon-question-sign { +  background-position: -96px -96px; +} +.icon-info-sign { +  background-position: -120px -96px; +} +.icon-screenshot { +  background-position: -144px -96px; +} +.icon-remove-circle { +  background-position: -168px -96px; +} +.icon-ok-circle { +  background-position: -192px -96px; +} +.icon-ban-circle { +  background-position: -216px -96px; +} +.icon-arrow-left { +  background-position: -240px -96px; +} +.icon-arrow-right { +  background-position: -264px -96px; +} +.icon-arrow-up { +  background-position: -289px -96px; +} +.icon-arrow-down { +  background-position: -312px -96px; +} +.icon-share-alt { +  background-position: -336px -96px; +} +.icon-resize-full { +  background-position: -360px -96px; +} +.icon-resize-small { +  background-position: -384px -96px; +} +.icon-plus { +  background-position: -408px -96px; +} +.icon-minus { +  background-position: -433px -96px; +} +.icon-asterisk { +  background-position: -456px -96px; +} +.icon-exclamation-sign { +  background-position: 0 -120px; +} +.icon-gift { +  background-position: -24px -120px; +} +.icon-leaf { +  background-position: -48px -120px; +} +.icon-fire { +  background-position: -72px -120px; +} +.icon-eye-open { +  background-position: -96px -120px; +} +.icon-eye-close { +  background-position: -120px -120px; +} +.icon-warning-sign { +  background-position: -144px -120px; +} +.icon-plane { +  background-position: -168px -120px; +} +.icon-calendar { +  background-position: -192px -120px; +} +.icon-random { +  background-position: -216px -120px; +} +.icon-comment { +  background-position: -240px -120px; +} +.icon-magnet { +  background-position: -264px -120px; +} +.icon-chevron-up { +  background-position: -288px -120px; +} +.icon-chevron-down { +  background-position: -313px -119px; +} +.icon-retweet { +  background-position: -336px -120px; +} +.icon-shopping-cart { +  background-position: -360px -120px; +} +.icon-folder-close { +  background-position: -384px -120px; +} +.icon-folder-open { +  background-position: -408px -120px; +} +.icon-resize-vertical { +  background-position: -432px -119px; +} +.icon-resize-horizontal { +  background-position: -456px -118px; +} +.dropdown { +  position: relative; +} +.dropdown-toggle { +  *margin-bottom: -3px; +} +.dropdown-toggle:active, +.open .dropdown-toggle { +  outline: 0; +} +.caret { +  display: inline-block; +  width: 0; +  height: 0; +  vertical-align: top; +  border-left: 4px solid transparent; +  border-right: 4px solid transparent; +  border-top: 4px solid #000000; +  opacity: 0.3; +  filter: alpha(opacity=30); +  content: ""; +} +.dropdown .caret { +  margin-top: 8px; +  margin-left: 2px; +} +.dropdown:hover .caret, +.open.dropdown .caret { +  opacity: 1; +  filter: alpha(opacity=100); +} +.dropdown-menu { +  position: absolute; +  top: 100%; +  left: 0; +  z-index: 1000; +  float: left; +  display: none; +  min-width: 160px; +  padding: 4px 0; +  margin: 0; +  list-style: none; +  background-color: #ffffff; +  border-color: #ccc; +  border-color: rgba(0, 0, 0, 0.2); +  border-style: solid; +  border-width: 1px; +  -webkit-border-radius: 0 0 5px 5px; +  -moz-border-radius: 0 0 5px 5px; +  border-radius: 0 0 5px 5px; +  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +  -webkit-background-clip: padding-box; +  -moz-background-clip: padding; +  background-clip: padding-box; +  *border-right-width: 2px; +  *border-bottom-width: 2px; +} +.dropdown-menu.pull-right { +  right: 0; +  left: auto; +} +.dropdown-menu .divider { +  height: 1px; +  margin: 8px 1px; +  overflow: hidden; +  background-color: #e5e5e5; +  border-bottom: 1px solid #ffffff; +  *width: 100%; +  *margin: -5px 0 5px; +} +.dropdown-menu a { +  display: block; +  padding: 3px 15px; +  clear: both; +  font-weight: normal; +  line-height: 18px; +  color: #333333; +  white-space: nowrap; +} +.dropdown-menu li > a:hover, +.dropdown-menu .active > a, +.dropdown-menu .active > a:hover { +  color: #ffffff; +  text-decoration: none; +  background-color: #0088cc; +} +.dropdown.open { +  *z-index: 1000; +} +.dropdown.open .dropdown-toggle { +  color: #ffffff; +  background: #ccc; +  background: rgba(0, 0, 0, 0.3); +} +.dropdown.open .dropdown-menu { +  display: block; +} +.pull-right .dropdown-menu { +  left: auto; +  right: 0; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { +  border-top: 0; +  border-bottom: 4px solid #000000; +  content: "\2191"; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { +  top: auto; +  bottom: 100%; +  margin-bottom: 1px; +} +.typeahead { +  margin-top: 2px; +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +} +.well { +  min-height: 20px; +  padding: 19px; +  margin-bottom: 20px; +  background-color: #f5f5f5; +  border: 1px solid #eee; +  border: 1px solid rgba(0, 0, 0, 0.05); +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { +  border-color: #ddd; +  border-color: rgba(0, 0, 0, 0.15); +} +.well-large { +  padding: 24px; +  -webkit-border-radius: 6px; +  -moz-border-radius: 6px; +  border-radius: 6px; +} +.well-small { +  padding: 9px; +  -webkit-border-radius: 3px; +  -moz-border-radius: 3px; +  border-radius: 3px; +} +.fade { +  -webkit-transition: opacity 0.15s linear; +  -moz-transition: opacity 0.15s linear; +  -ms-transition: opacity 0.15s linear; +  -o-transition: opacity 0.15s linear; +  transition: opacity 0.15s linear; +  opacity: 0; +} +.fade.in { +  opacity: 1; +} +.collapse { +  -webkit-transition: height 0.35s ease; +  -moz-transition: height 0.35s ease; +  -ms-transition: height 0.35s ease; +  -o-transition: height 0.35s ease; +  transition: height 0.35s ease; +  position: relative; +  overflow: hidden; +  height: 0; +} +.collapse.in { +  height: auto; +} +.close { +  float: right; +  font-size: 20px; +  font-weight: bold; +  line-height: 18px; +  color: #000000; +  text-shadow: 0 1px 0 #ffffff; +  opacity: 0.2; +  filter: alpha(opacity=20); +} +.close:hover { +  color: #000000; +  text-decoration: none; +  opacity: 0.4; +  filter: alpha(opacity=40); +  cursor: pointer; +} +.btn { +  display: inline-block; +  *display: inline; +  /* IE7 inline-block hack */ + +  *zoom: 1; +  padding: 4px 10px 4px; +  margin-bottom: 0; +  font-size: 13px; +  line-height: 18px; +  color: #333333; +  text-align: center; +  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); +  vertical-align: middle; +  background-color: #f5f5f5; +  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); +  background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); +  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); +  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); +  background-image: linear-gradient(top, #ffffff, #e6e6e6); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); +  border-color: #e6e6e6 #e6e6e6 #bfbfbf; +  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +  filter: progid:dximagetransform.microsoft.gradient(enabled=false); +  border: 1px solid #cccccc; +  border-bottom-color: #b3b3b3; +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +  cursor: pointer; +  *margin-left: .3em; +} +.btn:hover, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { +  background-color: #e6e6e6; +} +.btn:active, +.btn.active { +  background-color: #cccccc \9; +} +.btn:first-child { +  *margin-left: 0; +} +.btn:hover { +  color: #333333; +  text-decoration: none; +  background-color: #e6e6e6; +  background-position: 0 -15px; +  -webkit-transition: background-position 0.1s linear; +  -moz-transition: background-position 0.1s linear; +  -ms-transition: background-position 0.1s linear; +  -o-transition: background-position 0.1s linear; +  transition: background-position 0.1s linear; +} +.btn:focus { +  outline: thin dotted #333; +  outline: 5px auto -webkit-focus-ring-color; +  outline-offset: -2px; +} +.btn.active, +.btn:active { +  background-image: none; +  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +  -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +  background-color: #e6e6e6; +  background-color: #d9d9d9 \9; +  outline: 0; +} +.btn.disabled, +.btn[disabled] { +  cursor: default; +  background-image: none; +  background-color: #e6e6e6; +  opacity: 0.65; +  filter: alpha(opacity=65); +  -webkit-box-shadow: none; +  -moz-box-shadow: none; +  box-shadow: none; +} +.btn-large { +  padding: 9px 14px; +  font-size: 15px; +  line-height: normal; +  -webkit-border-radius: 5px; +  -moz-border-radius: 5px; +  border-radius: 5px; +} +.btn-large [class^="icon-"] { +  margin-top: 1px; +} +.btn-small { +  padding: 5px 9px; +  font-size: 11px; +  line-height: 16px; +} +.btn-small [class^="icon-"] { +  margin-top: -1px; +} +.btn-mini { +  padding: 2px 6px; +  font-size: 11px; +  line-height: 14px; +} +.btn-primary, +.btn-primary:hover, +.btn-warning, +.btn-warning:hover, +.btn-danger, +.btn-danger:hover, +.btn-success, +.btn-success:hover, +.btn-info, +.btn-info:hover, +.btn-inverse, +.btn-inverse:hover { +  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +  color: #ffffff; +} +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { +  color: rgba(255, 255, 255, 0.75); +} +.btn-primary { +  background-color: #0074cc; +  background-image: -moz-linear-gradient(top, #0088cc, #0055cc); +  background-image: -ms-linear-gradient(top, #0088cc, #0055cc); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc)); +  background-image: -webkit-linear-gradient(top, #0088cc, #0055cc); +  background-image: -o-linear-gradient(top, #0088cc, #0055cc); +  background-image: linear-gradient(top, #0088cc, #0055cc); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0); +  border-color: #0055cc #0055cc #003580; +  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +  filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} +.btn-primary:hover, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { +  background-color: #0055cc; +} +.btn-primary:active, +.btn-primary.active { +  background-color: #004099 \9; +} +.btn-warning { +  background-color: #faa732; +  background-image: -moz-linear-gradient(top, #fbb450, #f89406); +  background-image: -ms-linear-gradient(top, #fbb450, #f89406); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); +  background-image: -webkit-linear-gradient(top, #fbb450, #f89406); +  background-image: -o-linear-gradient(top, #fbb450, #f89406); +  background-image: linear-gradient(top, #fbb450, #f89406); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); +  border-color: #f89406 #f89406 #ad6704; +  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +  filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} +.btn-warning:hover, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { +  background-color: #f89406; +} +.btn-warning:active, +.btn-warning.active { +  background-color: #c67605 \9; +} +.btn-danger { +  background-color: #da4f49; +  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); +  background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); +  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); +  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); +  background-image: linear-gradient(top, #ee5f5b, #bd362f); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); +  border-color: #bd362f #bd362f #802420; +  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +  filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} +.btn-danger:hover, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { +  background-color: #bd362f; +} +.btn-danger:active, +.btn-danger.active { +  background-color: #942a25 \9; +} +.btn-success { +  background-color: #5bb75b; +  background-image: -moz-linear-gradient(top, #62c462, #51a351); +  background-image: -ms-linear-gradient(top, #62c462, #51a351); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); +  background-image: -webkit-linear-gradient(top, #62c462, #51a351); +  background-image: -o-linear-gradient(top, #62c462, #51a351); +  background-image: linear-gradient(top, #62c462, #51a351); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); +  border-color: #51a351 #51a351 #387038; +  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +  filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} +.btn-success:hover, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { +  background-color: #51a351; +} +.btn-success:active, +.btn-success.active { +  background-color: #408140 \9; +} +.btn-info { +  background-color: #49afcd; +  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); +  background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); +  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); +  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); +  background-image: linear-gradient(top, #5bc0de, #2f96b4); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); +  border-color: #2f96b4 #2f96b4 #1f6377; +  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +  filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} +.btn-info:hover, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { +  background-color: #2f96b4; +} +.btn-info:active, +.btn-info.active { +  background-color: #24748c \9; +} +.btn-inverse { +  background-color: #414141; +  background-image: -moz-linear-gradient(top, #555555, #222222); +  background-image: -ms-linear-gradient(top, #555555, #222222); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222)); +  background-image: -webkit-linear-gradient(top, #555555, #222222); +  background-image: -o-linear-gradient(top, #555555, #222222); +  background-image: linear-gradient(top, #555555, #222222); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0); +  border-color: #222222 #222222 #000000; +  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +  filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { +  background-color: #222222; +} +.btn-inverse:active, +.btn-inverse.active { +  background-color: #080808 \9; +} +button.btn, +input[type="submit"].btn { +  *padding-top: 2px; +  *padding-bottom: 2px; +} +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { +  padding: 0; +  border: 0; +} +button.btn.btn-large, +input[type="submit"].btn.btn-large { +  *padding-top: 7px; +  *padding-bottom: 7px; +} +button.btn.btn-small, +input[type="submit"].btn.btn-small { +  *padding-top: 3px; +  *padding-bottom: 3px; +} +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { +  *padding-top: 1px; +  *padding-bottom: 1px; +} +.btn-group { +  position: relative; +  *zoom: 1; +  *margin-left: .3em; +} +.btn-group:before, +.btn-group:after { +  display: table; +  content: ""; +} +.btn-group:after { +  clear: both; +} +.btn-group:first-child { +  *margin-left: 0; +} +.btn-group + .btn-group { +  margin-left: 5px; +} +.btn-toolbar { +  margin-top: 9px; +  margin-bottom: 9px; +} +.btn-toolbar .btn-group { +  display: inline-block; +  *display: inline; +  /* IE7 inline-block hack */ + +  *zoom: 1; +} +.btn-group .btn { +  position: relative; +  float: left; +  margin-left: -1px; +  -webkit-border-radius: 0; +  -moz-border-radius: 0; +  border-radius: 0; +} +.btn-group .btn:first-child { +  margin-left: 0; +  -webkit-border-top-left-radius: 4px; +  -moz-border-radius-topleft: 4px; +  border-top-left-radius: 4px; +  -webkit-border-bottom-left-radius: 4px; +  -moz-border-radius-bottomleft: 4px; +  border-bottom-left-radius: 4px; +} +.btn-group .btn:last-child, +.btn-group .dropdown-toggle { +  -webkit-border-top-right-radius: 4px; +  -moz-border-radius-topright: 4px; +  border-top-right-radius: 4px; +  -webkit-border-bottom-right-radius: 4px; +  -moz-border-radius-bottomright: 4px; +  border-bottom-right-radius: 4px; +} +.btn-group .btn.large:first-child { +  margin-left: 0; +  -webkit-border-top-left-radius: 6px; +  -moz-border-radius-topleft: 6px; +  border-top-left-radius: 6px; +  -webkit-border-bottom-left-radius: 6px; +  -moz-border-radius-bottomleft: 6px; +  border-bottom-left-radius: 6px; +} +.btn-group .btn.large:last-child, +.btn-group .large.dropdown-toggle { +  -webkit-border-top-right-radius: 6px; +  -moz-border-radius-topright: 6px; +  border-top-right-radius: 6px; +  -webkit-border-bottom-right-radius: 6px; +  -moz-border-radius-bottomright: 6px; +  border-bottom-right-radius: 6px; +} +.btn-group .btn:hover, +.btn-group .btn:focus, +.btn-group .btn:active, +.btn-group .btn.active { +  z-index: 2; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { +  outline: 0; +} +.btn-group .dropdown-toggle { +  padding-left: 8px; +  padding-right: 8px; +  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +  -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +  box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +  *padding-top: 3px; +  *padding-bottom: 3px; +} +.btn-group .btn-mini.dropdown-toggle { +  padding-left: 5px; +  padding-right: 5px; +  *padding-top: 1px; +  *padding-bottom: 1px; +} +.btn-group .btn-small.dropdown-toggle { +  *padding-top: 4px; +  *padding-bottom: 4px; +} +.btn-group .btn-large.dropdown-toggle { +  padding-left: 12px; +  padding-right: 12px; +} +.btn-group.open { +  *z-index: 1000; +} +.btn-group.open .dropdown-menu { +  display: block; +  margin-top: 1px; +  -webkit-border-radius: 5px; +  -moz-border-radius: 5px; +  border-radius: 5px; +} +.btn-group.open .dropdown-toggle { +  background-image: none; +  -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +  -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +  box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.btn .caret { +  margin-top: 7px; +  margin-left: 0; +} +.btn:hover .caret, +.open.btn-group .caret { +  opacity: 1; +  filter: alpha(opacity=100); +} +.btn-mini .caret { +  margin-top: 5px; +} +.btn-small .caret { +  margin-top: 6px; +} +.btn-large .caret { +  margin-top: 6px; +  border-left: 5px solid transparent; +  border-right: 5px solid transparent; +  border-top: 5px solid #000000; +} +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { +  border-top-color: #ffffff; +  border-bottom-color: #ffffff; +  opacity: 0.75; +  filter: alpha(opacity=75); +} +.alert { +  padding: 8px 35px 8px 14px; +  margin-bottom: 18px; +  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +  background-color: #fcf8e3; +  border: 1px solid #fbeed5; +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +  color: #c09853; +} +.alert-heading { +  color: inherit; +} +.alert .close { +  position: relative; +  top: -2px; +  right: -21px; +  line-height: 18px; +} +.alert-success { +  background-color: #dff0d8; +  border-color: #d6e9c6; +  color: #468847; +} +.alert-danger, +.alert-error { +  background-color: #f2dede; +  border-color: #eed3d7; +  color: #b94a48; +} +.alert-info { +  background-color: #d9edf7; +  border-color: #bce8f1; +  color: #3a87ad; +} +.alert-block { +  padding-top: 14px; +  padding-bottom: 14px; +} +.alert-block > p, +.alert-block > ul { +  margin-bottom: 0; +} +.alert-block p + p { +  margin-top: 5px; +} +.nav { +  margin-left: 0; +  margin-bottom: 18px; +  list-style: none; +} +.nav > li > a { +  display: block; +} +.nav > li > a:hover { +  text-decoration: none; +  background-color: #eeeeee; +} +.nav .nav-header { +  display: block; +  padding: 3px 15px; +  font-size: 11px; +  font-weight: bold; +  line-height: 18px; +  color: #999999; +  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +  text-transform: uppercase; +} +.nav li + .nav-header { +  margin-top: 9px; +} +.nav-list { +  padding-left: 15px; +  padding-right: 15px; +  margin-bottom: 0; +} +.nav-list > li > a, +.nav-list .nav-header { +  margin-left: -15px; +  margin-right: -15px; +  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.nav-list > li > a { +  padding: 3px 15px; +} +.nav-list > .active > a, +.nav-list > .active > a:hover { +  color: #ffffff; +  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); +  background-color: #0088cc; +} +.nav-list [class^="icon-"] { +  margin-right: 2px; +} +.nav-list .divider { +  height: 1px; +  margin: 8px 1px; +  overflow: hidden; +  background-color: #e5e5e5; +  border-bottom: 1px solid #ffffff; +  *width: 100%; +  *margin: -5px 0 5px; +} +.nav-tabs, +.nav-pills { +  *zoom: 1; +} +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { +  display: table; +  content: ""; +} +.nav-tabs:after, +.nav-pills:after { +  clear: both; +} +.nav-tabs > li, +.nav-pills > li { +  float: left; +} +.nav-tabs > li > a, +.nav-pills > li > a { +  padding-right: 12px; +  padding-left: 12px; +  margin-right: 2px; +  line-height: 14px; +} +.nav-tabs { +  border-bottom: 1px solid #ddd; +} +.nav-tabs > li { +  margin-bottom: -1px; +} +.nav-tabs > li > a { +  padding-top: 8px; +  padding-bottom: 8px; +  line-height: 18px; +  border: 1px solid transparent; +  -webkit-border-radius: 4px 4px 0 0; +  -moz-border-radius: 4px 4px 0 0; +  border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { +  border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover { +  color: #555555; +  background-color: #ffffff; +  border: 1px solid #ddd; +  border-bottom-color: transparent; +  cursor: default; +} +.nav-pills > li > a { +  padding-top: 8px; +  padding-bottom: 8px; +  margin-top: 2px; +  margin-bottom: 2px; +  -webkit-border-radius: 5px; +  -moz-border-radius: 5px; +  border-radius: 5px; +} +.nav-pills > .active > a, +.nav-pills > .active > a:hover { +  color: #ffffff; +  background-color: #0088cc; +} +.nav-stacked > li { +  float: none; +} +.nav-stacked > li > a { +  margin-right: 0; +} +.nav-tabs.nav-stacked { +  border-bottom: 0; +} +.nav-tabs.nav-stacked > li > a { +  border: 1px solid #ddd; +  -webkit-border-radius: 0; +  -moz-border-radius: 0; +  border-radius: 0; +} +.nav-tabs.nav-stacked > li:first-child > a { +  -webkit-border-radius: 4px 4px 0 0; +  -moz-border-radius: 4px 4px 0 0; +  border-radius: 4px 4px 0 0; +} +.nav-tabs.nav-stacked > li:last-child > a { +  -webkit-border-radius: 0 0 4px 4px; +  -moz-border-radius: 0 0 4px 4px; +  border-radius: 0 0 4px 4px; +} +.nav-tabs.nav-stacked > li > a:hover { +  border-color: #ddd; +  z-index: 2; +} +.nav-pills.nav-stacked > li > a { +  margin-bottom: 3px; +} +.nav-pills.nav-stacked > li:last-child > a { +  margin-bottom: 1px; +} +.nav-tabs .dropdown-menu, +.nav-pills .dropdown-menu { +  margin-top: 1px; +  border-width: 1px; +} +.nav-pills .dropdown-menu { +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +} +.nav-tabs .dropdown-toggle .caret, +.nav-pills .dropdown-toggle .caret { +  border-top-color: #0088cc; +  border-bottom-color: #0088cc; +  margin-top: 6px; +} +.nav-tabs .dropdown-toggle:hover .caret, +.nav-pills .dropdown-toggle:hover .caret { +  border-top-color: #005580; +  border-bottom-color: #005580; +} +.nav-tabs .active .dropdown-toggle .caret, +.nav-pills .active .dropdown-toggle .caret { +  border-top-color: #333333; +  border-bottom-color: #333333; +} +.nav > .dropdown.active > a:hover { +  color: #000000; +  cursor: pointer; +} +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > .open.active > a:hover { +  color: #ffffff; +  background-color: #999999; +  border-color: #999999; +} +.nav .open .caret, +.nav .open.active .caret, +.nav .open a:hover .caret { +  border-top-color: #ffffff; +  border-bottom-color: #ffffff; +  opacity: 1; +  filter: alpha(opacity=100); +} +.tabs-stacked .open > a:hover { +  border-color: #999999; +} +.tabbable { +  *zoom: 1; +} +.tabbable:before, +.tabbable:after { +  display: table; +  content: ""; +} +.tabbable:after { +  clear: both; +} +.tab-content { +  display: table; +  width: 100%; +} +.tabs-below .nav-tabs, +.tabs-right .nav-tabs, +.tabs-left .nav-tabs { +  border-bottom: 0; +} +.tab-content > .tab-pane, +.pill-content > .pill-pane { +  display: none; +} +.tab-content > .active, +.pill-content > .active { +  display: block; +} +.tabs-below .nav-tabs { +  border-top: 1px solid #ddd; +} +.tabs-below .nav-tabs > li { +  margin-top: -1px; +  margin-bottom: 0; +} +.tabs-below .nav-tabs > li > a { +  -webkit-border-radius: 0 0 4px 4px; +  -moz-border-radius: 0 0 4px 4px; +  border-radius: 0 0 4px 4px; +} +.tabs-below .nav-tabs > li > a:hover { +  border-bottom-color: transparent; +  border-top-color: #ddd; +} +.tabs-below .nav-tabs .active > a, +.tabs-below .nav-tabs .active > a:hover { +  border-color: transparent #ddd #ddd #ddd; +} +.tabs-left .nav-tabs > li, +.tabs-right .nav-tabs > li { +  float: none; +} +.tabs-left .nav-tabs > li > a, +.tabs-right .nav-tabs > li > a { +  min-width: 74px; +  margin-right: 0; +  margin-bottom: 3px; +} +.tabs-left .nav-tabs { +  float: left; +  margin-right: 19px; +  border-right: 1px solid #ddd; +} +.tabs-left .nav-tabs > li > a { +  margin-right: -1px; +  -webkit-border-radius: 4px 0 0 4px; +  -moz-border-radius: 4px 0 0 4px; +  border-radius: 4px 0 0 4px; +} +.tabs-left .nav-tabs > li > a:hover { +  border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} +.tabs-left .nav-tabs .active > a, +.tabs-left .nav-tabs .active > a:hover { +  border-color: #ddd transparent #ddd #ddd; +  *border-right-color: #ffffff; +} +.tabs-right .nav-tabs { +  float: right; +  margin-left: 19px; +  border-left: 1px solid #ddd; +} +.tabs-right .nav-tabs > li > a { +  margin-left: -1px; +  -webkit-border-radius: 0 4px 4px 0; +  -moz-border-radius: 0 4px 4px 0; +  border-radius: 0 4px 4px 0; +} +.tabs-right .nav-tabs > li > a:hover { +  border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} +.tabs-right .nav-tabs .active > a, +.tabs-right .nav-tabs .active > a:hover { +  border-color: #ddd #ddd #ddd transparent; +  *border-left-color: #ffffff; +} +.navbar { +  *position: relative; +  *z-index: 2; +  overflow: visible; +  margin-bottom: 18px; +} +.navbar-inner { +  padding-left: 20px; +  padding-right: 20px; +  background-color: #2c2c2c; +  background-image: -moz-linear-gradient(top, #333333, #222222); +  background-image: -ms-linear-gradient(top, #333333, #222222); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); +  background-image: -webkit-linear-gradient(top, #333333, #222222); +  background-image: -o-linear-gradient(top, #333333, #222222); +  background-image: linear-gradient(top, #333333, #222222); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} +.navbar .container { +  width: auto; +} +.btn-navbar { +  display: none; +  float: right; +  padding: 7px 10px; +  margin-left: 5px; +  margin-right: 5px; +  background-color: #2c2c2c; +  background-image: -moz-linear-gradient(top, #333333, #222222); +  background-image: -ms-linear-gradient(top, #333333, #222222); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); +  background-image: -webkit-linear-gradient(top, #333333, #222222); +  background-image: -o-linear-gradient(top, #333333, #222222); +  background-image: linear-gradient(top, #333333, #222222); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); +  border-color: #222222 #222222 #000000; +  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +  filter: progid:dximagetransform.microsoft.gradient(enabled=false); +  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} +.btn-navbar:hover, +.btn-navbar:active, +.btn-navbar.active, +.btn-navbar.disabled, +.btn-navbar[disabled] { +  background-color: #222222; +} +.btn-navbar:active, +.btn-navbar.active { +  background-color: #080808 \9; +} +.btn-navbar .icon-bar { +  display: block; +  width: 18px; +  height: 2px; +  background-color: #f5f5f5; +  -webkit-border-radius: 1px; +  -moz-border-radius: 1px; +  border-radius: 1px; +  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +  -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} +.btn-navbar .icon-bar + .icon-bar { +  margin-top: 3px; +} +.nav-collapse.collapse { +  height: auto; +} +.navbar { +  color: #999999; +} +.navbar .brand:hover { +  text-decoration: none; +} +.navbar .brand { +  float: left; +  display: block; +  padding: 8px 20px 12px; +  margin-left: -20px; +  font-size: 20px; +  font-weight: 200; +  line-height: 1; +  color: #ffffff; +} +.navbar .navbar-text { +  margin-bottom: 0; +  line-height: 40px; +} +.navbar .btn, +.navbar .btn-group { +  margin-top: 5px; +} +.navbar .btn-group .btn { +  margin-top: 0; +} +.navbar-form { +  margin-bottom: 0; +  *zoom: 1; +} +.navbar-form:before, +.navbar-form:after { +  display: table; +  content: ""; +} +.navbar-form:after { +  clear: both; +} +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { +  margin-top: 5px; +} +.navbar-form input, +.navbar-form select { +  display: inline-block; +  margin-bottom: 0; +} +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { +  margin-top: 3px; +} +.navbar-form .input-append, +.navbar-form .input-prepend { +  margin-top: 6px; +  white-space: nowrap; +} +.navbar-form .input-append input, +.navbar-form .input-prepend input { +  margin-top: 0; +} +.navbar-search { +  position: relative; +  float: left; +  margin-top: 6px; +  margin-bottom: 0; +} +.navbar-search .search-query { +  padding: 4px 9px; +  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +  font-size: 13px; +  font-weight: normal; +  line-height: 1; +  color: #ffffff; +  background-color: #626262; +  border: 1px solid #151515; +  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); +  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); +  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); +  -webkit-transition: none; +  -moz-transition: none; +  -ms-transition: none; +  -o-transition: none; +  transition: none; +} +.navbar-search .search-query:-moz-placeholder { +  color: #cccccc; +} +.navbar-search .search-query::-webkit-input-placeholder { +  color: #cccccc; +} +.navbar-search .search-query:focus, +.navbar-search .search-query.focused { +  padding: 5px 10px; +  color: #333333; +  text-shadow: 0 1px 0 #ffffff; +  background-color: #ffffff; +  border: 0; +  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +  -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +  outline: 0; +} +.navbar-fixed-top, +.navbar-fixed-bottom { +  position: fixed; +  right: 0; +  left: 0; +  z-index: 1030; +  margin-bottom: 0; +} +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { +  padding-left: 0; +  padding-right: 0; +  -webkit-border-radius: 0; +  -moz-border-radius: 0; +  border-radius: 0; +} +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { +  width: 940px; +} +.navbar-fixed-top { +  top: 0; +} +.navbar-fixed-bottom { +  bottom: 0; +} +.navbar .nav { +  position: relative; +  left: 0; +  display: block; +  float: left; +  margin: 0 10px 0 0; +} +.navbar .nav.pull-right { +  float: right; +} +.navbar .nav > li { +  display: block; +  float: left; +} +.navbar .nav > li > a { +  float: none; +  padding: 10px 10px 11px; +  line-height: 19px; +  color: #999999; +  text-decoration: none; +  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.navbar .nav > li > a:hover { +  background-color: transparent; +  color: #ffffff; +  text-decoration: none; +} +.navbar .nav .active > a, +.navbar .nav .active > a:hover { +  color: #ffffff; +  text-decoration: none; +  background-color: #222222; +} +.navbar .divider-vertical { +  height: 40px; +  width: 1px; +  margin: 0 9px; +  overflow: hidden; +  background-color: #222222; +  border-right: 1px solid #333333; +} +.navbar .nav.pull-right { +  margin-left: 10px; +  margin-right: 0; +} +.navbar .dropdown-menu { +  margin-top: 1px; +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +} +.navbar .dropdown-menu:before { +  content: ''; +  display: inline-block; +  border-left: 7px solid transparent; +  border-right: 7px solid transparent; +  border-bottom: 7px solid #ccc; +  border-bottom-color: rgba(0, 0, 0, 0.2); +  position: absolute; +  top: -7px; +  left: 9px; +} +.navbar .dropdown-menu:after { +  content: ''; +  display: inline-block; +  border-left: 6px solid transparent; +  border-right: 6px solid transparent; +  border-bottom: 6px solid #ffffff; +  position: absolute; +  top: -6px; +  left: 10px; +} +.navbar-fixed-bottom .dropdown-menu:before { +  border-top: 7px solid #ccc; +  border-top-color: rgba(0, 0, 0, 0.2); +  border-bottom: 0; +  bottom: -7px; +  top: auto; +} +.navbar-fixed-bottom .dropdown-menu:after { +  border-top: 6px solid #ffffff; +  border-bottom: 0; +  bottom: -6px; +  top: auto; +} +.navbar .nav .dropdown-toggle .caret, +.navbar .nav .open.dropdown .caret { +  border-top-color: #ffffff; +  border-bottom-color: #ffffff; +} +.navbar .nav .active .caret { +  opacity: 1; +  filter: alpha(opacity=100); +} +.navbar .nav .open > .dropdown-toggle, +.navbar .nav .active > .dropdown-toggle, +.navbar .nav .open.active > .dropdown-toggle { +  background-color: transparent; +} +.navbar .nav .active > .dropdown-toggle:hover { +  color: #ffffff; +} +.navbar .nav.pull-right .dropdown-menu, +.navbar .nav .dropdown-menu.pull-right { +  left: auto; +  right: 0; +} +.navbar .nav.pull-right .dropdown-menu:before, +.navbar .nav .dropdown-menu.pull-right:before { +  left: auto; +  right: 12px; +} +.navbar .nav.pull-right .dropdown-menu:after, +.navbar .nav .dropdown-menu.pull-right:after { +  left: auto; +  right: 13px; +} +.breadcrumb { +  padding: 7px 14px; +  margin: 0 0 18px; +  list-style: none; +  background-color: #fbfbfb; +  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); +  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); +  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); +  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); +  background-image: linear-gradient(top, #ffffff, #f5f5f5); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); +  border: 1px solid #ddd; +  -webkit-border-radius: 3px; +  -moz-border-radius: 3px; +  border-radius: 3px; +  -webkit-box-shadow: inset 0 1px 0 #ffffff; +  -moz-box-shadow: inset 0 1px 0 #ffffff; +  box-shadow: inset 0 1px 0 #ffffff; +} +.breadcrumb li { +  display: inline-block; +  *display: inline; +  /* IE7 inline-block hack */ + +  *zoom: 1; +  text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb .divider { +  padding: 0 5px; +  color: #999999; +} +.breadcrumb .active a { +  color: #333333; +} +.pagination { +  height: 36px; +  margin: 18px 0; +} +.pagination ul { +  display: inline-block; +  *display: inline; +  /* IE7 inline-block hack */ + +  *zoom: 1; +  margin-left: 0; +  margin-bottom: 0; +  -webkit-border-radius: 3px; +  -moz-border-radius: 3px; +  border-radius: 3px; +  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination li { +  display: inline; +} +.pagination a { +  float: left; +  padding: 0 14px; +  line-height: 34px; +  text-decoration: none; +  border: 1px solid #ddd; +  border-left-width: 0; +} +.pagination a:hover, +.pagination .active a { +  background-color: #f5f5f5; +} +.pagination .active a { +  color: #999999; +  cursor: default; +} +.pagination .disabled span, +.pagination .disabled a, +.pagination .disabled a:hover { +  color: #999999; +  background-color: transparent; +  cursor: default; +} +.pagination li:first-child a { +  border-left-width: 1px; +  -webkit-border-radius: 3px 0 0 3px; +  -moz-border-radius: 3px 0 0 3px; +  border-radius: 3px 0 0 3px; +} +.pagination li:last-child a { +  -webkit-border-radius: 0 3px 3px 0; +  -moz-border-radius: 0 3px 3px 0; +  border-radius: 0 3px 3px 0; +} +.pagination-centered { +  text-align: center; +} +.pagination-right { +  text-align: right; +} +.pager { +  margin-left: 0; +  margin-bottom: 18px; +  list-style: none; +  text-align: center; +  *zoom: 1; +} +.pager:before, +.pager:after { +  display: table; +  content: ""; +} +.pager:after { +  clear: both; +} +.pager li { +  display: inline; +} +.pager a { +  display: inline-block; +  padding: 5px 14px; +  background-color: #fff; +  border: 1px solid #ddd; +  -webkit-border-radius: 15px; +  -moz-border-radius: 15px; +  border-radius: 15px; +} +.pager a:hover { +  text-decoration: none; +  background-color: #f5f5f5; +} +.pager .next a { +  float: right; +} +.pager .previous a { +  float: left; +} +.pager .disabled a, +.pager .disabled a:hover { +  color: #999999; +  background-color: #fff; +  cursor: default; +} +.modal-open .dropdown-menu { +  z-index: 2050; +} +.modal-open .dropdown.open { +  *z-index: 2050; +} +.modal-open .popover { +  z-index: 2060; +} +.modal-open .tooltip { +  z-index: 2070; +} +.modal-backdrop { +  position: fixed; +  top: 0; +  right: 0; +  bottom: 0; +  left: 0; +  z-index: 1040; +  background-color: #000000; +} +.modal-backdrop.fade { +  opacity: 0; +} +.modal-backdrop, +.modal-backdrop.fade.in { +  opacity: 0.8; +  filter: alpha(opacity=80); +} +.modal { +  position: fixed; +  top: 50%; +  left: 50%; +  z-index: 1050; +  overflow: auto; +  width: 560px; +  margin: -250px 0 0 -280px; +  background-color: #ffffff; +  border: 1px solid #999; +  border: 1px solid rgba(0, 0, 0, 0.3); +  *border: 1px solid #999; +  /* IE6-7 */ + +  -webkit-border-radius: 6px; +  -moz-border-radius: 6px; +  border-radius: 6px; +  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +  -webkit-background-clip: padding-box; +  -moz-background-clip: padding-box; +  background-clip: padding-box; +} +.modal.fade { +  -webkit-transition: opacity .3s linear, top .3s ease-out; +  -moz-transition: opacity .3s linear, top .3s ease-out; +  -ms-transition: opacity .3s linear, top .3s ease-out; +  -o-transition: opacity .3s linear, top .3s ease-out; +  transition: opacity .3s linear, top .3s ease-out; +  top: -25%; +} +.modal.fade.in { +  top: 50%; +} +.modal-header { +  padding: 9px 15px; +  border-bottom: 1px solid #eee; +} +.modal-header .close { +  margin-top: 2px; +} +.modal-body { +  overflow-y: auto; +  max-height: 400px; +  padding: 15px; +} +.modal-form { +  margin-bottom: 0; +} +.modal-footer { +  padding: 14px 15px 15px; +  margin-bottom: 0; +  text-align: right; +  background-color: #f5f5f5; +  border-top: 1px solid #ddd; +  -webkit-border-radius: 0 0 6px 6px; +  -moz-border-radius: 0 0 6px 6px; +  border-radius: 0 0 6px 6px; +  -webkit-box-shadow: inset 0 1px 0 #ffffff; +  -moz-box-shadow: inset 0 1px 0 #ffffff; +  box-shadow: inset 0 1px 0 #ffffff; +  *zoom: 1; +} +.modal-footer:before, +.modal-footer:after { +  display: table; +  content: ""; +} +.modal-footer:after { +  clear: both; +} +.modal-footer .btn + .btn { +  margin-left: 5px; +  margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { +  margin-left: -1px; +} +.tooltip { +  position: absolute; +  z-index: 1020; +  display: block; +  visibility: visible; +  padding: 5px; +  font-size: 11px; +  opacity: 0; +  filter: alpha(opacity=0); +} +.tooltip.in { +  opacity: 0.8; +  filter: alpha(opacity=80); +} +.tooltip.top { +  margin-top: -2px; +} +.tooltip.right { +  margin-left: 2px; +} +.tooltip.bottom { +  margin-top: 2px; +} +.tooltip.left { +  margin-left: -2px; +} +.tooltip.top .tooltip-arrow { +  bottom: 0; +  left: 50%; +  margin-left: -5px; +  border-left: 5px solid transparent; +  border-right: 5px solid transparent; +  border-top: 5px solid #000000; +} +.tooltip.left .tooltip-arrow { +  top: 50%; +  right: 0; +  margin-top: -5px; +  border-top: 5px solid transparent; +  border-bottom: 5px solid transparent; +  border-left: 5px solid #000000; +} +.tooltip.bottom .tooltip-arrow { +  top: 0; +  left: 50%; +  margin-left: -5px; +  border-left: 5px solid transparent; +  border-right: 5px solid transparent; +  border-bottom: 5px solid #000000; +} +.tooltip.right .tooltip-arrow { +  top: 50%; +  left: 0; +  margin-top: -5px; +  border-top: 5px solid transparent; +  border-bottom: 5px solid transparent; +  border-right: 5px solid #000000; +} +.tooltip-inner { +  max-width: 200px; +  padding: 3px 8px; +  color: #ffffff; +  text-align: center; +  text-decoration: none; +  background-color: #000000; +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +} +.tooltip-arrow { +  position: absolute; +  width: 0; +  height: 0; +} +.popover { +  position: absolute; +  top: 0; +  left: 0; +  z-index: 1010; +  display: none; +  padding: 5px; +} +.popover.top { +  margin-top: -5px; +} +.popover.right { +  margin-left: 5px; +} +.popover.bottom { +  margin-top: 5px; +} +.popover.left { +  margin-left: -5px; +} +.popover.top .arrow { +  bottom: 0; +  left: 50%; +  margin-left: -5px; +  border-left: 5px solid transparent; +  border-right: 5px solid transparent; +  border-top: 5px solid #000000; +} +.popover.right .arrow { +  top: 50%; +  left: 0; +  margin-top: -5px; +  border-top: 5px solid transparent; +  border-bottom: 5px solid transparent; +  border-right: 5px solid #000000; +} +.popover.bottom .arrow { +  top: 0; +  left: 50%; +  margin-left: -5px; +  border-left: 5px solid transparent; +  border-right: 5px solid transparent; +  border-bottom: 5px solid #000000; +} +.popover.left .arrow { +  top: 50%; +  right: 0; +  margin-top: -5px; +  border-top: 5px solid transparent; +  border-bottom: 5px solid transparent; +  border-left: 5px solid #000000; +} +.popover .arrow { +  position: absolute; +  width: 0; +  height: 0; +} +.popover-inner { +  padding: 3px; +  width: 280px; +  overflow: hidden; +  background: #000000; +  background: rgba(0, 0, 0, 0.8); +  -webkit-border-radius: 6px; +  -moz-border-radius: 6px; +  border-radius: 6px; +  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +} +.popover-title { +  padding: 9px 15px; +  line-height: 1; +  background-color: #f5f5f5; +  border-bottom: 1px solid #eee; +  -webkit-border-radius: 3px 3px 0 0; +  -moz-border-radius: 3px 3px 0 0; +  border-radius: 3px 3px 0 0; +} +.popover-content { +  padding: 14px; +  background-color: #ffffff; +  -webkit-border-radius: 0 0 3px 3px; +  -moz-border-radius: 0 0 3px 3px; +  border-radius: 0 0 3px 3px; +  -webkit-background-clip: padding-box; +  -moz-background-clip: padding-box; +  background-clip: padding-box; +} +.popover-content p, +.popover-content ul, +.popover-content ol { +  margin-bottom: 0; +} +.thumbnails { +  margin-left: -20px; +  list-style: none; +  *zoom: 1; +} +.thumbnails:before, +.thumbnails:after { +  display: table; +  content: ""; +} +.thumbnails:after { +  clear: both; +} +.thumbnails > li { +  float: left; +  margin: 0 0 18px 20px; +} +.thumbnail { +  display: block; +  padding: 4px; +  line-height: 1; +  border: 1px solid #ddd; +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} +a.thumbnail:hover { +  border-color: #0088cc; +  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +  -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +  box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} +.thumbnail > img { +  display: block; +  max-width: 100%; +  margin-left: auto; +  margin-right: auto; +} +.thumbnail .caption { +  padding: 9px; +} +.label { +  padding: 1px 4px 2px; +  font-size: 10.998px; +  font-weight: bold; +  line-height: 13px; +  color: #ffffff; +  vertical-align: middle; +  white-space: nowrap; +  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +  background-color: #999999; +  -webkit-border-radius: 3px; +  -moz-border-radius: 3px; +  border-radius: 3px; +} +.label:hover { +  color: #ffffff; +  text-decoration: none; +} +.label-important { +  background-color: #b94a48; +} +.label-important:hover { +  background-color: #953b39; +} +.label-warning { +  background-color: #f89406; +} +.label-warning:hover { +  background-color: #c67605; +} +.label-success { +  background-color: #468847; +} +.label-success:hover { +  background-color: #356635; +} +.label-info { +  background-color: #3a87ad; +} +.label-info:hover { +  background-color: #2d6987; +} +.label-inverse { +  background-color: #333333; +} +.label-inverse:hover { +  background-color: #1a1a1a; +} +.badge { +  padding: 1px 9px 2px; +  font-size: 12.025px; +  font-weight: bold; +  white-space: nowrap; +  color: #ffffff; +  background-color: #999999; +  -webkit-border-radius: 9px; +  -moz-border-radius: 9px; +  border-radius: 9px; +} +.badge:hover { +  color: #ffffff; +  text-decoration: none; +  cursor: pointer; +} +.badge-error { +  background-color: #b94a48; +} +.badge-error:hover { +  background-color: #953b39; +} +.badge-warning { +  background-color: #f89406; +} +.badge-warning:hover { +  background-color: #c67605; +} +.badge-success { +  background-color: #468847; +} +.badge-success:hover { +  background-color: #356635; +} +.badge-info { +  background-color: #3a87ad; +} +.badge-info:hover { +  background-color: #2d6987; +} +.badge-inverse { +  background-color: #333333; +} +.badge-inverse:hover { +  background-color: #1a1a1a; +} +@-webkit-keyframes progress-bar-stripes { +  from { +    background-position: 0 0; +  } +  to { +    background-position: 40px 0; +  } +} +@-moz-keyframes progress-bar-stripes { +  from { +    background-position: 0 0; +  } +  to { +    background-position: 40px 0; +  } +} +@-ms-keyframes progress-bar-stripes { +  from { +    background-position: 0 0; +  } +  to { +    background-position: 40px 0; +  } +} +@keyframes progress-bar-stripes { +  from { +    background-position: 0 0; +  } +  to { +    background-position: 40px 0; +  } +} +.progress { +  overflow: hidden; +  height: 18px; +  margin-bottom: 18px; +  background-color: #f7f7f7; +  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); +  background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); +  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); +  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); +  background-image: linear-gradient(top, #f5f5f5, #f9f9f9); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0); +  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +} +.progress .bar { +  width: 0%; +  height: 18px; +  color: #ffffff; +  font-size: 12px; +  text-align: center; +  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +  background-color: #0e90d2; +  background-image: -moz-linear-gradient(top, #149bdf, #0480be); +  background-image: -ms-linear-gradient(top, #149bdf, #0480be); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); +  background-image: -webkit-linear-gradient(top, #149bdf, #0480be); +  background-image: -o-linear-gradient(top, #149bdf, #0480be); +  background-image: linear-gradient(top, #149bdf, #0480be); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0); +  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); +  -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); +  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); +  -webkit-box-sizing: border-box; +  -moz-box-sizing: border-box; +  -ms-box-sizing: border-box; +  box-sizing: border-box; +  -webkit-transition: width 0.6s ease; +  -moz-transition: width 0.6s ease; +  -ms-transition: width 0.6s ease; +  -o-transition: width 0.6s ease; +  transition: width 0.6s ease; +} +.progress-striped .bar { +  background-color: #149bdf; +  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); +  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  -webkit-background-size: 40px 40px; +  -moz-background-size: 40px 40px; +  -o-background-size: 40px 40px; +  background-size: 40px 40px; +} +.progress.active .bar { +  -webkit-animation: progress-bar-stripes 2s linear infinite; +  -moz-animation: progress-bar-stripes 2s linear infinite; +  animation: progress-bar-stripes 2s linear infinite; +} +.progress-danger .bar { +  background-color: #dd514c; +  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); +  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); +  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); +  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); +  background-image: linear-gradient(top, #ee5f5b, #c43c35); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); +} +.progress-danger.progress-striped .bar { +  background-color: #ee5f5b; +  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); +  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-success .bar { +  background-color: #5eb95e; +  background-image: -moz-linear-gradient(top, #62c462, #57a957); +  background-image: -ms-linear-gradient(top, #62c462, #57a957); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); +  background-image: -webkit-linear-gradient(top, #62c462, #57a957); +  background-image: -o-linear-gradient(top, #62c462, #57a957); +  background-image: linear-gradient(top, #62c462, #57a957); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); +} +.progress-success.progress-striped .bar { +  background-color: #62c462; +  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); +  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-info .bar { +  background-color: #4bb1cf; +  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); +  background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); +  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); +  background-image: -o-linear-gradient(top, #5bc0de, #339bb9); +  background-image: linear-gradient(top, #5bc0de, #339bb9); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); +} +.progress-info.progress-striped .bar { +  background-color: #5bc0de; +  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); +  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-warning .bar { +  background-color: #faa732; +  background-image: -moz-linear-gradient(top, #fbb450, #f89406); +  background-image: -ms-linear-gradient(top, #fbb450, #f89406); +  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); +  background-image: -webkit-linear-gradient(top, #fbb450, #f89406); +  background-image: -o-linear-gradient(top, #fbb450, #f89406); +  background-image: linear-gradient(top, #fbb450, #f89406); +  background-repeat: repeat-x; +  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); +} +.progress-warning.progress-striped .bar { +  background-color: #fbb450; +  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); +  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.accordion { +  margin-bottom: 18px; +} +.accordion-group { +  margin-bottom: 2px; +  border: 1px solid #e5e5e5; +  -webkit-border-radius: 4px; +  -moz-border-radius: 4px; +  border-radius: 4px; +} +.accordion-heading { +  border-bottom: 0; +} +.accordion-heading .accordion-toggle { +  display: block; +  padding: 8px 15px; +} +.accordion-inner { +  padding: 9px 15px; +  border-top: 1px solid #e5e5e5; +} +.carousel { +  position: relative; +  margin-bottom: 18px; +  line-height: 1; +} +.carousel-inner { +  overflow: hidden; +  width: 100%; +  position: relative; +} +.carousel .item { +  display: none; +  position: relative; +  -webkit-transition: 0.6s ease-in-out left; +  -moz-transition: 0.6s ease-in-out left; +  -ms-transition: 0.6s ease-in-out left; +  -o-transition: 0.6s ease-in-out left; +  transition: 0.6s ease-in-out left; +} +.carousel .item > img { +  display: block; +  line-height: 1; +} +.carousel .active, +.carousel .next, +.carousel .prev { +  display: block; +} +.carousel .active { +  left: 0; +} +.carousel .next, +.carousel .prev { +  position: absolute; +  top: 0; +  width: 100%; +} +.carousel .next { +  left: 100%; +} +.carousel .prev { +  left: -100%; +} +.carousel .next.left, +.carousel .prev.right { +  left: 0; +} +.carousel .active.left { +  left: -100%; +} +.carousel .active.right { +  left: 100%; +} +.carousel-control { +  position: absolute; +  top: 40%; +  left: 15px; +  width: 40px; +  height: 40px; +  margin-top: -20px; +  font-size: 60px; +  font-weight: 100; +  line-height: 30px; +  color: #ffffff; +  text-align: center; +  background: #222222; +  border: 3px solid #ffffff; +  -webkit-border-radius: 23px; +  -moz-border-radius: 23px; +  border-radius: 23px; +  opacity: 0.5; +  filter: alpha(opacity=50); +} +.carousel-control.right { +  left: auto; +  right: 15px; +} +.carousel-control:hover { +  color: #ffffff; +  text-decoration: none; +  opacity: 0.9; +  filter: alpha(opacity=90); +} +.carousel-caption { +  position: absolute; +  left: 0; +  right: 0; +  bottom: 0; +  padding: 10px 15px 5px; +  background: #333333; +  background: rgba(0, 0, 0, 0.75); +} +.carousel-caption h4, +.carousel-caption p { +  color: #ffffff; +} +.hero-unit { +  padding: 60px; +  margin-bottom: 30px; +  background-color: #eeeeee; +  -webkit-border-radius: 6px; +  -moz-border-radius: 6px; +  border-radius: 6px; +} +.hero-unit h1 { +  margin-bottom: 0; +  font-size: 60px; +  line-height: 1; +  color: inherit; +  letter-spacing: -1px; +} +.hero-unit p { +  font-size: 18px; +  font-weight: 200; +  line-height: 27px; +  color: inherit; +} +.pull-right { +  float: right; +} +.pull-left { +  float: left; +} +.hide { +  display: none; +} +.show { +  display: block; +} +.invisible { +  visibility: hidden; +} diff --git a/docs/components/bootstrap/google-prettify/prettify.css b/docs/components/bootstrap/google-prettify/prettify.css new file mode 100644 index 00000000..aedd8d1a --- /dev/null +++ b/docs/components/bootstrap/google-prettify/prettify.css @@ -0,0 +1,30 @@ +.com { color: #93a1a1; } +.lit { color: #195f91; } +.pun, .opn, .clo { color: #93a1a1; } +.fun { color: #dc322f; } +.str, .atv { color: #D14; } +.kwd, .linenums .tag { color: #1e347b; } +.typ, .atn, .dec, .var { color: teal; } +.pln { color: #48484c; } + +.prettyprint { +  padding: 8px; +  background-color: #f7f7f9; +  border: 1px solid #e1e1e8; +} +.prettyprint.linenums { +  -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; +     -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; +          box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { +  margin: 0 0 0 33px; /* IE indents via margin-left */ +}  +ol.linenums li { +  padding-left: 12px; +  color: #bebec5; +  line-height: 18px; +  text-shadow: 0 1px 0 #fff; +}
\ No newline at end of file diff --git a/docs/components/bootstrap/google-prettify/prettify.js b/docs/components/bootstrap/google-prettify/prettify.js new file mode 100644 index 00000000..63a12ad3 --- /dev/null +++ b/docs/components/bootstrap/google-prettify/prettify.js @@ -0,0 +1,1538 @@ +// Copyright (C) 2006 Google Inc. +// +// 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. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + * + * <p> + * For a fairly comprehensive set of languages see the + * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a> + * file that came with this source.  At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + * <p> + * Usage: <ol> + * <li> include this source file in an html page via + *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>} + * <li> define style rules.  See the example page for examples. + * <li> mark the {@code <pre>} and {@code <code>} tags in your source with + *    {@code class=prettyprint.} + *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty + *    printer needs to do more substantial DOM manipulations to support that, so + *    some css styles may not be preserved. + * </ol> + * That's it.  I wanted to keep the API as simple as possible, so there's no + * need to specify which language the code is in, but if you wish, you can add + * another class to the {@code <pre>} or {@code <code>} element to specify the + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that + * starts with "lang-" followed by a file extension, specifies the file type. + * See the "lang-*.js" files in this directory for code that implements + * per-language file handlers. + * <p> + * Change log:<br> + * cbeust, 2006/08/22 + * <blockquote> + *   Java annotations (start with "@") are now captured as literals ("lit") + * </blockquote> + * @requires console + */ + +// JSLint declarations +/*global console, document, navigator, setTimeout, window, define */ + +/** + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with + * UI events. + * If set to {@code false}, {@code prettyPrint()} is synchronous. + */ +window['PR_SHOULD_USE_CONTINUATION'] = true; + +/** + * Find all the {@code <pre>} and {@code <code>} tags in the DOM with + * {@code class=prettyprint} and prettify them. + * + * @param {Function?} opt_whenDone if specified, called when the last entry + *     has been finished. + */ +var prettyPrintOne; +/** + * Pretty print a chunk of code. + * + * @param {string} sourceCodeHtml code as html + * @return {string} code as html, but prettier + */ +var prettyPrint; + + +(function () { +  var win = window; +  // Keyword lists for various languages. +  // We use things that coerce to strings to make them compact when minified +  // and to defeat aggressive optimizers that fold large string constants. +  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"]; +  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," +  +      "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," + +      "static,struct,switch,typedef,union,unsigned,void,volatile"]; +  var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," + +      "new,operator,private,protected,public,this,throw,true,try,typeof"]; +  var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," + +      "concept,concept_map,const_cast,constexpr,decltype," + +      "dynamic_cast,explicit,export,friend,inline,late_check," + +      "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," + +      "template,typeid,typename,using,virtual,where"]; +  var JAVA_KEYWORDS = [COMMON_KEYWORDS, +      "abstract,boolean,byte,extends,final,finally,implements,import," + +      "instanceof,null,native,package,strictfp,super,synchronized,throws," + +      "transient"]; +  var CSHARP_KEYWORDS = [JAVA_KEYWORDS, +      "as,base,by,checked,decimal,delegate,descending,dynamic,event," + +      "fixed,foreach,from,group,implicit,in,interface,internal,into,is,let," + +      "lock,object,out,override,orderby,params,partial,readonly,ref,sbyte," + +      "sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort," + +      "var,virtual,where"]; +  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," + +      "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," + +      "throw,true,try,unless,until,when,while,yes"; +  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS, +      "debugger,eval,export,function,get,null,set,undefined,var,with," + +      "Infinity,NaN"]; +  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," + +      "goto,if,import,last,local,my,next,no,our,print,package,redo,require," + +      "sub,undef,unless,until,use,wantarray,while,BEGIN,END"; +  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," + +      "elif,except,exec,finally,from,global,import,in,is,lambda," + +      "nonlocal,not,or,pass,print,raise,try,with,yield," + +      "False,True,None"]; +  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," + +      "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," + +      "rescue,retry,self,super,then,true,undef,unless,until,when,yield," + +      "BEGIN,END"]; +  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," + +      "function,in,local,set,then,until"]; +  var ALL_KEYWORDS = [ +      CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS + +      PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS]; +  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/; + +  // token style names.  correspond to css classes +  /** +   * token style for a string literal +   * @const +   */ +  var PR_STRING = 'str'; +  /** +   * token style for a keyword +   * @const +   */ +  var PR_KEYWORD = 'kwd'; +  /** +   * token style for a comment +   * @const +   */ +  var PR_COMMENT = 'com'; +  /** +   * token style for a type +   * @const +   */ +  var PR_TYPE = 'typ'; +  /** +   * token style for a literal value.  e.g. 1, null, true. +   * @const +   */ +  var PR_LITERAL = 'lit'; +  /** +   * token style for a punctuation string. +   * @const +   */ +  var PR_PUNCTUATION = 'pun'; +  /** +   * token style for plain text. +   * @const +   */ +  var PR_PLAIN = 'pln'; + +  /** +   * token style for an sgml tag. +   * @const +   */ +  var PR_TAG = 'tag'; +  /** +   * token style for a markup declaration such as a DOCTYPE. +   * @const +   */ +  var PR_DECLARATION = 'dec'; +  /** +   * token style for embedded source. +   * @const +   */ +  var PR_SOURCE = 'src'; +  /** +   * token style for an sgml attribute name. +   * @const +   */ +  var PR_ATTRIB_NAME = 'atn'; +  /** +   * token style for an sgml attribute value. +   * @const +   */ +  var PR_ATTRIB_VALUE = 'atv'; + +  /** +   * A class that indicates a section of markup that is not code, e.g. to allow +   * embedding of line numbers within code listings. +   * @const +   */ +  var PR_NOCODE = 'nocode'; + + + +/** + * A set of tokens that can precede a regular expression literal in + * javascript + * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html + * has the full list, but I've removed ones that might be problematic when + * seen in languages that don't support regular expression literals. + * + * <p>Specifically, I've removed any keywords that can't precede a regexp + * literal in a syntactically legal javascript program, and I've removed the + * "in" keyword since it's not a keyword in many languages, and might be used + * as a count of inches. + * + * <p>The link above does not accurately describe EcmaScript rules since + * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works + * very well in practice. + * + * @private + * @const + */ +var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*'; + +// CAVEAT: this does not properly handle the case where a regular +// expression immediately follows another since a regular expression may +// have flags for case-sensitivity and the like.  Having regexp tokens +// adjacent is not valid in any language I'm aware of, so I'm punting. +// TODO: maybe style special characters inside a regexp as punctuation. + + +  /** +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally +   * matches the union of the sets of strings matched by the input RegExp. +   * Since it matches globally, if the input strings have a start-of-input +   * anchor (/^.../), it is ignored for the purposes of unioning. +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs. +   * @return {RegExp} a global regex. +   */ +  function combinePrefixPatterns(regexs) { +    var capturedGroupIndex = 0; +   +    var needToFoldCase = false; +    var ignoreCase = false; +    for (var i = 0, n = regexs.length; i < n; ++i) { +      var regex = regexs[i]; +      if (regex.ignoreCase) { +        ignoreCase = true; +      } else if (/[a-z]/i.test(regex.source.replace( +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) { +        needToFoldCase = true; +        ignoreCase = false; +        break; +      } +    } +   +    var escapeCharToCodeUnit = { +      'b': 8, +      't': 9, +      'n': 0xa, +      'v': 0xb, +      'f': 0xc, +      'r': 0xd +    }; +   +    function decodeEscape(charsetPart) { +      var cc0 = charsetPart.charCodeAt(0); +      if (cc0 !== 92 /* \\ */) { +        return cc0; +      } +      var c1 = charsetPart.charAt(1); +      cc0 = escapeCharToCodeUnit[c1]; +      if (cc0) { +        return cc0; +      } else if ('0' <= c1 && c1 <= '7') { +        return parseInt(charsetPart.substring(1), 8); +      } else if (c1 === 'u' || c1 === 'x') { +        return parseInt(charsetPart.substring(2), 16); +      } else { +        return charsetPart.charCodeAt(1); +      } +    } +   +    function encodeEscape(charCode) { +      if (charCode < 0x20) { +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16); +      } +      var ch = String.fromCharCode(charCode); +      return (ch === '\\' || ch === '-' || ch === ']' || ch === '^') +          ? "\\" + ch : ch; +    } +   +    function caseFoldCharset(charSet) { +      var charsetParts = charSet.substring(1, charSet.length - 1).match( +          new RegExp( +              '\\\\u[0-9A-Fa-f]{4}' +              + '|\\\\x[0-9A-Fa-f]{2}' +              + '|\\\\[0-3][0-7]{0,2}' +              + '|\\\\[0-7]{1,2}' +              + '|\\\\[\\s\\S]' +              + '|-' +              + '|[^-\\\\]', +              'g')); +      var ranges = []; +      var inverse = charsetParts[0] === '^'; +   +      var out = ['[']; +      if (inverse) { out.push('^'); } +   +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) { +        var p = charsetParts[i]; +        if (/\\[bdsw]/i.test(p)) {  // Don't muck with named groups. +          out.push(p); +        } else { +          var start = decodeEscape(p); +          var end; +          if (i + 2 < n && '-' === charsetParts[i + 1]) { +            end = decodeEscape(charsetParts[i + 2]); +            i += 2; +          } else { +            end = start; +          } +          ranges.push([start, end]); +          // If the range might intersect letters, then expand it. +          // This case handling is too simplistic. +          // It does not deal with non-latin case folding. +          // It works for latin source code identifiers though. +          if (!(end < 65 || start > 122)) { +            if (!(end < 65 || start > 90)) { +              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]); +            } +            if (!(end < 97 || start > 122)) { +              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]); +            } +          } +        } +      } +   +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]] +      // -> [[1, 12], [14, 14], [16, 17]] +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); }); +      var consolidatedRanges = []; +      var lastRange = []; +      for (var i = 0; i < ranges.length; ++i) { +        var range = ranges[i]; +        if (range[0] <= lastRange[1] + 1) { +          lastRange[1] = Math.max(lastRange[1], range[1]); +        } else { +          consolidatedRanges.push(lastRange = range); +        } +      } +   +      for (var i = 0; i < consolidatedRanges.length; ++i) { +        var range = consolidatedRanges[i]; +        out.push(encodeEscape(range[0])); +        if (range[1] > range[0]) { +          if (range[1] + 1 > range[0]) { out.push('-'); } +          out.push(encodeEscape(range[1])); +        } +      } +      out.push(']'); +      return out.join(''); +    } +   +    function allowAnywhereFoldCaseAndRenumberGroups(regex) { +      // Split into character sets, escape sequences, punctuation strings +      // like ('(', '(?:', ')', '^'), and runs of characters that do not +      // include any of the above. +      var parts = regex.source.match( +          new RegExp( +              '(?:' +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape +              + '|\\\\[0-9]+'  // a back-reference or octal escape +              + '|\\\\[^ux0-9]'  // other escape sequence +              + '|\\(\\?[:!=]'  // start of a non-capturing group +              + '|[\\(\\)\\^]'  // start/end of a group, or line start +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters +              + ')', +              'g')); +      var n = parts.length; +   +      // Maps captured group numbers to the number they will occupy in +      // the output or to -1 if that has not been determined, or to +      // undefined if they need not be capturing in the output. +      var capturedGroups = []; +   +      // Walk over and identify back references to build the capturedGroups +      // mapping. +      for (var i = 0, groupIndex = 0; i < n; ++i) { +        var p = parts[i]; +        if (p === '(') { +          // groups are 1-indexed, so max group index is count of '(' +          ++groupIndex; +        } else if ('\\' === p.charAt(0)) { +          var decimalValue = +p.substring(1); +          if (decimalValue) { +            if (decimalValue <= groupIndex) { +              capturedGroups[decimalValue] = -1; +            } else { +              // Replace with an unambiguous escape sequence so that +              // an octal escape sequence does not turn into a backreference +              // to a capturing group from an earlier regex. +              parts[i] = encodeEscape(decimalValue); +            } +          } +        } +      } +   +      // Renumber groups and reduce capturing groups to non-capturing groups +      // where possible. +      for (var i = 1; i < capturedGroups.length; ++i) { +        if (-1 === capturedGroups[i]) { +          capturedGroups[i] = ++capturedGroupIndex; +        } +      } +      for (var i = 0, groupIndex = 0; i < n; ++i) { +        var p = parts[i]; +        if (p === '(') { +          ++groupIndex; +          if (!capturedGroups[groupIndex]) { +            parts[i] = '(?:'; +          } +        } else if ('\\' === p.charAt(0)) { +          var decimalValue = +p.substring(1); +          if (decimalValue && decimalValue <= groupIndex) { +            parts[i] = '\\' + capturedGroups[decimalValue]; +          } +        } +      } +   +      // Remove any prefix anchors so that the output will match anywhere. +      // ^^ really does mean an anchored match though. +      for (var i = 0; i < n; ++i) { +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; } +      } +   +      // Expand letters to groups to handle mixing of case-sensitive and +      // case-insensitive patterns if necessary. +      if (regex.ignoreCase && needToFoldCase) { +        for (var i = 0; i < n; ++i) { +          var p = parts[i]; +          var ch0 = p.charAt(0); +          if (p.length >= 2 && ch0 === '[') { +            parts[i] = caseFoldCharset(p); +          } else if (ch0 !== '\\') { +            // TODO: handle letters in numeric escapes. +            parts[i] = p.replace( +                /[a-zA-Z]/g, +                function (ch) { +                  var cc = ch.charCodeAt(0); +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']'; +                }); +          } +        } +      } +   +      return parts.join(''); +    } +   +    var rewritten = []; +    for (var i = 0, n = regexs.length; i < n; ++i) { +      var regex = regexs[i]; +      if (regex.global || regex.multiline) { throw new Error('' + regex); } +      rewritten.push( +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')'); +    } +   +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g'); +  } + + +  /** +   * Split markup into a string of source code and an array mapping ranges in +   * that string to the text nodes in which they appear. +   * +   * <p> +   * The HTML DOM structure:</p> +   * <pre> +   * (Element   "p" +   *   (Element "b" +   *     (Text  "print "))       ; #1 +   *   (Text    "'Hello '")      ; #2 +   *   (Element "br")            ; #3 +   *   (Text    "  + 'World';")) ; #4 +   * </pre> +   * <p> +   * corresponds to the HTML +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p> +   * +   * <p> +   * It will produce the output:</p> +   * <pre> +   * { +   *   sourceCode: "print 'Hello '\n  + 'World';", +   *   //                     1          2 +   *   //           012345678901234 5678901234567 +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4] +   * } +   * </pre> +   * <p> +   * where #1 is a reference to the {@code "print "} text node above, and so +   * on for the other text nodes. +   * </p> +   * +   * <p> +   * The {@code} spans array is an array of pairs.  Even elements are the start +   * indices of substrings, and odd elements are the text nodes (or BR elements) +   * that contain the text for those substrings. +   * Substrings continue until the next index or the end of the source. +   * </p> +   * +   * @param {Node} node an HTML DOM subtree containing source-code. +   * @param {boolean} isPreformatted true if white-space in text nodes should +   *    be considered significant. +   * @return {Object} source code and the text nodes in which they occur. +   */ +  function extractSourceSpans(node, isPreformatted) { +    var nocode = /(?:^|\s)nocode(?:\s|$)/; +   +    var chunks = []; +    var length = 0; +    var spans = []; +    var k = 0; +   +    function walk(node) { +      switch (node.nodeType) { +        case 1:  // Element +          if (nocode.test(node.className)) { return; } +          for (var child = node.firstChild; child; child = child.nextSibling) { +            walk(child); +          } +          var nodeName = node.nodeName.toLowerCase(); +          if ('br' === nodeName || 'li' === nodeName) { +            chunks[k] = '\n'; +            spans[k << 1] = length++; +            spans[(k++ << 1) | 1] = node; +          } +          break; +        case 3: case 4:  // Text +          var text = node.nodeValue; +          if (text.length) { +            if (!isPreformatted) { +              text = text.replace(/[ \t\r\n]+/g, ' '); +            } else { +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines. +            } +            // TODO: handle tabs here? +            chunks[k] = text; +            spans[k << 1] = length; +            length += text.length; +            spans[(k++ << 1) | 1] = node; +          } +          break; +      } +    } +   +    walk(node); +   +    return { +      sourceCode: chunks.join('').replace(/\n$/, ''), +      spans: spans +    }; +  } + + +  /** +   * Apply the given language handler to sourceCode and add the resulting +   * decorations to out. +   * @param {number} basePos the index of sourceCode within the chunk of source +   *    whose decorations are already present on out. +   */ +  function appendDecorations(basePos, sourceCode, langHandler, out) { +    if (!sourceCode) { return; } +    var job = { +      sourceCode: sourceCode, +      basePos: basePos +    }; +    langHandler(job); +    out.push.apply(out, job.decorations); +  } + +  var notWs = /\S/; + +  /** +   * Given an element, if it contains only one child element and any text nodes +   * it contains contain only space characters, return the sole child element. +   * Otherwise returns undefined. +   * <p> +   * This is meant to return the CODE element in {@code <pre><code ...>} when +   * there is a single child element that contains all the non-space textual +   * content, but not to return anything where there are multiple child elements +   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there +   * is textual content. +   */ +  function childContentWrapper(element) { +    var wrapper = undefined; +    for (var c = element.firstChild; c; c = c.nextSibling) { +      var type = c.nodeType; +      wrapper = (type === 1)  // Element Node +          ? (wrapper ? element : c) +          : (type === 3)  // Text Node +          ? (notWs.test(c.nodeValue) ? element : wrapper) +          : wrapper; +    } +    return wrapper === element ? undefined : wrapper; +  } + +  /** Given triples of [style, pattern, context] returns a lexing function, +    * The lexing function interprets the patterns to find token boundaries and +    * returns a decoration list of the form +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n] +    * where index_n is an index into the sourceCode, and style_n is a style +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to +    * all characters in sourceCode[index_n-1:index_n]. +    * +    * The stylePatterns is a list whose elements have the form +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string]. +    * +    * Style is a style constant like PR_PLAIN, or can be a string of the +    * form 'lang-FOO', where FOO is a language extension describing the +    * language of the portion of the token in $1 after pattern executes. +    * E.g., if style is 'lang-lisp', and group 1 contains the text +    * '(hello (world))', then that portion of the token will be passed to the +    * registered lisp handler for formatting. +    * The text before and after group 1 will be restyled using this decorator +    * so decorators should take care that this doesn't result in infinite +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match +    * '<script>foo()<\/script>', which would cause the current decorator to +    * be called with '<script>' which would not match the same rule since +    * group 1 must not be empty, so it would be instead styled as PR_TAG by +    * the generic tag rule.  The handler registered for the 'js' extension would +    * then be called with 'foo()', and finally, the current decorator would +    * be called with '<\/script>' which would not match the original rule and +    * so the generic tag rule would identify it as a tag. +    * +    * Pattern must only match prefixes, and if it matches a prefix, then that +    * match is considered a token with the same style. +    * +    * Context is applied to the last non-whitespace, non-comment token +    * recognized. +    * +    * Shortcut is an optional string of characters, any of which, if the first +    * character, guarantee that this pattern and only this pattern matches. +    * +    * @param {Array} shortcutStylePatterns patterns that always start with +    *   a known character.  Must have a shortcut string. +    * @param {Array} fallthroughStylePatterns patterns that will be tried in +    *   order if the shortcut ones fail.  May have shortcuts. +    * +    * @return {function (Object)} a +    *   function that takes source code and returns a list of decorations. +    */ +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) { +    var shortcuts = {}; +    var tokenizer; +    (function () { +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns); +      var allRegexs = []; +      var regexKeys = {}; +      for (var i = 0, n = allPatterns.length; i < n; ++i) { +        var patternParts = allPatterns[i]; +        var shortcutChars = patternParts[3]; +        if (shortcutChars) { +          for (var c = shortcutChars.length; --c >= 0;) { +            shortcuts[shortcutChars.charAt(c)] = patternParts; +          } +        } +        var regex = patternParts[1]; +        var k = '' + regex; +        if (!regexKeys.hasOwnProperty(k)) { +          allRegexs.push(regex); +          regexKeys[k] = null; +        } +      } +      allRegexs.push(/[\0-\uffff]/); +      tokenizer = combinePrefixPatterns(allRegexs); +    })(); + +    var nPatterns = fallthroughStylePatterns.length; + +    /** +     * Lexes job.sourceCode and produces an output array job.decorations of +     * style classes preceded by the position at which they start in +     * job.sourceCode in order. +     * +     * @param {Object} job an object like <pre>{ +     *    sourceCode: {string} sourceText plain text, +     *    basePos: {int} position of job.sourceCode in the larger chunk of +     *        sourceCode. +     * }</pre> +     */ +    var decorate = function (job) { +      var sourceCode = job.sourceCode, basePos = job.basePos; +      /** Even entries are positions in source in ascending order.  Odd enties +        * are style markers (e.g., PR_COMMENT) that run from that position until +        * the end. +        * @type {Array.<number|string>} +        */ +      var decorations = [basePos, PR_PLAIN]; +      var pos = 0;  // index into sourceCode +      var tokens = sourceCode.match(tokenizer) || []; +      var styleCache = {}; + +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) { +        var token = tokens[ti]; +        var style = styleCache[token]; +        var match = void 0; + +        var isEmbedded; +        if (typeof style === 'string') { +          isEmbedded = false; +        } else { +          var patternParts = shortcuts[token.charAt(0)]; +          if (patternParts) { +            match = token.match(patternParts[1]); +            style = patternParts[0]; +          } else { +            for (var i = 0; i < nPatterns; ++i) { +              patternParts = fallthroughStylePatterns[i]; +              match = token.match(patternParts[1]); +              if (match) { +                style = patternParts[0]; +                break; +              } +            } + +            if (!match) {  // make sure that we make progress +              style = PR_PLAIN; +            } +          } + +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5); +          if (isEmbedded && !(match && typeof match[1] === 'string')) { +            isEmbedded = false; +            style = PR_SOURCE; +          } + +          if (!isEmbedded) { styleCache[token] = style; } +        } + +        var tokenStart = pos; +        pos += token.length; + +        if (!isEmbedded) { +          decorations.push(basePos + tokenStart, style); +        } else {  // Treat group 1 as an embedded block of source code. +          var embeddedSource = match[1]; +          var embeddedSourceStart = token.indexOf(embeddedSource); +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length; +          if (match[2]) { +            // If embeddedSource can be blank, then it would match at the +            // beginning which would cause us to infinitely recurse on the +            // entire token, so we catch the right context in match[2]. +            embeddedSourceEnd = token.length - match[2].length; +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length; +          } +          var lang = style.substring(5); +          // Decorate the left of the embedded source +          appendDecorations( +              basePos + tokenStart, +              token.substring(0, embeddedSourceStart), +              decorate, decorations); +          // Decorate the embedded source +          appendDecorations( +              basePos + tokenStart + embeddedSourceStart, +              embeddedSource, +              langHandlerForExtension(lang, embeddedSource), +              decorations); +          // Decorate the right of the embedded section +          appendDecorations( +              basePos + tokenStart + embeddedSourceEnd, +              token.substring(embeddedSourceEnd), +              decorate, decorations); +        } +      } +      job.decorations = decorations; +    }; +    return decorate; +  } + +  /** returns a function that produces a list of decorations from source text. +    * +    * This code treats ", ', and ` as string delimiters, and \ as a string +    * escape.  It does not recognize perl's qq() style strings. +    * It has no special handling for double delimiter escapes as in basic, or +    * the tripled delimiters used in python, but should work on those regardless +    * although in those cases a single string literal may be broken up into +    * multiple adjacent string literals. +    * +    * It recognizes C, C++, and shell style comments. +    * +    * @param {Object} options a set of optional parameters. +    * @return {function (Object)} a function that examines the source code +    *     in the input job and builds the decoration list. +    */ +  function sourceDecorator(options) { +    var shortcutStylePatterns = [], fallthroughStylePatterns = []; +    if (options['tripleQuotedStrings']) { +      // '''multi-line-string''', 'single-line-string', and double-quoted +      shortcutStylePatterns.push( +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/, +           null, '\'"']); +    } else if (options['multiLineStrings']) { +      // 'multi-line-string', "multi-line-string" +      shortcutStylePatterns.push( +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/, +           null, '\'"`']); +    } else { +      // 'single-line-string', "single-line-string" +      shortcutStylePatterns.push( +          [PR_STRING, +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/, +           null, '"\'']); +    } +    if (options['verbatimStrings']) { +      // verbatim-string-literal production from the C# grammar.  See issue 93. +      fallthroughStylePatterns.push( +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]); +    } +    var hc = options['hashComments']; +    if (hc) { +      if (options['cStyleComments']) { +        if (hc > 1) {  // multiline hash comments +          shortcutStylePatterns.push( +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']); +        } else { +          // Stop C preprocessor declarations at an unclosed open comment +          shortcutStylePatterns.push( +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/, +               null, '#']); +        } +        // #include <stdio.h> +        fallthroughStylePatterns.push( +            [PR_STRING, +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/, +             null]); +      } else { +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']); +      } +    } +    if (options['cStyleComments']) { +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]); +      fallthroughStylePatterns.push( +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]); +    } +    if (options['regexLiterals']) { +      /** +       * @const +       */ +      var REGEX_LITERAL = ( +          // A regular expression literal starts with a slash that is +          // not followed by * or / so that it is not confused with +          // comments. +          '/(?=[^/*])' +          // and then contains any number of raw characters, +          + '(?:[^/\\x5B\\x5C]' +          // escape sequences (\x5C), +          +    '|\\x5C[\\s\\S]' +          // or non-nesting character sets (\x5B\x5D); +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+' +          // finally closed by a /. +          + '/'); +      fallthroughStylePatterns.push( +          ['lang-regex', +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')') +           ]); +    } + +    var types = options['types']; +    if (types) { +      fallthroughStylePatterns.push([PR_TYPE, types]); +    } + +    var keywords = ("" + options['keywords']).replace(/^ | $/g, ''); +    if (keywords.length) { +      fallthroughStylePatterns.push( +          [PR_KEYWORD, +           new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'), +           null]); +    } + +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']); +    fallthroughStylePatterns.push( +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null], +        [PR_TYPE,        /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null], +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null], +        [PR_LITERAL, +         new RegExp( +             '^(?:' +             // A hex number +             + '0x[a-f0-9]+' +             // or an octal or decimal number, +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)' +             // possibly in scientific notation +             + '(?:e[+\\-]?\\d+)?' +             + ')' +             // with an optional modifier like UL for unsigned long +             + '[a-z]*', 'i'), +         null, '0123456789'], +        // Don't treat escaped quotes in bash as starting strings.  See issue 144. +        [PR_PLAIN,       /^\\[\s\S]?/, null], +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]); + +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns); +  } + +  var decorateSource = sourceDecorator({ +        'keywords': ALL_KEYWORDS, +        'hashComments': true, +        'cStyleComments': true, +        'multiLineStrings': true, +        'regexLiterals': true +      }); + +  /** +   * Given a DOM subtree, wraps it in a list, and puts each line into its own +   * list item. +   * +   * @param {Node} node modified in place.  Its content is pulled into an +   *     HTMLOListElement, and each line is moved into a separate list item. +   *     This requires cloning elements, so the input might not have unique +   *     IDs after numbering. +   * @param {boolean} isPreformatted true iff white-space in text nodes should +   *     be treated as significant. +   */ +  function numberLines(node, opt_startLineNum, isPreformatted) { +    var nocode = /(?:^|\s)nocode(?:\s|$)/; +    var lineBreak = /\r\n?|\n/; +   +    var document = node.ownerDocument; +   +    var li = document.createElement('li'); +    while (node.firstChild) { +      li.appendChild(node.firstChild); +    } +    // An array of lines.  We split below, so this is initialized to one +    // un-split line. +    var listItems = [li]; +   +    function walk(node) { +      switch (node.nodeType) { +        case 1:  // Element +          if (nocode.test(node.className)) { break; } +          if ('br' === node.nodeName) { +            breakAfter(node); +            // Discard the <BR> since it is now flush against a </LI>. +            if (node.parentNode) { +              node.parentNode.removeChild(node); +            } +          } else { +            for (var child = node.firstChild; child; child = child.nextSibling) { +              walk(child); +            } +          } +          break; +        case 3: case 4:  // Text +          if (isPreformatted) { +            var text = node.nodeValue; +            var match = text.match(lineBreak); +            if (match) { +              var firstLine = text.substring(0, match.index); +              node.nodeValue = firstLine; +              var tail = text.substring(match.index + match[0].length); +              if (tail) { +                var parent = node.parentNode; +                parent.insertBefore( +                    document.createTextNode(tail), node.nextSibling); +              } +              breakAfter(node); +              if (!firstLine) { +                // Don't leave blank text nodes in the DOM. +                node.parentNode.removeChild(node); +              } +            } +          } +          break; +      } +    } +   +    // Split a line after the given node. +    function breakAfter(lineEndNode) { +      // If there's nothing to the right, then we can skip ending the line +      // here, and move root-wards since splitting just before an end-tag +      // would require us to create a bunch of empty copies. +      while (!lineEndNode.nextSibling) { +        lineEndNode = lineEndNode.parentNode; +        if (!lineEndNode) { return; } +      } +   +      function breakLeftOf(limit, copy) { +        // Clone shallowly if this node needs to be on both sides of the break. +        var rightSide = copy ? limit.cloneNode(false) : limit; +        var parent = limit.parentNode; +        if (parent) { +          // We clone the parent chain. +          // This helps us resurrect important styling elements that cross lines. +          // E.g. in <i>Foo<br>Bar</i> +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>. +          var parentClone = breakLeftOf(parent, 1); +          // Move the clone and everything to the right of the original +          // onto the cloned parent. +          var next = limit.nextSibling; +          parentClone.appendChild(rightSide); +          for (var sibling = next; sibling; sibling = next) { +            next = sibling.nextSibling; +            parentClone.appendChild(sibling); +          } +        } +        return rightSide; +      } +   +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0); +   +      // Walk the parent chain until we reach an unattached LI. +      for (var parent; +           // Check nodeType since IE invents document fragments. +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) { +        copiedListItem = parent; +      } +      // Put it on the list of lines for later processing. +      listItems.push(copiedListItem); +    } +   +    // Split lines while there are lines left to split. +    for (var i = 0;  // Number of lines that have been split so far. +         i < listItems.length;  // length updated by breakAfter calls. +         ++i) { +      walk(listItems[i]); +    } +   +    // Make sure numeric indices show correctly. +    if (opt_startLineNum === (opt_startLineNum|0)) { +      listItems[0].setAttribute('value', opt_startLineNum); +    } +   +    var ol = document.createElement('ol'); +    ol.className = 'linenums'; +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0; +    for (var i = 0, n = listItems.length; i < n; ++i) { +      li = listItems[i]; +      // Stick a class on the LIs so that stylesheets can +      // color odd/even rows, or any other row pattern that +      // is co-prime with 10. +      li.className = 'L' + ((i + offset) % 10); +      if (!li.firstChild) { +        li.appendChild(document.createTextNode('\xA0')); +      } +      ol.appendChild(li); +    } +   +    node.appendChild(ol); +  } + +  /** +   * Breaks {@code job.sourceCode} around style boundaries in +   * {@code job.decorations} and modifies {@code job.sourceNode} in place. +   * @param {Object} job like <pre>{ +   *    sourceCode: {string} source as plain text, +   *    spans: {Array.<number|Node>} alternating span start indices into source +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that +   *       span. +   *    decorations: {Array.<number|string} an array of style classes preceded +   *       by the position at which they start in job.sourceCode in order +   * }</pre> +   * @private +   */ +  function recombineTagsAndDecorations(job) { +    var isIE8OrEarlier = /\bMSIE\s(\d+)/.exec(navigator.userAgent); +    isIE8OrEarlier = isIE8OrEarlier && +isIE8OrEarlier[1] <= 8; +    var newlineRe = /\n/g; +   +    var source = job.sourceCode; +    var sourceLength = source.length; +    // Index into source after the last code-unit recombined. +    var sourceIndex = 0; +   +    var spans = job.spans; +    var nSpans = spans.length; +    // Index into spans after the last span which ends at or before sourceIndex. +    var spanIndex = 0; +   +    var decorations = job.decorations; +    var nDecorations = decorations.length; +    // Index into decorations after the last decoration which ends at or before +    // sourceIndex. +    var decorationIndex = 0; +   +    // Remove all zero-length decorations. +    decorations[nDecorations] = sourceLength; +    var decPos, i; +    for (i = decPos = 0; i < nDecorations;) { +      if (decorations[i] !== decorations[i + 2]) { +        decorations[decPos++] = decorations[i++]; +        decorations[decPos++] = decorations[i++]; +      } else { +        i += 2; +      } +    } +    nDecorations = decPos; +   +    // Simplify decorations. +    for (i = decPos = 0; i < nDecorations;) { +      var startPos = decorations[i]; +      // Conflate all adjacent decorations that use the same style. +      var startDec = decorations[i + 1]; +      var end = i + 2; +      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) { +        end += 2; +      } +      decorations[decPos++] = startPos; +      decorations[decPos++] = startDec; +      i = end; +    } +   +    nDecorations = decorations.length = decPos; +   +    var sourceNode = job.sourceNode; +    var oldDisplay; +    if (sourceNode) { +      oldDisplay = sourceNode.style.display; +      sourceNode.style.display = 'none'; +    } +    try { +      var decoration = null; +      while (spanIndex < nSpans) { +        var spanStart = spans[spanIndex]; +        var spanEnd = spans[spanIndex + 2] || sourceLength; +   +        var decEnd = decorations[decorationIndex + 2] || sourceLength; +   +        var end = Math.min(spanEnd, decEnd); +   +        var textNode = spans[spanIndex + 1]; +        var styledText; +        if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s +            // Don't introduce spans around empty text nodes. +            && (styledText = source.substring(sourceIndex, end))) { +          // This may seem bizarre, and it is.  Emitting LF on IE causes the +          // code to display with spaces instead of line breaks. +          // Emitting Windows standard issue linebreaks (CRLF) causes a blank +          // space to appear at the beginning of every line but the first. +          // Emitting an old Mac OS 9 line separator makes everything spiffy. +          if (isIE8OrEarlier) { +            styledText = styledText.replace(newlineRe, '\r'); +          } +          textNode.nodeValue = styledText; +          var document = textNode.ownerDocument; +          var span = document.createElement('span'); +          span.className = decorations[decorationIndex + 1]; +          var parentNode = textNode.parentNode; +          parentNode.replaceChild(span, textNode); +          span.appendChild(textNode); +          if (sourceIndex < spanEnd) {  // Split off a text node. +            spans[spanIndex + 1] = textNode +                // TODO: Possibly optimize by using '' if there's no flicker. +                = document.createTextNode(source.substring(end, spanEnd)); +            parentNode.insertBefore(textNode, span.nextSibling); +          } +        } +   +        sourceIndex = end; +   +        if (sourceIndex >= spanEnd) { +          spanIndex += 2; +        } +        if (sourceIndex >= decEnd) { +          decorationIndex += 2; +        } +      } +    } finally { +      if (sourceNode) { +        sourceNode.style.display = oldDisplay; +      } +    } +  } + + +  /** Maps language-specific file extensions to handlers. */ +  var langHandlerRegistry = {}; +  /** Register a language handler for the given file extensions. +    * @param {function (Object)} handler a function from source code to a list +    *      of decorations.  Takes a single argument job which describes the +    *      state of the computation.   The single parameter has the form +    *      {@code { +    *        sourceCode: {string} as plain text. +    *        decorations: {Array.<number|string>} an array of style classes +    *                     preceded by the position at which they start in +    *                     job.sourceCode in order. +    *                     The language handler should assigned this field. +    *        basePos: {int} the position of source in the larger source chunk. +    *                 All positions in the output decorations array are relative +    *                 to the larger source chunk. +    *      } } +    * @param {Array.<string>} fileExtensions +    */ +  function registerLangHandler(handler, fileExtensions) { +    for (var i = fileExtensions.length; --i >= 0;) { +      var ext = fileExtensions[i]; +      if (!langHandlerRegistry.hasOwnProperty(ext)) { +        langHandlerRegistry[ext] = handler; +      } else if (win['console']) { +        console['warn']('cannot override language handler %s', ext); +      } +    } +  } +  function langHandlerForExtension(extension, source) { +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) { +      // Treat it as markup if the first non whitespace character is a < and +      // the last non-whitespace character is a >. +      extension = /^\s*</.test(source) +          ? 'default-markup' +          : 'default-code'; +    } +    return langHandlerRegistry[extension]; +  } +  registerLangHandler(decorateSource, ['default-code']); +  registerLangHandler( +      createSimpleLexer( +          [], +          [ +           [PR_PLAIN,       /^[^<?]+/], +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/], +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/], +           // Unescaped content in an unknown language +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/], +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/], +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/], +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i], +           // Unescaped content in javascript.  (Or possibly vbscript). +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i], +           // Contains unescaped stylesheet content +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i], +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i] +          ]), +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']); +  registerLangHandler( +      createSimpleLexer( +          [ +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'], +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\''] +           ], +          [ +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i], +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i], +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/], +           [PR_PUNCTUATION,  /^[=<>\/]+/], +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i], +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i], +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i], +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i], +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i], +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i] +           ]), +      ['in.tag']); +  registerLangHandler( +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']); +  registerLangHandler(sourceDecorator({ +          'keywords': CPP_KEYWORDS, +          'hashComments': true, +          'cStyleComments': true, +          'types': C_TYPES +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']); +  registerLangHandler(sourceDecorator({ +          'keywords': 'null,true,false' +        }), ['json']); +  registerLangHandler(sourceDecorator({ +          'keywords': CSHARP_KEYWORDS, +          'hashComments': true, +          'cStyleComments': true, +          'verbatimStrings': true, +          'types': C_TYPES +        }), ['cs']); +  registerLangHandler(sourceDecorator({ +          'keywords': JAVA_KEYWORDS, +          'cStyleComments': true +        }), ['java']); +  registerLangHandler(sourceDecorator({ +          'keywords': SH_KEYWORDS, +          'hashComments': true, +          'multiLineStrings': true +        }), ['bsh', 'csh', 'sh']); +  registerLangHandler(sourceDecorator({ +          'keywords': PYTHON_KEYWORDS, +          'hashComments': true, +          'multiLineStrings': true, +          'tripleQuotedStrings': true +        }), ['cv', 'py']); +  registerLangHandler(sourceDecorator({ +          'keywords': PERL_KEYWORDS, +          'hashComments': true, +          'multiLineStrings': true, +          'regexLiterals': true +        }), ['perl', 'pl', 'pm']); +  registerLangHandler(sourceDecorator({ +          'keywords': RUBY_KEYWORDS, +          'hashComments': true, +          'multiLineStrings': true, +          'regexLiterals': true +        }), ['rb']); +  registerLangHandler(sourceDecorator({ +          'keywords': JSCRIPT_KEYWORDS, +          'cStyleComments': true, +          'regexLiterals': true +        }), ['js']); +  registerLangHandler(sourceDecorator({ +          'keywords': COFFEE_KEYWORDS, +          'hashComments': 3,  // ### style block comments +          'cStyleComments': true, +          'multilineStrings': true, +          'tripleQuotedStrings': true, +          'regexLiterals': true +        }), ['coffee']); +  registerLangHandler( +      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']); + +  function applyDecorator(job) { +    var opt_langExtension = job.langExtension; + +    try { +      // Extract tags, and convert the source code to plain text. +      var sourceAndSpans = extractSourceSpans(job.sourceNode, job.pre); +      /** Plain text. @type {string} */ +      var source = sourceAndSpans.sourceCode; +      job.sourceCode = source; +      job.spans = sourceAndSpans.spans; +      job.basePos = 0; + +      // Apply the appropriate language handler +      langHandlerForExtension(opt_langExtension, source)(job); + +      // Integrate the decorations and tags back into the source code, +      // modifying the sourceNode in place. +      recombineTagsAndDecorations(job); +    } catch (e) { +      if (win['console']) { +        console['log'](e && e['stack'] ? e['stack'] : e); +      } +    } +  } + +  /** +   * @param sourceCodeHtml {string} The HTML to pretty print. +   * @param opt_langExtension {string} The language name to use. +   *     Typically, a filename extension like 'cpp' or 'java'. +   * @param opt_numberLines {number|boolean} True to number lines, +   *     or the 1-indexed number of the first line in sourceCodeHtml. +   */ +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) { +    // PATCHED: http://code.google.com/p/google-code-prettify/issues/detail?id=213 +    var container = document.createElement('div'); +    // This could cause images to load and onload listeners to fire. +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">. +    // We assume that the inner HTML is from a trusted source. +    container.innerHTML = '<pre>' + sourceCodeHtml + '</pre>'; +    container = container.firstChild; +    if (opt_numberLines) { +      numberLines(container, opt_numberLines, true); +    } + +    var job = { +      langExtension: opt_langExtension, +      numberLines: opt_numberLines, +      sourceNode: container, +      pre: 1 +    }; +    applyDecorator(job); +    return container.innerHTML; +  } + +  function prettyPrint(opt_whenDone) { +    function byTagName(tn) { return document.getElementsByTagName(tn); } +    // fetch a list of nodes to rewrite +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')]; +    var elements = []; +    for (var i = 0; i < codeSegments.length; ++i) { +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) { +        elements.push(codeSegments[i][j]); +      } +    } +    codeSegments = null; + +    var clock = Date; +    if (!clock['now']) { +      clock = { 'now': function () { return +(new Date); } }; +    } + +    // The loop is broken into a series of continuations to make sure that we +    // don't make the browser unresponsive when rewriting a large page. +    var k = 0; +    var prettyPrintingJob; + +    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/; +    var prettyPrintRe = /\bprettyprint\b/; +    var prettyPrintedRe = /\bprettyprinted\b/; +    var preformattedTagNameRe = /pre|xmp/i; +    var codeRe = /^code$/i; +    var preCodeXmpRe = /^(?:pre|code|xmp)$/i; + +    function doWork() { +      var endTime = (win['PR_SHOULD_USE_CONTINUATION'] ? +                     clock['now']() + 250 /* ms */ : +                     Infinity); +      for (; k < elements.length && clock['now']() < endTime; k++) { +        var cs = elements[k]; +        var className = cs.className; +        if (prettyPrintRe.test(className) +            // Don't redo this if we've already done it. +            // This allows recalling pretty print to just prettyprint elements +            // that have been added to the page since last call. +            && !prettyPrintedRe.test(className)) { + +          // make sure this is not nested in an already prettified element +          var nested = false; +          for (var p = cs.parentNode; p; p = p.parentNode) { +            var tn = p.tagName; +            if (preCodeXmpRe.test(tn) +                && p.className && prettyPrintRe.test(p.className)) { +              nested = true; +              break; +            } +          } +          if (!nested) { +            // Mark done.  If we fail to prettyprint for whatever reason, +            // we shouldn't try again. +            cs.className += ' prettyprinted'; + +            // If the classes includes a language extensions, use it. +            // Language extensions can be specified like +            //     <pre class="prettyprint lang-cpp"> +            // the language extension "cpp" is used to find a language handler +            // as passed to PR.registerLangHandler. +            // HTML5 recommends that a language be specified using "language-" +            // as the prefix instead.  Google Code Prettify supports both. +            // http://dev.w3.org/html5/spec-author-view/the-code-element.html +            var langExtension = className.match(langExtensionRe); +            // Support <pre class="prettyprint"><code class="language-c"> +            var wrapper; +            if (!langExtension && (wrapper = childContentWrapper(cs)) +                && codeRe.test(wrapper.tagName)) { +              langExtension = wrapper.className.match(langExtensionRe); +            } + +            if (langExtension) { langExtension = langExtension[1]; } + +            var preformatted; +            if (preformattedTagNameRe.test(cs.tagName)) { +              preformatted = 1; +            } else { +              var currentStyle = cs['currentStyle']; +              var whitespace = ( +                  currentStyle +                  ? currentStyle['whiteSpace'] +                  : (document.defaultView +                     && document.defaultView.getComputedStyle) +                  ? document.defaultView.getComputedStyle(cs, null) +                  .getPropertyValue('white-space') +                  : 0); +              preformatted = whitespace +                  && 'pre' === whitespace.substring(0, 3); +            } + +            // Look for a class like linenums or linenums:<n> where <n> is the +            // 1-indexed number of the first line. +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/); +            lineNums = lineNums +                ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true +                : false; +            if (lineNums) { numberLines(cs, lineNums, preformatted); } + +            // do the pretty printing +            prettyPrintingJob = { +              langExtension: langExtension, +              sourceNode: cs, +              numberLines: lineNums, +              pre: preformatted +            }; +            applyDecorator(prettyPrintingJob); +          } +        } +      } +      if (k < elements.length) { +        // finish up in a continuation +        setTimeout(doWork, 250); +      } else if (opt_whenDone) { +        opt_whenDone(); +      } +    } + +    doWork(); +  } + +  /** +   * Contains functions for creating and registering new language handlers. +   * @type {Object} +   */ +  var PR = win['PR'] = { +        'createSimpleLexer': createSimpleLexer, +        'registerLangHandler': registerLangHandler, +        'sourceDecorator': sourceDecorator, +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME, +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE, +        'PR_COMMENT': PR_COMMENT, +        'PR_DECLARATION': PR_DECLARATION, +        'PR_KEYWORD': PR_KEYWORD, +        'PR_LITERAL': PR_LITERAL, +        'PR_NOCODE': PR_NOCODE, +        'PR_PLAIN': PR_PLAIN, +        'PR_PUNCTUATION': PR_PUNCTUATION, +        'PR_SOURCE': PR_SOURCE, +        'PR_STRING': PR_STRING, +        'PR_TAG': PR_TAG, +        'PR_TYPE': PR_TYPE, +        'prettyPrintOne': win['prettyPrintOne'] = prettyPrintOne, +        'prettyPrint': win['prettyPrint'] = prettyPrint +      }; + +  // Make PR available via the Asynchronous Module Definition (AMD) API. +  // Per https://github.com/amdjs/amdjs-api/wiki/AMD: +  // The Asynchronous Module Definition (AMD) API specifies a +  // mechanism for defining modules such that the module and its +  // dependencies can be asynchronously loaded. +  // ... +  // To allow a clear indicator that a global define function (as +  // needed for script src browser loading) conforms to the AMD API, +  // any global define function SHOULD have a property called "amd" +  // whose value is an object. This helps avoid conflict with any +  // other existing JavaScript code that could have defined a define() +  // function that does not conform to the AMD API. +  if (typeof define === "function" && define['amd']) { +    define("google-code-prettify", [], function () { +      return PR;  +    }); +  } +})(); | 
