Showing preview only (1,144K chars total). Download the full file or copy to clipboard to get everything.
Repository: mozilla/scanjs
Branch: master
Commit: 27affd5ac6a6
Files: 79
Total size: 1.1 MB
Directory structure:
gitextract_3kpowr9z/
├── .gitignore
├── LICENSE
├── README.md
├── client/
│ ├── css/
│ │ ├── angular-csp.css
│ │ ├── app.css
│ │ ├── bootstrap.css
│ │ ├── codemirror-mdn.css
│ │ ├── codemirror.css
│ │ ├── dashboard.css
│ │ ├── font-awesome.css
│ │ └── prettify.css
│ ├── fonts/
│ │ └── FontAwesome.otf
│ ├── index.html
│ ├── js/
│ │ ├── experimentctrl.js
│ │ ├── lib/
│ │ │ ├── acorn.js
│ │ │ ├── acorn_loose.js
│ │ │ ├── codemirror-compressed.js
│ │ │ ├── codemirror.js
│ │ │ ├── codemirror_javascript_mode.js
│ │ │ ├── ui-bootstrap-tpls-0.3.0.js
│ │ │ ├── utils.js
│ │ │ └── walk.js
│ │ ├── locationctrl.js
│ │ ├── main.js
│ │ ├── rulesctrl.js
│ │ ├── scanctrl.js
│ │ ├── scanservice.js
│ │ └── scanworker.js
│ ├── partials/
│ │ ├── experiment.html
│ │ ├── rules.html
│ │ └── scan.html
│ └── rules.readme.md
├── common/
│ ├── rules.json
│ ├── scan.js
│ └── template_rules.json
├── deploy-ghpages.sh
├── package.json
├── scanner.js
├── server.js
├── stackato.yml
└── tests/
├── TESTING
├── advanced.html
├── cases/
│ ├── CustomEvent.js
│ ├── action.js
│ ├── addEventListener.js
│ ├── addIdleObserver.js
│ ├── createContextualFragment.js
│ ├── crypto.generateCRMFRequest.js
│ ├── data.js
│ ├── document.write.js
│ ├── document.writeln.js
│ ├── escapeHTML.js
│ ├── eval.js
│ ├── geolocation.js
│ ├── getDeviceStorage.js
│ ├── href.js
│ ├── indexedDB.js
│ ├── innerhtml.js
│ ├── localStorage.js
│ ├── message.js
│ ├── moz/
│ │ └── moz.js
│ ├── newFunction.js
│ ├── outerHTML.js
│ ├── parseFromString.js
│ ├── placeholders.js
│ ├── production_ruletests.js
│ ├── sessionStorage.js
│ ├── setInterval.js
│ ├── setTimeout.js
│ ├── src.js
│ ├── test_ruletests.js
│ └── window.open.js
├── css/
│ └── mocha.css
├── index.html
├── js/
│ ├── chai.js
│ ├── loadrules.js
│ ├── main.js
│ └── mocha.js
└── mocha-includes.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
node_modules
/nbproject/
.idea/
================================================
FILE: LICENSE
================================================
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
================================================
FILE: README.md
================================================
**Development of ScanJS has stopped.**
=======================================
We are using [ESLint](http://eslint.org) instead.
Your options:
* XSS-prevention rule during CI with [eslint-plugin-no-unsanitized](https://github.com/mozilla/eslint-plugin-no-unsanitized). This assumes that you prevent/disallow obfuscation and that your code is subject to code review before it is being scanned (e.g., to catch intentional malicious/obfuscated code)
* If you want something that warn for "all the things" that scanjs pointed out, you will need to use and build upon [eslint-config-scanjs](https://github.com/mozfreddyb/eslint-config-scanjs).
Thank you.
--------------------------------
ScanJS was was a Static analysis tool for javascript code. ScanJS was created as an aid for security review, to help identify security issues in client-side web applications.
ScanJS used Acorn to convert sources to AST, then walks AST looking for source patterns. You could use the rules file supplied, or load your own rules.
ScanJS Rules
------------------------
Rules are specified in JSON format - for an example see ```/common/template_rules.json```
At a minimum, each must have rule is made up of 2 attributes:
- name: the name of the rule
- source: javascript source which matches one of the patterns below (see Rule Syntax below)
Optionally a rule may have the following attirbutes:
- testhit: one more JavaScript statements (seperate by semi-colons) that the rule will match
- testmiss: the rule should not match any of these statements
- desc: description of the rule
- threat: for catgorizing rules by threat
Rule Syntax
------------------------
For the `source` attribute, the following basic statements are supported:
- identifier `foo`: matches any identifier , "foo"
- property `$_any.foo`: $_any is wildcard, matches anything.foo
- objectproperty `foo.bar`: matches object and property, i.e. foo.bar
You can also matches function calls based on the same syntax:
- call `foo()`: matches function calls with this name
- propertycall `$_any.foo`: matches anything.foo() but not foo()
- objectpropertycall: `foo.bar()`: matches foo.bar() only
You can also search for functions with matching literal arguments:
- callargs `foo('test',ignored,42)`: matches a function called foo, with 'test' as the first argument, anything as the second argument, and the number 42 as the third argument (i.e. matches ONLY literal arguments).
- propertycallargs `$_any.foo('test',ignored,42)`: same as above, but function has to be a property.
- objectpropertycallargs `foo.bar('test',ignored,42)`: same as above, but matches both object and property
You can also search for assignment to a specifically named identifier:
- assignment `foo=$_any`: matches when foo is assigned to something
- propertyassignment `$_any.foo=$_any`: matches when anything.foo is assigned to something
- objectpropertyassignment `foo.bar=$_any`: matches when foo.bar is assigned to something
If you specify `$_unsafe` on the right hand side (e.g. foo.innerHTML=$_unsafe), it will only match if the RHS contains at least one identifier.
Tips:
- Javascript is very dynamic, and this is navie approach: write conservative rules and review for false positives
- One simple statement per rule, not complex statements (yet)!
- 'foo' does NOT match 'this.foo', if you are looking for something in global (e.g. 'alert()' ), you need to add two rules: 'alert.()' and '$_any.alert()'
- Try the rule out in the experiment tab to test what it matches
Examples:
See /common/template_rules.json and /common/rules.json
Running ScanJS
======================
Run ScanJS in the browser
------------------------
- Install [node.js](http://nodejs.org/)
- ```nodejs server.js```
- Navigate to http://127.0.0.1:4000/client/ or see our [example page](http://mozilla.github.io/scanjs/client/)
Run ScanJS from the command line
------------------------
- Install [node.js](http://nodejs.org/)
- ```scanner.js -t DIRECTORY_PATH```
Testing instructions
------------------------
Tests use the mocha testing framework.
- `npm test`
- or in the browser:```http://127.0.0.1:4000/tests/```
Tests are included in the rules declaration (see common/rules.json) by specifying the following two attributes, which are specified in the form of a series of javascript statements:
- _testhit_: The rule should match each of these statements individualy.
- _testmiss_: The rule should not match all of these statements.
================================================
FILE: client/css/angular-csp.css
================================================
/* Include this file in your html if you are using the CSP mode. */
@charset "UTF-8";
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
.ng-cloak, .x-ng-cloak,
.ng-hide {
display: none !important;
}
ng\:form {
display: block;
}
.ng-animate-block-transitions {
transition:0s all!important;
-webkit-transition:0s all!important;
}
================================================
FILE: client/css/app.css
================================================
@import url("bootstrap.css");
@import url("dashboard.css");
@import url("codemirror.css");
@import url("codemirror-mdn.css");
@import url("prettify.css");
@import url("font-awesome.css");
html, body {
height: 100%;
width: 100%;
}
pre.prettyprint{
width: auto;
max-width: 600px;
overflow: auto;
font-size: x-small;
}
.navbar {
background: #4D4E53;
}
.nav > li > a:hover,
.nav > li > a:focus {
background-color: #0095DD;
}
a {
cursor:pointer;
}
.sidebar {
background-color: #EAEFF2;
}
.jumbotron {
background: #D4DDE4;
}
.table {
border: 1px solid #EAEFF2;
}
.table-striped > tbody > tr:nth-child(odd) > td,
.table-striped > tbody > tr:nth-child(odd) > th {
background-color: #EAEFF2;
}
.sidebar-inputfiles{
font-size: x-small;
}
.CodeMirror {
border: 1px solid #EAEFF2;
height:500px;
}
.badge {
margin: 3px 3px 3px 3px;
}
@-webkit-keyframes rotating {
0% {
-webkit-transform: rotate(0deg);
color: #333;
}
25% {
-webkit-transform: rotate(90deg);
color: #70706F;
}
50% {
-webkit-transform: rotate(180deg);
color: #ADADAB;
}
75% {
-webkit-transform: rotate(270deg);
color: #EAEAE7;
}
100% {
-webkit-transform: rotate(360deg);
color: #333;
}
}
@keyframes rotating {
0% {
transform: rotate(0deg);
color: #333;
}
25% {
transform: rotate(90deg);
color: #70706F;
}
50% {
transform: rotate(180deg);
color: #ADADAB;
}
75% {
transform: rotate(270deg);
color: #EAEAE7;
}
100% {
transform: rotate(360deg);
color: #333;
}
}
.rotating {
margin: 5px 3px 0 3px;
-webkit-animation: rotating 1s linear infinite;
animation: rotating 1s linear infinite;
}
.fixed {
position: fixed;
min-width: 45%;
}
================================================
FILE: client/css/bootstrap.css
================================================
/*!
* Bootstrap v3.1.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
html {
font-family: sans-serif;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
body {
margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
audio,
canvas,
progress,
video {
display: inline-block;
vertical-align: baseline;
}
audio:not([controls]) {
display: none;
height: 0;
}
[hidden],
template {
display: none;
}
a {
background: transparent;
}
a:active,
a:hover {
outline: 0;
}
abbr[title] {
border-bottom: 1px dotted;
}
b,
strong {
font-weight: bold;
}
dfn {
font-style: italic;
}
h1 {
margin: .67em 0;
font-size: 2em;
}
mark {
color: #000;
background: #ff0;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sup {
top: -.5em;
}
sub {
bottom: -.25em;
}
img {
border: 0;
}
svg:not(:root) {
overflow: hidden;
}
figure {
margin: 1em 40px;
}
hr {
height: 0;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
pre {
overflow: auto;
}
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
margin: 0;
font: inherit;
color: inherit;
}
button {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
padding: 0;
border: 0;
}
input {
line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
input[type="search"] {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
-webkit-appearance: textfield;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
fieldset {
padding: .35em .625em .75em;
margin: 0 2px;
border: 1px solid #c0c0c0;
}
legend {
padding: 0;
border: 0;
}
textarea {
overflow: auto;
}
optgroup {
font-weight: bold;
}
table {
border-spacing: 0;
border-collapse: collapse;
}
td,
th {
padding: 0;
}
@media print {
* {
color: #000 !important;
text-shadow: none !important;
background: transparent !important;
box-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
a[href^="javascript:"]:after,
a[href^="#"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group;
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
select {
background: #fff !important;
}
.navbar {
display: none;
}
.table td,
.table th {
background-color: #fff !important;
}
.btn > .caret,
.dropup > .btn > .caret {
border-top-color: #000 !important;
}
.label {
border: 1px solid #000;
}
.table {
border-collapse: collapse !important;
}
.table-bordered th,
.table-bordered td {
border: 1px solid #ddd !important;
}
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html {
font-size: 62.5%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.42857143;
color: #333;
background-color: #fff;
}
input,
button,
select,
textarea {
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
a {
color: #428bca;
text-decoration: none;
}
a:hover,
a:focus {
color: #2a6496;
text-decoration: underline;
}
a:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
figure {
margin: 0;
}
img {
vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
display: block;
max-width: 100%;
height: auto;
}
.img-rounded {
border-radius: 6px;
}
.img-thumbnail {
display: inline-block;
max-width: 100%;
height: auto;
padding: 4px;
line-height: 1.42857143;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 4px;
-webkit-transition: all .2s ease-in-out;
transition: all .2s ease-in-out;
}
.img-circle {
border-radius: 50%;
}
hr {
margin-top: 20px;
margin-bottom: 20px;
border: 0;
border-top: 1px solid #eee;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
font-family: inherit;
font-weight: 500;
line-height: 1.1;
color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
font-weight: normal;
line-height: 1;
color: #999;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
margin-top: 20px;
margin-bottom: 10px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
margin-top: 10px;
margin-bottom: 10px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
font-size: 75%;
}
h1,
.h1 {
font-size: 36px;
}
h2,
.h2 {
font-size: 30px;
}
h3,
.h3 {
font-size: 24px;
}
h4,
.h4 {
font-size: 18px;
}
h5,
.h5 {
font-size: 14px;
}
h6,
.h6 {
font-size: 12px;
}
p {
margin: 0 0 10px;
}
.lead {
margin-bottom: 20px;
font-size: 16px;
font-weight: 200;
line-height: 1.4;
}
@media (min-width: 768px) {
.lead {
font-size: 21px;
}
}
small,
.small {
font-size: 85%;
}
cite {
font-style: normal;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
.text-justify {
text-align: justify;
}
.text-muted {
color: #999;
}
.text-primary {
color: #428bca;
}
a.text-primary:hover {
color: #3071a9;
}
.text-success {
color: #3c763d;
}
a.text-success:hover {
color: #2b542c;
}
.text-info {
color: #31708f;
}
a.text-info:hover {
color: #245269;
}
.text-warning {
color: #8a6d3b;
}
a.text-warning:hover {
color: #66512c;
}
.text-danger {
color: #a94442;
}
a.text-danger:hover {
color: #843534;
}
.bg-primary {
color: #fff;
background-color: #428bca;
}
a.bg-primary:hover {
background-color: #3071a9;
}
.bg-success {
background-color: #dff0d8;
}
a.bg-success:hover {
background-color: #c1e2b3;
}
.bg-info {
background-color: #d9edf7;
}
a.bg-info:hover {
background-color: #afd9ee;
}
.bg-warning {
background-color: #fcf8e3;
}
a.bg-warning:hover {
background-color: #f7ecb5;
}
.bg-danger {
background-color: #f2dede;
}
a.bg-danger:hover {
background-color: #e4b9b9;
}
.page-header {
padding-bottom: 9px;
margin: 40px 0 20px;
border-bottom: 1px solid #eee;
}
ul,
ol {
margin-top: 0;
margin-bottom: 10px;
}
ul ul,
ol ul,
ul ol,
ol ol {
margin-bottom: 0;
}
.list-unstyled {
padding-left: 0;
list-style: none;
}
.list-inline {
padding-left: 0;
margin-left: -5px;
list-style: none;
}
.list-inline > li {
display: inline-block;
padding-right: 5px;
padding-left: 5px;
}
dl {
margin-top: 0;
margin-bottom: 20px;
}
dt,
dd {
line-height: 1.42857143;
}
dt {
font-weight: bold;
}
dd {
margin-left: 0;
}
@media (min-width: 768px) {
.dl-horizontal dt {
float: left;
width: 160px;
overflow: hidden;
clear: left;
text-align: right;
text-overflow: ellipsis;
white-space: nowrap;
}
.dl-horizontal dd {
margin-left: 180px;
}
}
abbr[title],
abbr[data-original-title] {
cursor: help;
border-bottom: 1px dotted #999;
}
.initialism {
font-size: 90%;
text-transform: uppercase;
}
blockquote {
padding: 10px 20px;
margin: 0 0 20px;
font-size: 17.5px;
border-left: 5px solid #eee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
display: block;
font-size: 80%;
line-height: 1.42857143;
color: #999;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
padding-right: 15px;
padding-left: 0;
text-align: right;
border-right: 5px solid #eee;
border-left: 0;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
content: '\00A0 \2014';
}
blockquote:before,
blockquote:after {
content: "";
}
address {
margin-bottom: 20px;
font-style: normal;
line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
}
code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
white-space: nowrap;
background-color: #f9f2f4;
border-radius: 4px;
}
kbd {
padding: 2px 4px;
font-size: 90%;
color: #fff;
background-color: #333;
border-radius: 3px;
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
}
pre {
display: block;
padding: 9.5px;
margin: 0 0 10px;
font-size: 13px;
line-height: 1.42857143;
color: #333;
word-break: break-all;
word-wrap: break-word;
background-color: #f5f5f5;
border: 1px solid #ccc;
border-radius: 4px;
}
pre code {
padding: 0;
font-size: inherit;
color: inherit;
white-space: pre-wrap;
background-color: transparent;
border-radius: 0;
}
.pre-scrollable {
max-height: 340px;
overflow-y: scroll;
}
.container {
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
@media (min-width: 768px) {
.container {
width: 750px;
}
}
@media (min-width: 992px) {
.container {
width: 970px;
}
}
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}
.container-fluid {
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
.row {
margin-right: -15px;
margin-left: -15px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
float: left;
}
.col-xs-12 {
width: 100%;
}
.col-xs-11 {
width: 91.66666667%;
}
.col-xs-10 {
width: 83.33333333%;
}
.col-xs-9 {
width: 75%;
}
.col-xs-8 {
width: 66.66666667%;
}
.col-xs-7 {
width: 58.33333333%;
}
.col-xs-6 {
width: 50%;
}
.col-xs-5 {
width: 41.66666667%;
}
.col-xs-4 {
width: 33.33333333%;
}
.col-xs-3 {
width: 25%;
}
.col-xs-2 {
width: 16.66666667%;
}
.col-xs-1 {
width: 8.33333333%;
}
.col-xs-pull-12 {
right: 100%;
}
.col-xs-pull-11 {
right: 91.66666667%;
}
.col-xs-pull-10 {
right: 83.33333333%;
}
.col-xs-pull-9 {
right: 75%;
}
.col-xs-pull-8 {
right: 66.66666667%;
}
.col-xs-pull-7 {
right: 58.33333333%;
}
.col-xs-pull-6 {
right: 50%;
}
.col-xs-pull-5 {
right: 41.66666667%;
}
.col-xs-pull-4 {
right: 33.33333333%;
}
.col-xs-pull-3 {
right: 25%;
}
.col-xs-pull-2 {
right: 16.66666667%;
}
.col-xs-pull-1 {
right: 8.33333333%;
}
.col-xs-pull-0 {
right: 0;
}
.col-xs-push-12 {
left: 100%;
}
.col-xs-push-11 {
left: 91.66666667%;
}
.col-xs-push-10 {
left: 83.33333333%;
}
.col-xs-push-9 {
left: 75%;
}
.col-xs-push-8 {
left: 66.66666667%;
}
.col-xs-push-7 {
left: 58.33333333%;
}
.col-xs-push-6 {
left: 50%;
}
.col-xs-push-5 {
left: 41.66666667%;
}
.col-xs-push-4 {
left: 33.33333333%;
}
.col-xs-push-3 {
left: 25%;
}
.col-xs-push-2 {
left: 16.66666667%;
}
.col-xs-push-1 {
left: 8.33333333%;
}
.col-xs-push-0 {
left: 0;
}
.col-xs-offset-12 {
margin-left: 100%;
}
.col-xs-offset-11 {
margin-left: 91.66666667%;
}
.col-xs-offset-10 {
margin-left: 83.33333333%;
}
.col-xs-offset-9 {
margin-left: 75%;
}
.col-xs-offset-8 {
margin-left: 66.66666667%;
}
.col-xs-offset-7 {
margin-left: 58.33333333%;
}
.col-xs-offset-6 {
margin-left: 50%;
}
.col-xs-offset-5 {
margin-left: 41.66666667%;
}
.col-xs-offset-4 {
margin-left: 33.33333333%;
}
.col-xs-offset-3 {
margin-left: 25%;
}
.col-xs-offset-2 {
margin-left: 16.66666667%;
}
.col-xs-offset-1 {
margin-left: 8.33333333%;
}
.col-xs-offset-0 {
margin-left: 0;
}
@media (min-width: 768px) {
.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
float: left;
}
.col-sm-12 {
width: 100%;
}
.col-sm-11 {
width: 91.66666667%;
}
.col-sm-10 {
width: 83.33333333%;
}
.col-sm-9 {
width: 75%;
}
.col-sm-8 {
width: 66.66666667%;
}
.col-sm-7 {
width: 58.33333333%;
}
.col-sm-6 {
width: 50%;
}
.col-sm-5 {
width: 41.66666667%;
}
.col-sm-4 {
width: 33.33333333%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-2 {
width: 16.66666667%;
}
.col-sm-1 {
width: 8.33333333%;
}
.col-sm-pull-12 {
right: 100%;
}
.col-sm-pull-11 {
right: 91.66666667%;
}
.col-sm-pull-10 {
right: 83.33333333%;
}
.col-sm-pull-9 {
right: 75%;
}
.col-sm-pull-8 {
right: 66.66666667%;
}
.col-sm-pull-7 {
right: 58.33333333%;
}
.col-sm-pull-6 {
right: 50%;
}
.col-sm-pull-5 {
right: 41.66666667%;
}
.col-sm-pull-4 {
right: 33.33333333%;
}
.col-sm-pull-3 {
right: 25%;
}
.col-sm-pull-2 {
right: 16.66666667%;
}
.col-sm-pull-1 {
right: 8.33333333%;
}
.col-sm-pull-0 {
right: 0;
}
.col-sm-push-12 {
left: 100%;
}
.col-sm-push-11 {
left: 91.66666667%;
}
.col-sm-push-10 {
left: 83.33333333%;
}
.col-sm-push-9 {
left: 75%;
}
.col-sm-push-8 {
left: 66.66666667%;
}
.col-sm-push-7 {
left: 58.33333333%;
}
.col-sm-push-6 {
left: 50%;
}
.col-sm-push-5 {
left: 41.66666667%;
}
.col-sm-push-4 {
left: 33.33333333%;
}
.col-sm-push-3 {
left: 25%;
}
.col-sm-push-2 {
left: 16.66666667%;
}
.col-sm-push-1 {
left: 8.33333333%;
}
.col-sm-push-0 {
left: 0;
}
.col-sm-offset-12 {
margin-left: 100%;
}
.col-sm-offset-11 {
margin-left: 91.66666667%;
}
.col-sm-offset-10 {
margin-left: 83.33333333%;
}
.col-sm-offset-9 {
margin-left: 75%;
}
.col-sm-offset-8 {
margin-left: 66.66666667%;
}
.col-sm-offset-7 {
margin-left: 58.33333333%;
}
.col-sm-offset-6 {
margin-left: 50%;
}
.col-sm-offset-5 {
margin-left: 41.66666667%;
}
.col-sm-offset-4 {
margin-left: 33.33333333%;
}
.col-sm-offset-3 {
margin-left: 25%;
}
.col-sm-offset-2 {
margin-left: 16.66666667%;
}
.col-sm-offset-1 {
margin-left: 8.33333333%;
}
.col-sm-offset-0 {
margin-left: 0;
}
}
@media (min-width: 992px) {
.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
float: left;
}
.col-md-12 {
width: 100%;
}
.col-md-11 {
width: 91.66666667%;
}
.col-md-10 {
width: 83.33333333%;
}
.col-md-9 {
width: 75%;
}
.col-md-8 {
width: 66.66666667%;
}
.col-md-7 {
width: 58.33333333%;
}
.col-md-6 {
width: 50%;
}
.col-md-5 {
width: 41.66666667%;
}
.col-md-4 {
width: 33.33333333%;
}
.col-md-3 {
width: 25%;
}
.col-md-2 {
width: 16.66666667%;
}
.col-md-1 {
width: 8.33333333%;
}
.col-md-pull-12 {
right: 100%;
}
.col-md-pull-11 {
right: 91.66666667%;
}
.col-md-pull-10 {
right: 83.33333333%;
}
.col-md-pull-9 {
right: 75%;
}
.col-md-pull-8 {
right: 66.66666667%;
}
.col-md-pull-7 {
right: 58.33333333%;
}
.col-md-pull-6 {
right: 50%;
}
.col-md-pull-5 {
right: 41.66666667%;
}
.col-md-pull-4 {
right: 33.33333333%;
}
.col-md-pull-3 {
right: 25%;
}
.col-md-pull-2 {
right: 16.66666667%;
}
.col-md-pull-1 {
right: 8.33333333%;
}
.col-md-pull-0 {
right: 0;
}
.col-md-push-12 {
left: 100%;
}
.col-md-push-11 {
left: 91.66666667%;
}
.col-md-push-10 {
left: 83.33333333%;
}
.col-md-push-9 {
left: 75%;
}
.col-md-push-8 {
left: 66.66666667%;
}
.col-md-push-7 {
left: 58.33333333%;
}
.col-md-push-6 {
left: 50%;
}
.col-md-push-5 {
left: 41.66666667%;
}
.col-md-push-4 {
left: 33.33333333%;
}
.col-md-push-3 {
left: 25%;
}
.col-md-push-2 {
left: 16.66666667%;
}
.col-md-push-1 {
left: 8.33333333%;
}
.col-md-push-0 {
left: 0;
}
.col-md-offset-12 {
margin-left: 100%;
}
.col-md-offset-11 {
margin-left: 91.66666667%;
}
.col-md-offset-10 {
margin-left: 83.33333333%;
}
.col-md-offset-9 {
margin-left: 75%;
}
.col-md-offset-8 {
margin-left: 66.66666667%;
}
.col-md-offset-7 {
margin-left: 58.33333333%;
}
.col-md-offset-6 {
margin-left: 50%;
}
.col-md-offset-5 {
margin-left: 41.66666667%;
}
.col-md-offset-4 {
margin-left: 33.33333333%;
}
.col-md-offset-3 {
margin-left: 25%;
}
.col-md-offset-2 {
margin-left: 16.66666667%;
}
.col-md-offset-1 {
margin-left: 8.33333333%;
}
.col-md-offset-0 {
margin-left: 0;
}
}
@media (min-width: 1200px) {
.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
float: left;
}
.col-lg-12 {
width: 100%;
}
.col-lg-11 {
width: 91.66666667%;
}
.col-lg-10 {
width: 83.33333333%;
}
.col-lg-9 {
width: 75%;
}
.col-lg-8 {
width: 66.66666667%;
}
.col-lg-7 {
width: 58.33333333%;
}
.col-lg-6 {
width: 50%;
}
.col-lg-5 {
width: 41.66666667%;
}
.col-lg-4 {
width: 33.33333333%;
}
.col-lg-3 {
width: 25%;
}
.col-lg-2 {
width: 16.66666667%;
}
.col-lg-1 {
width: 8.33333333%;
}
.col-lg-pull-12 {
right: 100%;
}
.col-lg-pull-11 {
right: 91.66666667%;
}
.col-lg-pull-10 {
right: 83.33333333%;
}
.col-lg-pull-9 {
right: 75%;
}
.col-lg-pull-8 {
right: 66.66666667%;
}
.col-lg-pull-7 {
right: 58.33333333%;
}
.col-lg-pull-6 {
right: 50%;
}
.col-lg-pull-5 {
right: 41.66666667%;
}
.col-lg-pull-4 {
right: 33.33333333%;
}
.col-lg-pull-3 {
right: 25%;
}
.col-lg-pull-2 {
right: 16.66666667%;
}
.col-lg-pull-1 {
right: 8.33333333%;
}
.col-lg-pull-0 {
right: 0;
}
.col-lg-push-12 {
left: 100%;
}
.col-lg-push-11 {
left: 91.66666667%;
}
.col-lg-push-10 {
left: 83.33333333%;
}
.col-lg-push-9 {
left: 75%;
}
.col-lg-push-8 {
left: 66.66666667%;
}
.col-lg-push-7 {
left: 58.33333333%;
}
.col-lg-push-6 {
left: 50%;
}
.col-lg-push-5 {
left: 41.66666667%;
}
.col-lg-push-4 {
left: 33.33333333%;
}
.col-lg-push-3 {
left: 25%;
}
.col-lg-push-2 {
left: 16.66666667%;
}
.col-lg-push-1 {
left: 8.33333333%;
}
.col-lg-push-0 {
left: 0;
}
.col-lg-offset-12 {
margin-left: 100%;
}
.col-lg-offset-11 {
margin-left: 91.66666667%;
}
.col-lg-offset-10 {
margin-left: 83.33333333%;
}
.col-lg-offset-9 {
margin-left: 75%;
}
.col-lg-offset-8 {
margin-left: 66.66666667%;
}
.col-lg-offset-7 {
margin-left: 58.33333333%;
}
.col-lg-offset-6 {
margin-left: 50%;
}
.col-lg-offset-5 {
margin-left: 41.66666667%;
}
.col-lg-offset-4 {
margin-left: 33.33333333%;
}
.col-lg-offset-3 {
margin-left: 25%;
}
.col-lg-offset-2 {
margin-left: 16.66666667%;
}
.col-lg-offset-1 {
margin-left: 8.33333333%;
}
.col-lg-offset-0 {
margin-left: 0;
}
}
table {
max-width: 100%;
background-color: transparent;
}
th {
text-align: left;
}
.table {
width: 100%;
margin-bottom: 20px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
padding: 8px;
line-height: 1.42857143;
vertical-align: top;
border-top: 1px solid #ddd;
}
.table > thead > tr > th {
vertical-align: bottom;
border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
border-top: 0;
}
.table > tbody + tbody {
border-top: 2px solid #ddd;
}
.table .table {
background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
padding: 5px;
}
.table-bordered {
border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-child(odd) > td,
.table-striped > tbody > tr:nth-child(odd) > th {
background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover > td,
.table-hover > tbody > tr:hover > th {
background-color: #f5f5f5;
}
table col[class*="col-"] {
position: static;
display: table-column;
float: none;
}
table td[class*="col-"],
table th[class*="col-"] {
position: static;
display: table-cell;
float: none;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr.active:hover > th {
background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr.success:hover > th {
background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr.info:hover > th {
background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr.warning:hover > th {
background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr.danger:hover > th {
background-color: #ebcccc;
}
@media (max-width: 767px) {
.table-responsive {
width: 100%;
margin-bottom: 15px;
overflow-x: scroll;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
border: 1px solid #ddd;
}
.table-responsive > .table {
margin-bottom: 0;
}
.table-responsive > .table > thead > tr > th,
.table-responsive > .table > tbody > tr > th,
.table-responsive > .table > tfoot > tr > th,
.table-responsive > .table > thead > tr > td,
.table-responsive > .table > tbody > tr > td,
.table-responsive > .table > tfoot > tr > td {
white-space: nowrap;
}
.table-responsive > .table-bordered {
border: 0;
}
.table-responsive > .table-bordered > thead > tr > th:first-child,
.table-responsive > .table-bordered > tbody > tr > th:first-child,
.table-responsive > .table-bordered > tfoot > tr > th:first-child,
.table-responsive > .table-bordered > thead > tr > td:first-child,
.table-responsive > .table-bordered > tbody > tr > td:first-child,
.table-responsive > .table-bordered > tfoot > tr > td:first-child {
border-left: 0;
}
.table-responsive > .table-bordered > thead > tr > th:last-child,
.table-responsive > .table-bordered > tbody > tr > th:last-child,
.table-responsive > .table-bordered > tfoot > tr > th:last-child,
.table-responsive > .table-bordered > thead > tr > td:last-child,
.table-responsive > .table-bordered > tbody > tr > td:last-child,
.table-responsive > .table-bordered > tfoot > tr > td:last-child {
border-right: 0;
}
.table-responsive > .table-bordered > tbody > tr:last-child > th,
.table-responsive > .table-bordered > tfoot > tr:last-child > th,
.table-responsive > .table-bordered > tbody > tr:last-child > td,
.table-responsive > .table-bordered > tfoot > tr:last-child > td {
border-bottom: 0;
}
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
display: block;
width: 100%;
padding: 0;
margin-bottom: 20px;
font-size: 21px;
line-height: inherit;
color: #333;
border: 0;
border-bottom: 1px solid #e5e5e5;
}
label {
display: inline-block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="search"] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
margin-top: 1px \9;
/* IE8-9 */
line-height: normal;
}
input[type="file"] {
display: block;
}
input[type="range"] {
display: block;
width: 100%;
}
select[multiple],
select[size] {
height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
output {
display: block;
padding-top: 7px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
}
.form-control {
display: block;
width: 100%;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
border-color: #66afe9;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
}
.form-control::-moz-placeholder {
color: #999;
opacity: 1;
}
.form-control:-ms-input-placeholder {
color: #999;
}
.form-control::-webkit-input-placeholder {
color: #999;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
cursor: not-allowed;
background-color: #eee;
opacity: 1;
}
textarea.form-control {
height: auto;
}
input[type="search"] {
-webkit-appearance: none;
}
input[type="date"] {
line-height: 34px;
}
.form-group {
margin-bottom: 15px;
}
.radio,
.checkbox {
display: block;
min-height: 20px;
padding-left: 20px;
margin-top: 10px;
margin-bottom: 10px;
}
.radio label,
.checkbox label {
display: inline;
font-weight: normal;
cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
float: left;
margin-left: -20px;
}
.radio + .radio,
.checkbox + .checkbox {
margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
display: inline-block;
padding-left: 20px;
margin-bottom: 0;
font-weight: normal;
vertical-align: middle;
cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
margin-top: 0;
margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
.radio[disabled],
.radio-inline[disabled],
.checkbox[disabled],
.checkbox-inline[disabled],
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"],
fieldset[disabled] .radio,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox,
fieldset[disabled] .checkbox-inline {
cursor: not-allowed;
}
.input-sm {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
select.input-sm {
height: 30px;
line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
height: auto;
}
.input-lg {
height: 46px;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border-radius: 6px;
}
select.input-lg {
height: 46px;
line-height: 46px;
}
textarea.input-lg,
select[multiple].input-lg {
height: auto;
}
.has-feedback {
position: relative;
}
.has-feedback .form-control {
padding-right: 42.5px;
}
.has-feedback .form-control-feedback {
position: absolute;
top: 25px;
right: 0;
display: block;
width: 34px;
height: 34px;
line-height: 34px;
text-align: center;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline {
color: #3c763d;
}
.has-success .form-control {
border-color: #3c763d;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
}
.has-success .form-control:focus {
border-color: #2b542c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
color: #3c763d;
background-color: #dff0d8;
border-color: #3c763d;
}
.has-success .form-control-feedback {
color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline {
color: #8a6d3b;
}
.has-warning .form-control {
border-color: #8a6d3b;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
}
.has-warning .form-control:focus {
border-color: #66512c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #8a6d3b;
}
.has-warning .form-control-feedback {
color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline {
color: #a94442;
}
.has-error .form-control {
border-color: #a94442;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
}
.has-error .form-control:focus {
border-color: #843534;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
color: #a94442;
background-color: #f2dede;
border-color: #a94442;
}
.has-error .form-control-feedback {
color: #a94442;
}
.form-control-static {
margin-bottom: 0;
}
.help-block {
display: block;
margin-top: 5px;
margin-bottom: 10px;
color: #737373;
}
@media (min-width: 768px) {
.form-inline .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.form-inline .input-group > .form-control {
width: 100%;
}
.form-inline .control-label {
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio,
.form-inline .checkbox {
display: inline-block;
padding-left: 0;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
float: none;
margin-left: 0;
}
.form-inline .has-feedback .form-control-feedback {
top: 0;
}
}
.form-horizontal .control-label,
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
padding-top: 7px;
margin-top: 0;
margin-bottom: 0;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
min-height: 27px;
}
.form-horizontal .form-group {
margin-right: -15px;
margin-left: -15px;
}
.form-horizontal .form-control-static {
padding-top: 7px;
}
@media (min-width: 768px) {
.form-horizontal .control-label {
text-align: right;
}
}
.form-horizontal .has-feedback .form-control-feedback {
top: 0;
right: 15px;
}
.btn {
display: inline-block;
padding: 6px 12px;
margin-bottom: 0;
font-size: 14px;
font-weight: normal;
line-height: 1.42857143;
text-align: center;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-image: none;
border: 1px solid transparent;
border-radius: 4px;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
.btn:hover,
.btn:focus {
color: #333;
text-decoration: none;
}
.btn:active,
.btn.active {
background-image: none;
outline: 0;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
pointer-events: none;
cursor: not-allowed;
filter: alpha(opacity=65);
-webkit-box-shadow: none;
box-shadow: none;
opacity: .65;
}
.btn-default {
color: #333;
background-color: #fff;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open .dropdown-toggle.btn-default {
color: #333;
background-color: #ebebeb;
border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #fff;
border-color: #ccc;
}
.btn-default .badge {
color: #fff;
background-color: #333;
}
.btn-primary {
color: #fff;
background-color: #428bca;
border-color: #357ebd;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open .dropdown-toggle.btn-primary {
color: #fff;
background-color: #3276b1;
border-color: #285e8e;
}
.btn-primary:active,
.btn-primary.active,
.open .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #428bca;
border-color: #357ebd;
}
.btn-primary .badge {
color: #428bca;
background-color: #fff;
}
.btn-success {
color: #fff;
background-color: #5cb85c;
border-color: #4cae4c;
}
.btn-success:hover,
.btn-success:focus,
.btn-success:active,
.btn-success.active,
.open .dropdown-toggle.btn-success {
color: #fff;
background-color: #47a447;
border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open .dropdown-toggle.btn-success {
background-image: none;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #5cb85c;
border-color: #4cae4c;
}
.btn-success .badge {
color: #5cb85c;
background-color: #fff;
}
.btn-info {
color: #fff;
background-color: #5bc0de;
border-color: #46b8da;
}
.btn-info:hover,
.btn-info:focus,
.btn-info:active,
.btn-info.active,
.open .dropdown-toggle.btn-info {
color: #fff;
background-color: #39b3d7;
border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open .dropdown-toggle.btn-info {
background-image: none;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #5bc0de;
border-color: #46b8da;
}
.btn-info .badge {
color: #5bc0de;
background-color: #fff;
}
.btn-warning {
color: #fff;
background-color: #f0ad4e;
border-color: #eea236;
}
.btn-warning:hover,
.btn-warning:focus,
.btn-warning:active,
.btn-warning.active,
.open .dropdown-toggle.btn-warning {
color: #fff;
background-color: #ed9c28;
border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open .dropdown-toggle.btn-warning {
background-image: none;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #f0ad4e;
border-color: #eea236;
}
.btn-warning .badge {
color: #f0ad4e;
background-color: #fff;
}
.btn-danger {
color: #fff;
background-color: #d9534f;
border-color: #d43f3a;
}
.btn-danger:hover,
.btn-danger:focus,
.btn-danger:active,
.btn-danger.active,
.open .dropdown-toggle.btn-danger {
color: #fff;
background-color: #d2322d;
border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open .dropdown-toggle.btn-danger {
background-image: none;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #d9534f;
border-color: #d43f3a;
}
.btn-danger .badge {
color: #d9534f;
background-color: #fff;
}
.btn-link {
font-weight: normal;
color: #428bca;
cursor: pointer;
border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
background-color: transparent;
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
color: #2a6496;
text-decoration: underline;
background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
color: #999;
text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border-radius: 6px;
}
.btn-sm,
.btn-group-sm > .btn {
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
.btn-xs,
.btn-group-xs > .btn {
padding: 1px 5px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
.btn-block {
display: block;
width: 100%;
padding-right: 0;
padding-left: 0;
}
.btn-block + .btn-block {
margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
width: 100%;
}
.fade {
opacity: 0;
-webkit-transition: opacity .15s linear;
transition: opacity .15s linear;
}
.fade.in {
opacity: 1;
}
.collapse {
display: none;
}
.collapse.in {
display: block;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition: height .35s ease;
transition: height .35s ease;
}
@font-face {
font-family: 'Glyphicons Halflings';
src: url('../fonts/glyphicons-halflings-regular.eot');
src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
content: "\2a";
}
.glyphicon-plus:before {
content: "\2b";
}
.glyphicon-euro:before {
content: "\20ac";
}
.glyphicon-minus:before {
content: "\2212";
}
.glyphicon-cloud:before {
content: "\2601";
}
.glyphicon-envelope:before {
content: "\2709";
}
.glyphicon-pencil:before {
content: "\270f";
}
.glyphicon-glass:before {
content: "\e001";
}
.glyphicon-music:before {
content: "\e002";
}
.glyphicon-search:before {
content: "\e003";
}
.glyphicon-heart:before {
content: "\e005";
}
.glyphicon-star:before {
content: "\e006";
}
.glyphicon-star-empty:before {
content: "\e007";
}
.glyphicon-user:before {
content: "\e008";
}
.glyphicon-film:before {
content: "\e009";
}
.glyphicon-th-large:before {
content: "\e010";
}
.glyphicon-th:before {
content: "\e011";
}
.glyphicon-th-list:before {
content: "\e012";
}
.glyphicon-ok:before {
content: "\e013";
}
.glyphicon-remove:before {
content: "\e014";
}
.glyphicon-zoom-in:before {
content: "\e015";
}
.glyphicon-zoom-out:before {
content: "\e016";
}
.glyphicon-off:before {
content: "\e017";
}
.glyphicon-signal:before {
content: "\e018";
}
.glyphicon-cog:before {
content: "\e019";
}
.glyphicon-trash:before {
content: "\e020";
}
.glyphicon-home:before {
content: "\e021";
}
.glyphicon-file:before {
content: "\e022";
}
.glyphicon-time:before {
content: "\e023";
}
.glyphicon-road:before {
content: "\e024";
}
.glyphicon-download-alt:before {
content: "\e025";
}
.glyphicon-download:before {
content: "\e026";
}
.glyphicon-upload:before {
content: "\e027";
}
.glyphicon-inbox:before {
content: "\e028";
}
.glyphicon-play-circle:before {
content: "\e029";
}
.glyphicon-repeat:before {
content: "\e030";
}
.glyphicon-refresh:before {
content: "\e031";
}
.glyphicon-list-alt:before {
content: "\e032";
}
.glyphicon-lock:before {
content: "\e033";
}
.glyphicon-flag:before {
content: "\e034";
}
.glyphicon-headphones:before {
content: "\e035";
}
.glyphicon-volume-off:before {
content: "\e036";
}
.glyphicon-volume-down:before {
content: "\e037";
}
.glyphicon-volume-up:before {
content: "\e038";
}
.glyphicon-qrcode:before {
content: "\e039";
}
.glyphicon-barcode:before {
content: "\e040";
}
.glyphicon-tag:before {
content: "\e041";
}
.glyphicon-tags:before {
content: "\e042";
}
.glyphicon-book:before {
content: "\e043";
}
.glyphicon-bookmark:before {
content: "\e044";
}
.glyphicon-print:before {
content: "\e045";
}
.glyphicon-camera:before {
content: "\e046";
}
.glyphicon-font:before {
content: "\e047";
}
.glyphicon-bold:before {
content: "\e048";
}
.glyphicon-italic:before {
content: "\e049";
}
.glyphicon-text-height:before {
content: "\e050";
}
.glyphicon-text-width:before {
content: "\e051";
}
.glyphicon-align-left:before {
content: "\e052";
}
.glyphicon-align-center:before {
content: "\e053";
}
.glyphicon-align-right:before {
content: "\e054";
}
.glyphicon-align-justify:before {
content: "\e055";
}
.glyphicon-list:before {
content: "\e056";
}
.glyphicon-indent-left:before {
content: "\e057";
}
.glyphicon-indent-right:before {
content: "\e058";
}
.glyphicon-facetime-video:before {
content: "\e059";
}
.glyphicon-picture:before {
content: "\e060";
}
.glyphicon-map-marker:before {
content: "\e062";
}
.glyphicon-adjust:before {
content: "\e063";
}
.glyphicon-tint:before {
content: "\e064";
}
.glyphicon-edit:before {
content: "\e065";
}
.glyphicon-share:before {
content: "\e066";
}
.glyphicon-check:before {
content: "\e067";
}
.glyphicon-move:before {
content: "\e068";
}
.glyphicon-step-backward:before {
content: "\e069";
}
.glyphicon-fast-backward:before {
content: "\e070";
}
.glyphicon-backward:before {
content: "\e071";
}
.glyphicon-play:before {
content: "\e072";
}
.glyphicon-pause:before {
content: "\e073";
}
.glyphicon-stop:before {
content: "\e074";
}
.glyphicon-forward:before {
content: "\e075";
}
.glyphicon-fast-forward:before {
content: "\e076";
}
.glyphicon-step-forward:before {
content: "\e077";
}
.glyphicon-eject:before {
content: "\e078";
}
.glyphicon-chevron-left:before {
content: "\e079";
}
.glyphicon-chevron-right:before {
content: "\e080";
}
.glyphicon-plus-sign:before {
content: "\e081";
}
.glyphicon-minus-sign:before {
content: "\e082";
}
.glyphicon-remove-sign:before {
content: "\e083";
}
.glyphicon-ok-sign:before {
content: "\e084";
}
.glyphicon-question-sign:before {
content: "\e085";
}
.glyphicon-info-sign:before {
content: "\e086";
}
.glyphicon-screenshot:before {
content: "\e087";
}
.glyphicon-remove-circle:before {
content: "\e088";
}
.glyphicon-ok-circle:before {
content: "\e089";
}
.glyphicon-ban-circle:before {
content: "\e090";
}
.glyphicon-arrow-left:before {
content: "\e091";
}
.glyphicon-arrow-right:before {
content: "\e092";
}
.glyphicon-arrow-up:before {
content: "\e093";
}
.glyphicon-arrow-down:before {
content: "\e094";
}
.glyphicon-share-alt:before {
content: "\e095";
}
.glyphicon-resize-full:before {
content: "\e096";
}
.glyphicon-resize-small:before {
content: "\e097";
}
.glyphicon-exclamation-sign:before {
content: "\e101";
}
.glyphicon-gift:before {
content: "\e102";
}
.glyphicon-leaf:before {
content: "\e103";
}
.glyphicon-fire:before {
content: "\e104";
}
.glyphicon-eye-open:before {
content: "\e105";
}
.glyphicon-eye-close:before {
content: "\e106";
}
.glyphicon-warning-sign:before {
content: "\e107";
}
.glyphicon-plane:before {
content: "\e108";
}
.glyphicon-calendar:before {
content: "\e109";
}
.glyphicon-random:before {
content: "\e110";
}
.glyphicon-comment:before {
content: "\e111";
}
.glyphicon-magnet:before {
content: "\e112";
}
.glyphicon-chevron-up:before {
content: "\e113";
}
.glyphicon-chevron-down:before {
content: "\e114";
}
.glyphicon-retweet:before {
content: "\e115";
}
.glyphicon-shopping-cart:before {
content: "\e116";
}
.glyphicon-folder-close:before {
content: "\e117";
}
.glyphicon-folder-open:before {
content: "\e118";
}
.glyphicon-resize-vertical:before {
content: "\e119";
}
.glyphicon-resize-horizontal:before {
content: "\e120";
}
.glyphicon-hdd:before {
content: "\e121";
}
.glyphicon-bullhorn:before {
content: "\e122";
}
.glyphicon-bell:before {
content: "\e123";
}
.glyphicon-certificate:before {
content: "\e124";
}
.glyphicon-thumbs-up:before {
content: "\e125";
}
.glyphicon-thumbs-down:before {
content: "\e126";
}
.glyphicon-hand-right:before {
content: "\e127";
}
.glyphicon-hand-left:before {
content: "\e128";
}
.glyphicon-hand-up:before {
content: "\e129";
}
.glyphicon-hand-down:before {
content: "\e130";
}
.glyphicon-circle-arrow-right:before {
content: "\e131";
}
.glyphicon-circle-arrow-left:before {
content: "\e132";
}
.glyphicon-circle-arrow-up:before {
content: "\e133";
}
.glyphicon-circle-arrow-down:before {
content: "\e134";
}
.glyphicon-globe:before {
content: "\e135";
}
.glyphicon-wrench:before {
content: "\e136";
}
.glyphicon-tasks:before {
content: "\e137";
}
.glyphicon-filter:before {
content: "\e138";
}
.glyphicon-briefcase:before {
content: "\e139";
}
.glyphicon-fullscreen:before {
content: "\e140";
}
.glyphicon-dashboard:before {
content: "\e141";
}
.glyphicon-paperclip:before {
content: "\e142";
}
.glyphicon-heart-empty:before {
content: "\e143";
}
.glyphicon-link:before {
content: "\e144";
}
.glyphicon-phone:before {
content: "\e145";
}
.glyphicon-pushpin:before {
content: "\e146";
}
.glyphicon-usd:before {
content: "\e148";
}
.glyphicon-gbp:before {
content: "\e149";
}
.glyphicon-sort:before {
content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
content: "\e152";
}
.glyphicon-sort-by-order:before {
content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
content: "\e154";
}
.glyphicon-sort-by-attributes:before {
content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
content: "\e156";
}
.glyphicon-unchecked:before {
content: "\e157";
}
.glyphicon-expand:before {
content: "\e158";
}
.glyphicon-collapse-down:before {
content: "\e159";
}
.glyphicon-collapse-up:before {
content: "\e160";
}
.glyphicon-log-in:before {
content: "\e161";
}
.glyphicon-flash:before {
content: "\e162";
}
.glyphicon-log-out:before {
content: "\e163";
}
.glyphicon-new-window:before {
content: "\e164";
}
.glyphicon-record:before {
content: "\e165";
}
.glyphicon-save:before {
content: "\e166";
}
.glyphicon-open:before {
content: "\e167";
}
.glyphicon-saved:before {
content: "\e168";
}
.glyphicon-import:before {
content: "\e169";
}
.glyphicon-export:before {
content: "\e170";
}
.glyphicon-send:before {
content: "\e171";
}
.glyphicon-floppy-disk:before {
content: "\e172";
}
.glyphicon-floppy-saved:before {
content: "\e173";
}
.glyphicon-floppy-remove:before {
content: "\e174";
}
.glyphicon-floppy-save:before {
content: "\e175";
}
.glyphicon-floppy-open:before {
content: "\e176";
}
.glyphicon-credit-card:before {
content: "\e177";
}
.glyphicon-transfer:before {
content: "\e178";
}
.glyphicon-cutlery:before {
content: "\e179";
}
.glyphicon-header:before {
content: "\e180";
}
.glyphicon-compressed:before {
content: "\e181";
}
.glyphicon-earphone:before {
content: "\e182";
}
.glyphicon-phone-alt:before {
content: "\e183";
}
.glyphicon-tower:before {
content: "\e184";
}
.glyphicon-stats:before {
content: "\e185";
}
.glyphicon-sd-video:before {
content: "\e186";
}
.glyphicon-hd-video:before {
content: "\e187";
}
.glyphicon-subtitles:before {
content: "\e188";
}
.glyphicon-sound-stereo:before {
content: "\e189";
}
.glyphicon-sound-dolby:before {
content: "\e190";
}
.glyphicon-sound-5-1:before {
content: "\e191";
}
.glyphicon-sound-6-1:before {
content: "\e192";
}
.glyphicon-sound-7-1:before {
content: "\e193";
}
.glyphicon-copyright-mark:before {
content: "\e194";
}
.glyphicon-registration-mark:before {
content: "\e195";
}
.glyphicon-cloud-download:before {
content: "\e197";
}
.glyphicon-cloud-upload:before {
content: "\e198";
}
.glyphicon-tree-conifer:before {
content: "\e199";
}
.glyphicon-tree-deciduous:before {
content: "\e200";
}
.caret {
display: inline-block;
width: 0;
height: 0;
margin-left: 2px;
vertical-align: middle;
border-top: 4px solid;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
}
.dropdown {
position: relative;
}
.dropdown-toggle:focus {
outline: 0;
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
padding: 5px 0;
margin: 2px 0 0;
font-size: 14px;
list-style: none;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, .15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
}
.dropdown-menu.pull-right {
right: 0;
left: auto;
}
.dropdown-menu .divider {
height: 1px;
margin: 9px 0;
overflow: hidden;
background-color: #e5e5e5;
}
.dropdown-menu > li > a {
display: block;
padding: 3px 20px;
clear: both;
font-weight: normal;
line-height: 1.42857143;
color: #333;
white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
color: #262626;
text-decoration: none;
background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
color: #fff;
text-decoration: none;
background-color: #428bca;
outline: 0;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
color: #999;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
text-decoration: none;
cursor: not-allowed;
background-color: transparent;
background-image: none;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}
.open > .dropdown-menu {
display: block;
}
.open > a {
outline: 0;
}
.dropdown-menu-right {
right: 0;
left: auto;
}
.dropdown-menu-left {
right: auto;
left: 0;
}
.dropdown-header {
display: block;
padding: 3px 20px;
font-size: 12px;
line-height: 1.42857143;
color: #999;
}
.dropdown-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 990;
}
.pull-right > .dropdown-menu {
right: 0;
left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
content: "";
border-top: 0;
border-bottom: 4px solid;
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
top: auto;
bottom: 100%;
margin-bottom: 1px;
}
@media (min-width: 768px) {
.navbar-right .dropdown-menu {
right: 0;
left: auto;
}
.navbar-right .dropdown-menu-left {
right: auto;
left: 0;
}
}
.btn-group,
.btn-group-vertical {
position: relative;
display: inline-block;
vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
position: relative;
float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
z-index: 2;
}
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus {
outline: none;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
margin-left: -1px;
}
.btn-toolbar {
margin-left: -5px;
}
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
border-radius: 0;
}
.btn-group > .btn:first-child {
margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group > .btn-group {
float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group > .btn-group:first-child > .btn:last-child,
.btn-group > .btn-group:first-child > .dropdown-toggle {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.btn-group > .btn-group:last-child > .btn:first-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
padding-right: 8px;
padding-left: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
padding-right: 12px;
padding-left: 12px;
}
.btn-group.open .dropdown-toggle {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-group.open .dropdown-toggle.btn-link {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn .caret {
margin-left: 0;
}
.btn-lg .caret {
border-width: 5px 5px 0;
border-bottom-width: 0;
}
.dropup .btn-lg .caret {
border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
display: block;
float: none;
width: 100%;
max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
margin-top: -1px;
margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
border-top-right-radius: 4px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
border-top-left-radius: 0;
border-top-right-radius: 0;
border-bottom-left-radius: 4px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.btn-group-justified {
display: table;
width: 100%;
table-layout: fixed;
border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
display: table-cell;
float: none;
width: 1%;
}
.btn-group-justified > .btn-group .btn {
width: 100%;
}
[data-toggle="buttons"] > .btn > input[type="radio"],
[data-toggle="buttons"] > .btn > input[type="checkbox"] {
display: none;
}
.input-group {
position: relative;
display: table;
border-collapse: separate;
}
.input-group[class*="col-"] {
float: none;
padding-right: 0;
padding-left: 0;
}
.input-group .form-control {
position: relative;
z-index: 2;
float: left;
width: 100%;
margin-bottom: 0;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
height: 46px;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border-radius: 6px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
height: 46px;
line-height: 46px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
height: 30px;
line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
border-radius: 0;
}
.input-group-addon,
.input-group-btn {
width: 1%;
white-space: nowrap;
vertical-align: middle;
}
.input-group-addon {
padding: 6px 12px;
font-size: 14px;
font-weight: normal;
line-height: 1;
color: #555;
text-align: center;
background-color: #eee;
border: 1px solid #ccc;
border-radius: 4px;
}
.input-group-addon.input-sm {
padding: 5px 10px;
font-size: 12px;
border-radius: 3px;
}
.input-group-addon.input-lg {
padding: 10px 16px;
font-size: 18px;
border-radius: 6px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group-addon:first-child {
border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.input-group-addon:last-child {
border-left: 0;
}
.input-group-btn {
position: relative;
font-size: 0;
white-space: nowrap;
}
.input-group-btn > .btn {
position: relative;
}
.input-group-btn > .btn + .btn {
margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
margin-left: -1px;
}
.nav {
padding-left: 0;
margin-bottom: 0;
list-style: none;
}
.nav > li {
position: relative;
display: block;
}
.nav > li > a {
position: relative;
display: block;
padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
text-decoration: none;
background-color: #eee;
}
.nav > li.disabled > a {
color: #999;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
color: #999;
text-decoration: none;
cursor: not-allowed;
background-color: transparent;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
background-color: #eee;
border-color: #428bca;
}
.nav .nav-divider {
height: 1px;
margin: 9px 0;
overflow: hidden;
background-color: #e5e5e5;
}
.nav > li > a > img {
max-width: none;
}
.nav-tabs {
border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
float: left;
margin-bottom: -1px;
}
.nav-tabs > li > a {
margin-right: 2px;
line-height: 1.42857143;
border: 1px solid transparent;
border-radius: 4px 4px 0 0;
}
.nav-tabs > li > a:hover {
border-color: #eee #eee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
color: #555;
cursor: default;
background-color: #fff;
border: 1px solid #ddd;
border-bottom-color: transparent;
}
.nav-tabs.nav-justified {
width: 100%;
border-bottom: 0;
}
.nav-tabs.nav-justified > li {
float: none;
}
.nav-tabs.nav-justified > li > a {
margin-bottom: 5px;
text-align: center;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media (min-width: 768px) {
.nav-tabs.nav-justified > li {
display: table-cell;
width: 1%;
}
.nav-tabs.nav-justified > li > a {
margin-bottom: 0;
}
}
.nav-tabs.nav-justified > li > a {
margin-right: 0;
border-radius: 4px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
border: 1px solid #ddd;
}
@media (min-width: 768px) {
.nav-tabs.nav-justified > li > a {
border-bottom: 1px solid #ddd;
border-radius: 4px 4px 0 0;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
border-bottom-color: #fff;
}
}
.nav-pills > li {
float: left;
}
.nav-pills > li > a {
border-radius: 4px;
}
.nav-pills > li + li {
margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
background-color: #428bca;
}
.nav-stacked > li {
float: none;
}
.nav-stacked > li + li {
margin-top: 2px;
margin-left: 0;
}
.nav-justified {
width: 100%;
}
.nav-justified > li {
float: none;
}
.nav-justified > li > a {
margin-bottom: 5px;
text-align: center;
}
.nav-justified > .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media (min-width: 768px) {
.nav-justified > li {
display: table-cell;
width: 1%;
}
.nav-justified > li > a {
margin-bottom: 0;
}
}
.nav-tabs-justified {
border-bottom: 0;
}
.nav-tabs-justified > li > a {
margin-right: 0;
border-radius: 4px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
border: 1px solid #ddd;
}
@media (min-width: 768px) {
.nav-tabs-justified > li > a {
border-bottom: 1px solid #ddd;
border-radius: 4px 4px 0 0;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
border-bottom-color: #fff;
}
}
.tab-content > .tab-pane {
display: none;
}
.tab-content > .active {
display: block;
}
.nav-tabs .dropdown-menu {
margin-top: -1px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.navbar {
position: relative;
min-height: 50px;
margin-bottom: 20px;
border: 1px solid transparent;
}
@media (min-width: 768px) {
.navbar {
border-radius: 4px;
}
}
@media (min-width: 768px) {
.navbar-header {
float: left;
}
}
.navbar-collapse {
max-height: 340px;
padding-right: 15px;
padding-left: 15px;
overflow-x: visible;
-webkit-overflow-scrolling: touch;
border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
}
.navbar-collapse.in {
overflow-y: auto;
}
@media (min-width: 768px) {
.navbar-collapse {
width: auto;
border-top: 0;
box-shadow: none;
}
.navbar-collapse.collapse {
display: block !important;
height: auto !important;
padding-bottom: 0;
overflow: visible !important;
}
.navbar-collapse.in {
overflow-y: visible;
}
.navbar-fixed-top .navbar-collapse,
.navbar-static-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
padding-right: 0;
padding-left: 0;
}
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
margin-right: -15px;
margin-left: -15px;
}
@media (min-width: 768px) {
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
margin-right: 0;
margin-left: 0;
}
}
.navbar-static-top {
z-index: 1000;
border-width: 0 0 1px;
}
@media (min-width: 768px) {
.navbar-static-top {
border-radius: 0;
}
}
.navbar-fixed-top,
.navbar-fixed-bottom {
position: fixed;
right: 0;
left: 0;
z-index: 1030;
}
@media (min-width: 768px) {
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
}
.navbar-fixed-top {
top: 0;
border-width: 0 0 1px;
}
.navbar-fixed-bottom {
bottom: 0;
margin-bottom: 0;
border-width: 1px 0 0;
}
.navbar-brand {
float: left;
height: 50px;
padding: 15px 15px;
font-size: 18px;
line-height: 20px;
}
.navbar-brand:hover,
.navbar-brand:focus {
text-decoration: none;
}
@media (min-width: 768px) {
.navbar > .container .navbar-brand,
.navbar > .container-fluid .navbar-brand {
margin-left: -15px;
}
}
.navbar-toggle {
position: relative;
float: right;
padding: 9px 10px;
margin-top: 8px;
margin-right: 15px;
margin-bottom: 8px;
background-color: transparent;
background-image: none;
border: 1px solid transparent;
border-radius: 4px;
}
.navbar-toggle:focus {
outline: none;
}
.navbar-toggle .icon-bar {
display: block;
width: 22px;
height: 2px;
border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
margin-top: 4px;
}
@media (min-width: 768px) {
.navbar-toggle {
display: none;
}
}
.navbar-nav {
margin: 7.5px -15px;
}
.navbar-nav > li > a {
padding-top: 10px;
padding-bottom: 10px;
line-height: 20px;
}
@media (max-width: 767px) {
.navbar-nav .open .dropdown-menu {
position: static;
float: none;
width: auto;
margin-top: 0;
background-color: transparent;
border: 0;
box-shadow: none;
}
.navbar-nav .open .dropdown-menu > li > a,
.navbar-nav .open .dropdown-menu .dropdown-header {
padding: 5px 15px 5px 25px;
}
.navbar-nav .open .dropdown-menu > li > a {
line-height: 20px;
}
.navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-nav .open .dropdown-menu > li > a:focus {
background-image: none;
}
}
@media (min-width: 768px) {
.navbar-nav {
float: left;
margin: 0;
}
.navbar-nav > li {
float: left;
}
.navbar-nav > li > a {
padding-top: 15px;
padding-bottom: 15px;
}
.navbar-nav.navbar-right:last-child {
margin-right: -15px;
}
}
@media (min-width: 768px) {
.navbar-left {
float: left !important;
}
.navbar-right {
float: right !important;
}
}
.navbar-form {
padding: 10px 15px;
margin-top: 8px;
margin-right: -15px;
margin-bottom: 8px;
margin-left: -15px;
border-top: 1px solid transparent;
border-bottom: 1px solid transparent;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
}
@media (min-width: 768px) {
.navbar-form .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.navbar-form .input-group > .form-control {
width: 100%;
}
.navbar-form .control-label {
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .radio,
.navbar-form .checkbox {
display: inline-block;
padding-left: 0;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .radio input[type="radio"],
.navbar-form .checkbox input[type="checkbox"] {
float: none;
margin-left: 0;
}
.navbar-form .has-feedback .form-control-feedback {
top: 0;
}
}
@media (max-width: 767px) {
.navbar-form .form-group {
margin-bottom: 5px;
}
}
@media (min-width: 768px) {
.navbar-form {
width: auto;
padding-top: 0;
padding-bottom: 0;
margin-right: 0;
margin-left: 0;
border: 0;
-webkit-box-shadow: none;
box-shadow: none;
}
.navbar-form.navbar-right:last-child {
margin-right: -15px;
}
}
.navbar-nav > li > .dropdown-menu {
margin-top: 0;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.navbar-btn {
margin-top: 8px;
margin-bottom: 8px;
}
.navbar-btn.btn-sm {
margin-top: 10px;
margin-bottom: 10px;
}
.navbar-btn.btn-xs {
margin-top: 14px;
margin-bottom: 14px;
}
.navbar-text {
margin-top: 15px;
margin-bottom: 15px;
}
@media (min-width: 768px) {
.navbar-text {
float: left;
margin-right: 15px;
margin-left: 15px;
}
.navbar-text.navbar-right:last-child {
margin-right: 0;
}
}
.navbar-default {
background-color: #f8f8f8;
border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
color: #5e5e5e;
background-color: transparent;
}
.navbar-default .navbar-text {
color: #777;
}
.navbar-default .navbar-nav > li > a {
color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
color: #333;
background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
color: #555;
background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
color: #ccc;
background-color: transparent;
}
.navbar-default .navbar-toggle {
border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
color: #555;
background-color: #e7e7e7;
}
@media (max-width: 767px) {
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #777;
}
.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
color: #333;
background-color: transparent;
}
.navbar-default .navbar-nav .open .dropdown-menu > .active > a,
.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #555;
background-color: #e7e7e7;
}
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #ccc;
background-color: transparent;
}
}
.navbar-default .navbar-link {
color: #777;
}
.navbar-default .navbar-link:hover {
color: #333;
}
.navbar-inverse {
background-color: #222;
border-color: #080808;
}
.navbar-inverse .navbar-brand {
color: #999;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: transparent;
}
.navbar-inverse .navbar-text {
color: #999;
}
.navbar-inverse .navbar-nav > li > a {
color: #999;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #fff;
background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
color: #fff;
background-color: #080808;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
color: #444;
background-color: transparent;
}
.navbar-inverse .navbar-toggle {
border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
color: #fff;
background-color: #080808;
}
@media (max-width: 767px) {
.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
border-color: #080808;
}
.navbar-inverse .navbar-nav .open .dropdown-menu .divider {
background-color: #080808;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
color: #999;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
color: #fff;
background-color: transparent;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-color: #080808;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #444;
background-color: transparent;
}
}
.navbar-inverse .navbar-link {
color: #999;
}
.navbar-inverse .navbar-link:hover {
color: #fff;
}
.breadcrumb {
padding: 8px 15px;
margin-bottom: 20px;
list-style: none;
background-color: #f5f5f5;
border-radius: 4px;
}
.breadcrumb > li {
display: inline-block;
}
.breadcrumb > li + li:before {
padding: 0 5px;
color: #ccc;
content: "/\00a0";
}
.breadcrumb > .active {
color: #999;
}
.pagination {
display: inline-block;
padding-left: 0;
margin: 20px 0;
border-radius: 4px;
}
.pagination > li {
display: inline;
}
.pagination > li > a,
.pagination > li > span {
position: relative;
float: left;
padding: 6px 12px;
margin-left: -1px;
line-height: 1.42857143;
color: #428bca;
text-decoration: none;
background-color: #fff;
border: 1px solid #ddd;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
margin-left: 0;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
color: #2a6496;
background-color: #eee;
border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
z-index: 2;
color: #fff;
cursor: default;
background-color: #428bca;
border-color: #428bca;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
color: #999;
cursor: not-allowed;
background-color: #fff;
border-color: #ddd;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
padding: 10px 16px;
font-size: 18px;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
padding: 5px 10px;
font-size: 12px;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
.pager {
padding-left: 0;
margin: 20px 0;
text-align: center;
list-style: none;
}
.pager li {
display: inline;
}
.pager li > a,
.pager li > span {
display: inline-block;
padding: 5px 14px;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
text-decoration: none;
background-color: #eee;
}
.pager .next > a,
.pager .next > span {
float: right;
}
.pager .previous > a,
.pager .previous > span {
float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
color: #999;
cursor: not-allowed;
background-color: #fff;
}
.label {
display: inline;
padding: .2em .6em .3em;
font-size: 75%;
font-weight: bold;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25em;
}
.label[href]:hover,
.label[href]:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
}
.label:empty {
display: none;
}
.btn .label {
position: relative;
top: -1px;
}
.label-default {
background-color: #999;
}
.label-default[href]:hover,
.label-default[href]:focus {
background-color: #808080;
}
.label-primary {
background-color: #428bca;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
background-color: #3071a9;
}
.label-success {
background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
background-color: #449d44;
}
.label-info {
background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
background-color: #31b0d5;
}
.label-warning {
background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
background-color: #ec971f;
}
.label-danger {
background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
background-color: #c9302c;
}
.badge {
display: inline-block;
min-width: 10px;
padding: 3px 7px;
font-size: 12px;
font-weight: bold;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
background-color: #999;
border-radius: 10px;
}
.badge:empty {
display: none;
}
.btn .badge {
position: relative;
top: -1px;
}
.btn-xs .badge {
top: 0;
padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
}
a.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
color: #428bca;
background-color: #fff;
}
.nav-pills > li > a > .badge {
margin-left: 3px;
}
.jumbotron {
padding: 30px;
margin-bottom: 30px;
color: inherit;
background-color: #eee;
}
.jumbotron h1,
.jumbotron .h1 {
color: inherit;
}
.jumbotron p {
margin-bottom: 15px;
font-size: 21px;
font-weight: 200;
}
.container .jumbotron {
border-radius: 6px;
}
.jumbotron .container {
max-width: 100%;
}
@media screen and (min-width: 768px) {
.jumbotron {
padding-top: 48px;
padding-bottom: 48px;
}
.container .jumbotron {
padding-right: 60px;
padding-left: 60px;
}
.jumbotron h1,
.jumbotron .h1 {
font-size: 63px;
}
}
.thumbnail {
display: block;
padding: 4px;
margin-bottom: 20px;
line-height: 1.42857143;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 4px;
-webkit-transition: all .2s ease-in-out;
transition: all .2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
margin-right: auto;
margin-left: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
border-color: #428bca;
}
.thumbnail .caption {
padding: 9px;
color: #333;
}
.alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
}
.alert h4 {
margin-top: 0;
color: inherit;
}
.alert .alert-link {
font-weight: bold;
}
.alert > p,
.alert > ul {
margin-bottom: 0;
}
.alert > p + p {
margin-top: 5px;
}
.alert-dismissable {
padding-right: 35px;
}
.alert-dismissable .close {
position: relative;
top: -2px;
right: -21px;
color: inherit;
}
.alert-success {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-success hr {
border-top-color: #c9e2b3;
}
.alert-success .alert-link {
color: #2b542c;
}
.alert-info {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-info hr {
border-top-color: #a6e1ec;
}
.alert-info .alert-link {
color: #245269;
}
.alert-warning {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-warning hr {
border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
color: #66512c;
}
.alert-danger {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.alert-danger hr {
border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
@keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
.progress {
height: 20px;
margin-bottom: 20px;
overflow: hidden;
background-color: #f5f5f5;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
}
.progress-bar {
float: left;
width: 0;
height: 100%;
font-size: 12px;
line-height: 20px;
color: #fff;
text-align: center;
background-color: #428bca;
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
-webkit-transition: width .6s ease;
transition: width .6s ease;
}
.progress-striped .progress-bar {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-size: 40px 40px;
}
.progress.active .progress-bar {
-webkit-animation: progress-bar-stripes 2s linear infinite;
animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.media,
.media-body {
overflow: hidden;
zoom: 1;
}
.media,
.media .media {
margin-top: 15px;
}
.media:first-child {
margin-top: 0;
}
.media-object {
display: block;
}
.media-heading {
margin: 0 0 5px;
}
.media > .pull-left {
margin-right: 10px;
}
.media > .pull-right {
margin-left: 10px;
}
.media-list {
padding-left: 0;
list-style: none;
}
.list-group {
padding-left: 0;
margin-bottom: 20px;
}
.list-group-item {
position: relative;
display: block;
padding: 10px 15px;
margin-bottom: -1px;
background-color: #fff;
border: 1px solid #ddd;
}
.list-group-item:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.list-group-item:last-child {
margin-bottom: 0;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
}
.list-group-item > .badge {
float: right;
}
.list-group-item > .badge + .badge {
margin-right: 5px;
}
a.list-group-item {
color: #555;
}
a.list-group-item .list-group-item-heading {
color: #333;
}
a.list-group-item:hover,
a.list-group-item:focus {
text-decoration: none;
background-color: #f5f5f5;
}
a.list-group-item.active,
a.list-group-item.active:hover,
a.list-group-item.active:focus {
z-index: 2;
color: #fff;
background-color: #428bca;
border-color: #428bca;
}
a.list-group-item.active .list-group-item-heading,
a.list-group-item.active:hover .list-group-item-heading,
a.list-group-item.active:focus .list-group-item-heading {
color: inherit;
}
a.list-group-item.active .list-group-item-text,
a.list-group-item.active:hover .list-group-item-text,
a.list-group-item.active:focus .list-group-item-text {
color: #e1edf7;
}
.list-group-item-success {
color: #3c763d;
background-color: #dff0d8;
}
a.list-group-item-success {
color: #3c763d;
}
a.list-group-item-success .list-group-item-heading {
color: inherit;
}
a.list-group-item-success:hover,
a.list-group-item-success:focus {
color: #3c763d;
background-color: #d0e9c6;
}
a.list-group-item-success.active,
a.list-group-item-success.active:hover,
a.list-group-item-success.active:focus {
color: #fff;
background-color: #3c763d;
border-color: #3c763d;
}
.list-group-item-info {
color: #31708f;
background-color: #d9edf7;
}
a.list-group-item-info {
color: #31708f;
}
a.list-group-item-info .list-group-item-heading {
color: inherit;
}
a.list-group-item-info:hover,
a.list-group-item-info:focus {
color: #31708f;
background-color: #c4e3f3;
}
a.list-group-item-info.active,
a.list-group-item-info.active:hover,
a.list-group-item-info.active:focus {
color: #fff;
background-color: #31708f;
border-color: #31708f;
}
.list-group-item-warning {
color: #8a6d3b;
background-color: #fcf8e3;
}
a.list-group-item-warning {
color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading {
color: inherit;
}
a.list-group-item-warning:hover,
a.list-group-item-warning:focus {
color: #8a6d3b;
background-color: #faf2cc;
}
a.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus {
color: #fff;
background-color: #8a6d3b;
border-color: #8a6d3b;
}
.list-group-item-danger {
color: #a94442;
background-color: #f2dede;
}
a.list-group-item-danger {
color: #a94442;
}
a.list-group-item-danger .list-group-item-heading {
color: inherit;
}
a.list-group-item-danger:hover,
a.list-group-item-danger:focus {
color: #a94442;
background-color: #ebcccc;
}
a.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus {
color: #fff;
background-color: #a94442;
border-color: #a94442;
}
.list-group-item-heading {
margin-top: 0;
margin-bottom: 5px;
}
.list-group-item-text {
margin-bottom: 0;
line-height: 1.3;
}
.panel {
margin-bottom: 20px;
background-color: #fff;
border: 1px solid transparent;
border-radius: 4px;
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
}
.panel-body {
padding: 15px;
}
.panel-heading {
padding: 10px 15px;
border-bottom: 1px solid transparent;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
}
.panel-heading > .dropdown .dropdown-toggle {
color: inherit;
}
.panel-title {
margin-top: 0;
margin-bottom: 0;
font-size: 16px;
color: inherit;
}
.panel-title > a {
color: inherit;
}
.panel-footer {
padding: 10px 15px;
background-color: #f5f5f5;
border-top: 1px solid #ddd;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
}
.panel > .list-group {
margin-bottom: 0;
}
.panel > .list-group .list-group-item {
border-width: 1px 0;
border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child {
border-top: 0;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
}
.panel > .list-group:last-child .list-group-item:last-child {
border-bottom: 0;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
}
.panel-heading + .list-group .list-group-item:first-child {
border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table {
margin-bottom: 0;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
border-top-left-radius: 3px;
border-top-right-radius: 3px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
border-top-left-radius: 3px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
border-top-right-radius: 3px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
border-bottom-left-radius: 3px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
border-bottom-right-radius: 3px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive {
border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
border-bottom: 0;
}
.panel > .table-responsive {
margin-bottom: 0;
border: 0;
}
.panel-group {
margin-bottom: 20px;
}
.panel-group .panel {
margin-bottom: 0;
overflow: hidden;
border-radius: 4px;
}
.panel-group .panel + .panel {
margin-top: 5px;
}
.panel-group .panel-heading {
border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse .panel-body {
border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
border-bottom: 1px solid #ddd;
}
.panel-default {
border-color: #ddd;
}
.panel-default > .panel-heading {
color: #333;
background-color: #f5f5f5;
border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse .panel-body {
border-top-color: #ddd;
}
.panel-default > .panel-footer + .panel-collapse .panel-body {
border-bottom-color: #ddd;
}
.panel-primary {
border-color: #428bca;
}
.panel-primary > .panel-heading {
color: #fff;
background-color: #428bca;
border-color: #428bca;
}
.panel-primary > .panel-heading + .panel-collapse .panel-body {
border-top-color: #428bca;
}
.panel-primary > .panel-footer + .panel-collapse .panel-body {
border-bottom-color: #428bca;
}
.panel-success {
border-color: #d6e9c6;
}
.panel-success > .panel-heading {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse .panel-body {
border-top-color: #d6e9c6;
}
.panel-success > .panel-footer + .panel-collapse .panel-body {
border-bottom-color: #d6e9c6;
}
.panel-info {
border-color: #bce8f1;
}
.panel-info > .panel-heading {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse .panel-body {
border-top-color: #bce8f1;
}
.panel-info > .panel-footer + .panel-collapse .panel-body {
border-bottom-color: #bce8f1;
}
.panel-warning {
border-color: #faebcc;
}
.panel-warning > .panel-heading {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse .panel-body {
border-top-color: #faebcc;
}
.panel-warning > .panel-footer + .panel-collapse .panel-body {
border-bottom-color: #faebcc;
}
.panel-danger {
border-color: #ebccd1;
}
.panel-danger > .panel-heading {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse .panel-body {
border-top-color: #ebccd1;
}
.panel-danger > .panel-footer + .panel-collapse .panel-body {
border-bottom-color: #ebccd1;
}
.well {
min-height: 20px;
padding: 19px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #e3e3e3;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
}
.well blockquote {
border-color: #ddd;
border-color: rgba(0, 0, 0, .15);
}
.well-lg {
padding: 24px;
border-radius: 6px;
}
.well-sm {
padding: 9px;
border-radius: 3px;
}
.close {
float: right;
font-size: 21px;
font-weight: bold;
line-height: 1;
color: #000;
text-shadow: 0 1px 0 #fff;
filter: alpha(opacity=20);
opacity: .2;
}
.close:hover,
.close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
filter: alpha(opacity=50);
opacity: .5;
}
button.close {
-webkit-appearance: none;
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
}
.modal-open {
overflow: hidden;
}
.modal {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1050;
display: none;
overflow: auto;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
outline: 0;
}
.modal.fade .modal-dialog {
-webkit-transition: -webkit-transform .3s ease-out;
-moz-transition: -moz-transform .3s ease-out;
-o-transition: -o-transform .3s ease-out;
transition: transform .3s ease-out;
-webkit-transform: translate(0, -25%);
-ms-transform: translate(0, -25%);
transform: translate(0, -25%);
}
.modal.in .modal-dialog {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
transform: translate(0, 0);
}
.modal-dialog {
position: relative;
width: auto;
margin: 10px;
}
.modal-content {
position: relative;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #999;
border: 1px solid rgba(0, 0, 0, .2);
border-radius: 6px;
outline: none;
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
}
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1040;
background-color: #000;
}
.modal-backdrop.fade {
filter: alpha(opacity=0);
opacity: 0;
}
.modal-backdrop.in {
filter: alpha(opacity=50);
opacity: .5;
}
.modal-header {
min-height: 16.42857143px;
padding: 15px;
border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
margin-top: -2px;
}
.modal-title {
margin: 0;
line-height: 1.42857143;
}
.modal-body {
position: relative;
padding: 20px;
}
.modal-footer {
padding: 19px 20px 20px;
margin-top: 15px;
text-align: right;
border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
margin-bottom: 0;
margin-left: 5px;
}
.modal-footer .btn-group .btn + .btn {
margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
margin-left: 0;
}
@media (min-width: 768px) {
.modal-dialog {
width: 600px;
margin: 30px auto;
}
.modal-content {
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
}
.modal-sm {
width: 300px;
}
}
@media (min-width: 992px) {
.modal-lg {
width: 900px;
}
}
.tooltip {
position: absolute;
z-index: 1030;
display: block;
font-size: 12px;
line-height: 1.4;
visibility: visible;
filter: alpha(opacity=0);
opacity: 0;
}
.tooltip.in {
filter: alpha(opacity=90);
opacity: .9;
}
.tooltip.top {
padding: 5px 0;
margin-top: -3px;
}
.tooltip.right {
padding: 0 5px;
margin-left: 3px;
}
.tooltip.bottom {
padding: 5px 0;
margin-top: 3px;
}
.tooltip.left {
padding: 0 5px;
margin-left: -3px;
}
.tooltip-inner {
max-width: 200px;
padding: 3px 8px;
color: #fff;
text-align: center;
text-decoration: none;
background-color: #000;
border-radius: 4px;
}
.tooltip-arrow {
position: absolute;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}
.tooltip.top .tooltip-arrow {
bottom: 0;
left: 50%;
margin-left: -5px;
border-width: 5px 5px 0;
border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
bottom: 0;
left: 5px;
border-width: 5px 5px 0;
border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
right: 5px;
bottom: 0;
border-width: 5px 5px 0;
border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
top: 50%;
left: 0;
margin-top: -5px;
border-width: 5px 5px 5px 0;
border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
top: 50%;
right: 0;
margin-top: -5px;
border-width: 5px 0 5px 5px;
border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
top: 0;
left: 50%;
margin-left: -5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
top: 0;
left: 5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
top: 0;
right: 5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
.popover {
position: absolute;
top: 0;
left: 0;
z-index: 1010;
display: none;
max-width: 276px;
padding: 1px;
text-align: left;
white-space: normal;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, .2);
border-radius: 6px;
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
}
.popover.top {
margin-top: -10px;
}
.popover.right {
margin-left: 10px;
}
.popover.bottom {
margin-top: 10px;
}
.popover.left {
margin-left: -10px;
}
.popover-title {
padding: 8px 14px;
margin: 0;
font-size: 14px;
font-weight: normal;
line-height: 18px;
background-color: #f7f7f7;
border-bottom: 1px solid #ebebeb;
border-radius: 5px 5px 0 0;
}
.popover-content {
padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
position: absolute;
display: block;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}
.popover > .arrow {
border-width: 11px;
}
.popover > .arrow:after {
content: "";
border-width: 10px;
}
.popover.top > .arrow {
bottom: -11px;
left: 50%;
margin-left: -11px;
border-top-color: #999;
border-top-color: rgba(0, 0, 0, .25);
border-bottom-width: 0;
}
.popover.top > .arrow:after {
bottom: 1px;
margin-left: -10px;
content: " ";
border-top-color: #fff;
border-bottom-width: 0;
}
.popover.right > .arrow {
top: 50%;
left: -11px;
margin-top: -11px;
border-right-color: #999;
border-right-color: rgba(0, 0, 0, .25);
border-left-width: 0;
}
.popover.right > .arrow:after {
bottom: -10px;
left: 1px;
content: " ";
border-right-color: #fff;
border-left-width: 0;
}
.popover.bottom > .arrow {
top: -11px;
left: 50%;
margin-left: -11px;
border-top-width: 0;
border-bottom-color: #999;
border-bottom-color: rgba(0, 0, 0, .25);
}
.popover.bottom > .arrow:after {
top: 1px;
margin-left: -10px;
content: " ";
border-top-width: 0;
border-bottom-color: #fff;
}
.popover.left > .arrow {
top: 50%;
right: -11px;
margin-top: -11px;
border-right-width: 0;
border-left-color: #999;
border-left-color: rgba(0, 0, 0, .25);
}
.popover.left > .arrow:after {
right: 1px;
bottom: -10px;
content: " ";
border-right-width: 0;
border-left-color: #fff;
}
.carousel {
position: relative;
}
.carousel-inner {
position: relative;
width: 100%;
overflow: hidden;
}
.carousel-inner > .item {
position: relative;
display: none;
-webkit-transition: .6s ease-in-out left;
transition: .6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
line-height: 1;
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
display: block;
}
.carousel-inner > .active {
left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
position: absolute;
top: 0;
width: 100%;
}
.carousel-inner > .next {
left: 100%;
}
.carousel-inner > .prev {
left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
left: 0;
}
.carousel-inner > .active.left {
left: -100%;
}
.carousel-inner > .active.right {
left: 100%;
}
.carousel-control {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 15%;
font-size: 20px;
color: #fff;
text-align: center;
text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
filter: alpha(opacity=50);
opacity: .5;
}
.carousel-control.left {
background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));
background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
background-repeat: repeat-x;
}
.carousel-control.right {
right: 0;
left: auto;
background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));
background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
background-repeat: repeat-x;
}
.carousel-control:hover,
.carousel-control:focus {
color: #fff;
text-decoration: none;
filter: alpha(opacity=90);
outline: none;
opacity: .9;
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
position: absolute;
top: 50%;
z-index: 5;
display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
left: 50%;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
right: 50%;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
width: 20px;
height: 20px;
margin-top: -10px;
margin-left: -10px;
font-family: serif;
}
.carousel-control .icon-prev:before {
content: '\2039';
}
.carousel-control .icon-next:before {
content: '\203a';
}
.carousel-indicators {
position: absolute;
bottom: 10px;
left: 50%;
z-index: 15;
width: 60%;
padding-left: 0;
margin-left: -30%;
text-align: center;
list-style: none;
}
.carousel-indicators li {
display: inline-block;
width: 10px;
height: 10px;
margin: 1px;
text-indent: -999px;
cursor: pointer;
background-color: #000 \9;
background-color: rgba(0, 0, 0, 0);
border: 1px solid #fff;
border-radius: 10px;
}
.carousel-indicators .active {
width: 12px;
height: 12px;
margin: 0;
background-color: #fff;
}
.carousel-caption {
position: absolute;
right: 15%;
bottom: 20px;
left: 15%;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: #fff;
text-align: center;
text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
}
.carousel-caption .btn {
text-shadow: none;
}
@media screen and (min-width: 768px) {
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right,
.carousel-control .icon-prev,
.carousel-control .icon-next {
width: 30px;
height: 30px;
margin-top: -15px;
margin-left: -15px;
font-size: 30px;
}
.carousel-caption {
right: 20%;
left: 20%;
padding-bottom: 30px;
}
.carousel-indicators {
bottom: 20px;
}
}
.clearfix:before,
.clearfix:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-footer:before,
.modal-footer:after {
display: table;
content: " ";
}
.clearfix:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-footer:after {
clear: both;
}
.center-block {
display: block;
margin-right: auto;
margin-left: auto;
}
.pull-right {
float: right !important;
}
.pull-left {
float: left !important;
}
.hide {
display: none !important;
}
.show {
display: block !important;
}
.invisible {
visibility: hidden;
}
.text-hide {
font: 0/0 a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}
.hidden {
display: none !important;
visibility: hidden !important;
}
.affix {
position: fixed;
}
@-ms-viewport {
width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
display: none !important;
}
@media (max-width: 767px) {
.visible-xs {
display: block !important;
}
table.visible-xs {
display: table;
}
tr.visible-xs {
display: table-row !important;
}
th.visible-xs,
td.visible-xs {
display: table-cell !important;
}
}
@media (min-width: 768px) and (max-width: 991px) {
.visible-sm {
display: block !important;
}
table.visible-sm {
display: table;
}
tr.visible-sm {
display: table-row !important;
}
th.visible-sm,
td.visible-sm {
display: table-cell !important;
}
}
@media (min-width: 992px) and (max-width: 1199px) {
.visible-md {
display: block !important;
}
table.visible-md {
display: table;
}
tr.visible-md {
display: table-row !important;
}
th.visible-md,
td.visible-md {
display: table-cell !important;
}
}
@media (min-width: 1200px) {
.visible-lg {
display: block !important;
}
table.visible-lg {
display: table;
}
tr.visible-lg {
display: table-row !important;
}
th.visible-lg,
td.visible-lg {
display: table-cell !important;
}
}
@media (max-width: 767px) {
.hidden-xs {
display: none !important;
}
}
@media (min-width: 768px) and (max-width: 991px) {
.hidden-sm {
display: none !important;
}
}
@media (min-width: 992px) and (max-width: 1199px) {
.hidden-md {
display: none !important;
}
}
@media (min-width: 1200px) {
.hidden-lg {
display: none !important;
}
}
.visible-print {
display: none !important;
}
@media print {
.visible-print {
display: block !important;
}
table.visible-print {
display: table;
}
tr.visible-print {
display: table-row !important;
}
th.visible-print,
td.visible-print {
display: table-cell !important;
}
}
@media print {
.hidden-print {
display: none !important;
}
}
/*# sourceMappingURL=bootstrap.css.map */
================================================
FILE: client/css/codemirror-mdn.css
================================================
/*
MDN-LIKE Theme - Mozilla
Ported to CodeMirror by Peter Kroon <plakroon@gmail.com>
Report bugs/issues here: https://github.com/marijnh/CodeMirror/issues
GitHub: @peterkroon
The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation
*/
.cm-s-mdn-like.CodeMirror { color: #999; font-family: monospace; background-color: #fff; }
.cm-s-mdn-like .CodeMirror-selected { background: #cfc !important; }
.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; }
.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; margin-left: 3px; }
div.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; }
.cm-s-mdn-like .cm-keyword { color: #6262FF; }
.cm-s-mdn-like .cm-atom { color: #F90; }
.cm-s-mdn-like .cm-number { color: #ca7841; }
.cm-s-mdn-like .cm-def { color: #8DA6CE; }
.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; }
.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; }
.cm-s-mdn-like .cm-variable { color: #07a; }
.cm-s-mdn-like .cm-property { color: #905; }
.cm-s-mdn-like .cm-qualifier { color: #690; }
.cm-s-mdn-like .cm-operator { color: #cda869; }
.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; }
.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; }
.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/
.cm-s-mdn-like .cm-meta { color: #000; } /*?*/
.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/
.cm-s-mdn-like .cm-tag { color: #997643; }
.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/
.cm-s-mdn-like .cm-header { color: #FF6400; }
.cm-s-mdn-like .cm-hr { color: #AEAEAE; }
.cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; }
.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; }
div.cm-s-mdn-like .CodeMirror-activeline-background {background: #efefff;}
div.cm-s-mdn-like span.CodeMirror-matchingbracket {outline:1px solid grey; color: inherit;}
.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); }
================================================
FILE: client/css/codemirror.css
================================================
/* BASICS */
.CodeMirror {
/* Set height, width, borders, and global font properties here */
font-family: monospace;
height: 300px;
}
.CodeMirror-scroll {
/* Set scrolling behaviour here */
overflow: auto;
}
/* PADDING */
.CodeMirror-lines {
padding: 4px 0; /* Vertical padding around content */
}
.CodeMirror pre {
padding: 0 4px; /* Horizontal padding of content */
}
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
background-color: white; /* The little square between H and V scrollbars */
}
/* GUTTER */
.CodeMirror-gutters {
border-right: 1px solid #ddd;
background-color: #f7f7f7;
white-space: nowrap;
}
.CodeMirror-linenumbers {}
.CodeMirror-linenumber {
padding: 0 3px 0 5px;
min-width: 20px;
text-align: right;
color: #999;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
/* CURSOR */
.CodeMirror div.CodeMirror-cursor {
border-left: 1px solid black;
z-index: 3;
}
/* Shown when moving in bi-directional text */
.CodeMirror div.CodeMirror-secondarycursor {
border-left: 1px solid silver;
}
.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
width: auto;
border: 0;
background: #7e7;
z-index: 1;
}
/* Can style cursor different in overwrite (non-insert) mode */
.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
.cm-tab { display: inline-block; }
.CodeMirror-ruler {
border-left: 1px solid #ccc;
position: absolute;
}
/* DEFAULT THEME */
.cm-s-default .cm-keyword {color: #708;}
.cm-s-default .cm-atom {color: #219;}
.cm-s-default .cm-number {color: #164;}
.cm-s-default .cm-def {color: #00f;}
.cm-s-default .cm-variable {color: black;}
.cm-s-default .cm-variable-2 {color: #05a;}
.cm-s-default .cm-variable-3 {color: #085;}
.cm-s-default .cm-property {color: black;}
.cm-s-default .cm-operator {color: black;}
.cm-s-default .cm-comment {color: #a50;}
.cm-s-default .cm-string {color: #a11;}
.cm-s-default .cm-string-2 {color: #f50;}
.cm-s-default .cm-meta {color: #555;}
.cm-s-default .cm-qualifier {color: #555;}
.cm-s-default .cm-builtin {color: #30a;}
.cm-s-default .cm-bracket {color: #997;}
.cm-s-default .cm-tag {color: #170;}
.cm-s-default .cm-attribute {color: #00c;}
.cm-s-default .cm-header {color: blue;}
.cm-s-default .cm-quote {color: #090;}
.cm-s-default .cm-hr {color: #999;}
.cm-s-default .cm-link {color: #00c;}
.cm-negative {color: #d44;}
.cm-positive {color: #292;}
.cm-header, .cm-strong {font-weight: bold;}
.cm-em {font-style: italic;}
.cm-link {text-decoration: underline;}
.cm-s-default .cm-error {color: #f00;}
.cm-invalidchar {color: #f00;}
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
.CodeMirror-activeline-background {background: #e8f2ff;}
/* STOP */
/* The rest of this file contains styles related to the mechanics of
the editor. You probably shouldn't touch them. */
.CodeMirror {
line-height: 1;
position: relative;
overflow: hidden;
background: white;
color: black;
}
.CodeMirror-scroll {
/* 30px is the magic margin used to hide the element's real scrollbars */
/* See overflow: hidden in .CodeMirror */
margin-bottom: -30px; margin-right: -30px;
padding-bottom: 30px;
height: 100%;
outline: none; /* Prevent dragging from highlighting the element */
position: relative;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.CodeMirror-sizer {
position: relative;
border-right: 30px solid transparent;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
/* The fake, visible scrollbars. Used to force redraw during scrolling
before actuall scrolling happens, thus preventing shaking and
flickering artifacts. */
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
position: absolute;
z-index: 6;
display: none;
}
.CodeMirror-vscrollbar {
right: 0; top: 0;
overflow-x: hidden;
overflow-y: scroll;
}
.CodeMirror-hscrollbar {
bottom: 0; left: 0;
overflow-y: hidden;
overflow-x: scroll;
}
.CodeMirror-scrollbar-filler {
right: 0; bottom: 0;
}
.CodeMirror-gutter-filler {
left: 0; bottom: 0;
}
.CodeMirror-gutters {
position: absolute; left: 0; top: 0;
padding-bottom: 30px;
z-index: 3;
}
.CodeMirror-gutter {
white-space: normal;
height: 100%;
-moz-box-sizing: content-box;
box-sizing: content-box;
padding-bottom: 30px;
margin-bottom: -32px;
display: inline-block;
/* Hack to make IE7 behave */
*zoom:1;
*display:inline;
}
.CodeMirror-gutter-elt {
position: absolute;
cursor: default;
z-index: 4;
}
.CodeMirror-lines {
cursor: text;
}
.CodeMirror pre {
/* Reset some styles that the rest of the page might have set */
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
border-width: 0;
background: transparent;
font-family: inherit;
font-size: inherit;
margin: 0;
white-space: pre;
word-wrap: normal;
line-height: inherit;
color: inherit;
z-index: 2;
position: relative;
overflow: visible;
}
.CodeMirror-wrap pre {
word-wrap: break-word;
white-space: pre-wrap;
word-break: normal;
}
.CodeMirror-linebackground {
position: absolute;
left: 0; right: 0; top: 0; bottom: 0;
z-index: 0;
}
.CodeMirror-linewidget {
position: relative;
z-index: 2;
overflow: auto;
}
.CodeMirror-widget {}
.CodeMirror-wrap .CodeMirror-scroll {
overflow-x: hidden;
}
.CodeMirror-measure {
position: absolute;
width: 100%;
height: 0;
overflow: hidden;
visibility: hidden;
}
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor {
position: absolute;
visibility: hidden;
border-right: none;
width: 0;
}
.CodeMirror-focused div.CodeMirror-cursor {
visibility: visible;
}
.CodeMirror-selected { background: #d9d9d9; }
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
.cm-searching {
background: #ffa;
background: rgba(255, 255, 0, .4);
}
/* IE7 hack to prevent it from returning funny offsetTops on the spans */
.CodeMirror span { *vertical-align: text-bottom; }
@media print {
/* Hide the cursor when printing */
.CodeMirror div.CodeMirror-cursor {
visibility: hidden;
}
}
================================================
FILE: client/css/dashboard.css
================================================
/*
* Base structure
*/
/* Move down content because we have a fixed navbar that is 50px tall */
body {
padding-top: 50px;
}
/*
* Global add-ons
*/
.sub-header {
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
/*
* Sidebar
*/
/* Hide for mobile, show later */
.sidebar {
display: none;
}
@media (min-width: 768px) {
.sidebar {
position: fixed;
top: 51px;
bottom: 0;
left: 0;
z-index: 1000;
display: block;
padding: 20px;
overflow-x: hidden;
overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
background-color: #EAEFF2;
border-right: 1px solid #eee;
}
}
/* Sidebar navigation */
.nav-sidebar {
margin-right: -21px; /* 20px padding + 1px border */
margin-bottom: 20px;
margin-left: -20px;
}
.nav-sidebar > li > a {
padding-right: 20px;
padding-left: 20px;
}
.nav-sidebar > .active > a {
color: #fff;
background-color: #00539F;
}
/*
* Main content
*/
.main {
padding: 20px;
}
@media (min-width: 768px) {
.main {
padding-right: 40px;
padding-left: 40px;
}
}
.main .page-header {
margin-top: 0;
}
/*
* Placeholder dashboard ideas
*/
.placeholders {
margin-bottom: 30px;
text-align: center;
}
.placeholders h4 {
margin-bottom: 0;
}
.placeholder {
margin-bottom: 20px;
}
.placeholder img {
display: inline-block;
border-radius: 50%;
}
================================================
FILE: client/css/font-awesome.css
================================================
/*!
* Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/
/* FONT PATH
* -------------------------- */
@font-face {
font-family: 'FontAwesome';
src: url('../fonts/fontawesome-webfont.eot?v=4.0.3');
src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
.fa {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
font-size: 1.3333333333333333em;
line-height: 0.75em;
vertical-align: -15%;
}
.fa-2x {
font-size: 2em;
}
.fa-3x {
font-size: 3em;
}
.fa-4x {
font-size: 4em;
}
.fa-5x {
font-size: 5em;
}
.fa-fw {
width: 1.2857142857142858em;
text-align: center;
}
.fa-ul {
padding-left: 0;
margin-left: 2.142857142857143em;
list-style-type: none;
}
.fa-ul > li {
position: relative;
}
.fa-li {
position: absolute;
left: -2.142857142857143em;
width: 2.142857142857143em;
top: 0.14285714285714285em;
text-align: center;
}
.fa-li.fa-lg {
left: -1.8571428571428572em;
}
.fa-border {
padding: .2em .25em .15em;
border: solid 0.08em #eeeeee;
border-radius: .1em;
}
.pull-right {
float: right;
}
.pull-left {
float: left;
}
.fa.pull-left {
margin-right: .3em;
}
.fa.pull-right {
margin-left: .3em;
}
.fa-spin {
-webkit-animation: spin 2s infinite linear;
-moz-animation: spin 2s infinite linear;
-o-animation: spin 2s infinite linear;
animation: spin 2s infinite linear;
}
@-moz-keyframes spin {
0% {
-moz-transform: rotate(0deg);
}
100% {
-moz-transform: rotate(359deg);
}
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
}
}
@-o-keyframes spin {
0% {
-o-transform: rotate(0deg);
}
100% {
-o-transform: rotate(359deg);
}
}
@-ms-keyframes spin {
0% {
-ms-transform: rotate(0deg);
}
100% {
-ms-transform: rotate(359deg);
}
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(359deg);
}
}
.fa-rotate-90 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-ms-transform: rotate(90deg);
-o-transform: rotate(90deg);
transform: rotate(90deg);
}
.fa-rotate-180 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}
.fa-rotate-270 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-webkit-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-ms-transform: rotate(270deg);
-o-transform: rotate(270deg);
transform: rotate(270deg);
}
.fa-flip-horizontal {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
-webkit-transform: scale(-1, 1);
-moz-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
transform: scale(-1, 1);
}
.fa-flip-vertical {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
-webkit-transform: scale(1, -1);
-moz-transform: scale(1, -1);
-ms-transform: scale(1, -1);
-o-transform: scale(1, -1);
transform: scale(1, -1);
}
.fa-stack {
position: relative;
display: inline-block;
width: 2em;
height: 2em;
line-height: 2em;
vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
position: absolute;
left: 0;
width: 100%;
text-align: center;
}
.fa-stack-1x {
line-height: inherit;
}
.fa-stack-2x {
font-size: 2em;
}
.fa-inverse {
color: #ffffff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
.fa-glass:before {
content: "\f000";
}
.fa-music:before {
content: "\f001";
}
.fa-search:before {
content: "\f002";
}
.fa-envelope-o:before {
content: "\f003";
}
.fa-heart:before {
content: "\f004";
}
.fa-star:before {
content: "\f005";
}
.fa-star-o:before {
content: "\f006";
}
.fa-user:before {
content: "\f007";
}
.fa-film:before {
content: "\f008";
}
.fa-th-large:before {
content: "\f009";
}
.fa-th:before {
content: "\f00a";
}
.fa-th-list:before {
content: "\f00b";
}
.fa-check:before {
content: "\f00c";
}
.fa-times:before {
content: "\f00d";
}
.fa-search-plus:before {
content: "\f00e";
}
.fa-search-minus:before {
content: "\f010";
}
.fa-power-off:before {
content: "\f011";
}
.fa-signal:before {
content: "\f012";
}
.fa-gear:before,
.fa-cog:before {
content: "\f013";
}
.fa-trash-o:before {
content: "\f014";
}
.fa-home:before {
content: "\f015";
}
.fa-file-o:before {
content: "\f016";
}
.fa-clock-o:before {
content: "\f017";
}
.fa-road:before {
content: "\f018";
}
.fa-download:before {
content: "\f019";
}
.fa-arrow-circle-o-down:before {
content: "\f01a";
}
.fa-arrow-circle-o-up:before {
content: "\f01b";
}
.fa-inbox:before {
content: "\f01c";
}
.fa-play-circle-o:before {
content: "\f01d";
}
.fa-rotate-right:before,
.fa-repeat:before {
content: "\f01e";
}
.fa-refresh:before {
content: "\f021";
}
.fa-list-alt:before {
content: "\f022";
}
.fa-lock:before {
content: "\f023";
}
.fa-flag:before {
content: "\f024";
}
.fa-headphones:before {
content: "\f025";
}
.fa-volume-off:before {
content: "\f026";
}
.fa-volume-down:before {
content: "\f027";
}
.fa-volume-up:before {
content: "\f028";
}
.fa-qrcode:before {
content: "\f029";
}
.fa-barcode:before {
content: "\f02a";
}
.fa-tag:before {
content: "\f02b";
}
.fa-tags:before {
content: "\f02c";
}
.fa-book:before {
content: "\f02d";
}
.fa-bookmark:before {
content: "\f02e";
}
.fa-print:before {
content: "\f02f";
}
.fa-camera:before {
content: "\f030";
}
.fa-font:before {
content: "\f031";
}
.fa-bold:before {
content: "\f032";
}
.fa-italic:before {
content: "\f033";
}
.fa-text-height:before {
content: "\f034";
}
.fa-text-width:before {
content: "\f035";
}
.fa-align-left:before {
content: "\f036";
}
.fa-align-center:before {
content: "\f037";
}
.fa-align-right:before {
content: "\f038";
}
.fa-align-justify:before {
content: "\f039";
}
.fa-list:before {
content: "\f03a";
}
.fa-dedent:before,
.fa-outdent:before {
content: "\f03b";
}
.fa-indent:before {
content: "\f03c";
}
.fa-video-camera:before {
content: "\f03d";
}
.fa-picture-o:before {
content: "\f03e";
}
.fa-pencil:before {
content: "\f040";
}
.fa-map-marker:before {
content: "\f041";
}
.fa-adjust:before {
content: "\f042";
}
.fa-tint:before {
content: "\f043";
}
.fa-edit:before,
.fa-pencil-square-o:before {
content: "\f044";
}
.fa-share-square-o:before {
content: "\f045";
}
.fa-check-square-o:before {
content: "\f046";
}
.fa-arrows:before {
content: "\f047";
}
.fa-step-backward:before {
content: "\f048";
}
.fa-fast-backward:before {
content: "\f049";
}
.fa-backward:before {
content: "\f04a";
}
.fa-play:before {
content: "\f04b";
}
.fa-pause:before {
content: "\f04c";
}
.fa-stop:before {
content: "\f04d";
}
.fa-forward:before {
content: "\f04e";
}
.fa-fast-forward:before {
content: "\f050";
}
.fa-step-forward:before {
content: "\f051";
}
.fa-eject:before {
content: "\f052";
}
.fa-chevron-left:before {
content: "\f053";
}
.fa-chevron-right:before {
content: "\f054";
}
.fa-plus-circle:before {
content: "\f055";
}
.fa-minus-circle:before {
content: "\f056";
}
.fa-times-circle:before {
content: "\f057";
}
.fa-check-circle:before {
content: "\f058";
}
.fa-question-circle:before {
content: "\f059";
}
.fa-info-circle:before {
content: "\f05a";
}
.fa-crosshairs:before {
content: "\f05b";
}
.fa-times-circle-o:before {
content: "\f05c";
}
.fa-check-circle-o:before {
content: "\f05d";
}
.fa-ban:before {
content: "\f05e";
}
.fa-arrow-left:before {
content: "\f060";
}
.fa-arrow-right:before {
content: "\f061";
}
.fa-arrow-up:before {
content: "\f062";
}
.fa-arrow-down:before {
content: "\f063";
}
.fa-mail-forward:before,
.fa-share:before {
content: "\f064";
}
.fa-expand:before {
content: "\f065";
}
.fa-compress:before {
content: "\f066";
}
.fa-plus:before {
content: "\f067";
}
.fa-minus:before {
content: "\f068";
}
.fa-asterisk:before {
content: "\f069";
}
.fa-exclamation-circle:before {
content: "\f06a";
}
.fa-gift:before {
content: "\f06b";
}
.fa-leaf:before {
content: "\f06c";
}
.fa-fire:before {
content: "\f06d";
}
.fa-eye:before {
content: "\f06e";
}
.fa-eye-slash:before {
content: "\f070";
}
.fa-warning:before,
.fa-exclamation-triangle:before {
content: "\f071";
}
.fa-plane:before {
content: "\f072";
}
.fa-calendar:before {
content: "\f073";
}
.fa-random:before {
content: "\f074";
}
.fa-comment:before {
content: "\f075";
}
.fa-magnet:before {
content: "\f076";
}
.fa-chevron-up:before {
content: "\f077";
}
.fa-chevron-down:before {
content: "\f078";
}
.fa-retweet:before {
content: "\f079";
}
.fa-shopping-cart:before {
content: "\f07a";
}
.fa-folder:before {
content: "\f07b";
}
.fa-folder-open:before {
content: "\f07c";
}
.fa-arrows-v:before {
content: "\f07d";
}
.fa-arrows-h:before {
content: "\f07e";
}
.fa-bar-chart-o:before {
content: "\f080";
}
.fa-twitter-square:before {
content: "\f081";
}
.fa-facebook-square:before {
content: "\f082";
}
.fa-camera-retro:before {
content: "\f083";
}
.fa-key:before {
content: "\f084";
}
.fa-gears:before,
.fa-cogs:before {
content: "\f085";
}
.fa-comments:before {
content: "\f086";
}
.fa-thumbs-o-up:before {
content: "\f087";
}
.fa-thumbs-o-down:before {
content: "\f088";
}
.fa-star-half:before {
content: "\f089";
}
.fa-heart-o:before {
content: "\f08a";
}
.fa-sign-out:before {
content: "\f08b";
}
.fa-linkedin-square:before {
content: "\f08c";
}
.fa-thumb-tack:before {
content: "\f08d";
}
.fa-external-link:before {
content: "\f08e";
}
.fa-sign-in:before {
content: "\f090";
}
.fa-trophy:before {
content: "\f091";
}
.fa-github-square:before {
content: "\f092";
}
.fa-upload:before {
content: "\f093";
}
.fa-lemon-o:before {
content: "\f094";
}
.fa-phone:before {
content: "\f095";
}
.fa-square-o:before {
content: "\f096";
}
.fa-bookmark-o:before {
content: "\f097";
}
.fa-phone-square:before {
content: "\f098";
}
.fa-twitter:before {
content: "\f099";
}
.fa-facebook:before {
content: "\f09a";
}
.fa-github:before {
content: "\f09b";
}
.fa-unlock:before {
content: "\f09c";
}
.fa-credit-card:before {
content: "\f09d";
}
.fa-rss:before {
content: "\f09e";
}
.fa-hdd-o:before {
content: "\f0a0";
}
.fa-bullhorn:before {
content: "\f0a1";
}
.fa-bell:before {
content: "\f0f3";
}
.fa-certificate:before {
content: "\f0a3";
}
.fa-hand-o-right:before {
content: "\f0a4";
}
.fa-hand-o-left:before {
content: "\f0a5";
}
.fa-hand-o-up:before {
content: "\f0a6";
}
.fa-hand-o-down:before {
content: "\f0a7";
}
.fa-arrow-circle-left:before {
content: "\f0a8";
}
.fa-arrow-circle-right:before {
content: "\f0a9";
}
.fa-arrow-circle-up:before {
content: "\f0aa";
}
.fa-arrow-circle-down:before {
content: "\f0ab";
}
.fa-globe:before {
content: "\f0ac";
}
.fa-wrench:before {
content: "\f0ad";
}
.fa-tasks:before {
content: "\f0ae";
}
.fa-filter:before {
content: "\f0b0";
}
.fa-briefcase:before {
content: "\f0b1";
}
.fa-arrows-alt:before {
content: "\f0b2";
}
.fa-group:before,
.fa-users:before {
content: "\f0c0";
}
.fa-chain:before,
.fa-link:before {
content: "\f0c1";
}
.fa-cloud:before {
content: "\f0c2";
}
.fa-flask:before {
content: "\f0c3";
}
.fa-cut:before,
.fa-scissors:before {
content: "\f0c4";
}
.fa-copy:before,
.fa-files-o:before {
content: "\f0c5";
}
.fa-paperclip:before {
content: "\f0c6";
}
.fa-save:before,
.fa-floppy-o:before {
content: "\f0c7";
}
.fa-square:before {
content: "\f0c8";
}
.fa-bars:before {
content: "\f0c9";
}
.fa-list-ul:before {
content: "\f0ca";
}
.fa-list-ol:before {
content: "\f0cb";
}
.fa-strikethrough:before {
content: "\f0cc";
}
.fa-underline:before {
content: "\f0cd";
}
.fa-table:before {
content: "\f0ce";
}
.fa-magic:before {
content: "\f0d0";
}
.fa-truck:before {
content: "\f0d1";
}
.fa-pinterest:before {
content: "\f0d2";
}
.fa-pinterest-square:before {
content: "\f0d3";
}
.fa-google-plus-square:before {
content: "\f0d4";
}
.fa-google-plus:before {
content: "\f0d5";
}
.fa-money:before {
content: "\f0d6";
}
.fa-caret-down:before {
content: "\f0d7";
}
.fa-caret-up:before {
content: "\f0d8";
}
.fa-caret-left:before {
content: "\f0d9";
}
.fa-caret-right:before {
content: "\f0da";
}
.fa-columns:before {
content: "\f0db";
}
.fa-unsorted:before,
.fa-sort:before {
content: "\f0dc";
}
.fa-sort-down:before,
.fa-sort-asc:before {
content: "\f0dd";
}
.fa-sort-up:before,
.fa-sort-desc:before {
content: "\f0de";
}
.fa-envelope:before {
content: "\f0e0";
}
.fa-linkedin:before {
content: "\f0e1";
}
.fa-rotate-left:before,
.fa-undo:before {
content: "\f0e2";
}
.fa-legal:before,
.fa-gavel:before {
content: "\f0e3";
}
.fa-dashboard:before,
.fa-tachometer:before {
content: "\f0e4";
}
.fa-comment-o:before {
content: "\f0e5";
}
.fa-comments-o:before {
content: "\f0e6";
}
.fa-flash:before,
.fa-bolt:before {
content: "\f0e7";
}
.fa-sitemap:before {
content: "\f0e8";
}
.fa-umbrella:before {
content: "\f0e9";
}
.fa-paste:before,
.fa-clipboard:before {
content: "\f0ea";
}
.fa-lightbulb-o:before {
content: "\f0eb";
}
.fa-exchange:before {
content: "\f0ec";
}
.fa-cloud-download:before {
content: "\f0ed";
}
.fa-cloud-upload:before {
content: "\f0ee";
}
.fa-user-md:before {
content: "\f0f0";
}
.fa-stethoscope:before {
content: "\f0f1";
}
.fa-suitcase:before {
content: "\f0f2";
}
.fa-bell-o:before {
content: "\f0a2";
}
.fa-coffee:before {
content: "\f0f4";
}
.fa-cutlery:before {
content: "\f0f5";
}
.fa-file-text-o:before {
content: "\f0f6";
}
.fa-building-o:before {
content: "\f0f7";
}
.fa-hospital-o:before {
content: "\f0f8";
}
.fa-ambulance:before {
content: "\f0f9";
}
.fa-medkit:before {
content: "\f0fa";
}
.fa-fighter-jet:before {
content: "\f0fb";
}
.fa-beer:before {
content: "\f0fc";
}
.fa-h-square:before {
content: "\f0fd";
}
.fa-plus-square:before {
content: "\f0fe";
}
.fa-angle-double-left:before {
content: "\f100";
}
.fa-angle-double-right:before {
content: "\f101";
}
.fa-angle-double-up:before {
content: "\f102";
}
.fa-angle-double-down:before {
content: "\f103";
}
.fa-angle-left:before {
content: "\f104";
}
.fa-angle-right:before {
content: "\f105";
}
.fa-angle-up:before {
content: "\f106";
}
.fa-angle-down:before {
content: "\f107";
}
.fa-desktop:before {
content: "\f108";
}
.fa-laptop:before {
content: "\f109";
}
.fa-tablet:before {
content: "\f10a";
}
.fa-mobile-phone:before,
.fa-mobile:before {
content: "\f10b";
}
.fa-circle-o:before {
content: "\f10c";
}
.fa-quote-left:before {
content: "\f10d";
}
.fa-quote-right:before {
content: "\f10e";
}
.fa-spinner:before {
content: "\f110";
}
.fa-circle:before {
content: "\f111";
}
.fa-mail-reply:before,
.fa-reply:before {
content: "\f112";
}
.fa-github-alt:before {
content: "\f113";
}
.fa-folder-o:before {
content: "\f114";
}
.fa-folder-open-o:before {
content: "\f115";
}
.fa-smile-o:before {
content: "\f118";
}
.fa-frown-o:before {
content: "\f119";
}
.fa-meh-o:before {
content: "\f11a";
}
.fa-gamepad:before {
content: "\f11b";
}
.fa-keyboard-o:before {
content: "\f11c";
}
.fa-flag-o:before {
content: "\f11d";
}
.fa-flag-checkered:before {
content: "\f11e";
}
.fa-terminal:before {
content: "\f120";
}
.fa-code:before {
content: "\f121";
}
.fa-reply-all:before {
content: "\f122";
}
.fa-mail-reply-all:before {
content: "\f122";
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
content: "\f123";
}
.fa-location-arrow:before {
content: "\f124";
}
.fa-crop:before {
content: "\f125";
}
.fa-code-fork:before {
content: "\f126";
}
.fa-unlink:before,
.fa-chain-broken:before {
content: "\f127";
}
.fa-question:before {
content: "\f128";
}
.fa-info:before {
content: "\f129";
}
.fa-exclamation:before {
content: "\f12a";
}
.fa-superscript:before {
content: "\f12b";
}
.fa-subscript:before {
content: "\f12c";
}
.fa-eraser:before {
content: "\f12d";
}
.fa-puzzle-piece:before {
content: "\f12e";
}
.fa-microphone:before {
content: "\f130";
}
.fa-microphone-slash:before {
content: "\f131";
}
.fa-shield:before {
content: "\f132";
}
.fa-calendar-o:before {
content: "\f133";
}
.fa-fire-extinguisher:before {
content: "\f134";
}
.fa-rocket:before {
content: "\f135";
}
.fa-maxcdn:before {
content: "\f136";
}
.fa-chevron-circle-left:before {
content: "\f137";
}
.fa-chevron-circle-right:before {
content: "\f138";
}
.fa-chevron-circle-up:before {
content: "\f139";
}
.fa-chevron-circle-down:before {
content: "\f13a";
}
.fa-html5:before {
content: "\f13b";
}
.fa-css3:before {
content: "\f13c";
}
.fa-anchor:before {
content: "\f13d";
}
.fa-unlock-alt:before {
content: "\f13e";
}
.fa-bullseye:before {
content: "\f140";
}
.fa-ellipsis-h:before {
content: "\f141";
}
.fa-ellipsis-v:before {
content: "\f142";
}
.fa-rss-square:before {
content: "\f143";
}
.fa-play-circle:before {
content: "\f144";
}
.fa-ticket:before {
content: "\f145";
}
.fa-minus-square:before {
content: "\f146";
}
.fa-minus-square-o:before {
content: "\f147";
}
.fa-level-up:before {
content: "\f148";
}
.fa-level-down:before {
content: "\f149";
}
.fa-check-square:before {
content: "\f14a";
}
.fa-pencil-square:before {
content: "\f14b";
}
.fa-external-link-square:before {
content: "\f14c";
}
.fa-share-square:before {
content: "\f14d";
}
.fa-compass:before {
content: "\f14e";
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
content: "\f150";
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
content: "\f151";
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
content: "\f152";
}
.fa-euro:before,
.fa-eur:before {
content: "\f153";
}
.fa-gbp:before {
content: "\f154";
}
.fa-dollar:before,
.fa-usd:before {
content: "\f155";
}
.fa-rupee:before,
.fa-inr:before {
content: "\f156";
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
content: "\f157";
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
content: "\f158";
}
.fa-won:before,
.fa-krw:before {
content: "\f159";
}
.fa-bitcoin:before,
.fa-btc:before {
content: "\f15a";
}
.fa-file:before {
content: "\f15b";
}
.fa-file-text:before {
content: "\f15c";
}
.fa-sort-alpha-asc:before {
content: "\f15d";
}
.fa-sort-alpha-desc:before {
content: "\f15e";
}
.fa-sort-amount-asc:before {
content: "\f160";
}
.fa-sort-amount-desc:before {
content: "\f161";
}
.fa-sort-numeric-asc:before {
content: "\f162";
}
.fa-sort-numeric-desc:before {
content: "\f163";
}
.fa-thumbs-up:before {
content: "\f164";
}
.fa-thumbs-down:before {
content: "\f165";
}
.fa-youtube-square:before {
content: "\f166";
}
.fa-youtube:before {
content: "\f167";
}
.fa-xing:before {
content: "\f168";
}
.fa-xing-square:before {
content: "\f169";
}
.fa-youtube-play:before {
content: "\f16a";
}
.fa-dropbox:before {
content: "\f16b";
}
.fa-stack-overflow:before {
content: "\f16c";
}
.fa-instagram:before {
content: "\f16d";
}
.fa-flickr:before {
content: "\f16e";
}
.fa-adn:before {
content: "\f170";
}
.fa-bitbucket:before {
content: "\f171";
}
.fa-bitbucket-square:before {
content: "\f172";
}
.fa-tumblr:before {
content: "\f173";
}
.fa-tumblr-square:before {
content: "\f174";
}
.fa-long-arrow-down:before {
content: "\f175";
}
.fa-long-arrow-up:before {
content: "\f176";
}
.fa-long-arrow-left:before {
content: "\f177";
}
.fa-long-arrow-right:before {
content: "\f178";
}
.fa-apple:before {
content: "\f179";
}
.fa-windows:before {
content: "\f17a";
}
.fa-android:before {
content: "\f17b";
}
.fa-linux:before {
content: "\f17c";
}
.fa-dribbble:before {
content: "\f17d";
}
.fa-skype:before {
content: "\f17e";
}
.fa-foursquare:before {
content: "\f180";
}
.fa-trello:before {
content: "\f181";
}
.fa-female:before {
content: "\f182";
}
.fa-male:before {
content: "\f183";
}
.fa-gittip:before {
content: "\f184";
}
.fa-sun-o:before {
content: "\f185";
}
.fa-moon-o:before {
content: "\f186";
}
.fa-archive:before {
content: "\f187";
}
.fa-bug:before {
content: "\f188";
}
.fa-vk:before {
content: "\f189";
}
.fa-weibo:before {
content: "\f18a";
}
.fa-renren:before {
content: "\f18b";
}
.fa-pagelines:before {
content: "\f18c";
}
.fa-stack-exchange:before {
content: "\f18d";
}
.fa-arrow-circle-o-right:before {
content: "\f18e";
}
.fa-arrow-circle-o-left:before {
content: "\f190";
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
content: "\f191";
}
.fa-dot-circle-o:before {
content: "\f192";
}
.fa-wheelchair:before {
content: "\f193";
}
.fa-vimeo-square:before {
content: "\f194";
}
.fa-turkish-lira:before,
.fa-try:before {
content: "\f195";
}
.fa-plus-square-o:before {
content: "\f196";
}
================================================
FILE: client/css/prettify.css
================================================
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
================================================
FILE: client/index.html
================================================
<!DOCTYPE html>
<html ng-app='scanjs' ng-csp>
<head>
<meta charset="utf-8">
<meta http-equiv="content-security-policy" content="default-src 'self'; object-src 'none'; img-src 'self' data:; script-src 'self' 'unsafe-eval'">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ScanJS</title>
<link href='css/app.css' rel='stylesheet' media='screen'>
<link href='css/angular-csp.css' rel='stylesheet' media='screen'>
<!-- Third-party libs -->
<!--<script src='js/lib/jquery-2.1.0.min.js'></script>-->
<script src='js/lib/angular-1.2.13.min.js'></script>
<script src="js/lib/angular-route-1.2.13.min.js"></script>
<script src='js/lib/ui-bootstrap-tpls-0.3.0.js'></script>
<script src='js/lib/codemirror-compressed.js'></script>
<script src='js/lib/jszip.min.js'></script>
<script src='js/lib/localforage.min.js'></script>
<script src='js/lib/acorn.js'></script>
<script src='js/lib/utils.js'></script>
<script src='js/lib/walk.js'></script>
<!-- CommonJS modules -->
<script src='../common/scan.js'></script>
<!-- Client specific files -->
<script src='js/main.js'></script>
<script src='js/locationctrl.js'></script>
<script src='js/scanctrl.js'></script>
<script src='js/experimentctrl.js'></script>
<script src='js/scanservice.js'></script>
<!-- rules ctrl MUST be loaded after scan service-->
<script src='js/rulesctrl.js'></script>
</head>
<body>
<div id="header" class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="navbar-brand">ScanJS
</div>
<ul id="header-links" class="nav navbar-nav navbar-left" ng-controller="LocationCtrl">
<li ng-class="tabBtnClass('scan')"><a id="scan-header" href="#/scan">Scan</a></li>
<li ng-class="tabBtnClass('rules')"><a id="rules-header" href="#/rules">Rules</a></li>
<li ng-class="tabBtnClass('experiment')"><a id="experiment-header" href="#/experiment">Experiment</a></li>
</ul>
</div>
<!-- header -->
<div ng-view></div>
</body>
</html>
================================================
FILE: client/js/experimentctrl.js
================================================
"use strict";
scanjsModule.controller('ExperimentCtrl', ['$scope', 'ScanSvc', function ExperimentCtrl($scope, ScanSvc) {
if (!document.getElementById("experiment-mirror").children.length) {
$scope.codeMirror = new CodeMirror(document.getElementById('experiment-mirror'), {
mode: 'javascript',
lineNumbers: true,
theme: 'mdn-like',
value: "bar.foo\nfoo=something\nbaz.bar=stuff\nfoo(something)\nfoo.bar\nfoo.bar()\neval(test)\nfoo.innerHTML=danger",
tabsize: 2,
styleActiveLine: true
});
}
$scope.results=[];
$scope.ready=false;
$scope.rule="eval()"
var ruleData={
"name": "manual rule",
"source": $scope.rule,
"testhit": $scope.rule,
"testmiss": "",
"desc": "Manual input.",
"threat": "example"
};
$scope.runScan = function () {
$scope.results = [];
$scope.error = null;
ScanJS.loadRules(ScanSvc.rules);
var code = $scope.codeMirror.getValue();
try {
var ast = acorn.parse(code, { locations: true });
$scope.results = ScanJS.scan(ast);
} catch(e) {
$scope.error = e;
console.error(e);
}
$scope.lastScan = $scope.runScan;
};
$scope.runManualScan = function () {
ruleData.source = $scope.rule;
ScanJS.loadRules([ruleData]);
$scope.results = [];
$scope.error = null;
var code = $scope.codeMirror.getValue();
try {
var ast = acorn.parse(code, { locations: true });
$scope.results = ScanJS.scan(ast);
//put ast on global variable for debugging purposes.
window.ast = ast;
} catch(e) {
$scope.error = e;
console.error(e);
}
$scope.lastScan = $scope.runManualScan;
};
$scope.showResult = function (filename,line, col) {
$scope.codeMirror.setCursor(line - 1, col || 0);
$scope.codeMirror.focus();
};
$scope.add_placeholder_char = function() {
$scope.rule += '$_any';
}
$scope.lastScan=$scope.runScan;
}]);
================================================
FILE: client/js/lib/acorn.js
================================================
// Acorn is a tiny, fast JavaScript parser written in JavaScript.
//
// Acorn was written by Marijn Haverbeke and released under an MIT
// license. The Unicode regexps (for identifiers and whitespace) were
// taken from [Esprima](http://esprima.org) by Ariya Hidayat.
//
// Git repositories for Acorn are available at
//
// http://marijnhaverbeke.nl/git/acorn
// https://github.com/marijnh/acorn.git
//
// Please use the [github bug tracker][ghbt] to report issues.
//
// [ghbt]: https://github.com/marijnh/acorn/issues
//
// This file defines the main parser interface. The library also comes
// with a [error-tolerant parser][dammit] and an
// [abstract syntax tree walker][walk], defined in other files.
//
// [dammit]: acorn_loose.js
// [walk]: util/walk.js
(function(root, mod) {
if (typeof exports == "object" && typeof module == "object") return mod(exports); // CommonJS
if (typeof define == "function" && define.amd) return define(["exports"], mod); // AMD
mod(root.acorn || (root.acorn = {})); // Plain browser env
})(this, function(exports) {
"use strict";
exports.version = "0.5.1";
// The main exported interface (under `self.acorn` when in the
// browser) is a `parse` function that takes a code string and
// returns an abstract syntax tree as specified by [Mozilla parser
// API][api], with the caveat that the SpiderMonkey-specific syntax
// (`let`, `yield`, inline XML, etc) is not recognized.
//
// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
var options, input, inputLen, sourceFile;
exports.parse = function(inpt, opts) {
input = String(inpt); inputLen = input.length;
setOptions(opts);
initTokenState();
return parseTopLevel(options.program);
};
// A second optional argument can be given to further configure
// the parser process. These options are recognized:
var defaultOptions = exports.defaultOptions = {
// `ecmaVersion` indicates the ECMAScript version to parse. Must
// be either 3 or 5. This
// influences support for strict mode, the set of reserved words, and
// support for getters and setter.
ecmaVersion: 5,
// Turn on `strictSemicolons` to prevent the parser from doing
// automatic semicolon insertion.
strictSemicolons: false,
// When `allowTrailingCommas` is false, the parser will not allow
// trailing commas in array and object literals.
allowTrailingCommas: true,
// By default, reserved words are not enforced. Enable
// `forbidReserved` to enforce them. When this option has the
// value "everywhere", reserved words and keywords can also not be
// used as property names.
forbidReserved: false,
// When enabled, a return at the top level is not considered an
// error.
allowReturnOutsideFunction: false,
// When `locations` is on, `loc` properties holding objects with
// `start` and `end` properties in `{line, column}` form (with
// line being 1-based and column 0-based) will be attached to the
// nodes.
locations: false,
// A function can be passed as `onComment` option, which will
// cause Acorn to call that function with `(block, text, start,
// end)` parameters whenever a comment is skipped. `block` is a
// boolean indicating whether this is a block (`/* */`) comment,
// `text` is the content of the comment, and `start` and `end` are
// character offsets that denote the start and end of the comment.
// When the `locations` option is on, two more parameters are
// passed, the full `{line, column}` locations of the start and
// end of the comments. Note that you are not allowed to call the
// parser from the callback—that will corrupt its internal state.
onComment: null,
// Nodes have their start and end characters offsets recorded in
// `start` and `end` properties (directly on the node, rather than
// the `loc` object, which holds line/column data. To also add a
// [semi-standardized][range] `range` property holding a `[start,
// end]` array with the same numbers, set the `ranges` option to
// `true`.
//
// [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
ranges: false,
// It is possible to parse multiple files into a single AST by
// passing the tree produced by parsing the first file as
// `program` option in subsequent parses. This will add the
// toplevel forms of the parsed file to the `Program` (top) node
// of an existing parse tree.
program: null,
// When `locations` is on, you can pass this to record the source
// file in every node's `loc` object.
sourceFile: null,
// This value, if given, is stored in every node, whether
// `locations` is on or off.
directSourceFile: null
};
function setOptions(opts) {
options = opts || {};
for (var opt in defaultOptions) if (!Object.prototype.hasOwnProperty.call(options, opt))
options[opt] = defaultOptions[opt];
sourceFile = options.sourceFile || null;
}
// The `getLineInfo` function is mostly useful when the
// `locations` option is off (for performance reasons) and you
// want to find the line/column position for a given character
// offset. `input` should be the code string that the offset refers
// into.
var getLineInfo = exports.getLineInfo = function(input, offset) {
for (var line = 1, cur = 0;;) {
lineBreak.lastIndex = cur;
var match = lineBreak.exec(input);
if (match && match.index < offset) {
++line;
cur = match.index + match[0].length;
} else break;
}
return {line: line, column: offset - cur};
};
// Acorn is organized as a tokenizer and a recursive-descent parser.
// The `tokenize` export provides an interface to the tokenizer.
// Because the tokenizer is optimized for being efficiently used by
// the Acorn parser itself, this interface is somewhat crude and not
// very modular. Performing another parse or call to `tokenize` will
// reset the internal state, and invalidate existing tokenizers.
exports.tokenize = function(inpt, opts) {
input = String(inpt); inputLen = input.length;
setOptions(opts);
initTokenState();
var t = {};
function getToken(forceRegexp) {
lastEnd = tokEnd;
readToken(forceRegexp);
t.start = tokStart; t.end = tokEnd;
t.startLoc = tokStartLoc; t.endLoc = tokEndLoc;
t.type = tokType; t.value = tokVal;
return t;
}
getToken.jumpTo = function(pos, reAllowed) {
tokPos = pos;
if (options.locations) {
tokCurLine = 1;
tokLineStart = lineBreak.lastIndex = 0;
var match;
while ((match = lineBreak.exec(input)) && match.index < pos) {
++tokCurLine;
tokLineStart = match.index + match[0].length;
}
}
tokRegexpAllowed = reAllowed;
skipSpace();
};
return getToken;
};
// State is kept in (closure-)global variables. We already saw the
// `options`, `input`, and `inputLen` variables above.
// The current position of the tokenizer in the input.
var tokPos;
// The start and end offsets of the current token.
var tokStart, tokEnd;
// When `options.locations` is true, these hold objects
// containing the tokens start and end line/column pairs.
var tokStartLoc, tokEndLoc;
// The type and value of the current token. Token types are objects,
// named by variables against which they can be compared, and
// holding properties that describe them (indicating, for example,
// the precedence of an infix operator, and the original name of a
// keyword token). The kind of value that's held in `tokVal` depends
// on the type of the token. For literals, it is the literal value,
// for operators, the operator name, and so on.
var tokType, tokVal;
// Interal state for the tokenizer. To distinguish between division
// operators and regular expressions, it remembers whether the last
// token was one that is allowed to be followed by an expression.
// (If it is, a slash is probably a regexp, if it isn't it's a
// division operator. See the `parseStatement` function for a
// caveat.)
var tokRegexpAllowed;
// When `options.locations` is true, these are used to keep
// track of the current line, and know when a new line has been
// entered.
var tokCurLine, tokLineStart;
// These store the position of the previous token, which is useful
// when finishing a node and assigning its `end` position.
var lastStart, lastEnd, lastEndLoc;
// This is the parser's state. `inFunction` is used to reject
// `return` statements outside of functions, `labels` to verify that
// `break` and `continue` have somewhere to jump to, and `strict`
// indicates whether strict mode is on.
var inFunction, labels, strict;
// This function is used to raise exceptions on parse errors. It
// takes an offset integer (into the current `input`) to indicate
// the location of the error, attaches the position to the end
// of the error message, and then raises a `SyntaxError` with that
// message.
function raise(pos, message) {
var loc = getLineInfo(input, pos);
message += " (" + loc.line + ":" + loc.column + ")";
var err = new SyntaxError(message);
err.pos = pos; err.loc = loc; err.raisedAt = tokPos;
throw err;
}
// Reused empty array added for node fields that are always empty.
var empty = [];
// ## Token types
// The assignment of fine-grained, information-carrying type objects
// allows the tokenizer to store the information it has about a
// token in a way that is very cheap for the parser to look up.
// All token type variables start with an underscore, to make them
// easy to recognize.
// These are the general types. The `type` property is only used to
// make them recognizeable when debugging.
var _num = {type: "num"}, _regexp = {type: "regexp"}, _string = {type: "string"};
var _name = {type: "name"}, _eof = {type: "eof"};
// Keyword tokens. The `keyword` property (also used in keyword-like
// operators) indicates that the token originated from an
// identifier-like word, which is used when parsing property names.
//
// The `beforeExpr` property is used to disambiguate between regular
// expressions and divisions. It is set on all token types that can
// be followed by an expression (thus, a slash after them would be a
// regular expression).
//
// `isLoop` marks a keyword as starting a loop, which is important
// to know when parsing a label, in order to allow or disallow
// continue jumps to that label.
var _break = {keyword: "break"}, _case = {keyword: "case", beforeExpr: true}, _catch = {keyword: "catch"};
var _continue = {keyword: "continue"}, _debugger = {keyword: "debugger"}, _default = {keyword: "default"};
var _do = {keyword: "do", isLoop: true}, _else = {keyword: "else", beforeExpr: true};
var _finally = {keyword: "finally"}, _for = {keyword: "for", isLoop: true}, _function = {keyword: "function"};
var _if = {keyword: "if"}, _return = {keyword: "return", beforeExpr: true}, _switch = {keyword: "switch"};
var _throw = {keyword: "throw", beforeExpr: true}, _try = {keyword: "try"}, _var = {keyword: "var"};
var _while = {keyword: "while", isLoop: true}, _with = {keyword: "with"}, _new = {keyword: "new", beforeExpr: true};
var _this = {keyword: "this"};
// The keywords that denote values.
var _null = {keyword: "null", atomValue: null}, _true = {keyword: "true", atomValue: true};
var _false = {keyword: "false", atomValue: false};
// Some keywords are treated as regular operators. `in` sometimes
// (when parsing `for`) needs to be tested against specifically, so
// we assign a variable name to it for quick comparing.
var _in = {keyword: "in", binop: 7, beforeExpr: true};
// Map keyword names to token types.
var keywordTypes = {"break": _break, "case": _case, "catch": _catch,
"continue": _continue, "debugger": _debugger, "default": _default,
"do": _do, "else": _else, "finally": _finally, "for": _for,
"function": _function, "if": _if, "return": _return, "switch": _switch,
"throw": _throw, "try": _try, "var": _var, "while": _while, "with": _with,
"null": _null, "true": _true, "false": _false, "new": _new, "in": _in,
"instanceof": {keyword: "instanceof", binop: 7, beforeExpr: true}, "this": _this,
"typeof": {keyword: "typeof", prefix: true, beforeExpr: true},
"void": {keyword: "void", prefix: true, beforeExpr: true},
"delete": {keyword: "delete", prefix: true, beforeExpr: true}};
// Punctuation token types. Again, the `type` property is purely for debugging.
var _bracketL = {type: "[", beforeExpr: true}, _bracketR = {type: "]"}, _braceL = {type: "{", beforeExpr: true};
var _braceR = {type: "}"}, _parenL = {type: "(", beforeExpr: true}, _parenR = {type: ")"};
var _comma = {type: ",", beforeExpr: true}, _semi = {type: ";", beforeExpr: true};
var _colon = {type: ":", beforeExpr: true}, _dot = {type: "."}, _question = {type: "?", beforeExpr: true};
// Operators. These carry several kinds of properties to help the
// parser use them properly (the presence of these properties is
// what categorizes them as operators).
//
// `binop`, when present, specifies that this operator is a binary
// operator, and will refer to its precedence.
//
// `prefix` and `postfix` mark the operator as a prefix or postfix
// unary operator. `isUpdate` specifies that the node produced by
// the operator should be of type UpdateExpression rather than
// simply UnaryExpression (`++` and `--`).
//
// `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as
// binary operators with a very low precedence, that should result
// in AssignmentExpression nodes.
var _slash = {binop: 10, beforeExpr: true}, _eq = {isAssign: true, beforeExpr: true};
var _assign = {isAssign: true, beforeExpr: true};
var _incDec = {postfix: true, prefix: true, isUpdate: true}, _prefix = {prefix: true, beforeExpr: true};
var _logicalOR = {binop: 1, beforeExpr: true};
var _logicalAND = {binop: 2, beforeExpr: true};
var _bitwiseOR = {binop: 3, beforeExpr: true};
var _bitwiseXOR = {binop: 4, beforeExpr: true};
var _bitwiseAND = {binop: 5, beforeExpr: true};
var _equality = {binop: 6, beforeExpr: true};
var _relational = {binop: 7, beforeExpr: true};
var _bitShift = {binop: 8, beforeExpr: true};
var _plusMin = {binop: 9, prefix: true, beforeExpr: true};
var _multiplyModulo = {binop: 10, beforeExpr: true};
// Provide access to the token types for external users of the
// tokenizer.
exports.tokTypes = {bracketL: _bracketL, bracketR: _bracketR, braceL: _braceL, braceR: _braceR,
parenL: _parenL, parenR: _parenR, comma: _comma, semi: _semi, colon: _colon,
dot: _dot, question: _question, slash: _slash, eq: _eq, name: _name, eof: _eof,
num: _num, regexp: _regexp, string: _string};
for (var kw in keywordTypes) exports.tokTypes["_" + kw] = keywordTypes[kw];
// This is a trick taken from Esprima. It turns out that, on
// non-Chrome browsers, to check whether a string is in a set, a
// predicate containing a big ugly `switch` statement is faster than
// a regular expression, and on Chrome the two are about on par.
// This function uses `eval` (non-lexical) to produce such a
// predicate from a space-separated string of words.
//
// It starts by sorting the words by length.
function makePredicate(words) {
words = words.split(" ");
var f = "", cats = [];
out: for (var i = 0; i < words.length; ++i) {
for (var j = 0; j < cats.length; ++j)
if (cats[j][0].length == words[i].length) {
cats[j].push(words[i]);
continue out;
}
cats.push([words[i]]);
}
function compareTo(arr) {
if (arr.length == 1) return f += "return str === " + JSON.stringify(arr[0]) + ";";
f += "switch(str){";
for (var i = 0; i < arr.length; ++i) f += "case " + JSON.stringify(arr[i]) + ":";
f += "return true}return false;";
}
// When there are more than three length categories, an outer
// switch first dispatches on the lengths, to save on comparisons.
if (cats.length > 3) {
cats.sort(function(a, b) {return b.length - a.length;});
f += "switch(str.length){";
for (var i = 0; i < cats.length; ++i) {
var cat = cats[i];
f += "case " + cat[0].length + ":";
compareTo(cat);
}
f += "}";
// Otherwise, simply generate a flat `switch` statement.
} else {
compareTo(words);
}
return new Function("str", f);
}
// The ECMAScript 3 reserved word list.
var isReservedWord3 = makePredicate("abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile");
// ECMAScript 5 reserved words.
var isReservedWord5 = makePredicate("class enum extends super const export import");
// The additional reserved words in strict mode.
var isStrictReservedWord = makePredicate("implements interface let package private protected public static yield");
// The forbidden variable names in strict mode.
var isStrictBadIdWord = makePredicate("eval arguments");
// And the keywords.
var isKeyword = makePredicate("break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this");
// ## Character categories
// Big ugly regular expressions that match characters in the
// whitespace, identifier, and identifier-start categories. These
// are only applied when a character is found to actually have a
// code point above 128.
var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/;
var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
var nonASCIIidentifierChars = "\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u0620-\u0649\u0672-\u06d3\u06e7-\u06e8\u06fb-\u06fc\u0730-\u074a\u0800-\u0814\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0840-\u0857\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09d7\u09df-\u09e0\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5f-\u0b60\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2-\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d46-\u0d48\u0d57\u0d62-\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e34-\u0e3a\u0e40-\u0e45\u0e50-\u0e59\u0eb4-\u0eb9\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f41-\u0f47\u0f71-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1029\u1040-\u1049\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u170e-\u1710\u1720-\u1730\u1740-\u1750\u1772\u1773\u1780-\u17b2\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1920-\u192b\u1930-\u193b\u1951-\u196d\u19b0-\u19c0\u19c8-\u19c9\u19d0-\u19d9\u1a00-\u1a15\u1a20-\u1a53\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b46-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1bb0-\u1bb9\u1be6-\u1bf3\u1c00-\u1c22\u1c40-\u1c49\u1c5b-\u1c7d\u1cd0-\u1cd2\u1d00-\u1dbe\u1e01-\u1f15\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2d81-\u2d96\u2de0-\u2dff\u3021-\u3028\u3099\u309a\ua640-\ua66d\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua7f8-\ua800\ua806\ua80b\ua823-\ua827\ua880-\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8f3-\ua8f7\ua900-\ua909\ua926-\ua92d\ua930-\ua945\ua980-\ua983\ua9b3-\ua9c0\uaa00-\uaa27\uaa40-\uaa41\uaa4c-\uaa4d\uaa50-\uaa59\uaa7b\uaae0-\uaae9\uaaf2-\uaaf3\uabc0-\uabe1\uabec\uabed\uabf0-\uabf9\ufb20-\ufb28\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
// Whether a single character denotes a newline.
var newline = /[\n\r\u2028\u2029]/;
// Matches a whole line break (where CRLF is considered a single
// line break). Used to count lines.
var lineBreak = /\r\n|[\n\r\u2028\u2029]/g;
// Test whether a given character code starts an identifier.
var isIdentifierStart = exports.isIdentifierStart = function(code) {
if (code < 65) return code === 36;
if (code < 91) return true;
if (code < 97) return code === 95;
if (code < 123)return true;
return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
};
// Test whether a given character is part of an identifier.
var isIdentifierChar = exports.isIdentifierChar = function(code) {
if (code < 48) return code === 36;
if (code < 58) return true;
if (code < 65) return false;
if (code < 91) return true;
if (code < 97) return code === 95;
if (code < 123)return true;
return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
};
// ## Tokenizer
// These are used when `options.locations` is on, for the
// `tokStartLoc` and `tokEndLoc` properties.
function Position() {
this.line = tokCurLine;
this.column = tokPos - tokLineStart;
}
// Reset the token state. Used at the start of a parse.
function initTokenState() {
tokCurLine = 1;
tokPos = tokLineStart = 0;
tokRegexpAllowed = true;
skipSpace();
}
// Called at the end of every token. Sets `tokEnd`, `tokVal`, and
// `tokRegexpAllowed`, and skips the space after the token, so that
// the next one's `tokStart` will point at the right position.
function finishToken(type, val) {
tokEnd = tokPos;
if (options.locations) tokEndLoc = new Position;
tokType = type;
skipSpace();
tokVal = val;
tokRegexpAllowed = type.beforeExpr;
}
function skipBlockComment() {
var startLoc = options.onComment && options.locations && new Position;
var start = tokPos, end = input.indexOf("*/", tokPos += 2);
if (end === -1) raise(tokPos - 2, "Unterminated comment");
tokPos = end + 2;
if (options.locations) {
lineBreak.lastIndex = start;
var match;
while ((match = lineBreak.exec(input)) && match.index < tokPos) {
++tokCurLine;
tokLineStart = match.index + match[0].length;
}
}
if (options.onComment)
options.onComment(true, input.slice(start + 2, end), start, tokPos,
startLoc, options.locations && new Position);
}
function skipLineComment() {
var start = tokPos;
var startLoc = options.onComment && options.locations && new Position;
var ch = input.charCodeAt(tokPos+=2);
while (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {
++tokPos;
ch = input.charCodeAt(tokPos);
}
if (options.onComment)
options.onComment(false, input.slice(start + 2, tokPos), start, tokPos,
startLoc, options.locations && new Position);
}
// Called at the start of the parse and after every token. Skips
// whitespace and comments, and.
function skipSpace() {
while (tokPos < inputLen) {
var ch = input.charCodeAt(tokPos);
if (ch === 32) { // ' '
++tokPos;
} else if (ch === 13) {
++tokPos;
var next = input.charCodeAt(tokPos);
if (next === 10) {
++tokPos;
}
if (options.locations) {
++tokCurLine;
tokLineStart = tokPos;
}
} else if (ch === 10 || ch === 8232 || ch === 8233) {
++tokPos;
if (options.locations) {
++tokCurLine;
tokLineStart = tokPos;
}
} else if (ch > 8 && ch < 14) {
++tokPos;
} else if (ch === 47) { // '/'
var next = input.charCodeAt(tokPos + 1);
if (next === 42) { // '*'
skipBlockComment();
} else if (next === 47) { // '/'
skipLineComment();
} else break;
} else if (ch === 160) { // '\xa0'
++tokPos;
} else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {
++tokPos;
} else {
break;
}
}
}
// ### Token reading
// This is the function that is called to fetch the next token. It
// is somewhat obscure, because it works in character codes rather
// than characters, and because operator parsing has been inlined
// into it.
//
// All in the name of speed.
//
// The `forceRegexp` parameter is used in the one case where the
// `tokRegexpAllowed` trick does not work. See `parseStatement`.
function readToken_dot() {
var next = input.charCodeAt(tokPos + 1);
if (next >= 48 && next <= 57) return readNumber(true);
++tokPos;
return finishToken(_dot);
}
function readToken_slash() { // '/'
var next = input.charCodeAt(tokPos + 1);
if (tokRegexpAllowed) {++tokPos; return readRegexp();}
if (next === 61) return finishOp(_assign, 2);
return finishOp(_slash, 1);
}
function readToken_mult_modulo() { // '%*'
var next = input.charCodeAt(tokPos + 1);
if (next === 61) return finishOp(_assign, 2);
return finishOp(_multiplyModulo, 1);
}
function readToken_pipe_amp(code) { // '|&'
var next = input.charCodeAt(tokPos + 1);
if (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);
if (next === 61) return finishOp(_assign, 2);
return finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);
}
function readToken_caret() { // '^'
var next = input.charCodeAt(tokPos + 1);
if (next === 61) return finishOp(_assign, 2);
return finishOp(_bitwiseXOR, 1);
}
function readToken_plus_min(code) { // '+-'
var next = input.charCodeAt(tokPos + 1);
if (next === code) {
if (next == 45 && input.charCodeAt(tokPos + 2) == 62 &&
newline.test(input.slice(lastEnd, tokPos))) {
// A `-->` line comment
tokPos += 3;
skipLineComment();
skipSpace();
return readToken();
}
return finishOp(_incDec, 2);
}
if (next === 61) return finishOp(_assign, 2);
return finishOp(_plusMin, 1);
}
function readToken_lt_gt(code) { // '<>'
var next = input.charCodeAt(tokPos + 1);
var size = 1;
if (next === code) {
size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;
if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);
return finishOp(_bitShift, size);
}
if (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 &&
input.charCodeAt(tokPos + 3) == 45) {
gitextract_3kpowr9z/
├── .gitignore
├── LICENSE
├── README.md
├── client/
│ ├── css/
│ │ ├── angular-csp.css
│ │ ├── app.css
│ │ ├── bootstrap.css
│ │ ├── codemirror-mdn.css
│ │ ├── codemirror.css
│ │ ├── dashboard.css
│ │ ├── font-awesome.css
│ │ └── prettify.css
│ ├── fonts/
│ │ └── FontAwesome.otf
│ ├── index.html
│ ├── js/
│ │ ├── experimentctrl.js
│ │ ├── lib/
│ │ │ ├── acorn.js
│ │ │ ├── acorn_loose.js
│ │ │ ├── codemirror-compressed.js
│ │ │ ├── codemirror.js
│ │ │ ├── codemirror_javascript_mode.js
│ │ │ ├── ui-bootstrap-tpls-0.3.0.js
│ │ │ ├── utils.js
│ │ │ └── walk.js
│ │ ├── locationctrl.js
│ │ ├── main.js
│ │ ├── rulesctrl.js
│ │ ├── scanctrl.js
│ │ ├── scanservice.js
│ │ └── scanworker.js
│ ├── partials/
│ │ ├── experiment.html
│ │ ├── rules.html
│ │ └── scan.html
│ └── rules.readme.md
├── common/
│ ├── rules.json
│ ├── scan.js
│ └── template_rules.json
├── deploy-ghpages.sh
├── package.json
├── scanner.js
├── server.js
├── stackato.yml
└── tests/
├── TESTING
├── advanced.html
├── cases/
│ ├── CustomEvent.js
│ ├── action.js
│ ├── addEventListener.js
│ ├── addIdleObserver.js
│ ├── createContextualFragment.js
│ ├── crypto.generateCRMFRequest.js
│ ├── data.js
│ ├── document.write.js
│ ├── document.writeln.js
│ ├── escapeHTML.js
│ ├── eval.js
│ ├── geolocation.js
│ ├── getDeviceStorage.js
│ ├── href.js
│ ├── indexedDB.js
│ ├── innerhtml.js
│ ├── localStorage.js
│ ├── message.js
│ ├── moz/
│ │ └── moz.js
│ ├── newFunction.js
│ ├── outerHTML.js
│ ├── parseFromString.js
│ ├── placeholders.js
│ ├── production_ruletests.js
│ ├── sessionStorage.js
│ ├── setInterval.js
│ ├── setTimeout.js
│ ├── src.js
│ ├── test_ruletests.js
│ └── window.open.js
├── css/
│ └── mocha.css
├── index.html
├── js/
│ ├── chai.js
│ ├── loadrules.js
│ ├── main.js
│ └── mocha.js
└── mocha-includes.js
SYMBOL INDEX (945 symbols across 15 files)
FILE: client/js/lib/acorn.js
function setOptions (line 111) | function setOptions(opts) {
function getToken (line 149) | function getToken(forceRegexp) {
function raise (line 233) | function raise(pos, message) {
function makePredicate (line 361) | function makePredicate(words) {
function Position (line 469) | function Position() {
function initTokenState (line 476) | function initTokenState() {
function finishToken (line 487) | function finishToken(type, val) {
function skipBlockComment (line 496) | function skipBlockComment() {
function skipLineComment (line 514) | function skipLineComment() {
function skipSpace (line 530) | function skipSpace() {
function readToken_dot (line 582) | function readToken_dot() {
function readToken_slash (line 589) | function readToken_slash() { // '/'
function readToken_mult_modulo (line 596) | function readToken_mult_modulo() { // '%*'
function readToken_pipe_amp (line 602) | function readToken_pipe_amp(code) { // '|&'
function readToken_caret (line 609) | function readToken_caret() { // '^'
function readToken_plus_min (line 615) | function readToken_plus_min(code) { // '+-'
function readToken_lt_gt (line 632) | function readToken_lt_gt(code) { // '<>'
function readToken_eq_excl (line 653) | function readToken_eq_excl(code) { // '=!'
function getTokenFromCode (line 659) | function getTokenFromCode(code) {
function readToken (line 724) | function readToken(forceRegexp) {
function finishOp (line 748) | function finishOp(type, size) {
function readRegexp (line 757) | function readRegexp() {
function readInt (line 790) | function readInt(radix, len) {
function readHexNumber (line 807) | function readHexNumber() {
function readNumber (line 817) | function readNumber(startsWithDot) {
function readString (line 844) | function readString(quote) {
function readHexChar (line 894) | function readHexChar(len) {
function readWord1 (line 912) | function readWord1() {
function readWord (line 943) | function readWord() {
function next (line 975) | function next() {
function setStrict (line 985) | function setStrict(strct) {
function Node (line 1000) | function Node() {
function SourceLocation (line 1008) | function SourceLocation() {
function startNode (line 1014) | function startNode() {
function startNodeFrom (line 1029) | function startNodeFrom(other) {
function finishNode (line 1044) | function finishNode(node, type) {
function isUseStrict (line 1056) | function isUseStrict(stmt) {
function eat (line 1064) | function eat(type) {
function canInsertSemicolon (line 1073) | function canInsertSemicolon() {
function semicolon (line 1081) | function semicolon() {
function expect (line 1088) | function expect(type) {
function unexpected (line 1095) | function unexpected() {
function checkLVal (line 1102) | function checkLVal(expr) {
function parseTopLevel (line 1116) | function parseTopLevel(program) {
function parseStatement (line 1143) | function parseStatement() {
function parseParenExpression (line 1361) | function parseParenExpression() {
function parseBlock (line 1372) | function parseBlock(allowStrict) {
function parseFor (line 1393) | function parseFor(node, init) {
function parseForIn (line 1407) | function parseForIn(node, init) {
function parseVar (line 1418) | function parseVar(node, noIn) {
function parseExpression (line 1445) | function parseExpression(noComma, noIn) {
function parseMaybeAssign (line 1459) | function parseMaybeAssign(noIn) {
function parseMaybeConditional (line 1475) | function parseMaybeConditional(noIn) {
function parseExprOps (line 1490) | function parseExprOps(noIn) {
function parseExprOp (line 1500) | function parseExprOp(left, minPrec, noIn) {
function parseMaybeUnary (line 1519) | function parseMaybeUnary() {
function parseExprSubscripts (line 1548) | function parseExprSubscripts() {
function parseSubscripts (line 1552) | function parseSubscripts(base, noCalls) {
function parseExprAtom (line 1579) | function parseExprAtom() {
function parseNew (line 1642) | function parseNew() {
function parseObj (line 1653) | function parseObj() {
function parsePropertyName (line 1696) | function parsePropertyName() {
function parseFunction (line 1704) | function parseFunction(node, isStatement) {
function parseExprList (line 1745) | function parseExprList(close, allowTrailingComma, allowEmpty) {
function parseIdent (line 1763) | function parseIdent(liberal) {
FILE: client/js/lib/acorn_loose.js
function next (line 60) | function next() {
function readToken (line 79) | function readToken() {
function resetTo (line 125) | function resetTo(pos) {
function copyToken (line 132) | function copyToken(token) {
function lookAhead (line 141) | function lookAhead(n) {
function isNewline (line 153) | function isNewline(ch) {
function isSpace (line 156) | function isSpace(ch) {
function pushCx (line 160) | function pushCx() {
function popCx (line 163) | function popCx() {
function lineEnd (line 167) | function lineEnd(pos) {
function lineStart (line 171) | function lineStart(pos) {
function indentationAfter (line 175) | function indentationAfter(pos) {
function closes (line 184) | function closes(closeTok, indent, line, blockHeuristic) {
function tokenStartsLine (line 192) | function tokenStartsLine() {
function node_t (line 200) | function node_t(start) {
function node_loc_t (line 206) | function node_loc_t(start) {
function startNode (line 212) | function startNode() {
function startNodeFrom (line 219) | function startNodeFrom(other) {
function finishNode (line 226) | function finishNode(node, type) {
function getDummyLoc (line 234) | function getDummyLoc() {
function dummyIdent (line 242) | function dummyIdent() {
function isDummy (line 250) | function isDummy(node) { return node.name == "✖"; }
function eat (line 252) | function eat(type) {
function canInsertSemicolon (line 259) | function canInsertSemicolon() {
function semicolon (line 262) | function semicolon() {
function expect (line 266) | function expect(type) {
function checkLVal (line 278) | function checkLVal(expr) {
function parseTopLevel (line 283) | function parseTopLevel() {
function parseStatement (line 290) | function parseStatement() {
function parseBlock (line 446) | function parseBlock() {
function parseFor (line 459) | function parseFor(node, init) {
function parseForIn (line 470) | function parseForIn(node, init) {
function parseVar (line 479) | function parseVar(node, noIn) {
function parseExpression (line 492) | function parseExpression(noComma, noIn) {
function parseParenExpression (line 503) | function parseParenExpression() {
function parseMaybeAssign (line 512) | function parseMaybeAssign(noIn) {
function parseMaybeConditional (line 525) | function parseMaybeConditional(noIn) {
function parseExprOps (line 537) | function parseExprOps(noIn) {
function parseExprOp (line 542) | function parseExprOp(left, minPrec, noIn, indent, line) {
function parseMaybeUnary (line 562) | function parseMaybeUnary(noIn) {
function parseExprSubscripts (line 584) | function parseExprSubscripts() {
function parseSubscripts (line 589) | function parseSubscripts(base, noCalls, startIndent, line) {
function parseExprAtom (line 629) | function parseExprAtom() {
function parseNew (line 682) | function parseNew() {
function parseObj (line 695) | function parseObj() {
function parsePropertyName (line 728) | function parsePropertyName() {
function parseIdent (line 733) | function parseIdent() {
function parseFunction (line 740) | function parseFunction(node, isStatement) {
function parseExprList (line 757) | function parseExprList(close) {
FILE: client/js/lib/codemirror-compressed.js
function z (line 1) | function z(a,c){if(!(this instanceof z))return new z(a,c);this.options=c...
function A (line 1) | function A(a,b){var d={},e=d.input=zf("textarea",null,null,"position: ab...
function B (line 1) | function B(a){a.doc.mode=z.getMode(a.options,a.doc.modeOption),C(a)}
function C (line 1) | function C(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a...
function D (line 1) | function D(a){a.options.lineWrapping?(a.display.wrapper.className+=" Cod...
function E (line 1) | function E(a){var b=Db(a.display),c=a.options.lineWrapping,d=c&&Math.max...
function F (line 1) | function F(a){var b=a.doc,c=E(a);b.iter(function(a){var b=c(a);b!=a.heig...
function G (line 1) | function G(a){var b=qd[a.options.keyMap],c=b.style;a.display.wrapper.cla...
function H (line 1) | function H(a){a.display.wrapper.className=a.display.wrapper.className.re...
function I (line 1) | function I(a){J(a),Lb(a),setTimeout(function(){P(a)},20)}
function J (line 1) | function J(a){var b=a.display.gutters,c=a.options.gutters;Af(b);for(var ...
function K (line 1) | function K(a,b){if(0==b.height)return 0;for(var d,c=b.text.length,e=b;d=...
function L (line 1) | function L(a){var b=a.display,c=a.doc;b.maxLine=ye(c,c.first),b.maxLineL...
function M (line 1) | function M(a){var b=pf(a.gutters,"CodeMirror-linenumbers");-1==b&&a.line...
function N (line 1) | function N(a){var b=a.display,c=a.doc.height,d=c+jb(b);b.sizer.style.min...
function O (line 1) | function O(a,b,c){var d=a.scroller.scrollTop,e=a.wrapper.clientHeight;"n...
function P (line 1) | function P(a){var b=a.display;if(b.alignWidgets||b.gutters.firstChild&&a...
function Q (line 1) | function Q(a){if(!a.options.lineNumbers)return!1;var b=a.doc,c=R(a.optio...
function R (line 1) | function R(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}
function S (line 1) | function S(a){return Df(a.scroller).left-Df(a.sizer).left}
function T (line 1) | function T(a,b,c,d){for(var g,e=a.display.showingFrom,f=a.display.showin...
function U (line 1) | function U(a,b,c,d){var e=a.display,f=a.doc;if(!e.wrapper.offsetWidth)re...
function V (line 1) | function V(a){for(var f,b=a.display,d=b.lineDiv.offsetTop,e=b.lineDiv.fi...
function W (line 1) | function W(a){var b=a.display.viewOffset=Ee(a,ye(a.doc,a.display.showing...
function X (line 1) | function X(a,b){for(var c=0,d=b.length||0;d>c;++c){for(var e=b[c],f=[],g...
function Y (line 1) | function Y(a){for(var b=a.display,c={},d={},e=b.gutters.firstChild,f=0;e...
function Z (line 1) | function Z(a,b,c,d,e){function l(b){var c=b.nextSibling;return h&&s&&a.d...
function $ (line 1) | function $(a,b,d,e,f){var k,g=ie(a,b),h=g.pre,i=b.gutterMarkers,j=a.disp...
function _ (line 1) | function _(a,b,c,d){if(a.noHScroll){(c.alignable||(c.alignable=[])).push...
function ab (line 1) | function ab(a){var b=a.display,c=Hc(a.doc.sel.from,a.doc.sel.to);if(c||a...
function bb (line 1) | function bb(a){var b=a.display,c=yb(a,a.doc.sel.head,"div");b.cursor.sty...
function cb (line 1) | function cb(a){function i(a,b,c,d){0>b&&(b=0),e.appendChild(zf("div",nul...
function db (line 1) | function db(a){if(a.state.focused){var b=a.display;clearInterval(b.blink...
function eb (line 1) | function eb(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.showing...
function fb (line 1) | function fb(a){var b=a.doc;if(b.frontier<b.first&&(b.frontier=b.first),!...
function gb (line 1) | function gb(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1e...
function hb (line 1) | function hb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!...
function ib (line 1) | function ib(a){return a.lineSpace.offsetTop}
function jb (line 1) | function jb(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}
function kb (line 1) | function kb(a){if(a.cachedPaddingH)return a.cachedPaddingH;var b=Bf(a.me...
function lb (line 1) | function lb(a,b,c,d,e){var f=-1;if(d=d||ob(a,b),d.crude){var g=d.left+c*...
function mb (line 1) | function mb(a,b){for(var c=a.display.measureLineCache,d=0;d<c.length;++d...
function nb (line 1) | function nb(a,b){var c=mb(a,b);c&&(c.text=c.measure=c.markedSpans=null)}
function ob (line 1) | function ob(a,b){var c=mb(a,b);if(c)return c.measure;var d=pb(a,b),e=a.d...
function pb (line 1) | function pb(a,e){function t(a){var b=a.top-p.top,c=a.bottom-p.top;c>s&&(...
function qb (line 1) | function qb(a,b){var c=new $d(b.text.slice(0,100),null);b.textClass&&(c....
function rb (line 1) | function rb(a,b){var c=!1;if(b.markedSpans)for(var d=0;d<b.markedSpans;+...
function sb (line 1) | function sb(a){a.display.measureLineCache.length=a.display.measureLineCa...
function tb (line 1) | function tb(){return window.pageXOffset||(document.documentElement||docu...
function ub (line 1) | function ub(){return window.pageYOffset||(document.documentElement||docu...
function vb (line 1) | function vb(a,b,c,d){if(b.widgets)for(var e=0;e<b.widgets.length;++e)if(...
function wb (line 1) | function wb(a,b,c){if("div"==c)return b;var d=b.left,e=b.top;if("page"==...
function xb (line 1) | function xb(a,b,c,d,e){return d||(d=ye(a.doc,b.line)),vb(a,d,lb(a,d,b.ch...
function yb (line 1) | function yb(a,b,c,d,e){function f(b,f){var g=lb(a,d,b,e,f?"right":"left"...
function zb (line 1) | function zb(a,b,c,d){var e=new Gc(a,b);return e.xRel=d,c&&(e.outside=!0),e}
function Ab (line 1) | function Ab(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return zb(...
function Bb (line 1) | function Bb(a,b,c,d,e){function j(d){var e=yb(a,Gc(c,d),"line",b,i);retu...
function Db (line 1) | function Db(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(...
function Eb (line 1) | function Eb(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b...
function Gb (line 1) | function Gb(a){a.curOp={changes:[],forceUpdate:!1,updateInput:null,userS...
function Hb (line 1) | function Hb(a){var b=a.curOp,c=a.doc,d=a.display;if(a.curOp=null,b.updat...
function Ib (line 1) | function Ib(a,b){return function(){var c=a||this,d=!c.curOp;d&&Gb(c);try...
function Jb (line 1) | function Jb(a){return function(){var c,b=this.cm&&!this.cm.curOp;b&&Gb(t...
function Kb (line 1) | function Kb(a,b){var d,c=!a.curOp;c&&Gb(a);try{d=b()}finally{c&&Hb(a)}re...
function Lb (line 1) | function Lb(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a....
function Mb (line 1) | function Mb(a){a.display.pollingFast||a.display.poll.set(a.options.pollI...
function Nb (line 1) | function Nb(a){function c(){var d=Ob(a);d||b?(a.display.pollingFast=!1,M...
function Ob (line 1) | function Ob(a){var b=a.display.input,c=a.display.prevInput,e=a.doc,f=e.s...
function Pb (line 1) | function Pb(a,b){var c,e,f=a.doc;if(Hc(f.sel.from,f.sel.to))b&&(a.displa...
function Qb (line 1) | function Qb(a){"nocursor"==a.options.readOnly||r&&document.activeElement...
function Rb (line 1) | function Rb(a){a.state.focused||(Qb(a),rc(a))}
function Sb (line 1) | function Sb(a){return a.options.readOnly||a.doc.cantEdit}
function Tb (line 1) | function Tb(a){function e(){a.state.focused&&setTimeout(tf(Qb,a),0)}func...
function Ub (line 2) | function Ub(a,b){for(var c=We(b);c!=a.wrapper;c=c.parentNode)if(!c||c.ig...
function Vb (line 2) | function Vb(a,b,c){var d=a.display;if(!c){var e=We(b);if(e==d.scrollbarH...
function Yb (line 2) | function Yb(a){function t(a){if(!Hc(s,a)){if(s=a,"single"==m)return Pc(c...
function Zb (line 2) | function Zb(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(b){return!1...
function $b (line 2) | function $b(a,b){return ef(a,"gutterContextMenu")?Zb(a,b,"gutterContextM...
function _b (line 2) | function _b(a,b){return Zb(a,b,"gutterClick",!0,bf)}
function bc (line 2) | function bc(a){var b=this;if(!(cf(b,a)||Ub(b.display,a)||b.options.onDra...
function cc (line 2) | function cc(a,b){if(g&&(!a.state.draggingText||+new Date-ac<100))return ...
function dc (line 2) | function dc(b,c){Math.abs(b.doc.scrollTop-c)<2||(b.doc.scrollTop=c,a||T(...
function ec (line 2) | function ec(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2...
function hc (line 2) | function hc(b,c){var d=c.wheelDeltaX,e=c.wheelDeltaY;null==d&&c.detail&&...
function ic (line 2) | function ic(a,b,c){if("string"==typeof b&&(b=pd[b],!b))return!1;a.displa...
function jc (line 2) | function jc(a){var b=a.state.keyMaps.slice(0);return a.options.extraKeys...
function lc (line 2) | function lc(a,b){var c=rd(a.options.keyMap),e=c.auto;clearTimeout(kc),e&...
function mc (line 2) | function mc(a,b,c){var d=sd("'"+c+"'",jc(a),function(b){return ic(a,b,!0...
function nc (line 2) | function nc(a){var b=this;cf(b,a)||b.options.onKeyEvent&&b.options.onKey...
function pc (line 2) | function pc(a){var c=this;if(Rb(c),!(cf(c,a)||c.options.onKeyEvent&&c.op...
function qc (line 2) | function qc(a){var b=this;if(!(cf(b,a)||b.options.onKeyEvent&&b.options....
function rc (line 2) | function rc(a){"nocursor"!=a.options.readOnly&&(a.state.focused||($e(a,"...
function sc (line 2) | function sc(a){a.state.focused&&($e(a,"blur",a),a.state.focused=!1,a.dis...
function uc (line 2) | function uc(a,b){function l(){if(null!=c.input.selectionStart){var a=c.i...
function wc (line 2) | function wc(a,b,c){if(!Ic(b.from,c))return Mc(a,c);var d=b.text.length-1...
function xc (line 2) | function xc(a,b,c){if(c&&"object"==typeof c)return{anchor:wc(a,b,c.ancho...
function yc (line 2) | function yc(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,or...
function zc (line 2) | function zc(a,b,c,d){if(a.cm){if(!a.cm.curOp)return Ib(a.cm,zc)(a,b,c,d)...
function Ac (line 2) | function Ac(a,b,c){if(1!=b.text.length||""!=b.text[0]||!Hc(b.from,b.to))...
function Bc (line 2) | function Bc(a,b){if(!a.cm||!a.cm.state.suppressEdits){var c=a.history,d=...
function Cc (line 2) | function Cc(a,b){function c(a){return Gc(a.line+b,a.ch)}a.first+=b,a.cm&...
function Dc (line 2) | function Dc(a,b,c,d){if(a.cm&&!a.cm.curOp)return Ib(a.cm,Dc)(a,b,c,d);if...
function Ec (line 2) | function Ec(a,b,c,d){var e=a.doc,f=a.display,g=b.from,h=b.to,i=!1,j=g.li...
function Fc (line 2) | function Fc(a,b,c,d,e){if(d||(d=c),Ic(d,c)){var f=d;d=c,c=f}"string"==ty...
function Gc (line 2) | function Gc(a,b){return this instanceof Gc?(this.line=a,this.ch=b,void 0...
function Hc (line 2) | function Hc(a,b){return a.line==b.line&&a.ch==b.ch}
function Ic (line 2) | function Ic(a,b){return a.line<b.line||a.line==b.line&&a.ch<b.ch}
function Jc (line 2) | function Jc(a,b){return a.line-b.line||a.ch-b.ch}
function Kc (line 2) | function Kc(a){return Gc(a.line,a.ch)}
function Lc (line 2) | function Lc(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}
function Mc (line 2) | function Mc(a,b){if(b.line<a.first)return Gc(a.first,0);var c=a.first+a....
function Nc (line 2) | function Nc(a,b){var c=a.ch;return null==c||c>b?Gc(a.line,b):0>c?Gc(a.li...
function Oc (line 2) | function Oc(a,b){return b>=a.first&&b<a.first+a.size}
function Pc (line 2) | function Pc(a,b,c,d){if(a.sel.shift||a.sel.extend){var e=a.sel.anchor;if...
function Qc (line 2) | function Qc(a,b,c){var d={anchor:b,head:c};return $e(a,"beforeSelectionC...
function Rc (line 2) | function Rc(a,b,c,d,e){if(!e&&ef(a,"beforeSelectionChange")||a.cm&&ef(a....
function Sc (line 2) | function Sc(a){Rc(a.doc,a.doc.sel.from,a.doc.sel.to,null,"push")}
function Tc (line 2) | function Tc(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=y...
function Uc (line 2) | function Uc(a){var b=Vc(a,a.doc.sel.head,null,a.options.cursorScrollMarg...
function Vc (line 2) | function Vc(a,b,c,d){for(null==d&&(d=0);;){var e=!1,f=yb(a,b),g=c&&c!=b?...
function Wc (line 2) | function Wc(a,b,c,d,e){var f=Xc(a,b,c,d,e);null!=f.scrollTop&&dc(a,f.scr...
function Xc (line 2) | function Xc(a,b,c,d,e){var f=a.display,g=Db(a.display);0>c&&(c=0);var h=...
function Yc (line 2) | function Yc(a,b,c){a.curOp.updateScrollPos={scrollLeft:null==b?a.doc.scr...
function Zc (line 2) | function Zc(a,b,c){var d=a.curOp.updateScrollPos||(a.curOp.updateScrollP...
function $c (line 2) | function $c(a,b,c,d){var f,e=a.doc;null==c&&(c="add"),"smart"==c&&(a.doc...
function _c (line 2) | function _c(a,b,c){var d=b,e=b,f=a.doc;return"number"==typeof b?e=ye(f,L...
function ad (line 2) | function ad(a,b,c,d,e){function k(){var b=f+c;return b<a.first||b>=a.fir...
function bd (line 2) | function bd(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min...
function cd (line 2) | function cd(a,b){var c=b.ch,d=b.ch;if(a){(b.xRel<0||d==a.length)&&c?--c:...
function dd (line 2) | function dd(a,b){Pc(a.doc,Gc(b,0),Mc(a.doc,Gc(b+1,0)))}
function gd (line 2) | function gd(a,b,c,d){z.defaults[a]=b,c&&(ed[a]=d?function(a,b,d){d!=hd&&...
function nd (line 2) | function nd(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b)...
function od (line 2) | function od(a,b,c){return a.startState?a.startState(b,c):!0}
function rd (line 2) | function rd(a){return"string"==typeof a?qd[a]:a}
function sd (line 2) | function sd(a,b,c){function d(b){b=rd(b);var e=b[a];if(e===!1)return"sto...
function td (line 2) | function td(a){var b=Nf[a.keyCode];return"Ctrl"==b||"Alt"==b||"Shift"==b...
function ud (line 2) | function ud(a,b){if(k&&34==a.keyCode&&a["char"])return!1;var c=Nf[a.keyC...
function vd (line 2) | function vd(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8,t...
function wd (line 2) | function wd(a,b){this.lines=[],this.type=b,this.doc=a}
function yd (line 2) | function yd(a,b,c,d,e){if(d&&d.shared)return Ad(a,b,c,d,e);if(a.cm&&!a.c...
function zd (line 2) | function zd(a,b){this.markers=a,this.primary=b;for(var c=0,d=this;c<a.le...
function Ad (line 2) | function Ad(a,b,c,d,e){d=rf(d),d.shared=!1;var f=[yd(a,b,c,d,e)],g=f[0],...
function Bd (line 2) | function Bd(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker...
function Cd (line 2) | function Cd(a,b){for(var c,d=0;d<a.length;++d)a[d]!=b&&(c||(c=[])).push(...
function Dd (line 2) | function Dd(a,b){a.markedSpans=a.markedSpans?a.markedSpans.concat([b]):[...
function Ed (line 2) | function Ed(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.mar...
function Fd (line 2) | function Fd(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.mar...
function Gd (line 2) | function Gd(a,b){var c=Oc(a,b.from.line)&&ye(a,b.from.line).markedSpans,...
function Hd (line 2) | function Hd(a){for(var b=0;b<a.length;++b){var c=a[b];null!=c.from&&c.fr...
function Id (line 2) | function Id(a,b){var c=Le(a,b),d=Gd(a,b);if(!c)return d;if(!d)return c;f...
function Jd (line 2) | function Jd(a,b,c){var d=null;if(a.iter(b.line,c.line+1,function(a){if(a...
function Kd (line 2) | function Kd(a){return a.inclusiveLeft?-1:0}
function Ld (line 2) | function Ld(a){return a.inclusiveRight?1:0}
function Md (line 2) | function Md(a,b){var c=a.lines.length-b.lines.length;if(0!=c)return c;va...
function Nd (line 2) | function Nd(a,b){var d,c=y&&a.markedSpans;if(c)for(var e,f=0;f<c.length;...
function Od (line 2) | function Od(a){return Nd(a,!0)}
function Pd (line 2) | function Pd(a){return Nd(a,!1)}
function Qd (line 2) | function Qd(a,b,c,d,e){var f=ye(a,b),g=y&&f.markedSpans;if(g)for(var h=0...
function Rd (line 2) | function Rd(a,b){for(var c;c=Od(b);)b=ye(a,c.find().from.line);return b}
function Sd (line 2) | function Sd(a,b){var c=y&&b.markedSpans;if(c)for(var d,e=0;e<c.length;++...
function Td (line 2) | function Td(a,b,c){if(null==c.to){var d=c.marker.find().to,e=ye(a,d.line...
function Ud (line 2) | function Ud(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c]...
function Vd (line 2) | function Vd(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine...
function Xd (line 2) | function Xd(a){return function(){var b=!this.cm.curOp;b&&Gb(this.cm);try...
function Yd (line 2) | function Yd(a){return null!=a.height?a.height:(a.node.parentNode&&1==a.n...
function Zd (line 2) | function Zd(a,b,c,d){var e=new Wd(a,c,d);return e.noHScroll&&(a.display....
function _d (line 2) | function _d(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles...
function ae (line 2) | function ae(a){a.parent=null,Ud(a)}
function be (line 2) | function be(a,b,c,d,e,f){var g=c.flattenSpans;null==g&&(g=a.options.flat...
function ce (line 2) | function ce(a,b,c,d){var e=[a.state.modeGen];be(a,b.text,a.doc.mode,c,fu...
function de (line 2) | function de(a,b){return b.styles&&b.styles[0]==a.state.modeGen||(b.style...
function ee (line 2) | function ee(a,b,c,d){var e=a.doc.mode,f=new vd(b,a.options.tabSize);for(...
function he (line 2) | function he(a,b){if(!a)return null;for(;;){var c=a.match(/(?:^|\s+)line-...
function ie (line 2) | function ie(a,b,c,d){for(var e,f=b,i=!0;e=Od(f);)f=ye(a.doc,e.find().fro...
function je (line 2) | function je(a){var b=zf("span","\u2022","cm-invalidchar");return b.title...
function ke (line 2) | function ke(a,b,c,d,e,f){if(b){var g=a.cm.options.specialChars;if(g.test...
function le (line 3) | function le(a,c,d,e,f){for(var g=a.cm.options.lineWrapping,h=0;h<c.lengt...
function me (line 3) | function me(a){function b(a){for(var b=" ",c=0;c<a.length-2;++c)b+=c%2?"...
function ne (line 3) | function ne(a,b,c,d){var e=!d&&c.replacedWith;if(e&&(a.copyWidgets&&(e=e...
function oe (line 3) | function oe(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,m,n,o...
function pe (line 3) | function pe(a,b,c,d,e){function f(a){return c?c[a]:null}function g(a,c,d...
function qe (line 3) | function qe(a){this.lines=a,this.parent=null;for(var b=0,c=a.length,d=0;...
function re (line 3) | function re(a){this.children=a;for(var b=0,c=0,d=0,e=a.length;e>d;++d){v...
function we (line 3) | function we(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g<a.linked....
function xe (line 3) | function xe(a,b){if(b.cm)throw new Error("This document is already in us...
function ye (line 3) | function ye(a,b){for(b-=a.first;!a.lines;)for(var c=0;;++c){var d=a.chil...
function ze (line 3) | function ze(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,funct...
function Ae (line 3) | function Ae(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)...
function Be (line 3) | function Be(a,b){for(var c=b-a.height,d=a;d;d=d.parent)d.height+=c}
function Ce (line 3) | function Ce(a){if(null==a.parent)return null;for(var b=a.parent,c=pf(b.l...
function De (line 3) | function De(a,b){var c=a.first;a:do{for(var d=0,e=a.children.length;e>d;...
function Ee (line 3) | function Ee(a,b){b=Rd(a.doc,b);for(var c=0,d=b.parent,e=0;e<d.lines.leng...
function Fe (line 3) | function Fe(a){var b=a.order;return null==b&&(b=a.order=_f(a.text)),b}
function Ge (line 3) | function Ge(a){return{done:[],undone:[],undoDepth:1/0,lastTime:0,lastOp:...
function He (line 3) | function He(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,...
function Ie (line 3) | function Ie(a,b){var c={line:b.from.line,ch:b.from.ch},d={from:c,to:vc(b...
function Je (line 3) | function Je(a,b,c,d){var e=a.history;e.undone.length=0;var f=+new Date,g...
function Ke (line 3) | function Ke(a){if(!a)return null;for(var c,b=0;b<a.length;++b)a[b].marke...
function Le (line 3) | function Le(a,b){var c=b["spans_"+a.id];if(!c)return null;for(var d=0,e=...
function Me (line 3) | function Me(a,b){for(var c=0,d=[];c<a.length;++c){var e=a[c],f=e.changes...
function Ne (line 3) | function Ne(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}
function Oe (line 3) | function Oe(a,b,c,d){for(var e=0;e<a.length;++e){for(var f=a[e],g=!0,h=0...
function Pe (line 3) | function Pe(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;O...
function Qe (line 3) | function Qe(){Ve(this)}
function Re (line 3) | function Re(a){return a.stop||(a.stop=Qe),a}
function Se (line 3) | function Se(a){a.preventDefault?a.preventDefault():a.returnValue=!1}
function Te (line 3) | function Te(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}
function Ue (line 3) | function Ue(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.r...
function Ve (line 3) | function Ve(a){Se(a),Te(a)}
function We (line 3) | function We(a){return a.target||a.srcElement}
function Xe (line 3) | function Xe(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?...
function Ye (line 3) | function Ye(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else...
function Ze (line 3) | function Ze(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1...
function $e (line 3) | function $e(a,b){var c=a._handlers&&a._handlers[b];if(c)for(var d=Array....
function bf (line 3) | function bf(a,b){function e(a){return function(){a.apply(null,d)}}var c=...
function cf (line 3) | function cf(a,b,c){return $e(a,c||b.type,a,b),Ue(b)||b.codemirrorIgnore}
function df (line 3) | function df(){--af;var a=_e;_e=null;for(var b=0;b<a.length;++b)a[b]()}
function ef (line 3) | function ef(a,b){var c=a._handlers&&a._handlers[b];return c&&c.length>0}
function ff (line 3) | function ff(a){a.prototype.on=function(a,b){Ye(this,a,b)},a.prototype.of...
function jf (line 3) | function jf(){this.id=null}
function kf (line 3) | function kf(a,b,c,d,e){null==b&&(b=a.search(/[^\s\u00a0]/),-1==b&&(b=a.l...
function mf (line 3) | function mf(a){for(;lf.length<=a;)lf.push(nf(lf)+" ");return lf[a]}
function nf (line 3) | function nf(a){return a[a.length-1]}
function of (line 3) | function of(a){if(q)a.selectionStart=0,a.selectionEnd=a.value.length;els...
function pf (line 3) | function pf(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length...
function qf (line 3) | function qf(a,b){function c(){}c.prototype=a;var d=new c;return b&&rf(b,...
function rf (line 3) | function rf(a,b){b||(b={});for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c...
function sf (line 3) | function sf(a){for(var b=[],c=0;a>c;++c)b.push(void 0);return b}
function tf (line 3) | function tf(a){var b=Array.prototype.slice.call(arguments,1);return func...
function vf (line 3) | function vf(a){return/\w/.test(a)||a>"\x80"&&(a.toUpperCase()!=a.toLower...
function wf (line 3) | function wf(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;retu...
function yf (line 3) | function yf(a){return a.charCodeAt(0)>=768&&xf.test(a)}
function zf (line 3) | function zf(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=...
function Af (line 3) | function Af(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.fir...
function Bf (line 3) | function Bf(a,b){return Af(a).appendChild(b)}
function Cf (line 3) | function Cf(a,b){d?(a.innerHTML="",a.appendChild(document.createTextNode...
function Df (line 3) | function Df(a){return a.getBoundingClientRect()}
function Ff (line 3) | function Ff(){return!1}
function Hf (line 3) | function Hf(a){if(null!=Gf)return Gf;var b=zf("div",null,null,"width: 50...
function Jf (line 3) | function Jf(a){if(null==If){var b=zf("span","\u200b");Bf(a,zf("span",[b,...
function Of (line 3) | function Of(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.leng...
function Pf (line 3) | function Pf(a){return a.level%2?a.to:a.from}
function Qf (line 3) | function Qf(a){return a.level%2?a.from:a.to}
function Rf (line 3) | function Rf(a){var b=Fe(a);return b?Pf(b[0]):0}
function Sf (line 3) | function Sf(a){var b=Fe(a);return b?Qf(nf(b)):a.text.length}
function Tf (line 3) | function Tf(a,b){var c=ye(a.doc,b),d=Rd(a.doc,c);d!=c&&(b=Ce(d));var e=F...
function Uf (line 3) | function Uf(a,b){for(var c,d;c=Pd(d=ye(a.doc,b));)b=c.find().to.line;var...
function Vf (line 3) | function Vf(a,b,c){var d=a[0].level;return b==d?!0:c==d?!1:c>b}
function Xf (line 3) | function Xf(a,b){Wf=null;for(var d,c=0;c<a.length;++c){var e=a[c];if(e.f...
function Yf (line 3) | function Yf(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&yf(a.text.charA...
function Zf (line 3) | function Zf(a,b,c,d){var e=Fe(a);if(!e)return $f(a,b,c,d);for(var f=Xf(e...
function $f (line 3) | function $f(a,b,c,d){var e=b+c;if(d)for(;e>0&&yf(a.text.charAt(e));)e+=c...
function c (line 3) | function c(a){return"number"==typeof a||/^\d+$/.test(String(a))?a+"px":a}
function e (line 3) | function e(){a.value=i.getValue()}
function c (line 4) | function c(c){return 255>=c?a.charAt(c):c>=1424&&1524>=c?"R":c>=1536&&17...
function k (line 4) | function k(a){for(var c,b=!1,d=!1;null!=(c=a.next());){if(!b){if("/"==c&...
function n (line 4) | function n(a,b,c){return l=a,m=c,b}
function o (line 4) | function o(a,b){var c=a.next();if('"'==c||"'"==c)return b.tokenize=p(c),...
function p (line 4) | function p(a){return function(b,c){var f,d=!1;if(e&&"@"==b.peek()&&b.mat...
function q (line 4) | function q(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=o;b...
function r (line 4) | function r(a,b){for(var d,c=!1;null!=(d=a.next());){if(!c&&("`"==d||"$"=...
function t (line 4) | function t(a,b){b.fatArrowAt&&(b.fatArrowAt=null);var c=a.string.indexOf...
function v (line 4) | function v(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.p...
function w (line 4) | function w(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0;f...
function x (line 4) | function x(a,b,c,d,e){var g=a.cc;for(y.state=a,y.stream=e,y.marked=null,...
function z (line 4) | function z(){for(var a=arguments.length-1;a>=0;a--)y.cc.push(arguments[a])}
function A (line 4) | function A(){return z.apply(null,arguments),!0}
function B (line 4) | function B(a){function c(b){for(var c=b;c;c=c.next)if(c.name==a)return!0...
function D (line 4) | function D(){y.state.context={prev:y.state.context,vars:y.state.localVar...
function E (line 4) | function E(){y.state.localVars=y.state.context.vars,y.state.context=y.st...
function F (line 4) | function F(a,b){var c=function(){var c=y.state,d=c.indented;"stat"==c.le...
function G (line 4) | function G(){var a=y.state;a.lexical.prev&&(")"==a.lexical.type&&(a.inde...
function H (line 4) | function H(a){return function(b){return b==a?A():";"==a?z():A(arguments....
function I (line 4) | function I(a,b){return"var"==a?A(F("vardef",b.length),cb,H(";"),G):"keyw...
function J (line 4) | function J(a){return L(a,!1)}
function K (line 4) | function K(a){return L(a,!0)}
function L (line 4) | function L(a,b){if(y.state.fatArrowAt==y.stream.start){var c=b?T:S;if("(...
function M (line 4) | function M(a){return a.match(/[;\}\)\],]/)?z():z(J)}
function N (line 4) | function N(a){return a.match(/[;\}\)\],]/)?z():z(K)}
function O (line 4) | function O(a,b){return","==a?A(J):P(a,b,!1)}
function P (line 4) | function P(a,b,c){var d=0==c?O:P,e=0==c?J:K;return"=>"==b?A(D,c?T:S,E):"...
function Q (line 4) | function Q(a){return"${"!=a.slice(a.length-2)?A():A(J,R)}
function R (line 4) | function R(a){return"}"==a?(y.marked="string-2",y.state.tokenize=r,A()):...
function S (line 4) | function S(a){return t(y.stream,y.state),"{"==a?z(I):z(J)}
function T (line 4) | function T(a){return t(y.stream,y.state),"{"==a?z(I):z(K)}
function U (line 4) | function U(a){return":"==a?A(G,I):z(O,H(";"),G)}
function V (line 4) | function V(a){return"variable"==a?(y.marked="property",A()):void 0}
function W (line 4) | function W(a,b){if("variable"==a){if(y.marked="property","get"==b||"set"...
function X (line 4) | function X(a){return"variable"!=a?z(Y):(y.marked="property",A(nb))}
function Y (line 4) | function Y(a){return":"==a?A(K):"("==a?z(nb):void 0}
function Z (line 4) | function Z(a,b){function c(d){if(","==d){var e=y.state.lexical;return"ca...
function $ (line 4) | function $(a,b,c){for(var d=3;d<arguments.length;d++)y.cc.push(arguments...
function _ (line 4) | function _(a){return"}"==a?A():z(I,_)}
function ab (line 4) | function ab(a){return g&&":"==a?A(bb):void 0}
function bb (line 4) | function bb(a){return"variable"==a?(y.marked="variable-3",A()):void 0}
function cb (line 4) | function cb(){return z(db,ab,fb,gb)}
function db (line 4) | function db(a,b){return"variable"==a?(B(b),A()):"["==a?$(db,"]"):"{"==a?...
function eb (line 4) | function eb(a,b){return"variable"!=a||y.stream.match(/^\s*:/,!1)?("varia...
function fb (line 4) | function fb(a,b){return"="==b?A(K):void 0}
function gb (line 4) | function gb(a){return","==a?A(cb):void 0}
function hb (line 4) | function hb(a,b){return"keyword b"==a&&"else"==b?A(F("form"),I,G):void 0}
function ib (line 4) | function ib(a){return"("==a?A(F(")"),jb,H(")"),G):void 0}
function jb (line 4) | function jb(a){return"var"==a?A(cb,H(";"),lb):";"==a?A(lb):"variable"==a...
function kb (line 4) | function kb(a,b){return"in"==b||"of"==b?(y.marked="keyword",A(J)):A(O,lb)}
function lb (line 4) | function lb(a,b){return";"==a?A(mb):"in"==b||"of"==b?(y.marked="keyword"...
function mb (line 4) | function mb(a){")"!=a&&A(J)}
function nb (line 4) | function nb(a,b){return"*"==b?(y.marked="keyword",A(nb)):"variable"==a?(...
function ob (line 4) | function ob(a){return"spread"==a?A(ob):z(db,ab)}
function pb (line 4) | function pb(a,b){return"variable"==a?(B(b),A(qb)):void 0}
function qb (line 4) | function qb(a,b){return"extends"==b?A(J):void 0}
function rb (line 4) | function rb(a){return"{"==a?$(W,"}"):void 0}
function sb (line 4) | function sb(a,b){return"string"==a?A(I):"variable"==a?(B(b),A(wb)):void 0}
function tb (line 4) | function tb(a,b){return"*"==b?(y.marked="keyword",A(wb,H(";"))):"default...
function ub (line 4) | function ub(a){return"string"==a?A():z(vb,wb)}
function vb (line 4) | function vb(a,b){return"{"==a?$(vb,"}"):("variable"==a&&B(b),A())}
function wb (line 4) | function wb(a,b){return"from"==b?(y.marked="keyword",A(J)):void 0}
function xb (line 4) | function xb(a){return"]"==a?A():z(K,yb)}
function yb (line 4) | function yb(a){return"for"==a?z(zb,H("]")):","==a?A(Z(K,"]")):z(Z(K,"]"))}
function zb (line 4) | function zb(a){return"for"==a?A(ib,zb):"if"==a?A(J,zb):void 0}
function a (line 4) | function a(a){return{type:a,style:"keyword"}}
function c (line 4) | function c(c){"activeLine"in c.state&&(c.removeLineClass(c.state.activeL...
function d (line 4) | function d(d,e){var f=d.getLineHandleVisualStart(e);d.state.activeLine!=...
function e (line 4) | function e(a,b){d(a,b.head.line)}
FILE: client/js/lib/codemirror.js
function CodeMirror (line 49) | function CodeMirror(place, options) {
function makeDisplay (line 102) | function makeDisplay(place, docStart) {
function loadMode (line 201) | function loadMode(cm) {
function resetModeState (line 206) | function resetModeState(cm) {
function wrappingChanged (line 217) | function wrappingChanged(cm) {
function estimateHeight (line 231) | function estimateHeight(cm) {
function estimateLineHeights (line 244) | function estimateLineHeights(cm) {
function keyMapChanged (line 252) | function keyMapChanged(cm) {
function themeChanged (line 258) | function themeChanged(cm) {
function guttersChanged (line 264) | function guttersChanged(cm) {
function updateGutters (line 270) | function updateGutters(cm) {
function lineLength (line 284) | function lineLength(doc, line) {
function computeMaxLength (line 302) | function computeMaxLength(cm) {
function setGuttersForLineNumbers (line 318) | function setGuttersForLineNumbers(options) {
function updateScrollbars (line 332) | function updateScrollbars(cm) {
function visibleLines (line 375) | function visibleLines(display, doc, viewPort) {
function alignHorizontally (line 386) | function alignHorizontally(cm) {
function maybeUpdateLineNumberWidth (line 398) | function maybeUpdateLineNumberWidth(cm) {
function lineNumberFor (line 415) | function lineNumberFor(options, i) {
function compensateForHScroll (line 418) | function compensateForHScroll(display) {
function updateDisplay (line 424) | function updateDisplay(cm, changes, viewPort, forced) {
function updateDisplayInner (line 460) | function updateDisplayInner(cm, changes, visible, forced) {
function updateHeightsInViewport (line 554) | function updateHeightsInViewport(cm) {
function updateViewOffset (line 577) | function updateViewOffset(cm) {
function computeIntact (line 583) | function computeIntact(intact, changes) {
function getDimensions (line 604) | function getDimensions(cm) {
function patchDisplay (line 617) | function patchDisplay(cm, from, to, intact, updateNumbersFrom) {
function buildLineElement (line 684) | function buildLineElement(cm, line, lineNo, dims, reuse) {
function positionLineWidget (line 762) | function positionLineWidget(widget, node, wrap, dims) {
function updateSelection (line 782) | function updateSelection(cm) {
function updateSelectionCursor (line 806) | function updateSelectionCursor(cm) {
function updateSelectionRange (line 822) | function updateSelectionRange(cm) {
function restartBlink (line 894) | function restartBlink(cm) {
function startWorker (line 908) | function startWorker(cm, time) {
function highlightWorker (line 913) | function highlightWorker(cm) {
function findStartLine (line 953) | function findStartLine(cm, n, precise) {
function getStateBefore (line 969) | function getStateBefore(cm, n, precise) {
function paddingTop (line 987) | function paddingTop(display) {return display.lineSpace.offsetTop;}
function paddingVert (line 988) | function paddingVert(display) {return display.mover.offsetHeight - displ...
function paddingH (line 989) | function paddingH(display) {
function measureChar (line 997) | function measureChar(cm, line, ch, data, bias) {
function findCachedMeasurement (line 1019) | function findCachedMeasurement(cm, line) {
function clearCachedMeasurement (line 1030) | function clearCachedMeasurement(cm, line) {
function measureLine (line 1035) | function measureLine(cm, line) {
function measureLineInner (line 1051) | function measureLineInner(cm, line) {
function crudelyMeasureLine (line 1141) | function crudelyMeasureLine(cm, line) {
function measureLineWidth (line 1150) | function measureLineWidth(cm, line) {
function clearCaches (line 1166) | function clearCaches(cm) {
function pageScrollX (line 1173) | function pageScrollX() { return window.pageXOffset || (document.document...
function pageScrollY (line 1174) | function pageScrollY() { return window.pageYOffset || (document.document...
function intoCoordSystem (line 1177) | function intoCoordSystem(cm, lineObj, rect, context) {
function fromCoordSystem (line 1199) | function fromCoordSystem(cm, coords, context) {
function charCoords (line 1216) | function charCoords(cm, pos, context, lineObj, bias) {
function cursorCoords (line 1221) | function cursorCoords(cm, pos, context, lineObj, measurement) {
function PosWithInfo (line 1251) | function PosWithInfo(line, ch, outside, xRel) {
function coordsChar (line 1259) | function coordsChar(cm, x, y) {
function coordsCharInner (line 1280) | function coordsCharInner(cm, lineObj, lineNo, x, y) {
function textHeight (line 1322) | function textHeight(display) {
function charWidth (line 1341) | function charWidth(display) {
function startOperation (line 1359) | function startOperation(cm) {
function endOperation (line 1377) | function endOperation(cm) {
function operation (line 1437) | function operation(cm1, f) {
function docOperation (line 1446) | function docOperation(f) {
function runInOp (line 1455) | function runInOp(cm, f) {
function regChange (line 1463) | function regChange(cm, from, to, lendiff) {
function slowPoll (line 1471) | function slowPoll(cm) {
function fastPoll (line 1479) | function fastPoll(cm) {
function readInput (line 1495) | function readInput(cm) {
function resetInput (line 1544) | function resetInput(cm, user) {
function focusInput (line 1561) | function focusInput(cm) {
function ensureFocus (line 1566) | function ensureFocus(cm) {
function isReadOnly (line 1570) | function isReadOnly(cm) {
function registerEventHandlers (line 1576) | function registerEventHandlers(cm) {
function eventInWidget (line 1701) | function eventInWidget(display, e) {
function posFromMouse (line 1707) | function posFromMouse(cm, e, liberal) {
function onMouseDown (line 1722) | function onMouseDown(e) {
function gutterEvent (line 1867) | function gutterEvent(cm, e, type, prevent, signalfn) {
function contextMenuInGutter (line 1890) | function contextMenuInGutter(cm, e) {
function clickInGutter (line 1895) | function clickInGutter(cm, e) {
function onDrop (line 1903) | function onDrop(e) {
function onDragStart (line 1947) | function onDragStart(cm, e) {
function setScrollTop (line 1970) | function setScrollTop(cm, val) {
function setScrollLeft (line 1979) | function setScrollLeft(cm, val, isScroller) {
function onScrollWheel (line 2009) | function onScrollWheel(cm, e) {
function doHandleBinding (line 2077) | function doHandleBinding(cm, bound, dropShift) {
function allKeyMaps (line 2097) | function allKeyMaps(cm) {
function handleKeyBinding (line 2105) | function handleKeyBinding(cm, e) {
function handleCharBinding (line 2142) | function handleCharBinding(cm, e, ch) {
function onKeyUp (line 2153) | function onKeyUp(e) {
function onKeyDown (line 2160) | function onKeyDown(e) {
function onKeyPress (line 2178) | function onKeyPress(e) {
function onFocus (line 2190) | function onFocus(cm) {
function onBlur (line 2205) | function onBlur(cm) {
function onContextMenu (line 2216) | function onContextMenu(cm, e) {
function clipPostChange (line 2289) | function clipPostChange(doc, change, pos) {
function computeSelAfterChange (line 2305) | function computeSelAfterChange(doc, change, hint) {
function filterChange (line 2328) | function filterChange(doc, change, update) {
function makeChange (line 2352) | function makeChange(doc, change, selUpdate, ignoreReadOnly) {
function makeChangeNoReadonly (line 2376) | function makeChangeNoReadonly(doc, change, selUpdate) {
function makeChangeFromHistory (line 2393) | function makeChangeFromHistory(doc, type) {
function shiftDoc (line 2433) | function shiftDoc(doc, distance) {
function makeChangeSingleDoc (line 2441) | function makeChangeSingleDoc(doc, change, selAfter, spans) {
function makeChangeSingleDocInEditor (line 2471) | function makeChangeSingleDocInEditor(cm, change, spans, selAfter) {
function replaceRange (line 2523) | function replaceRange(doc, code, from, to, origin) {
function Pos (line 2532) | function Pos(line, ch) {
function posEq (line 2538) | function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
function posLess (line 2539) | function posLess(a, b) {return a.line < b.line || (a.line == b.line && a...
function cmp (line 2540) | function cmp(a, b) {return a.line - b.line || a.ch - b.ch;}
function copyPos (line 2541) | function copyPos(x) {return Pos(x.line, x.ch);}
function clipLine (line 2545) | function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.fi...
function clipPos (line 2546) | function clipPos(doc, pos) {
function clipToLen (line 2552) | function clipToLen(pos, linelen) {
function isLine (line 2558) | function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.si...
function extendSelection (line 2562) | function extendSelection(doc, pos, other, bias) {
function filterSelectionChange (line 2581) | function filterSelectionChange(doc, anchor, head) {
function setSelection (line 2592) | function setSelection(doc, anchor, head, bias, checkAtomic) {
function reCheckSelection (line 2622) | function reCheckSelection(cm) {
function skipAtomic (line 2626) | function skipAtomic(doc, pos, bias, mayClear) {
function scrollCursorIntoView (line 2678) | function scrollCursorIntoView(cm) {
function scrollPosIntoView (line 2695) | function scrollPosIntoView(cm, pos, end, margin) {
function scrollIntoView (line 2717) | function scrollIntoView(cm, x1, y1, x2, y2) {
function calculateScrollPos (line 2723) | function calculateScrollPos(cm, x1, y1, x2, y2) {
function updateScrollPos (line 2749) | function updateScrollPos(cm, left, top) {
function addToScrollPos (line 2754) | function addToScrollPos(cm, left, top) {
function indentLine (line 2763) | function indentLine(cm, n, how, aggressive) {
function changeLine (line 2809) | function changeLine(cm, handle, op) {
function findPosH (line 2819) | function findPosH(doc, pos, dir, unit, visually) {
function findPosV (line 2866) | function findPosV(cm, pos, dir, unit) {
function findWordAt (line 2883) | function findWordAt(line, pos) {
function selectLine (line 2897) | function selectLine(cm, line) {
function interpret (line 3281) | function interpret(val) {
function option (line 3329) | function option(name, deflt, handle, notOnInit) {
function copyState (line 3525) | function copyState(mode, state) {
function startState (line 3538) | function startState(mode, a1, a2) {
function getKeyMap (line 3682) | function getKeyMap(val) {
function lookupKey (line 3687) | function lookupKey(name, maps, handle) {
function isModifierKey (line 3711) | function isModifierKey(event) {
function keyName (line 3715) | function keyName(event, noShift) {
function save (line 3748) | function save() {textarea.value = cm.getValue();}
function StringStream (line 3790) | function StringStream(string, tabSize) {
function TextMarker (line 3865) | function TextMarker(doc, type) {
function markText (line 3961) | function markText(doc, from, to, options, type) {
function SharedTextMarker (line 4022) | function SharedTextMarker(markers, primary) {
function markTextShared (line 4044) | function markTextShared(doc, from, to, options, type) {
function getMarkedSpanFor (line 4061) | function getMarkedSpanFor(spans, marker) {
function removeMarkedSpan (line 4067) | function removeMarkedSpan(spans, span) {
function addMarkedSpan (line 4072) | function addMarkedSpan(line, span) {
function markedSpansBefore (line 4077) | function markedSpansBefore(old, startCh, isInsert) {
function markedSpansAfter (line 4091) | function markedSpansAfter(old, endCh, isInsert) {
function stretchSpansOverChange (line 4105) | function stretchSpansOverChange(doc, change) {
function clearEmptySpans (line 4164) | function clearEmptySpans(spans) {
function mergeOldSpans (line 4174) | function mergeOldSpans(doc, change) {
function removeReadOnlyRanges (line 4196) | function removeReadOnlyRanges(doc, from, to) {
function extraLeft (line 4224) | function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }
function extraRight (line 4225) | function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }
function compareCollapsedMarkers (line 4227) | function compareCollapsedMarkers(a, b) {
function collapsedSpanAtSide (line 4238) | function collapsedSpanAtSide(line, start) {
function collapsedSpanAtStart (line 4248) | function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, t...
function collapsedSpanAtEnd (line 4249) | function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, fal...
function conflictingCollapsedRange (line 4251) | function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
function visualLine (line 4267) | function visualLine(doc, line) {
function lineIsHidden (line 4274) | function lineIsHidden(doc, line) {
function lineIsHiddenInner (line 4285) | function lineIsHiddenInner(doc, line, span) {
function detachMarkedSpans (line 4301) | function detachMarkedSpans(line) {
function attachMarkedSpans (line 4309) | function attachMarkedSpans(line, spans) {
function widgetOperation (line 4325) | function widgetOperation(f) {
function widgetHeight (line 4354) | function widgetHeight(widget) {
function addLineWidget (line 4361) | function addLineWidget(cm, handle, node, options) {
function updateLine (line 4392) | function updateLine(line, text, markedSpans, estimateHeight) {
function cleanUpLine (line 4403) | function cleanUpLine(line) {
function runMode (line 4411) | function runMode(cm, text, mode, state, f, forceToEnd) {
function highlightLine (line 4444) | function highlightLine(cm, line, state, forceToEnd) {
function getLineStyles (line 4482) | function getLineStyles(cm, line) {
function processLine (line 4490) | function processLine(cm, text, state, startAt) {
function interpretTokenStyle (line 4502) | function interpretTokenStyle(style, builder) {
function buildLineContent (line 4520) | function buildLineContent(cm, realLine, measure, copyWidgets) {
function defaultSpecialCharPlaceholder (line 4571) | function defaultSpecialCharPlaceholder(ch) {
function buildToken (line 4577) | function buildToken(builder, text, style, startStyle, endStyle, title) {
function buildTokenMeasure (line 4617) | function buildTokenMeasure(builder, text, style, startStyle, endStyle) {
function buildTokenSplitSpaces (line 4642) | function buildTokenSplitSpaces(inner) {
function buildCollapsedSpan (line 4654) | function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
function insertLineContent (line 4679) | function insertLineContent(line, builder, styles) {
function updateDoc (line 4740) | function updateDoc(doc, change, markedSpans, selAfter, estimateHeight) {
function LeafChunk (line 4787) | function LeafChunk(lines) {
function BranchChunk (line 4822) | function BranchChunk(children) {
function linkedDocs (line 5181) | function linkedDocs(doc, f, sharedHistOnly) {
function attachDoc (line 5195) | function attachDoc(cm, doc) {
function getLine (line 5208) | function getLine(chunk, n) {
function getBetween (line 5220) | function getBetween(doc, start, end) {
function getLines (line 5231) | function getLines(doc, from, to) {
function updateLineHeight (line 5237) | function updateLineHeight(line, height) {
function lineNo (line 5242) | function lineNo(line) {
function lineAtHeight (line 5254) | function lineAtHeight(chunk, h) {
function heightAtLine (line 5273) | function heightAtLine(cm, lineObj) {
function getOrder (line 5292) | function getOrder(line) {
function makeHistory (line 5300) | function makeHistory(startGen) {
function attachLocalSpans (line 5314) | function attachLocalSpans(doc, change, from, to) {
function historyChangeFromChange (line 5323) | function historyChangeFromChange(doc, change) {
function addToHistory (line 5331) | function addToHistory(doc, change, selAfter, opId) {
function removeClearedSpans (line 5370) | function removeClearedSpans(spans) {
function getOldSpans (line 5379) | function getOldSpans(doc, change) {
function copyHistoryArray (line 5389) | function copyHistoryArray(events, newGroup) {
function rebaseHistSel (line 5410) | function rebaseHistSel(pos, from, to, diff) {
function rebaseHistArray (line 5426) | function rebaseHistArray(array, from, to, diff) {
function rebaseHist (line 5455) | function rebaseHist(hist, change) {
function stopMethod (line 5463) | function stopMethod() {e_stop(this);}
function addStop (line 5465) | function addStop(event) {
function e_preventDefault (line 5470) | function e_preventDefault(e) {
function e_stopPropagation (line 5474) | function e_stopPropagation(e) {
function e_defaultPrevented (line 5478) | function e_defaultPrevented(e) {
function e_stop (line 5481) | function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
function e_target (line 5486) | function e_target(e) {return e.target || e.srcElement;}
function e_button (line 5487) | function e_button(e) {
function on (line 5500) | function on(emitter, type, f) {
function off (line 5512) | function off(emitter, type, f) {
function signal (line 5525) | function signal(emitter, type /*, values...*/) {
function signalLater (line 5533) | function signalLater(emitter, type /*, values...*/) {
function signalDOMEvent (line 5547) | function signalDOMEvent(cm, e, override) {
function fireDelayed (line 5552) | function fireDelayed() {
function hasHandler (line 5559) | function hasHandler(emitter, type) {
function eventMixin (line 5566) | function eventMixin(ctor) {
function Delayed (line 5580) | function Delayed() {this.id = null;}
function countColumn (line 5585) | function countColumn(string, end, tabSize, startIndex, startValue) {
function spaceStr (line 5599) | function spaceStr(n) {
function lst (line 5605) | function lst(arr) { return arr[arr.length-1]; }
function selectInput (line 5607) | function selectInput(node) {
function indexOf (line 5618) | function indexOf(collection, elt) {
function createObj (line 5625) | function createObj(base, props) {
function copyObj (line 5633) | function copyObj(obj, target) {
function emptyArray (line 5639) | function emptyArray(size) {
function bind (line 5644) | function bind(f) {
function isWordChar (line 5650) | function isWordChar(ch) {
function isEmpty (line 5655) | function isEmpty(obj) {
function isExtendingChar (line 5661) | function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendi...
function elt (line 5665) | function elt(tag, content, className, style) {
function removeChildren (line 5674) | function removeChildren(e) {
function removeChildrenAndAdd (line 5680) | function removeChildrenAndAdd(parent, e) {
function setTextContent (line 5684) | function setTextContent(e, str) {
function getRect (line 5691) | function getRect(node) {
function spanAffectsWrapping (line 5714) | function spanAffectsWrapping() { return false; }
function scrollbarWidth (line 5738) | function scrollbarWidth(measure) {
function zeroWidthElement (line 5748) | function zeroWidthElement(measure) {
function iterateBidiSections (line 5818) | function iterateBidiSections(order, from, to, f) {
function bidiLeft (line 5831) | function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }
function bidiRight (line 5832) | function bidiRight(part) { return part.level % 2 ? part.from : part.to; }
function lineLeft (line 5834) | function lineLeft(line) { var order = getOrder(line); return order ? bid...
function lineRight (line 5835) | function lineRight(line) {
function lineStart (line 5841) | function lineStart(cm, lineN) {
function lineEnd (line 5849) | function lineEnd(cm, lineN) {
function compareBidiLevel (line 5858) | function compareBidiLevel(order, a, b) {
function getBidiPartAt (line 5865) | function getBidiPartAt(order, pos) {
function moveInLine (line 5885) | function moveInLine(line, pos, dir, byUnit) {
function moveVisually (line 5898) | function moveVisually(line, start, dir, byUnit) {
function moveLogically (line 5921) | function moveLogically(line, start, dir, byUnit) {
function charType (line 5955) | function charType(code) {
FILE: client/js/lib/codemirror_javascript_mode.js
function kw (line 13) | function kw(type) {return {type: type, style: "keyword"};}
function readRegexp (line 59) | function readRegexp(stream) {
function ret (line 74) | function ret(tp, style, cont) {
function tokenBase (line 78) | function tokenBase(stream, state) {
function tokenString (line 130) | function tokenString(quote) {
function tokenComment (line 146) | function tokenComment(stream, state) {
function tokenQuasi (line 158) | function tokenQuasi(stream, state) {
function findFatArrow (line 178) | function findFatArrow(stream, state) {
function JSLexical (line 206) | function JSLexical(indented, column, type, align, prev, info) {
function inScope (line 215) | function inScope(state, varname) {
function parseJS (line 224) | function parseJS(state, style, type, content, stream) {
function pass (line 248) | function pass() {
function cont (line 251) | function cont() {
function register (line 255) | function register(varname) {
function pushcontext (line 276) | function pushcontext() {
function popcontext (line 280) | function popcontext() {
function pushlex (line 284) | function pushlex(type, info) {
function poplex (line 293) | function poplex() {
function expect (line 303) | function expect(wanted) {
function statement (line 311) | function statement(type, value) {
function expression (line 333) | function expression(type) {
function expressionNoComma (line 336) | function expressionNoComma(type) {
function expressionInner (line 339) | function expressionInner(type, noComma) {
function maybeexpression (line 356) | function maybeexpression(type) {
function maybeexpressionNoComma (line 360) | function maybeexpressionNoComma(type) {
function maybeoperatorComma (line 365) | function maybeoperatorComma(type, value) {
function maybeoperatorNoComma (line 369) | function maybeoperatorNoComma(type, value, noComma) {
function quasi (line 384) | function quasi(value) {
function continueQuasi (line 388) | function continueQuasi(type) {
function arrowBody (line 395) | function arrowBody(type) {
function arrowBodyNoComma (line 400) | function arrowBodyNoComma(type) {
function maybelabel (line 405) | function maybelabel(type) {
function property (line 409) | function property(type) {
function objprop (line 412) | function objprop(type, value) {
function getterSetter (line 423) | function getterSetter(type) {
function afterprop (line 428) | function afterprop(type) {
function commasep (line 432) | function commasep(what, end) {
function contCommasep (line 447) | function contCommasep(what, end, info) {
function block (line 452) | function block(type) {
function maybetype (line 456) | function maybetype(type) {
function typedef (line 459) | function typedef(type) {
function vardef (line 462) | function vardef() {
function pattern (line 465) | function pattern(type, value) {
function proppattern (line 470) | function proppattern(type, value) {
function maybeAssign (line 478) | function maybeAssign(_type, value) {
function vardefCont (line 481) | function vardefCont(type) {
function maybeelse (line 484) | function maybeelse(type, value) {
function forspec (line 487) | function forspec(type) {
function forspec1 (line 490) | function forspec1(type) {
function formaybeinof (line 496) | function formaybeinof(_type, value) {
function forspec2 (line 500) | function forspec2(type, value) {
function forspec3 (line 505) | function forspec3(type) {
function functiondef (line 508) | function functiondef(type, value) {
function funarg (line 513) | function funarg(type) {
function className (line 517) | function className(type, value) {
function classNameAfter (line 520) | function classNameAfter(_type, value) {
function objlit (line 523) | function objlit(type) {
function afterModule (line 526) | function afterModule(type, value) {
function afterExport (line 530) | function afterExport(_type, value) {
function afterImport (line 535) | function afterImport(type) {
function importSpec (line 539) | function importSpec(type, value) {
function maybeFrom (line 544) | function maybeFrom(_type, value) {
function arrayLiteral (line 547) | function arrayLiteral(type) {
function maybeArrayComprehension (line 551) | function maybeArrayComprehension(type) {
function comprehension (line 556) | function comprehension(type) {
FILE: client/js/lib/ui-bootstrap-tpls-0.3.0.js
function findEndEventName (line 74) | function findEndEventName(endEventNames) {
function goNext (line 451) | function goNext() {
function transitionDone (line 481) | function transitionDone(next, current) {
function restartTimer (line 516) | function restartTimer() {
function createElement (line 664) | function createElement(clazz) {
function Dialog (line 678) | function Dialog(opts) {
function removeTriggerClass (line 777) | function removeTriggerClass(el){
function onCloseComplete (line 781) | function onCloseComplete(){
function makePage (line 1031) | function makePage(number, text, isActive, isDisabled) {
function getStyle (line 1116) | function getStyle(el, cssprop) {
function isStaticPositioned (line 1130) | function isStaticPositioned(element) {
function snake_case (line 1231) | function snake_case(name){
function setTriggers (line 1261) | function setTriggers ( trigger ) {
function toggleTooltipBind (line 1303) | function toggleTooltipBind () {
function showTooltipBind (line 1312) | function showTooltipBind() {
function hideTooltipBind (line 1320) | function hideTooltipBind () {
function show (line 1327) | function show() {
function hide (line 1400) | function hide() {
function getStackedType (line 1537) | function getStackedType(index) {
function escapeRegexp (line 1972) | function escapeRegexp(queryToEscape) {
FILE: client/js/lib/walk.js
function c (line 27) | function c(node, st, override) {
function c (line 41) | function c(node, st, override) {
function c (line 60) | function c(node, st, override) {
function makeTest (line 66) | function makeTest(test) {
function Found (line 75) | function Found(node, state) { this.node = node; this.state = state; }
function skipThrough (line 164) | function skipThrough(node, st, c) { c(node, st); }
function ignore (line 165) | function ignore(_node, _st, _c) {}
function makeScope (line 293) | function makeScope(prev, isCatch) {
function normalScope (line 296) | function normalScope(scope) {
FILE: client/js/rulesctrl.js
function loadRulesFile (line 11) | function loadRulesFile(rulesFile) {
FILE: client/js/scanctrl.js
function handleMaybeZip (line 108) | function handleMaybeZip() {
function handleList (line 128) | function handleList() {
FILE: common/scan.js
function aw_loadRulesFile (line 230) | function aw_loadRulesFile(rulesFile, callback) {
function aw_parseRule (line 254) | function aw_parseRule(rule) {
function aw_loadRules (line 328) | function aw_loadRules(rulesData) {
function aw_scan (line 377) | function aw_scan(ast, filename) {
function aw_setCallback (line 401) | function aw_setCallback(found_callback) {
function aw_setParser (line 405) | function aw_setParser(newParser){
FILE: server.js
constant PORT (line 9) | const PORT = process.env.PORT || 4000;
FILE: tests/cases/production_ruletests.js
function testSetup (line 2) | function testSetup(ruleData) {
FILE: tests/cases/test_ruletests.js
function testSetup (line 2) | function testSetup(ruleData) {
FILE: tests/js/chai.js
function require (line 11) | function require(path, parent, orig) {
function lastIndexOf (line 157) | function lastIndexOf(arr, obj) {
function localRequire (line 169) | function localRequire(path) {
function exclude (line 219) | function exclude () {
function AssertionError (line 258) | function AssertionError (message, _props, ssf) {
function getType (line 353) | function getType (obj) {
function Library (line 375) | function Library () {
function deepEqual (line 501) | function deepEqual(a, b, m) {
function sameValue (line 531) | function sameValue(a, b) {
function typeEqual (line 547) | function typeEqual(a, b) {
function dateEqual (line 560) | function dateEqual(a, b) {
function regexpEqual (line 574) | function regexpEqual(a, b) {
function argumentsEqual (line 590) | function argumentsEqual(a, b, m) {
function enumerable (line 604) | function enumerable(a) {
function iterableEqual (line 619) | function iterableEqual(a, b) {
function bufferEqual (line 644) | function bufferEqual(a, b) {
function isValue (line 657) | function isValue(a) {
function objectEqual (line 672) | function objectEqual(a, b, m) {
function Assertion (line 838) | function Assertion (obj, msg, stack) {
function an (line 1053) | function an (type, msg) {
function includeChainingBehavior (line 1088) | function includeChainingBehavior () {
function include (line 1092) | function include (val, msg) {
function checkArguments (line 1292) | function checkArguments () {
function assertEqual (line 1327) | function assertEqual (val, msg) {
function assertEql (line 1363) | function assertEql(obj, msg) {
function assertAbove (line 1401) | function assertAbove (n, msg) {
function assertLeast (line 1449) | function assertLeast (n, msg) {
function assertBelow (line 1497) | function assertBelow (n, msg) {
function assertMost (line 1545) | function assertMost (n, msg) {
function assertInstanceOf (line 1631) | function assertInstanceOf (constructor, msg) {
function assertOwnProperty (line 1753) | function assertOwnProperty (name, msg) {
function assertLengthChain (line 1792) | function assertLengthChain () {
function assertLength (line 1796) | function assertLength (n, msg) {
function assertKeys (line 1879) | function assertKeys (keys) {
function assertThrows (line 1967) | function assertThrows (constructor, errMsg, msg) {
function isSubsetOf (line 2193) | function isSubsetOf(subset, superset) {
function loadShould (line 3329) | function loadShould () {
function parsePath (line 3811) | function parsePath (path) {
function _getPathValue (line 3836) | function _getPathValue (parsed, obj) {
function addProperty (line 3877) | function addProperty(property) {
function inspect (line 4031) | function inspect(obj, showHidden, depth, colors) {
function formatValue (line 4070) | function formatValue(ctx, value, recurseTimes) {
function formatPrimitive (line 4182) | function formatPrimitive(ctx, value) {
function formatError (line 4206) | function formatError(value) {
function formatArray (line 4211) | function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
function formatProperty (line 4231) | function formatProperty(ctx, value, recurseTimes, visibleKeys, key, arra...
function reduceToSingleString (line 4291) | function reduceToSingleString(output, base, braces) {
function isArray (line 4311) | function isArray(ar) {
function isRegExp (line 4316) | function isRegExp(re) {
function isDate (line 4320) | function isDate(d) {
function isError (line 4324) | function isError(e) {
function objectToString (line 4328) | function objectToString(o) {
FILE: tests/js/mocha.js
function require (line 5) | function require(p){
function clonePath (line 78) | function clonePath(path) {
function removeEmpty (line 81) | function removeEmpty(array) {
function escapeHTML (line 90) | function escapeHTML(s) {
function contextLines (line 254) | function contextLines(lines) {
function eofNL (line 257) | function eofNL(curRange, i, current) {
function isArray (line 429) | function isArray(obj) {
function EventEmitter (line 439) | function EventEmitter(){}
function on (line 474) | function on () {
function Progress (line 617) | function Progress() {
function Context (line 766) | function Context(){}
function Hook (line 847) | function Hook(title, fn) {
function F (line 856) | function F(){}
function visit (line 1054) | function visit(obj) {
function image (line 1406) | function image(name) {
function Mocha (line 1428) | function Mocha(options) {
function parse (line 1775) | function parse(str) {
function shortFormat (line 1814) | function shortFormat(ms) {
function longFormat (line 1830) | function longFormat(ms) {
function plural (line 1842) | function plural(ms, n, name) {
function Base (line 2070) | function Base(runner) {
function pad (line 2178) | function pad(str, len) {
function inlineDiff (line 2192) | function inlineDiff(err, escape) {
function unifiedDiff (line 2226) | function unifiedDiff(err, escape) {
function errorDiff (line 2258) | function errorDiff(err, type, escape) {
function escapeInvisibles (line 2275) | function escapeInvisibles(line) {
function colorLines (line 2290) | function colorLines(name, str) {
function stringify (line 2304) | function stringify(obj) {
function canonicalize (line 2316) | function canonicalize(obj, stack) {
function sameType (line 2352) | function sameType(a, b) {
function Doc (line 2383) | function Doc(runner) {
function Dot (line 2443) | function Dot(runner) {
function F (line 2483) | function F(){}
function HTMLCov (line 2512) | function HTMLCov(runner) {
function coverageClass (line 2536) | function coverageClass(n) {
function HTML (line 2589) | function HTML(runner, root) {
function error (line 2749) | function error(msg) {
function fragment (line 2757) | function fragment(html) {
function hideSuitesWithout (line 2777) | function hideSuitesWithout(classname) {
function unhide (line 2789) | function unhide() {
function text (line 2800) | function text(el, str) {
function on (line 2812) | function on(el, event, fn) {
function JSONCov (line 2866) | function JSONCov(runner, output) {
function map (line 2909) | function map(cov) {
function coverage (line 2948) | function coverage(filename, data) {
function clean (line 2991) | function clean(test) {
function List (line 3023) | function List(runner) {
function clean (line 3056) | function clean(test) {
function JSONReporter (line 3088) | function JSONReporter(runner) {
function clean (line 3129) | function clean(test) {
function Landing (line 3179) | function Landing(runner) {
function F (line 3235) | function F(){}
function List (line 3265) | function List(runner) {
function F (line 3306) | function F(){}
function Markdown (line 3335) | function Markdown(runner) {
function Min (line 3429) | function Min(runner) {
function F (line 3446) | function F(){}
function NyanCat (line 3475) | function NyanCat(runner) {
function draw (line 3539) | function draw(color, n) {
function write (line 3706) | function write(string) {
function F (line 3714) | function F(){}
function Progress (line 3752) | function Progress(runner, options) {
function F (line 3808) | function F(){}
function Spec (line 3839) | function Spec(runner) {
function F (line 3899) | function F(){}
function TAP (line 3930) | function TAP(runner) {
function title (line 3978) | function title(test) {
function XUnit (line 4017) | function XUnit(runner) {
function F (line 4055) | function F(){}
function test (line 4065) | function test(test) {
function tag (line 4087) | function tag(name, attrs, close, content) {
function cdata (line 4105) | function cdata(str) {
function Runnable (line 4151) | function Runnable(title, fn) {
function F (line 4165) | function F(){}
function multiple (line 4287) | function multiple(err) {
function done (line 4294) | function done(err) {
function callFn (line 4337) | function callFn(fn) {
function Runner (line 4406) | function Runner(suite) {
function F (line 4432) | function F(){}
function next (line 4604) | function next(i) {
function next (line 4653) | function next(suite) {
function hookErr (line 4754) | function hookErr(err, errSuite, after) {
function next (line 4778) | function next(err, errSuite) {
function next (line 4852) | function next(errSuite) {
function done (line 4873) | function done(errSuite) {
function uncaught (line 4926) | function uncaught(err){
function filterLeaks (line 4972) | function filterLeaks(ok, globals) {
function extraGlobals (line 5004) | function extraGlobals() {
function Suite (line 5073) | function Suite(title, ctx) {
function F (line 5093) | function F(){}
function Test (line 5374) | function Test(title, fn) {
function F (line 5384) | function F(){}
function ignored (line 5553) | function ignored(path){
function highlight (line 5667) | function highlight(js) {
function timeslice (line 5763) | function timeslice() {
Condensed preview — 79 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,186K chars).
[
{
"path": ".gitignore",
"chars": 32,
"preview": "node_modules\n/nbproject/\n.idea/\n"
},
{
"path": "LICENSE",
"chars": 193,
"preview": "This Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distri"
},
{
"path": "README.md",
"chars": 4468,
"preview": "**Development of ScanJS has stopped.**\n=======================================\n\nWe are using [ESLint](http://eslint.org)"
},
{
"path": "client/css/angular-csp.css",
"chars": 346,
"preview": "/* Include this file in your html if you are using the CSP mode. */\n\n@charset \"UTF-8\";\n\n[ng\\:cloak], [ng-cloak], [data-n"
},
{
"path": "client/css/app.css",
"chars": 1850,
"preview": "@import url(\"bootstrap.css\");\n@import url(\"dashboard.css\");\n@import url(\"codemirror.css\");\n@import url(\"codemirror-mdn.c"
},
{
"path": "client/css/bootstrap.css",
"chars": 121220,
"preview": "/*!\n * Bootstrap v3.1.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://gi"
},
{
"path": "client/css/codemirror-mdn.css",
"chars": 4834,
"preview": "/*\n MDN-LIKE Theme - Mozilla\n Ported to CodeMirror by Peter Kroon <plakroon@gmail.com>\n Report bugs/issues here: http"
},
{
"path": "client/css/codemirror.css",
"chars": 6190,
"preview": "/* BASICS */\n\n.CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-family: monospace"
},
{
"path": "client/css/dashboard.css",
"chars": 1385,
"preview": "/*\n * Base structure\n */\n\n/* Move down content because we have a fixed navbar that is 50px tall */\nbody {\n padding-top:"
},
{
"path": "client/css/font-awesome.css",
"chars": 21658,
"preview": "/*!\n * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/lice"
},
{
"path": "client/css/prettify.css",
"chars": 675,
"preview": ".pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,"
},
{
"path": "client/index.html",
"chars": 2099,
"preview": "<!DOCTYPE html>\n<html ng-app='scanjs' ng-csp>\n <head>\n <meta charset=\"utf-8\">\n <meta http-equiv=\"content-security"
},
{
"path": "client/js/experimentctrl.js",
"chars": 1948,
"preview": "\"use strict\";\n\nscanjsModule.controller('ExperimentCtrl', ['$scope', 'ScanSvc', function ExperimentCtrl($scope, ScanSvc) "
},
{
"path": "client/js/lib/acorn.js",
"chars": 69622,
"preview": "// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke and releas"
},
{
"path": "client/js/lib/acorn_loose.js",
"chars": 23155,
"preview": "// Acorn: Loose parser\n//\n// This module provides an alternative parser (`parse_dammit`) that\n// exposes that same inter"
},
{
"path": "client/js/lib/codemirror-compressed.js",
"chars": 127105,
"preview": "window.CodeMirror=function(){\"use strict\";function z(a,c){if(!(this instanceof z))return new z(a,c);this.options=c=c||{}"
},
{
"path": "client/js/lib/codemirror.js",
"chars": 241716,
"preview": "// CodeMirror version 3.22\n//\n// CodeMirror is the only global var we claim\nwindow.CodeMirror = (function() {\n \"use str"
},
{
"path": "client/js/lib/codemirror_javascript_mode.js",
"chars": 24265,
"preview": "// TODO actually recognize syntax of TypeScript constructs\n\nCodeMirror.defineMode(\"javascript\", function(config, parserC"
},
{
"path": "client/js/lib/ui-bootstrap-tpls-0.3.0.js",
"chars": 72916,
"preview": "angular.module(\"ui.bootstrap\", [\"ui.bootstrap.tpls\", \"ui.bootstrap.transition\",\"ui.bootstrap.collapse\",\"ui.bootstrap.acc"
},
{
"path": "client/js/lib/utils.js",
"chars": 370,
"preview": "\n//Array.find polyfill\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n enumerable: f"
},
{
"path": "client/js/lib/walk.js",
"chars": 11485,
"preview": "// AST walker module for Mozilla Parser API compatible trees\n\n(function(mod) {\n if (typeof exports == \"object\" && typeo"
},
{
"path": "client/js/locationctrl.js",
"chars": 353,
"preview": "\"use strict\";\n\nscanjsModule.controller('LocationCtrl', ['$scope', '$location', function LocationCtrl($scope, $location) "
},
{
"path": "client/js/main.js",
"chars": 582,
"preview": "\"use strict\";\n\nvar scanjsModule = angular.module('scanjs', ['ui.bootstrap', 'ngRoute']);\n\nscanjsModule.config(['$routePr"
},
{
"path": "client/js/rulesctrl.js",
"chars": 1289,
"preview": "\"use strict\";\n\nscanjsModule.controller('RuleListCtrl', ['$scope', 'ScanSvc', function RuleListCtrl($scope, ScanSvc) {\n "
},
{
"path": "client/js/scanctrl.js",
"chars": 10950,
"preview": "\"use strict\";\n\nscanjsModule.controller('ScanCtrl', ['$scope', 'ScanSvc', function ScanCtrl($scope, ScanSvc) {\n if (!doc"
},
{
"path": "client/js/scanservice.js",
"chars": 1868,
"preview": "\"use strict\";\n\nscanjsModule.factory('ScanSvc', ['$rootScope', '$http', function($rootScope, $http) {\n var ScanService ="
},
{
"path": "client/js/scanworker.js",
"chars": 1006,
"preview": "\"use strict\";\n\n/* this makes sure that console.log can be used, even if it is undefined.\n We won't see the message tho"
},
{
"path": "client/partials/experiment.html",
"chars": 2358,
"preview": "<div id=\"experiment-wrapper\" class=\"panel\" ng-controller=\"ExperimentCtrl\">\n <div class=\"col-md-5\">\n <br>\n "
},
{
"path": "client/partials/rules.html",
"chars": 1413,
"preview": "<div id=\"rules-wrapper\" class=\"panel container-fluid\">\n <div id=\"rules-div\" class=\"col-md-12\">\n <div ng-contro"
},
{
"path": "client/partials/scan.html",
"chars": 6224,
"preview": "<div ng-controller=\"ScanCtrl\" id=\"scan-wrapper\" class=\"ng-scope panel panel-default\">\n <!-- sidebar -->\n <div clas"
},
{
"path": "client/rules.readme.md",
"chars": 213,
"preview": "Rules maintained here:\nhttps://docs.google.com/a/mozilla.com/spreadsheets/d/1T14mvMMAspnvhKXxPNRBiV0x6QKZsXr8_b7eXJvEf_A"
},
{
"path": "common/rules.json",
"chars": 31156,
"preview": "[\n {\n \"name\": \"eval\",\n \"source\": \"eval()\",\n \"testhit\": \"eval('jsCode'+usercontrolledVal )\",\n \"testmiss\": \"e"
},
{
"path": "common/scan.js",
"chars": 12071,
"preview": "(function (mod) {\n\n // CommonJS\n if (typeof exports == \"object\" && typeof module == \"object\")\n return mod(\n ex"
},
{
"path": "common/template_rules.json",
"chars": 3710,
"preview": "[\n {\n \"name\": \"identifier\",\n \"source\": \"foo\",\n \"testhit\": \"foo;\",\n \"testmiss\": \"'foo';\",\n \"desc\": \"Match"
},
{
"path": "deploy-ghpages.sh",
"chars": 438,
"preview": "#!/bin/bash\n\n# This makes sure, that we don't deploy pull requests to gh-pages :-)\nif [ $TRAVIS_PULL_REQUEST != false ];"
},
{
"path": "package.json",
"chars": 1397,
"preview": "{\n \"name\": \"scanjs\",\n \"version\": \"0.0.2\",\n \"description\": \"Static analysis tool for javascript codebases\",\n \"main\": "
},
{
"path": "scanner.js",
"chars": 3149,
"preview": "#!/usr/bin/env node\n/*jshint node:true*/\n\n// This script is for using scanjs server side\n\nvar fs = require('fs');\nvar pa"
},
{
"path": "server.js",
"chars": 500,
"preview": "#!/usr/bin/env node\nvar static = require(\"node-static\");\nvar file = new static.Server('.', {\n headers: {\n \"Content-S"
},
{
"path": "stackato.yml",
"chars": 159,
"preview": "name: ScanJS\nframework:\n type: node\n runtime: node010\n \nurl:\n - scanjs.paas.allizom.org\n\n"
},
{
"path": "tests/TESTING",
"chars": 1680,
"preview": "TESTING\n======\n\nTo run tests, just use one of the following commands.\n\nEquivalent to visiting test/index.html in the bro"
},
{
"path": "tests/advanced.html",
"chars": 2536,
"preview": "<!doctype html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta http-equiv=\"content-security-policy\" content=\"default-src"
},
{
"path": "tests/cases/CustomEvent.js",
"chars": 1057,
"preview": "(function () {\n describe('CustomEvent tests - future rule?', function () {\n context('ignores safe patterns', functio"
},
{
"path": "tests/cases/action.js",
"chars": 1539,
"preview": "(function () {\n describe('action attribute (mainly for forms) test', function () {\n context('ignores safe patterns',"
},
{
"path": "tests/cases/addEventListener.js",
"chars": 1545,
"preview": "(function () {\n describe('addEventListener tests', function () {\n context('ignores safe patterns', function () {\n "
},
{
"path": "tests/cases/addIdleObserver.js",
"chars": 1171,
"preview": "(function () {\n describe('addIdleObserver tests', function () {\n context('ignores safe patterns', function () {\n "
},
{
"path": "tests/cases/createContextualFragment.js",
"chars": 982,
"preview": "(function () {\n describe('createContextualFragment tests', function () {\n context('ignores safe patterns', function "
},
{
"path": "tests/cases/crypto.generateCRMFRequest.js",
"chars": 1399,
"preview": "(function () {\n describe('generateCRMFRequest tests', function () {\n context('ignores safe patterns', function () {\n"
},
{
"path": "tests/cases/data.js",
"chars": 1416,
"preview": "(function () {\n describe('data attribute tests', function () {\n context('ignores safe patterns', function () {\n "
},
{
"path": "tests/cases/document.write.js",
"chars": 1497,
"preview": "(function () {\n describe('document.write tests', function () {\n context('ignores safe patterns', function () {\n "
},
{
"path": "tests/cases/document.writeln.js",
"chars": 1511,
"preview": "(function () {\n describe('document.writeln tests', function () {\n describe('ignores safe patterns', function () {\n "
},
{
"path": "tests/cases/escapeHTML.js",
"chars": 812,
"preview": "(function () {\n describe('escapeHTML tests', function () {\n context('ignores safe patterns', function () {\n con"
},
{
"path": "tests/cases/eval.js",
"chars": 1066,
"preview": "(function() {\n describe('eval tests', function() {\n context('ignores safe patterns', function() {\n context(null"
},
{
"path": "tests/cases/geolocation.js",
"chars": 1168,
"preview": "(function() {\n describe('geolocation tests', function() {\n context('ignores safe patterns', function() {\n conte"
},
{
"path": "tests/cases/getDeviceStorage.js",
"chars": 1332,
"preview": "(function() {\n describe('getDeviceStorage tests', function() {\n context('ignores safe patterns', function() {\n "
},
{
"path": "tests/cases/href.js",
"chars": 1709,
"preview": "(function() {\n describe('href tests', function() {\n context('ignores safe patterns', function() {\n context(null"
},
{
"path": "tests/cases/indexedDB.js",
"chars": 906,
"preview": "(function() {\n describe('indexedDB tests', function() {\n context('ignores safe patterns', function() {\n context"
},
{
"path": "tests/cases/innerhtml.js",
"chars": 2304,
"preview": "(function () {\n describe('innerHTML tests', function () {\n context('ignores safe patterns', function () {\n cont"
},
{
"path": "tests/cases/localStorage.js",
"chars": 1246,
"preview": "(function() {\n describe('localStorage tests', function() {\n context('ignores safe patterns', function() {\n cont"
},
{
"path": "tests/cases/message.js",
"chars": 1403,
"preview": "(function() {\n describe('message tests', function() {\n context('ignores safe patterns', function() {\n context(n"
},
{
"path": "tests/cases/moz/moz.js",
"chars": 22364,
"preview": "(function () {\n describe('Mozilla specific tests', function () {\n context('MozActivity', function () {\n context"
},
{
"path": "tests/cases/newFunction.js",
"chars": 979,
"preview": "(function() {\n describe('new Function() tests', function() {\n context('ignores safe patterns', function() {\n co"
},
{
"path": "tests/cases/outerHTML.js",
"chars": 1770,
"preview": "(function () {\n describe('outerHTML tests', function () {\n context('ignores safe patterns', function () {\n cont"
},
{
"path": "tests/cases/parseFromString.js",
"chars": 967,
"preview": "(function () {\n describe('parseFromString tests', function () {\n context('ignores safe patterns', function () {\n "
},
{
"path": "tests/cases/placeholders.js",
"chars": 2177,
"preview": "\n\n\ndescribe('Testing placeholders $_any, $_contains etc', function () {\n context('$_any', function () {\n\n it(\" $_any"
},
{
"path": "tests/cases/production_ruletests.js",
"chars": 1267,
"preview": "describe('Testing production rules (common/rules.json)', function () {\n function testSetup(ruleData) {\n\n ruleData.fo"
},
{
"path": "tests/cases/sessionStorage.js",
"chars": 1202,
"preview": "(function () {\n describe('sessionStorage tests', function () {\n context('ignores safe patterns', function () {\n "
},
{
"path": "tests/cases/setInterval.js",
"chars": 1862,
"preview": "(function () {\n describe('setInterval tests', function () {\n context('ignores safe patterns', function () {\n co"
},
{
"path": "tests/cases/setTimeout.js",
"chars": 1855,
"preview": "(function () {\n describe('setTimeout tests', function () {\n context('ignores safe patterns', function () {\n con"
},
{
"path": "tests/cases/src.js",
"chars": 1755,
"preview": "(function () {\n describe('src attribute tests', function () {\n context('ignores safe patterns', function () {\n "
},
{
"path": "tests/cases/test_ruletests.js",
"chars": 1477,
"preview": "describe('Testing rule templates (common/template_rules.json)', function () {\n function testSetup(ruleData) {\n\n rule"
},
{
"path": "tests/cases/window.open.js",
"chars": 1394,
"preview": "(function () {\n describe('window.open tests', function () {\n context('ignores safe patterns', function () {\n co"
},
{
"path": "tests/css/mocha.css",
"chars": 4236,
"preview": "@charset \"utf-8\";\n\nbody {\n margin:0;\n}\n\n#mocha {\n font: 20px/1.5 \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n mar"
},
{
"path": "tests/index.html",
"chars": 1189,
"preview": "<!doctype html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta http-equiv=\"content-security-policy\" content=\"default-src"
},
{
"path": "tests/js/chai.js",
"chars": 117322,
"preview": ";(function(){\n\n/**\n * Require the given path.\n *\n * @param {String} path\n * @return {Object} exports\n * @api public\n */\n"
},
{
"path": "tests/js/loadrules.js",
"chars": 46,
"preview": "ScanJS.loadRulesFile(\"../common/rules.json\");\n"
},
{
"path": "tests/js/main.js",
"chars": 67,
"preview": "mocha.setup('bdd');\n$(document).ready(function() { mocha.run(); });"
},
{
"path": "tests/js/mocha.js",
"chars": 123818,
"preview": ";(function(){\n\n// CommonJS require()\n\nfunction require(p){\n var path = require.resolve(p)\n , mod = require.modul"
},
{
"path": "tests/mocha-includes.js",
"chars": 432,
"preview": "global.acorn = require(\"acorn\");\nglobal.chai = require(\"chai\");\nglobal.assert = chai.assert;\nglobal.should = require(\"ch"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the mozilla/scanjs GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 79 files (1.1 MB), approximately 320.5k tokens, and a symbol index with 945 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.