diff --git a/webtagger/.bowerrc b/webtagger/.bowerrc new file mode 100644 index 0000000..844ec3a --- /dev/null +++ b/webtagger/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory":"static/components" +} diff --git a/webtagger/__init__.py b/webtagger/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/webtagger/__init__.pyc b/webtagger/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a88af5c59945cfae31ee445f490c9e5bb2e124b1 GIT binary patch literal 142 zcmZSn%*&d`V(@x_)tLQCVt{etBvVhzn%J$7kkcmc+;F6;zgR0QK7B=BJeAq}qXO IC li, +ol.inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.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; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 16px; + font-weight: 300; + line-height: 25px; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + margin-bottom: 5px; + font-size: 0; + white-space: nowrap; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.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 td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success td { + background-color: #dff0d8; +} + +.table tbody tr.error td { + background-color: #f2dede; +} + +.table tbody tr.warning td { + background-color: #fcf8e3; +} + +.table tbody tr.info td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.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; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu li > a:hover, +.dropdown-menu li > a:focus, +.dropdown-submenu:hover > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu .active > a, +.dropdown-menu .active > a:hover { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu .disabled > a, +.dropdown-menu .disabled > a:hover { + color: #999999; +} + +.dropdown-menu .disabled > a:hover { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #bbbbbb; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #a2a2a2; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn { + border-color: #c5c5c5; + border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-mini .caret, +.btn-small .caret, +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover { + text-decoration: none; + background-color: #f5f5f5; +} + +.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 > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.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; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + padding: 5px; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + margin-top: -3px; +} + +.tooltip.right { + margin-left: 3px; +} + +.tooltip.bottom { + margin-top: 3px; +} + +.tooltip.left { + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + width: 236px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.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; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + 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 { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + 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, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + 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 { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.badge:hover { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 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: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img { + display: block; + 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: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/webtagger/static/components/flatui/css/flat-ui.css b/webtagger/static/components/flatui/css/flat-ui.css new file mode 100644 index 0000000..e7b1a47 --- /dev/null +++ b/webtagger/static/components/flatui/css/flat-ui.css @@ -0,0 +1,2584 @@ +@import url("http://fonts.googleapis.com/css?family=Lato:400,700,900,400italic"); +@font-face { + font-family: "Flat-UI-Icons-16"; + src: url("../fonts/Flat-UI-Icons-16.eot"); + src: url("../fonts/Flat-UI-Icons-16.eot?#iefix") format("embedded-opentype"), url("../fonts/Flat-UI-Icons-16.woff") format("woff"), url("../fonts/Flat-UI-Icons-16.ttf") format("truetype"), url("../fonts/Flat-UI-Icons-16.svg#Flat-UI-Icons-16") format("svg"); + font-weight: normal; + font-style: normal; } + +/* Use the following CSS code if you want to use data attributes for inserting your icons */ +[data-icon]:before { + font-family: "Flat-UI-Icons-16"; + content: attr(data-icon); + speak: none; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; } + +/* Use the following CSS code if you want to have a class per icon */ +/*Instead of a list of all class selectors, + *you can use the generic selector below, but it's slower: + *[class*="fui-"]:before { */ +.fui-volume-16:before, .fui-video-16:before, .fui-time-16:before, .fui-settings-16:before, .fui-plus-16:before, .fui-new-16:before, .fui-menu-16:before, .fui-man-16:before, .fui-mail-16:before, .fui-lock-16:before, .fui-location-16:before, .fui-heart-16:before, .fui-eye-16:before, .fui-cross-16:before, .fui-cmd-16:before, .fui-checkround-16:before, .fui-checkmark-16:before, .fui-camera-16:before, .fui-calendar-16:before, .fui-bubble-16:before { + font-family: "Flat-UI-Icons-16"; + speak: none; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; } + +.fui-volume-16:before { + content: "\e000"; } + +.fui-video-16:before { + content: "\e001"; } + +.fui-time-16:before { + content: "\e002"; } + +.fui-settings-16:before { + content: "\e003"; } + +.fui-plus-16:before { + content: "\e004"; } + +.fui-new-16:before { + content: "\e005"; } + +.fui-menu-16:before { + content: "\e006"; } + +.fui-man-16:before { + content: "\e007"; } + +.fui-mail-16:before { + content: "\e008"; } + +.fui-lock-16:before { + content: "\e009"; } + +.fui-location-16:before { + content: "\e00a"; } + +.fui-heart-16:before { + content: "\e00b"; } + +.fui-eye-16:before { + content: "\e00c"; } + +.fui-cross-16:before { + content: "\e00d"; } + +.fui-cmd-16:before { + content: "\e00e"; } + +.fui-checkround-16:before { + content: "\e00f"; } + +.fui-checkmark-16:before { + content: "\e010"; } + +.fui-camera-16:before { + content: "\e011"; } + +.fui-calendar-16:before { + content: "\e012"; } + +.fui-bubble-16:before { + content: "\e013"; } + +@font-face { + font-family: "Flat-UI-Icons-24"; + src: url("../fonts/Flat-UI-Icons-24.eot"); + src: url("../fonts/Flat-UI-Icons-24.eot?#iefix") format("embedded-opentype"), url("../fonts/Flat-UI-Icons-24.woff") format("woff"), url("../fonts/Flat-UI-Icons-24.ttf") format("truetype"), url("../fonts/Flat-UI-Icons-24.svg#Flat-UI-Icons-24") format("svg"); + font-weight: normal; + font-style: normal; } + +/* Use the following CSS code if you want to use data attributes for inserting your icons */ +[data-icon]:before { + font-family: "Flat-UI-Icons-24"; + content: attr(data-icon); + speak: none; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; } + +/* Use the following CSS code if you want to have a class per icon */ +/*Instead of a list of all class selectors, + *you can use the generic selector below, but it's slower: + *[class*="fui-"]:before { */ +.fui-video-24:before, .fui-time-24:before, .fui-settings-24:before, .fui-plus-24:before, .fui-new-24:before, .fui-menu-24:before, .fui-man-24:before, .fui-mail-24:before, .fui-lock-24:before, .fui-location-24:before, .fui-heart-24:before, .fui-eye-24:before, .fui-cross-24:before, .fui-cmd-24:before, .fui-checkround-24:before, .fui-checkmark-24:before, .fui-calendar-24:before, .fui-bubble-24:before, .fui-volume-24:before, .fui-camera-24:before { + font-family: "Flat-UI-Icons-24"; + speak: none; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; } + +.fui-video-24:before { + content: "\e000"; } + +.fui-time-24:before { + content: "\e001"; } + +.fui-settings-24:before { + content: "\e002"; } + +.fui-plus-24:before { + content: "\e003"; } + +.fui-new-24:before { + content: "\e005"; } + +.fui-menu-24:before { + content: "\e006"; } + +.fui-man-24:before { + content: "\e007"; } + +.fui-mail-24:before { + content: "\e008"; } + +.fui-lock-24:before { + content: "\e009"; } + +.fui-location-24:before { + content: "\e00a"; } + +.fui-heart-24:before { + content: "\e00b"; } + +.fui-eye-24:before { + content: "\e00c"; } + +.fui-cross-24:before { + content: "\e00d"; } + +.fui-cmd-24:before { + content: "\e00e"; } + +.fui-checkround-24:before { + content: "\e00f"; } + +.fui-checkmark-24:before { + content: "\e010"; } + +.fui-calendar-24:before { + content: "\e011"; } + +.fui-bubble-24:before { + content: "\e012"; } + +.fui-volume-24:before { + content: "\e013"; } + +.fui-camera-24:before { + content: "\e004"; } + +body { + color: #34495e; + font: 14px/1.231 "Lato", sans-serif; } + +a { + color: #1abc9c; + text-decoration: underline; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + a:hover { + color: #2ecc71; + text-decoration: none; } + +h1 { + font-size: 32px; + font-weight: 900; } + +h2 { + font-size: 26px; + font-weight: 700; + margin-bottom: 2px; } + +h3 { + font-size: 24px; + font-weight: 700; + margin-bottom: 4px; + margin-top: 2px; } + +h4 { + font-size: 18px; + font-weight: 500; + margin-top: 4px; } + +h5 { + font-size: 16px; + font-weight: 500; + text-transform: uppercase; } + +h6 { + font-size: 13px; + font-weight: 500; + text-transform: uppercase; } + +.btn { + border: none; + background: #34495e; + color: white; + font-size: 16.5px; + text-decoration: none; + text-shadow: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + .btn:hover, .btn:focus { + background-color: #4e6d8d; + color: white; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + .btn:active, .btn.active { + background-color: #2c3e50; + color: rgba(255, 255, 255, 0.75); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .btn.disabled, .btn[disabled] { + background-color: #95a5a6; + color: white; } + .btn.btn-large { + padding-bottom: 12px; + padding-top: 13px; } + .btn.btn-primary { + background-color: #1abc9c; } + .btn.btn-primary:hover, .btn.btn-primary:focus { + background-color: #2fe2bf; } + .btn.btn-primary:active, .btn.btn-primary.active { + background-color: #16a085; } + .btn.btn-info { + background-color: #3498db; } + .btn.btn-info:hover, .btn.btn-info:focus { + background-color: #5dade2; } + .btn.btn-info:active, .btn.btn-info.active { + background-color: #2383c4; } + .btn.btn-danger { + background-color: #e74c3c; } + .btn.btn-danger:hover, .btn.btn-danger:focus { + background-color: #ec7063; } + .btn.btn-danger:active, .btn.btn-danger.active { + background-color: #dc2d1b; } + .btn.btn-success { + background-color: #2ecc71; } + .btn.btn-success:hover, .btn.btn-success:focus { + background-color: #55d98d; } + .btn.btn-success:active, .btn.btn-success.active { + background-color: #27ad60; } + .btn.btn-warning { + background-color: #f1c40f; } + .btn.btn-warning:hover, .btn.btn-warning:focus { + background-color: #f4d03f; } + .btn.btn-warning:active, .btn.btn-warning.active { + background-color: #cea70c; } + .btn-toolbar .btn { + font-size: 18px; + padding: 10px 14px 9px; } + .btn-toolbar .btn:first-child { + -webkit-border-radius: 6px 0 0 6px; + -moz-border-radius: 6px 0 0 6px; + border-radius: 6px 0 0 6px; } + .btn-toolbar .btn:last-child { + -webkit-border-radius: 0 6px 6px 0; + -moz-border-radius: 0 6px 6px 0; + border-radius: 0 6px 6px 0; } + +.btn-toolbar .btn.active { + color: white; } + +.demo-headline { + padding: 73px 0 110px; + text-align: center; } + +.demo-logo { + font-size: 90px; + font-weight: 900; + letter-spacing: -2px; + line-height: 100px; } + .demo-logo .logo { + background: url("../images/demo/logo-mask.png") center 0 no-repeat; + background-size: 256px 186px; + height: 186px; + margin: 0 auto 26px; + overflow: hidden; + text-indent: -9999em; + width: 256px; } + .demo-logo small { + color: rgba(52, 73, 94, 0.3); + display: block; + font-size: 22px; + font-weight: 700; + letter-spacing: -1px; + padding-top: 5px; } + +.demo-row { + margin-bottom: 20px; } + +.demo-panel-title { + margin-bottom: 20px; + padding-top: 20px; } + .demo-panel-title small { + color: #bfc1c3; + font-size: inherit; + font-weight: 400; } + +.demo-navigation { + margin-bottom: -4px; + margin-top: -10px; } + +.demo-pager { + margin-top: -10px; } + +.demo-tooltips { + height: 126px; } + .demo-tooltips .tooltip { + left: -8px !important; + position: relative !important; + top: -8px !important; } + +.demo-headings { + margin-bottom: 12px; } + +.demo-tiles { + margin-bottom: 46px; } + +.demo-icons { + margin-bottom: 115px; } + +.demo-icons-24 { + font-size: 24px; + margin-bottom: 38px; + position: relative; } + .demo-icons-24 span { + margin: 0 0 0 18px; } + .demo-icons-24 span:first-child { + margin-left: 0; } + +.demo-icons-16 { + font-size: 16px; + margin: 0 0 38px 5px; + position: relative; } + .demo-icons-16 span { + margin: 0 0 0 28px; } + .demo-icons-16 span:first-child { + margin-left: 0; } + +.demo-icons-tooltip { + bottom: 0; + color: #b9c8d8; + font-size: 12px; + left: 100%; + margin-left: 0 !important; + position: absolute; + width: 80px; } + +.demo-illustrations { + margin-bottom: 45px; } + .demo-illustrations img { + height: 100px; + margin-left: 35px; + width: 100px; + vertical-align: bottom; } + .demo-illustrations img:first-child { + margin-left: 0; } + .demo-illustrations img.big-illustration { + height: 111px; + width: 112px; } + .demo-illustrations img.big-retina-illustration { + height: 104px; + margin-right: -24px; + width: 117px; } + .demo-illustrations img.big-illustration-pusher { + margin-right: 12px; } + +.demo-samples { + margin-bottom: 46px; } + +.demo-video { + border-radius: 6px; + padding-top: 95px; } + +.demo-download-section { + float: none; + margin: 0 auto; + padding: 60px 0 90px 20px; + text-align: center; } + .demo-download-section [class*='fui-'] { + margin: 3px 0 -3px; } + +.demo-download { + background-color: #e8edf2; + border-radius: 50%; + height: 120px; + margin: 0 auto 32px; + padding: 40px 28px 30px 32px; + text-align: center; + width: 130px; } + .demo-download img { + height: 104px; + width: 82px; } + +.demo-download-text { + font-size: 15px; + padding: 20px 0; + text-align: center; } + +.demo-text-box a:hover { + color: #1abc9c; } + +.demo-browser { + background: #2c3e50 url("../images/demo/browser.png") 0 0 no-repeat; + background-size: 659px 42px; + border-radius: 0 0 6px 6px; + color: white; + margin: 0 41px 140px 0; + padding-top: 42px; } + +.demo-browser-side { + float: left; + padding: 22px 20px; + width: 111px; } + .demo-browser-side > h5 { + margin-bottom: 3px; + text-transform: none; } + .demo-browser-side > h6 { + font-size: 11px; + font-weight: 300; + line-height: 18px; + margin-top: 3px; + text-transform: none; } + +.demo-browser-author { + background: url("../images/demo/browser-author.jpg") center center no-repeat; + border: 3px solid white; + display: block; + height: 84px; + margin: 0 auto; + width: 84px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; } + +.demo-browser-action { + padding: 30px 0 12px; } + .demo-browser-action > .btn { + padding: 9px 0 10px 11px; + text-align: left; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; } + .demo-browser-action > .btn:before { + color: white; + content: "\e004"; + font-size: 16px; + font-family: "Flat-UI-Icons-16"; + font-weight: 300; + margin-right: 12px; + position: relative; + top: 1px; + -webkit-font-smoothing: antialiased; } + +.demo-browser-content { + background-color: #34495e; + border-radius: 0 0 6px; + overflow: hidden; + padding: 21px 0 0 20px; } + .demo-browser-content > img { + border: 6px solid white; + float: left; + margin: 0 15px 20px 0; + width: 134px; } + +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3 / 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) { + .logo { + background-image: url("../images/demo/logo-mask-2x.png"); } + + .demo-browser { + background-image: url("../images/demo/browser-2x.png"); } } +.navbar { + font-size: 18px; } + .navbar .brand { + color: #1abc9c; + font-size: inherit; + font-weight: 700; + padding-bottom: 16px; + padding-top: 15px; } + .navbar .nav > li:hover > ul { + top: 100%; } + .navbar .nav > li > ul { + padding-top: 13px; + top: 80%; + background-color: white\9; } + .navbar .nav > li > ul:before { + content: ""; + border-style: solid; + border-width: 0 9px 9px 9px; + border-color: transparent transparent #34495e transparent; + height: 0px; + position: absolute; + left: 15px; + top: 5px; + width: 0px; + -webkit-transform: rotate(360deg); } + .navbar .nav > li > ul li:hover ul { + opacity: 1; + -webkit-transform: scale(1, 1); + visibility: visible; + display: block\9; } + .navbar .nav > li > ul li ul { + left: 100%; } + .navbar .nav > li > a { + padding: 14px 15px 17px; } + .navbar .nav > li > a:hover { + color: #1abc9c; } + .navbar .nav li { + position: relative; } + .navbar .nav li:hover > ul { + opacity: 1; + z-index: 100; + -webkit-transform: scale(1, 1); + visibility: visible; + display: block\9; } + .navbar .nav ul { + border-radius: 4px; + left: 15px; + list-style-type: none; + margin-left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 234px; + z-index: -100; + -webkit-transform: scale(1, 0.99); + -webkit-transform-origin: 0 0; + visibility: hidden; + display: none\9; + -webkit-transition: 0.3s ease-out; + -moz-transition: 0.3s ease-out; + -o-transition: 0.3s ease-out; + transition: 0.3s ease-out; + -webkit-backface-visibility: hidden; } + .navbar .nav ul ul { + left: 95%; + padding-left: 5px; } + .navbar .nav ul li { + background-color: #34495e; + padding: 0 3px 3px; } + .navbar .nav ul li:first-child { + border-radius: 4px 4px 0 0; + padding-top: 3px; } + .navbar .nav ul li:last-child { + border-radius: 0 0 4px 4px; } + .navbar .nav ul li.active > a, .navbar .nav ul li.active > a:hover { + background-color: #1abc9c; + color: white; } + .navbar .nav ul a { + border-radius: 2px; + color: white; + display: block; + font-size: 14px; + padding: 6px 9px; + text-decoration: none; } + .navbar .nav ul a:hover { + background-color: #1abc9c; } + +.navbar-inner { + border: none; + padding-left: 4px; + padding-right: 4px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } + +.navbar-inverse .navbar-inner { + background: #34495e; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } +.navbar-inverse .nav > li > a { + color: white; } +.navbar-inverse .nav .active > a, .navbar-inverse .nav .active > a:hover, .navbar-inverse .nav .active > a:focus { + background-color: transparent; + color: #1abc9c; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + +.navbar-unread { + background-color: #e74c3c; + border-radius: 30px; + color: white; + display: none; + font-size: 12px; + font-weight: 500; + line-height: 18px; + min-width: 8px; + padding: 0 5px; + position: absolute; + right: -7px; + text-align: center; + text-shadow: none; + top: 8px; + z-index: 10; } + .active .navbar-unread { + display: block; } + +.dk_container { + cursor: pointer; + font-size: 14px; + margin-bottom: 10px; + outline: none; } + +.dk_toggle { + background-color: #1abc9c; + color: white; + border-radius: 6px; + overflow: hidden; + padding: 11px 45px 11px 13px; + text-decoration: none; + white-space: nowrap; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + .dk_toggle:hover, .dk_toggle:focus, .dk_focus .dk_toggle { + background-color: #2fe2bf; + color: white; + outline: none; } + .dk_toggle:active { + background-color: #16a085; + outline: none; } + .dk_toggle:active .select-icon { + border-left-color: transparent; } + +.select-icon { + background: #1abc9c url("../images/select/toggle.png") no-repeat right center; + border-left: 2px solid rgba(52, 73, 94, 0.15); + border-radius: 0 6px 6px 0; + height: 100%; + position: absolute; + right: 0; + top: 0; + width: 42px; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + +.dk_open { + z-index: 10; } + .dk_open .dk_toggle { + background-color: #1abc9c; } + .dk_open .dk_toggle .select-icon { + background-color: #16a085; + border-left-color: transparent; } + +.dk_options { + padding-top: 14px; } + .dk_options:before { + content: ""; + border-style: solid; + border-width: 0 9px 9px 9px; + border-color: transparent transparent #34495e transparent; + height: 0px; + position: absolute; + left: 15px; + top: 5px; + width: 0px; + -webkit-transform: rotate(360deg); } + .dk_options:before { + left: auto; + right: 12px; } + .dk_options li { + padding-bottom: 3px; } + .dk_options a { + border-radius: 3px; + color: white; + display: block; + padding: 5px 9px; + text-decoration: none; } + .dk_options a:hover { + background-color: #1abc9c; } + +.dk_option_current a { + background-color: #1abc9c; } + +.dk_options_inner { + background-color: #34495e; + border-radius: 5px; + margin: 0; + max-height: 244px; + padding: 3px 3px 0; } + +.dk_touch .dk_options { + max-height: 250px; } + +.dk_container { + display: none; + position: relative; + vertical-align: middle; } + .dk_container.dk_shown { + display: inline-block; + zoom: 1; + *display: inline; } + .dk_container[class*="span"] { + float: none; + margin-left: 0; } + +.dk_toggle { + display: block; + position: relative; } + +.dk_open { + position: relative; } + .dk_open .dk_options { + margin-top: -1px; + opacity: 1; + z-index: 10; + display: block\9; } + .dk_open .dk_label { + color: inherit; } + +.dk_options { + margin-top: -21px; + position: absolute; + left: 0; + opacity: 0; + width: 220px; + z-index: -100; + display: none\9; + -webkit-transition: 0.3s ease-out; + -moz-transition: 0.3s ease-out; + -o-transition: 0.3s ease-out; + transition: 0.3s ease-out; + -webkit-backface-visibility: hidden; } + .select-right .dk_options { + left: auto; + right: 0; } + .dk_options a { + display: block; } + +.dk_options_inner { + overflow: auto; + outline: none; + position: relative; } + +.dk_touch .dk_options { + overflow: hidden; } +.dk_touch .dk_options_inner { + max-height: none; + overflow: visible; } + +.dk_fouc select { + position: relative; + top: -99999em; + visibility: hidden; } + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + border: 2px solid #dce4ec; + color: #34495e; + font-family: "Lato", sans-serif; + font-size: 14px; + padding: 8px 0 9px 10px; + text-indent: 1px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + textarea:-moz-placeholder, + input[type="text"]:-moz-placeholder, + input[type="password"]:-moz-placeholder, + input[type="datetime"]:-moz-placeholder, + input[type="datetime-local"]:-moz-placeholder, + input[type="date"]:-moz-placeholder, + input[type="month"]:-moz-placeholder, + input[type="time"]:-moz-placeholder, + input[type="week"]:-moz-placeholder, + input[type="number"]:-moz-placeholder, + input[type="email"]:-moz-placeholder, + input[type="url"]:-moz-placeholder, + input[type="search"]:-moz-placeholder, + input[type="tel"]:-moz-placeholder, + input[type="color"]:-moz-placeholder, + .uneditable-input:-moz-placeholder { + color: #acb6c0; } + textarea::-webkit-input-placeholder, + input[type="text"]::-webkit-input-placeholder, + input[type="password"]::-webkit-input-placeholder, + input[type="datetime"]::-webkit-input-placeholder, + input[type="datetime-local"]::-webkit-input-placeholder, + input[type="date"]::-webkit-input-placeholder, + input[type="month"]::-webkit-input-placeholder, + input[type="time"]::-webkit-input-placeholder, + input[type="week"]::-webkit-input-placeholder, + input[type="number"]::-webkit-input-placeholder, + input[type="email"]::-webkit-input-placeholder, + input[type="url"]::-webkit-input-placeholder, + input[type="search"]::-webkit-input-placeholder, + input[type="tel"]::-webkit-input-placeholder, + input[type="color"]::-webkit-input-placeholder, + .uneditable-input::-webkit-input-placeholder { + color: #acb6c0; } + textarea.placeholder, + input[type="text"].placeholder, + input[type="password"].placeholder, + input[type="datetime"].placeholder, + input[type="datetime-local"].placeholder, + input[type="date"].placeholder, + input[type="month"].placeholder, + input[type="time"].placeholder, + input[type="week"].placeholder, + input[type="number"].placeholder, + input[type="email"].placeholder, + input[type="url"].placeholder, + input[type="search"].placeholder, + input[type="tel"].placeholder, + input[type="color"].placeholder, + .uneditable-input.placeholder { + color: #acb6c0; } + textarea:focus, + input[type="text"]:focus, + input[type="password"]:focus, + input[type="datetime"]:focus, + input[type="datetime-local"]:focus, + input[type="date"]:focus, + input[type="month"]:focus, + input[type="time"]:focus, + input[type="week"]:focus, + input[type="number"]:focus, + input[type="email"]:focus, + input[type="url"]:focus, + input[type="search"]:focus, + input[type="tel"]:focus, + input[type="color"]:focus, + .uneditable-input:focus { + border-color: #1abc9c; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .control-group.error textarea, .control-group.error + input[type="text"], .control-group.error + input[type="password"], .control-group.error + input[type="datetime"], .control-group.error + input[type="datetime-local"], .control-group.error + input[type="date"], .control-group.error + input[type="month"], .control-group.error + input[type="time"], .control-group.error + input[type="week"], .control-group.error + input[type="number"], .control-group.error + input[type="email"], .control-group.error + input[type="url"], .control-group.error + input[type="search"], .control-group.error + input[type="tel"], .control-group.error + input[type="color"], .control-group.error + .uneditable-input { + border-color: #e74c3c; + color: #e74c3c; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .control-group.error textarea:focus, .control-group.error + input[type="text"]:focus, .control-group.error + input[type="password"]:focus, .control-group.error + input[type="datetime"]:focus, .control-group.error + input[type="datetime-local"]:focus, .control-group.error + input[type="date"]:focus, .control-group.error + input[type="month"]:focus, .control-group.error + input[type="time"]:focus, .control-group.error + input[type="week"]:focus, .control-group.error + input[type="number"]:focus, .control-group.error + input[type="email"]:focus, .control-group.error + input[type="url"]:focus, .control-group.error + input[type="search"]:focus, .control-group.error + input[type="tel"]:focus, .control-group.error + input[type="color"]:focus, .control-group.error + .uneditable-input:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .control-group.success textarea, .control-group.success + input[type="text"], .control-group.success + input[type="password"], .control-group.success + input[type="datetime"], .control-group.success + input[type="datetime-local"], .control-group.success + input[type="date"], .control-group.success + input[type="month"], .control-group.success + input[type="time"], .control-group.success + input[type="week"], .control-group.success + input[type="number"], .control-group.success + input[type="email"], .control-group.success + input[type="url"], .control-group.success + input[type="search"], .control-group.success + input[type="tel"], .control-group.success + input[type="color"], .control-group.success + .uneditable-input { + border-color: #2ecc71; + color: #2ecc71; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .control-group.success textarea:focus, .control-group.success + input[type="text"]:focus, .control-group.success + input[type="password"]:focus, .control-group.success + input[type="datetime"]:focus, .control-group.success + input[type="datetime-local"]:focus, .control-group.success + input[type="date"]:focus, .control-group.success + input[type="month"]:focus, .control-group.success + input[type="time"]:focus, .control-group.success + input[type="week"]:focus, .control-group.success + input[type="number"]:focus, .control-group.success + input[type="email"]:focus, .control-group.success + input[type="url"]:focus, .control-group.success + input[type="search"]:focus, .control-group.success + input[type="tel"]:focus, .control-group.success + input[type="color"]:focus, .control-group.success + .uneditable-input:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .control-group.warning textarea, .control-group.warning + input[type="text"], .control-group.warning + input[type="password"], .control-group.warning + input[type="datetime"], .control-group.warning + input[type="datetime-local"], .control-group.warning + input[type="date"], .control-group.warning + input[type="month"], .control-group.warning + input[type="time"], .control-group.warning + input[type="week"], .control-group.warning + input[type="number"], .control-group.warning + input[type="email"], .control-group.warning + input[type="url"], .control-group.warning + input[type="search"], .control-group.warning + input[type="tel"], .control-group.warning + input[type="color"], .control-group.warning + .uneditable-input { + border-color: #f1c40f; + color: #f1c40f; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .control-group.warning textarea:focus, .control-group.warning + input[type="text"]:focus, .control-group.warning + input[type="password"]:focus, .control-group.warning + input[type="datetime"]:focus, .control-group.warning + input[type="datetime-local"]:focus, .control-group.warning + input[type="date"]:focus, .control-group.warning + input[type="month"]:focus, .control-group.warning + input[type="time"]:focus, .control-group.warning + input[type="week"]:focus, .control-group.warning + input[type="number"]:focus, .control-group.warning + input[type="email"]:focus, .control-group.warning + input[type="url"]:focus, .control-group.warning + input[type="search"]:focus, .control-group.warning + input[type="tel"]:focus, .control-group.warning + input[type="color"]:focus, .control-group.warning + .uneditable-input:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .control-group.info textarea, .control-group.info + input[type="text"], .control-group.info + input[type="password"], .control-group.info + input[type="datetime"], .control-group.info + input[type="datetime-local"], .control-group.info + input[type="date"], .control-group.info + input[type="month"], .control-group.info + input[type="time"], .control-group.info + input[type="week"], .control-group.info + input[type="number"], .control-group.info + input[type="email"], .control-group.info + input[type="url"], .control-group.info + input[type="search"], .control-group.info + input[type="tel"], .control-group.info + input[type="color"], .control-group.info + .uneditable-input { + border-color: #3498db; + color: #3498db; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .control-group.info textarea:focus, .control-group.info + input[type="text"]:focus, .control-group.info + input[type="password"]:focus, .control-group.info + input[type="datetime"]:focus, .control-group.info + input[type="datetime-local"]:focus, .control-group.info + input[type="date"]:focus, .control-group.info + input[type="month"]:focus, .control-group.info + input[type="time"]:focus, .control-group.info + input[type="week"]:focus, .control-group.info + input[type="number"]:focus, .control-group.info + input[type="email"]:focus, .control-group.info + input[type="url"]:focus, .control-group.info + input[type="search"]:focus, .control-group.info + input[type="tel"]:focus, .control-group.info + input[type="color"]:focus, .control-group.info + .uneditable-input:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + +input[disabled], +input[readonly], +textarea[disabled], +textarea[readonly] { + background-color: #eaeded; + border-color: transparent; + color: #cad2d3; + cursor: default; } + +input, +textarea, +.uneditable-input { + width: 192px; } + +.checkbox, +.radio { + margin-bottom: 12px; + padding-left: 32px; + position: relative; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + .checkbox:hover, + .radio:hover { + color: #1abc9c; } + .checkbox input, + .radio input { + outline: none !important; + opacity: 0; + filter: alpha(opacity=0); + zoom: 1; } + .checkbox.checked .icon, + .radio.checked .icon { + background-position: -60px -30px; + opacity: 1; + display: block\9; } + .checkbox.checked .icon-to-fade, + .radio.checked .icon-to-fade { + opacity: 0; + display: none\9; } + .checkbox.disabled, + .radio.disabled { + color: #d7dddd; + cursor: default; } + .checkbox.disabled .icon, + .radio.disabled .icon { + opacity: 0; + display: none\9; } + .checkbox.disabled .icon-to-fade, + .radio.disabled .icon-to-fade { + background-position: -30px -60px; + opacity: 1; + display: block\9; } + .checkbox.disabled.checked .icon, + .radio.disabled.checked .icon { + background-position: 0 -90px; + opacity: 1; + display: block\9; } + .checkbox.disabled.checked .icon-to-fade, + .radio.disabled.checked .icon-to-fade { + opacity: 0; + display: none\9; } + .checkbox .icon, + .checkbox .icon-to-fade, + .radio .icon, + .radio .icon-to-fade { + background: url("../images/checkbox.png") -90px 0 no-repeat; + display: block; + height: 20px; + left: 0; + opacity: 1; + position: absolute; + top: -1px; + width: 20px; + -webkit-transition: opacity 0.1s linear; + -moz-transition: opacity 0.1s linear; + -o-transition: opacity 0.1s linear; + transition: opacity 0.1s linear; + -webkit-backface-visibility: hidden; } + .checkbox .icon, + .radio .icon { + opacity: 0; + top: 0; + z-index: 2; + display: none\9; } + +.radio .icon, +.radio .icon-to-fade { + background-image: url("../images/radio.png"); } + +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3 / 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) { + .checkbox .icon { + background-image: url("../images/checkbox-2x.png"); + background-size: 110px 110px; } + + .radio .icon { + background-image: url("../images/radio-2x.png"); + background-size: 110px 110px; } } +.toggle { + background-color: #34495e; + border-radius: 60px; + color: white; + height: 29px; + margin: 0 12px 12px 0; + overflow: hidden; + *zoom: 1; + display: inline-block; + zoom: 1; + *display: inline; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + .toggle:before, .toggle:after { + display: table; + content: ""; } + .toggle:after { + clear: both; } + .toggle.toggle-off { + background-color: #cbd2d8; } + .toggle.toggle-off .toggle-radio { + background-image: url("../images/toggle/icon-off.png"); + background-position: 0 0; + color: white; + left: 0; + margin-left: 0.5px; + margin-right: -13px; + z-index: 1; } + .toggle.toggle-off .toggle-radio:first-child { + left: -120%; } + .toggle .toggle-radio { + background: url("../images/toggle/icon-on.png") right top no-repeat; + color: #1abc9c; + display: block; + font-weight: 700; + height: 21px; + left: 120%; + margin-left: -13px; + padding: 5px 32px 3px; + position: relative; + text-align: center; + z-index: 2; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + .toggle .toggle-radio:first-child { + margin-bottom: -29px; + left: 0; } + .toggle input { + display: none; + position: absolute; + outline: none !important; + display: block\9; + opacity: 0.01; + filter: alpha(opacity=1); + zoom: 1; } + .toggle.toggle-icon { + border-radius: 6px 7px 7px 6px; } + .toggle.toggle-icon.toggle-off { + border-radius: 7px 6px 6px 7px; } + .toggle.toggle-icon.toggle-off .toggle-radio { + background-image: url("../images/toggle/block-off.png"); + background-position: 0 0; } + .toggle.toggle-icon .toggle-radio { + background-image: url("../images/toggle/block-on.png"); + background-position: 62px 0; + border-radius: 6px; + min-width: 27px; + text-align: right; } + .toggle.toggle-icon .toggle-radio:first-child { + text-align: left; } + +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3 / 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) { + .toggle.toggle-off .toggle-radio { + background-image: url("../images/toggle/icon-off-2x.png"); + background-size: 30px 29px; } + .toggle .toggle-radio { + background-image: url("../images/toggle/icon-on-2x.png"); + background-size: 30px 29px; } } +.tagsinput { + background: white; + border: 2px solid #1abc9c; + border-radius: 6px; + height: 100px; + padding: 6px 1px 1px 6px; + overflow-y: auto; + text-align: left; } + .tagsinput .tag { + border-radius: 4px; + background: #1abc9c; + color: white; + cursor: pointer; + margin-right: 5px; + margin-bottom: 5px; + overflow: hidden; + padding: 6px 13px 6px 19px; + position: relative; + vertical-align: middle; + display: inline-block; + zoom: 1; + *display: inline; + -webkit-transition: 0.14s linear; + -moz-transition: 0.14s linear; + -o-transition: 0.14s linear; + transition: 0.14s linear; + -webkit-backface-visibility: hidden; } + .tagsinput .tag:hover { + background-color: #16a085; + padding-left: 12px; + padding-right: 20px; } + .tagsinput .tag:hover .tagsinput-remove-link { + color: white; + opacity: 1; + display: block\9; } + .tagsinput input { + background: transparent; + border: none; + color: #34495e; + font-family: "Lato", sans-serif; + font-size: 14px; + margin: 0px; + padding: 0 0 0 5px; + outline: 0; + margin-right: 5px; + margin-bottom: 5px; + width: 12px; } + +.tagsinput-remove-link { + bottom: 0; + color: white; + cursor: pointer; + font-size: 12px; + opacity: 0; + padding: 9px 7px 3px 0; + position: absolute; + right: 0; + text-align: right; + text-decoration: none; + top: 0; + width: 100%; + z-index: 2; + display: none\9; } + .tagsinput-remove-link:before { + color: white; } + +.tagsinput-add-container { + vertical-align: middle; + display: inline-block; + zoom: 1; + *display: inline; } + +.tagsinput-add { + background-color: #bbc3cb; + border-radius: 3px; + color: white; + cursor: pointer; + margin-bottom: 5px; + padding: 6px 9px; + display: inline-block; + zoom: 1; + *display: inline; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + .tagsinput-add:hover { + background-color: #1abc9c; } + +.tags_clear { + clear: both; + width: 100%; + height: 0px; } + +.not_valid { + background: #fbd8db !important; + color: #90111a !important; } + +.progress, .ui-slider { + background: #e8edf2; + border-radius: 32px; + height: 12px; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } + .progress .bar, .ui-slider .bar { + background: #1abc9c; + -webkit-box-shadow: none !important; + -moz-box-shadow: none !important; + box-shadow: none !important; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } + .progress .bar-success, .ui-slider .bar-success { + background-color: #2ecc71; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } + .progress .bar-warning, .ui-slider .bar-warning { + background-color: #f1c40f; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } + .progress .bar-danger, .ui-slider .bar-danger { + background-color: #e74c3c; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } + .progress .bar-info, .ui-slider .bar-info { + background-color: #3498db; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } + +.ui-slider { + margin-bottom: 20px; + position: relative; } + +.ui-slider-handle { + background-color: #16a085; + border-radius: 50%; + cursor: pointer; + height: 18px; + margin-left: -9px; + position: absolute; + top: -3px; + width: 18px; + z-index: 2; + -webkit-transition: background 0.25s; + -moz-transition: background 0.25s; + -o-transition: background 0.25s; + transition: background 0.25s; + -webkit-backface-visibility: hidden; } + .ui-slider-handle[style*='100'] { + margin-left: -15px; } + .ui-slider-handle:hover, .ui-slider-handle:focus { + background-color: #2fe2bf; + outline: none; } + .ui-slider-handle:active { + background-color: #16a085; } + +.ui-slider-range { + background-color: #1abc9c; + border-radius: 30px 0 0 30px; + display: block; + height: 100%; + position: absolute; + z-index: 1; } + +.ui-slider-segment { + background-color: #d6dbe0; + border-radius: 50%; + float: left; + height: 6px; + margin: 3px -6px 0 25%; + width: 6px; } + +.pager { + background-color: #34495e; + border-radius: 6px; + color: white; + font-size: 16px; + font-weight: 700; + display: inline-block; + zoom: 1; + *display: inline; } + .pager li:first-child > a, .pager li:first-child > span { + border-left: none; + padding-left: 20px; + -webkit-border-radius: 6px 0 0 6px; + -moz-border-radius: 6px 0 0 6px; + border-radius: 6px 0 0 6px; } + .pager li:first-child > a img, .pager li:first-child > span img { + margin-left: 0; + margin-right: 13px; + margin-left: 0 \9; + margin-right: 9px \9; } + .pager li.pager-center { + padding: 9px 18px 10px; + padding-left: 0; + padding-right: 0; + display: inline-block; + zoom: 1; + *display: inline; } + .pager li.previous img, .pager li.next img { + height: 14px; + margin: -1px 0 0 13px; + margin-left: 9px \9; + vertical-align: middle; } + .pager li > a, .pager li > span { + background: none; + border: none; + border-left: 2px solid #2c3e50; + color: white; + padding: 9px 18px 10px; + padding-left: 7px; + text-decoration: none; + white-space: nowrap; + -webkit-border-radius: 0 6px 6px 0; + -moz-border-radius: 0 6px 6px 0; + border-radius: 0 6px 6px 0; } + .pager li > a:hover, .pager li > a:focus, .pager li > span:hover, .pager li > span:focus { + background-color: #4e6d8d; } + .pager li > a:active, .pager li > span:active { + background-color: #2c3e50; } + +.pagination ul { + background: #d7dce0; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .pagination ul > li:first-child { + -webkit-border-radius: 6px 0 0 6px; + -moz-border-radius: 6px 0 0 6px; + border-radius: 6px 0 0 6px; } + .pagination ul > li:last-child { + -webkit-border-radius: 0 6px 6px 0; + -moz-border-radius: 0 6px 6px 0; + border-radius: 0 6px 6px 0; } + .pagination ul > li.previous > a, .pagination ul > li.previous > span, .pagination ul > li.next > a, .pagination ul > li.next > span { + background: transparent; + border: none; + border-right: 2px solid white !important; + margin: 0 9px 0 0; + padding: 11px 17px 12px 17px; + -webkit-border-radius: 6px 0 0 6px; + -moz-border-radius: 6px 0 0 6px; + border-radius: 6px 0 0 6px; + -webkit-box-shadow: none !important; + -moz-box-shadow: none !important; + box-shadow: none !important; } + .pagination ul > li.next > a, .pagination ul > li.next > span { + border-left: 2px solid white !important; + margin-left: 9px; + margin-right: 0; + -webkit-border-radius: 0 6px 6px 0; + -moz-border-radius: 0 6px 6px 0; + border-radius: 0 6px 6px 0; } + .pagination ul > li.active > a, .pagination ul > li.active > span { + background-color: white; + border-color: white; + border-width: 2px; + color: #d7dce0; + margin: 10px 5px 9px; } + .pagination ul > li.active > a:hover, .pagination ul > li.active > a:focus, .pagination ul > li.active > span:hover, .pagination ul > li.active > span:focus { + background-color: white; + border-color: white; + color: #d7dce0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + .pagination ul > li > a, .pagination ul > li > span { + background: white; + border: 5px solid #d7dce0; + border-radius: 50px; + color: white; + line-height: 16px; + margin: 7px 2px 6px; + padding: 0 4px; + -webkit-transition: background 0.2s ease-out, border-color 0s ease-out, color 0.2s ease-out; + -moz-transition: background 0.2s ease-out, border-color 0s ease-out, color 0.2s ease-out; + -o-transition: background 0.2s ease-out, border-color 0s ease-out, color 0.2s ease-out; + transition: background 0.2s ease-out, border-color 0s ease-out, color 0.2s ease-out; + -webkit-backface-visibility: hidden; } + .pagination ul > li > a:hover, .pagination ul > li > a :focus, .pagination ul > li > span:hover, .pagination ul > li > span :focus { + background-color: #1abc9c; + border-color: #1abc9c; + color: white; + -webkit-transition: background 0.2s ease-out, border-color 0.2s ease-out, color 0.2s ease-out; + -moz-transition: background 0.2s ease-out, border-color 0.2s ease-out, color 0.2s ease-out; + -o-transition: background 0.2s ease-out, border-color 0.2s ease-out, color 0.2s ease-out; + transition: background 0.2s ease-out, border-color 0.2s ease-out, color 0.2s ease-out; + -webkit-backface-visibility: hidden; } + .pagination ul > li > a:active, .pagination ul > li > span:active { + background-color: #16a085; + border-color: #16a085; } + .pagination ul img { + height: 14px; + margin-top: -1px; + vertical-align: middle; + width: 13px; } + +.share { + background-color: #ecf0f5; + border-radius: 6px; + position: relative; } + .share:before { + content: ""; + border-style: solid; + border-width: 0 9px 9px 9px; + border-color: transparent transparent #ecf0f5 transparent; + height: 0px; + position: absolute; + left: 23px; + top: -9px; + width: 0px; + -webkit-transform: rotate(360deg); } + .share ul { + list-style-type: none; + margin: 0; + padding: 15px; } + .share li { + padding-top: 11px; + *zoom: 1; } + .share li:before, .share li:after { + display: table; + content: ""; } + .share li:after { + clear: both; } + .share li:first-child { + padding-top: 0; } + .share .toggle { + float: right; + margin: 0; } + .share .btn { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; } + +.share-label { + float: left; + font-size: 15px; + padding-top: 5px; + width: 50%; } + +.tooltip { + font-size: 13px; } + .tooltip.in { + opacity: 1; + filter: alpha(opacity=100); + zoom: 1; } + .tooltip.top { + padding-bottom: 9px; } + .tooltip.top .tooltip-arrow { + border-top-color: #34495e; + border-width: 9px 9px 0; + bottom: 0; + margin-left: -9px; } + .tooltip.right .tooltip-arrow { + border-right-color: #34495e; + border-width: 9px 9px 9px 0; + margin-top: -9px; + left: -3px; } + .tooltip.bottom { + padding-top: 8px; } + .tooltip.bottom .tooltip-arrow { + border-bottom-color: #34495e; + border-width: 0 9px 9px; + margin-left: -9px; + top: -1px; } + .tooltip.left .tooltip-arrow { + border-right-color: #34495e; + border-width: 9px 9px 9px 0; + margin-top: -3px; + top: -3px; } + +.tooltip-inner { + background-color: #34495e; + line-height: 18px; + padding: 12px 12px; + text-align: center; + width: 183px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; } + +.palette { + color: white; + margin: 0; + padding: 15px; + text-transform: uppercase; } + .palette dt { + display: block; + font-weight: 500; + opacity: 0.8; } + .palette dd { + font-weight: 200; + margin-left: 0; + opacity: 0.8; } + +.palette-firm { + background-color: #1abc9c; } + +.palette-firm-dark { + background-color: #16a085; } + +.palette-success { + background-color: #2ecc71; } + +.palette-success-dark { + background-color: #27ad60; } + +.palette-info { + background-color: #3498db; } + +.palette-info-dark { + background-color: #2383c4; } + +.palette-warning { + background-color: #f1c40f; } + +.palette-warning-dark { + background-color: #cea70c; } + +.palette-danger { + background-color: #e74c3c; } + +.palette-danger-dark { + background-color: #dc2d1b; } + +.palette-night { + background-color: #34495e; } + +.palette-night-dark { + background-color: #2c3e50; } + +.palette-bright { + background-color: #f1c40f; } + +.palette-bright-dark { + background-color: #cea70c; } + +.palette-success-dark { + background-color: #27ae60; } + +.palette-info-dark { + background-color: #2980b9; } + +.palette-bright-dark { + background-color: #f39c12; } + +.palette-amethyst { + background-color: #9b59b6; } + +.palette-wisteria { + background-color: #8e44ad; } + +.palette-carrot { + background-color: #e67e22; } + +.palette-pumpkin { + background-color: #d35400; } + +.palette-alizarin { + background-color: #e74c3c; } + +.palette-pomegranate { + background-color: #c0392b; } + +.palette-clouds { + background-color: #ecf0f1; + color: #bdc3c7; } + +.palette-silver { + background-color: #bdc3c7; } + +.palette-concrete { + background-color: #95a5a6; } + +.palette-asbestos { + background-color: #7f8c8d; } + +.palette-paragraph { + color: #7f8c8d; + font-size: 12px; + line-height: 17px; } + .palette-paragraph span { + color: #bdc3c7; } + +.palette-headline { + color: #7f8c8d; + font-weight: 700; + margin-top: -5px; } + +.tile { + background-color: #ecf0f5; + border-radius: 6px; + padding: 14px; + position: relative; + text-align: center; } + .tile.tile-hot:before { + background: url("../images/tile/ribbon.png") 0 0 no-repeat; + background-size: 82px 82px; + content: ""; + height: 82px; + position: absolute; + right: -4px; + top: -4px; + width: 82px; } + .tile p { + font-size: 15px; + margin-bottom: 33px; } + +.tile-image { + height: 100px; + margin: 31px 0 27px; + vertical-align: bottom; } + .tile-image.big-illustration { + height: 111px; + margin-top: 20px; + width: 112px; } + +.tile-title { + font-size: 20px; + margin: 0; } + +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3 / 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) { + .tile.tile-hot:before { + background-image: url("../images/tile/ribbon-2x.png"); } } +.todo { + background-color: #2c3e50; + border-radius: 8px 8px 6px 6px; + color: #6285a8; + margin-bottom: 20px; } + .todo ul { + margin: 0; + list-style-type: none; } + .todo li { + background: #34495e url("../images/todo/todo.png") 92% center no-repeat; + background-size: 20px 20px; + cursor: pointer; + margin-top: 2px; + padding: 18px 42px 17px 25px; + position: relative; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + .todo li:first-child { + margin-top: 0; } + .todo li:last-child { + border-radius: 0 0 6px 6px; + padding-bottom: 18px; } + .todo li.todo-done { + background: transparent url("../images/todo/done.png") 92% center no-repeat; + background-size: 20px 20px; + color: #1abc9c; } + .todo li.todo-done .todo-name { + color: #1abc9c; } + +.todo-search { + background: #1abc9c url("../images/todo/search.png") 92% center no-repeat; + background-size: 16px 16px; + border-radius: 6px 6px 0 0; + color: #34495e; + padding: 19px 25px 20px; } + +input.todo-search-field { + background: none; + border: none; + color: #34495e; + font-size: 19px; + font-weight: 700; + margin: 0; + line-height: 23px; + padding: 5px 0; + text-indent: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + input.todo-search-field:-moz-placeholder { + color: #34495e; } + input.todo-search-field::-webkit-input-placeholder { + color: #34495e; } + input.todo-search-field.placeholder { + color: #34495e; } + +.todo-icon { + float: left; + font-size: 24px; + padding: 11px 22px 0 0; } + +.todo-content { + padding-top: 1px; + overflow: hidden; } + +.todo-name { + color: white; + font-size: 17px; + margin: 1px 0 3px; } + +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3 / 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) { + .todo li { + background-image: "../images/todo/todo-2x.png"; } + .todo li.todo-done { + background-image: "../images/todo/done-2x.png"; } + + .todo-search { + background-image: "../images/todo/search-2x.png"; } } +footer { + background-color: #eceff1; + color: #bdc1c5; + font-size: 15px; + padding: 0; } + footer a { + color: #a1a4a7; + font-weight: 700; } + footer p { + font-size: 15px; + line-height: 20px; } + +.footer-title { + margin: 0 0 22px; + padding-top: 21px; } + +.footer-brand { + display: block; + margin-bottom: 26px; + width: 220px; } + .footer-brand img { + width: 216px; } + +.footer-banner { + background-color: #1abc9c; + color: #cff3ec; + margin-left: 42px; + min-height: 286px; + padding: 0 30px 30px; } + .footer-banner .footer-title { + color: white; } + .footer-banner a { + color: #cff3ec; + text-decoration: underline; } + .footer-banner a:hover { + text-decoration: none; } + .footer-banner ul { + list-style-type: none; + margin: 0 0 26px; } + .footer-banner ul li { + border-top: 1px solid #1bc6a5; + line-height: 19px; + padding: 6px 0; } + .footer-banner ul li:first-child { + border-top: none; + padding-top: 1px; } + +.video-js { + background-color: #34495e; + border-radius: 6px 6px 0 0; + margin-top: -95px; + position: relative; + padding: 0; + font-size: 10px; + vertical-align: middle; } + .video-js .vjs-tech { + border-radius: 6px 6px 0 0; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + .video-js:-moz-full-screen { + position: absolute; } + +body.vjs-full-window { + padding: 0; + margin: 0; + height: 100%; + overflow-y: auto; } + +.video-js.vjs-fullscreen { + position: fixed; + overflow: hidden; + z-index: 1000; + left: 0; + top: 0; + bottom: 0; + right: 0; + width: 100% !important; + height: 100% !important; + _position: absolute; } +.video-js:-webkit-full-screen { + width: 100% !important; + height: 100% !important; } + +.vjs-poster { + margin: 0 auto; + padding: 0; + cursor: pointer; + position: relative; + width: 100%; + max-height: 100%; } + +.video-js .vjs-text-track-display { + text-align: center; + position: absolute; + bottom: 4em; + left: 1em; + right: 1em; + font-family: "Lato", sans-serif; } +.video-js .vjs-text-track { + display: none; + color: white; + font-size: 1.4em; + text-align: center; + margin-bottom: 0.1em; + background: black; + background: rgba(0, 0, 0, 0.5); } +.video-js .vjs-subtitles { + color: white; } +.video-js .vjs-captions { + color: #ffcc66; } + +.vjs-tt-cue { + display: block; } + +.vjs-fade-in { + visibility: visible !important; + opacity: 1 !important; + -webkit-transition: visibility 0s linear 0s, opacity 0.3s linear; + -moz-transition: visibility 0s linear 0s, opacity 0.3s linear; + -o-transition: visibility 0s linear 0s, opacity 0.3s linear; + transition: visibility 0s linear 0s, opacity 0.3s linear; + -webkit-backface-visibility: hidden; } + +.vjs-fade-out { + visibility: hidden !important; + opacity: 0 !important; + -webkit-transition: visibility 0s linear 1.5s, opacity 1.5s linear; + -moz-transition: visibility 0s linear 1.5s, opacity 1.5s linear; + -o-transition: visibility 0s linear 1.5s, opacity 1.5s linear; + transition: visibility 0s linear 1.5s, opacity 1.5s linear; + -webkit-backface-visibility: hidden; } + +.vjs-controls { + border-radius: 0 0 6px 6px; + position: absolute; + bottom: -47px; + left: 0; + right: 0; + margin: 0; + padding: 0; + height: 47px; + color: white; + background: #2c3e50; } + .vjs-controls.vjs-fade-out { + visibility: visible !important; + opacity: 1 !important; } + +.vjs-control { + background-position: center center; + background-repeat: no-repeat; + position: relative; + float: left; + text-align: center; + margin: 0; + padding: 0; + height: 18px; + width: 18px; } + .vjs-control:focus { + outline: 0; } + .vjs-control div { + background-position: center center; + background-repeat: no-repeat; } + +.vjs-control-text { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.vjs-play-control { + cursor: pointer !important; + height: 47px; + left: 0; + position: absolute; + top: 0; + width: 58px; } + +.vjs-paused .vjs-play-control { + background: url("../images/video/play.png") center -31px no-repeat; + background-size: 16px 64px; } + .vjs-paused .vjs-play-control:hover div { + opacity: 0; } + .vjs-paused .vjs-play-control div { + background: url("../images/video/play.png") center 15px no-repeat; + background-size: 16px 64px; + height: 47px; + -webkit-transition: opacity 0.25s; + -moz-transition: opacity 0.25s; + -o-transition: opacity 0.25s; + transition: opacity 0.25s; + -webkit-backface-visibility: hidden; } + +.vjs-playing .vjs-play-control { + background: url("../images/video/pause.png") center -31px no-repeat; + background-size: 15px 64px; } + .vjs-playing .vjs-play-control:hover div { + opacity: 0; } + .vjs-playing .vjs-play-control div { + background: url("../images/video/pause.png") center 15px no-repeat; + background-size: 15px 64px; + height: 47px; + -webkit-transition: opacity 0.25s; + -moz-transition: opacity 0.25s; + -o-transition: opacity 0.25s; + transition: opacity 0.25s; + -webkit-backface-visibility: hidden; } + +.vjs-rewind-control { + width: 5em; + cursor: pointer !important; } + .vjs-rewind-control div { + width: 19px; + height: 16px; + background: url("video-js.png"); + margin: 0.5em auto 0; } + +.vjs-mute-control { + background: url("../images/video/volume-full.png") center -48px no-repeat; + background-size: 16px 64px; + cursor: pointer !important; + position: absolute; + right: 51px; + top: 14px; } + .vjs-mute-control:hover div, .vjs-mute-control:focus div { + opacity: 0; } + .vjs-mute-control.vjs-vol-0, + .vjs-mute-control.vjs-vol-0 div { + background-image: url("../images/video/volume-off.png"); } + .vjs-mute-control div { + background: #2c3e50 url("../images/video/volume-full.png") no-repeat center 2px; + background-size: 16px 64px; + height: 18px; + -webkit-transition: opacity 0.25s; + -moz-transition: opacity 0.25s; + -o-transition: opacity 0.25s; + transition: opacity 0.25s; + -webkit-backface-visibility: hidden; } + +.vjs-volume-control, +.vjs-volume-level, +.vjs-volume-handle, +.vjs-volume-bar { + display: none; } + +.vjs-progress-control { + border-radius: 32px; + position: absolute; + left: 60px; + right: 180px; + height: 12px; + width: auto; + top: 18px; + background: #eff2f6; } + +.vjs-progress-holder { + position: relative; + cursor: pointer !important; + padding: 0; + margin: 0; + height: 12px; } + +.vjs-play-progress, .vjs-load-progress { + border-radius: 32px; + position: absolute; + display: block; + height: 12px; + margin: 0; + padding: 0; + left: 0; + top: 0; } + +.vjs-play-progress { + background: #1abc9c; + left: -1px; } + +.vjs-load-progress { + background: #d6dbe0; + border-radius: 32px 0 0 32px; } + .vjs-load-progress[style*='100%'], .vjs-load-progress[style*='99%'] { + border-radius: 32px; } + +.vjs-seek-handle { + background-color: #16a085; + border-radius: 50%; + position: absolute; + width: 18px; + height: 18px; + margin: -3px 0 0 1px; + left: 0; + top: 0; + -webkit-transition: background-color 0.25s; + -moz-transition: background-color 0.25s; + -o-transition: background-color 0.25s; + transition: background-color 0.25s; + -webkit-backface-visibility: hidden; } + .vjs-seek-handle[style*='95.'] { + margin-left: 3px; } + .vjs-seek-handle[style='left: 0%;'] { + margin-left: -2px; } + .vjs-seek-handle:hover, .vjs-seek-handle:focus { + background-color: #138d75; } + .vjs-seek-handle:active { + background-color: #117e69; } + +.vjs-time-controls { + position: absolute; + height: 20px; + width: 50px; + top: 16px; + font: 300 13px "Lato", sans-serif; } + +.vjs-current-time { + right: 128px; + text-align: right; } + +.vjs-duration { + color: #667687; + right: 69px; + text-align: left; } + +.vjs-remaining-time { + display: none; } + +.vjs-time-divider { + color: #667687; + font-size: 14px; + position: absolute; + right: 121px; + top: 15px; } + +.vjs-secondary-controls { + float: right; } + +.vjs-fullscreen-control { + background-image: url("../images/video/fullscreen.png"); + background-position: center -47px; + background-size: 15px 64px; + cursor: pointer !important; + position: absolute; + right: 17px; + top: 13px; } + .vjs-fullscreen-control:hover div, .vjs-fullscreen-control:focus div { + opacity: 0; } + .vjs-fullscreen-control div { + height: 18px; + background: url("../images/video/fullscreen.png") no-repeat center 2px; + background-size: 15px 64px; + -webkit-transition: opacity 0.25s; + -moz-transition: opacity 0.25s; + -o-transition: opacity 0.25s; + transition: opacity 0.25s; + -webkit-backface-visibility: hidden; } + +.vjs-menu-button { + display: none !important; } + +@-webkit-keyframes sharp { + 0% { + background: #e74c3c; + border-radius: 10px; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); } + + 50% { + background: #ebedee; + border-radius: 0; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); } + + 100% { + background: #e74c3c; + border-radius: 10px; + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-moz-keyframes sharp { + 0% { + background: #e74c3c; + border-radius: 10px; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); } + + 50% { + background: #ebedee; + border-radius: 0; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); } + + 100% { + background: #e74c3c; + border-radius: 10px; + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-o-keyframes sharp { + 0% { + background: #e74c3c; + border-radius: 10px; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); } + + 50% { + background: #ebedee; + border-radius: 0; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); } + + 100% { + background: #e74c3c; + border-radius: 10px; + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes sharp { + 0% { + background: #e74c3c; + border-radius: 10px; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); } + + 50% { + background: #ebedee; + border-radius: 0; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); } + + 100% { + background: #e74c3c; + border-radius: 10px; + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); } } + +.vjs-loading-spinner { + background: #ebedee; + border-radius: 10px; + display: none; + height: 16px; + left: 50%; + margin: -8px 0 0 -8px; + position: absolute; + top: 50%; + width: 16px; + -webkit-animation: sharp 2s ease infinite; + -moz-animation: sharp 2s ease infinite; + -o-animation: sharp 2s ease infinite; + animation: sharp 2s ease infinite; } + +.login { + background: url("../images/login/imac.png") 0 0 no-repeat; + background-size: 940px 778px; + color: white; + margin-bottom: 77px; + padding: 38px 38px 267px; + position: relative; } + +.login-screen { + background-color: #1abc9c; + min-height: 317px; + padding: 123px 199px 33px 306px; } + +.login-icon { + left: 200px; + position: absolute; + top: 160px; + width: 96px; } + .login-icon > img { + display: block; + margin-bottom: 6px; + width: 100%; } + .login-icon > h4 { + font-size: 17px; + font-weight: 200; + line-height: 34px; + opacity: 0.95; } + .login-icon > h4 small { + color: inherit; + display: block; + font-size: inherit; + font-weight: 700; } + +.login-form { + background-color: #eceff1; + border-radius: 6px; + padding: 24px 23px 20px; + position: relative; } + .login-form:before { + content: ""; + border-style: solid; + border-width: 12px 12px 12px 0; + border-color: transparent #eceff1 transparent transparent; + height: 0px; + position: absolute; + left: -12px; + top: 35px; + width: 0; + -webkit-transform: rotate(360deg); } + .login-form .control-group { + margin-bottom: 6px; + position: relative; } + .login-form .login-field { + border-color: transparent; + font-size: 17px; + padding-bottom: 11px; + padding-top: 11px; + text-indent: 3px; + width: 299px; } + .login-form .login-field:focus + .login-field-icon { + color: #1abc9c; } + .login-form .login-field-icon { + color: #bfc9ca; + font-size: 16px; + position: absolute; + right: 13px; + top: 14px; + -webkit-transition: 0.25s; + -moz-transition: 0.25s; + -o-transition: 0.25s; + transition: 0.25s; + -webkit-backface-visibility: hidden; } + +.login-link { + color: #bfc9ca; + display: block; + font-size: 13px; + margin-top: 15px; + text-align: center; } + +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3 / 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) { + .login { + background-image: url("../images/login/imac-2x.png"); } } +.ptn, .pvn, .pan { + padding-top: 0; } + +.ptx, .pvx, .pax { + padding-top: 3px; } + +.pts, .pvs, .pas { + padding-top: 5px; } + +.ptm, .pvm, .pam { + padding-top: 10px; } + +.ptl, .pvl, .pal { + padding-top: 20px; } + +.prn, .phn, .pan { + padding-right: 0; } + +.prx, .phx, .pax { + padding-right: 3px; } + +.prs, .phs, .pas { + padding-right: 5px; } + +.prm, .phm, .pam { + padding-right: 10px; } + +.prl, .phl, .pal { + padding-right: 20px; } + +.pbn, .pvn, .pan { + padding-bottom: 0; } + +.pbx, .pvx, .pax { + padding-bottom: 3px; } + +.pbs, .pvs, .pas { + padding-bottom: 5px; } + +.pbm, .pvm, .pam { + padding-bottom: 10px; } + +.pbl, .pvl, .pal { + padding-bottom: 20px; } + +.pln, .phn, .pan { + padding-left: 0; } + +.plx, .phx, .pax { + padding-left: 3px; } + +.pls, .phs, .pas { + padding-left: 5px; } + +.plm, .phm, .pam { + padding-left: 10px; } + +.pll, .phl, .pal { + padding-left: 20px; } + +.mtn, .mvn, .man { + margin-top: 0px; } + +.mtx, .mvx, .max { + margin-top: 3px; } + +.mts, .mvs, .mas { + margin-top: 5px; } + +.mtm, .mvm, .mam { + margin-top: 10px; } + +.mtl, .mvl, .mal { + margin-top: 20px; } + +.mrn, .mhn, .man { + margin-right: 0px; } + +.mrx, .mhx, .max { + margin-right: 3px; } + +.mrs, .mhs, .mas { + margin-right: 5px; } + +.mrm, .mhm, .mam { + margin-right: 10px; } + +.mrl, .mhl, .mal { + margin-right: 20px; } + +.mbn, .mvn, .man { + margin-bottom: 0px; } + +.mbx, .mvx, .max { + margin-bottom: 3px; } + +.mbs, .mvs, .mas { + margin-bottom: 5px; } + +.mbm, .mvm, .mam { + margin-bottom: 10px; } + +.mbl, .mvl, .mal { + margin-bottom: 20px; } + +.mln, .mhn, .man { + margin-left: 0px; } + +.mlx, .mhx, .max { + margin-left: 3px; } + +.mls, .mhs, .mas { + margin-left: 5px; } + +.mlm, .mhm, .mam { + margin-left: 10px; } + +.mll, .mhl, .mal { + margin-left: 20px; } + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: none; + background-color: #F1C40F; + border: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: white; +} + +.alert-danger, +.alert-error, +.alert-success, +.alert-info { + color: white; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + background-color: #2ecc71; +} + +.alert-success h4, +.alert-danger h4, +.alert-error h4, +.alert-info h4 { + color: white; + font-weight: bold; +} + +.alert-danger, +.alert-error { + background-color: #e74c3c; +} + +.alert-info { + background-color: #3498db; +} \ No newline at end of file diff --git a/webtagger/static/components/flatui/fonts/Flat-UI-Icons-16.dev.svg b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-16.dev.svg new file mode 100644 index 0000000..b95d59f --- /dev/null +++ b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-16.dev.svg @@ -0,0 +1,112 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/webtagger/static/components/flatui/fonts/Flat-UI-Icons-16.eot b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-16.eot new file mode 100644 index 0000000000000000000000000000000000000000..31632eb37ce5ac6820c45549dd6073ed45d41cb2 GIT binary patch literal 4640 zcmds5Yit}>6+UO4yE`-coPF54-puZLXWgdz-ko(Gwzr$aA#vKcZQ`cXP3xw4xv`x# z28AlXA_b`+(WZYQ9#TpB3yKgRBtRla2GL)Xms$iWk+Q8o;s>ZLs3oFw&ABtzKKkTA>7aW2mScFr=SHYsHv5zR3fy3}P)je*vF{nieD%9q`>6fZ8n>DhJ zhv~`5eRmxB)=&Qg5NeP%wR8K9N!S4r$vW$B?>*&O`Nx+GYIK0)nL`V6Cwp7|@iKXV z=8AV8ojY}Mb(MO8kV@sAqbELf#F%>W%K$umzB9)T&pq<)mmd5rm0hCGIz|d1w0ecw zvi^sUEi9kD^#%A1$=@aUp%Y7o=8V6mKSS*wA-T3Nclsne1ZSyylw@OZZsG7}zyIDj z06(?IcTX;zS`NRupT-Z8J@7AkZZy9a-`M~3gMqDYgW{~&FI#~xQaLcXy1IIqLwt=y zkGrJQ75%@qdKpR_tgiNfL%S!|WGy9ZO#(j0yhDj~?9^&AkrHx%=RgDx?!hA@?{w+g zFu-Q8jvH2)nY)&zkL-8^+C6v^u(#TS64{pN+BUHo&J2io!Qq*F&1c+zXS%&N(6e@A z<$8N!Sz>r*U&@{J9+DVJQXtsC@~nBP7kQKXLnXkhWt_nW<8CXa1|;vWrYv0@$`PG> zt?*ji|1Uocr{Nnok6*>Va3$_6cai%mpWrw1pX7faWQ7C5lfp|Ph!t_1T)AVyN$+U z8!(3Rube;s%K2~0iaMjB*C(?-R7Mr-k^1~AKbKWyw-R_t_Il;zpt_9(BXT9sPG|j} zhAx?3Lc3p!a%YS(sd8pcW^UH$W8+dzb$Lg_o8Yj>qnW^is zdaGuU?5HSr2ARNdY+B7i!z@TyvtiX@I{re^I8F9Ny}r1rr8K`0;6zkpQ3=Wlii%|T zwUnwReBP)}rkYYtQVKpDPE#@HwtTs1n$0|tr>^h&YK5y^ z`{J6)x}_0?b(7F%x6?d9ffodxnYG?DD1PW%4&~XvYz+_$dyQ8hN0`Z7#Y}DuIL$Tm z)ER^rdM-pXLyKG>;ArdYh4;yB5yhu93@H#M6qRU5vtSllHCm-;9COW98sjb5)}=8Y z$~0SKL@tvxX%i7}W$cCGi6NsL_o>+b*~6+)3tYJrP7I`b8!G)TAYnJse?U(r^|#u1 zXegct8F3}2s{NlltORPtzkBJ#K=_isvZ>#_(0+^6!{_y6o6Vi=XT#pl0oVX#vMl3l zCcHQ`CPVy%!I5Im32Ro z#Gq=MC*@?f)M~L{GeIb4E0g1{;yA|1s^pb0x$VHVBoe2HBGcX78LY)jkEe6DB7Sr4 zrcHZC4OG0AAW6ckM~_5w&n)9DFT=I>{?hJ1T#=-}?$Z5U1y)C=M@Oe^TLFe_zl9-B zs3GI(1QYTaA;d4pwQ*cq!!b+?2;uG$4utWA@PK#d&URbXyN{CGpJDRe_Qdb*or#18 z2EtJ}zNMJoe9ts@g^5?>*rwYEm9}p#+rEj@I)O;oaDo~Q%7%22$vgh3<4V8Fz-b&j zdys${Ss=StjEL6LBJIw>gPpd`;zJ{&qa$tVp8DTQzW*Mb>M{({rN?z+fqbu1FyX3J zi(*B?%weWeE_ce)yN>RwdZXGvw0hUkU4N)iP-tR-<6bENYdw97WO%h_9Na*@})wb#Hom)S5D1y@DcU*MIE%?GT?eXX*e=lvDyK5lkw zY@i{)Wig`3&N&wgHYRi_&%nTry#=+a9!%Zo*GG|^h!lf5wqe5?RNX@NQzVl zZja%+?MwdS~#a`#-l|A(@iRI$x*Dc-}6 z%ktB*l%%j@pRLx9Bq^nG9d-f?a9mrKpQ73_!yiJPu=5;4HJVvk#4HWLXq52B&g~Ww zEb&*g1aAnMNcRh|B#Ou7V3C%pDvJ0uQT&@I&WqwLq9lupo&c>R)~Fi8_xgP(NvFp~ zwmO9p(pu0_OV zYuGJ%6va~vdOZCVgK}&OzHonqDoo9Po;G8-WBZi77vpcQfWrb38dhkasEmv#MJFE!S;jlzL?ZkS+t2QOg;uUbH;tNmw{oUP zXOVNH@9fFoaS>G7k7 zjT&wA&BptUBUQ6lE7mGiR{3VX0KC67y}ob!?4LRO_^IPdi$=9n`JcLF`2NV0pi=tr z13BdBawwuimnIK-(T57EsM%NLAcioE5!5k?G5HgV$9GgJ6_-|BT61aLr45%hU23_s z<*LxJ!_;BkPcDe{q(W9vJ)E# ZhwNQT_e + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/webtagger/static/components/flatui/fonts/Flat-UI-Icons-16.ttf b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-16.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b0e42c74b1959d41674215be4ac4e7e5c81aa856 GIT binary patch literal 4432 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 LhqZx&0eJrd08n@O literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.dev.svg b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.dev.svg new file mode 100644 index 0000000..920c4cd --- /dev/null +++ b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.dev.svg @@ -0,0 +1,111 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.eot b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.eot new file mode 100644 index 0000000000000000000000000000000000000000..01a697d36ecc0b451c58a89a8370cca93aaee3de GIT binary patch literal 4728 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 + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.ttf b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e0dfc2afa887990c62c008a3c75e37ef3a7af7b4 GIT binary patch literal 4520 zcmds5Yit}>6+UO4yF2@S%zACdp52XSiyd#)v#+#CHcpc`O-xH@Vmob85tHT}+aYmK zfudN57SvFvkg!yWs;WOKk?{NxK&lEsLP#i3{v=V=R?6lF2sNVWpGb(RyL@+coHz}k zf}e~v_dM>o=bn4cnRD)%n218OKr-zZ8{75p!SlcSE>Y}T;P!6ayk(5GkOulVXzMdO zS39d;f7c@7-JmD;&rF|azJB=?A}I>qmk&*!I?--J6UCmyyzkKQFCBd9`pYj7$rp(N zKRSG1`pFNU|NI%uy^FVY7z`!W{s-13L9aYKGyl}!Ir; z84?&of2v2XFTr-ZeNAE(w2wN|?i#+{zD7lf+U*ue>}nEAmYyz`(?#DD-oYbQcBDoH ziH9ZP7f2-^f0_@1-s-`dl%cPS1uE=Zdf>iW&yIszo}|$xeL&o7H>n8QvJ0+FLS)HA zI@iGkz3feS_@D=e07sY2_b#Q+Tg~ISP)#0rBOOb7g_fF6=UT3$1l4FC{& zAm!ItRuoB6BqgEUwcOBdEjRsoNR4`{-|rb1s14ZcySIK}71RgP!Mm;U)cROa#n!AS z@;$6uS{{*ZA8Nnd-7{cUZ1)Rm-{c#JcOH3^7kR`YkMd#=(H8jxU$5Y@7(_l@(3J^Q zyP#^CdO=es6#ast>lehJ+%<(tkaG23LJf!`qlzNt1-npp5T<_Se6^0?)peKG#{;o! zwGJclSwtr$w$}O0sA+bu7)k{K%&qq(0==ukSKf%G%${HOu4?_5Cr2~!)`Cdq8>76t z+e}6KOuuCWTQ??*@T%UcZ*-^3=o_I`t6S$5M{fu@hV&?MQB=DCa{UtOQa`Q6`Lj6< zXEe)Mr-swpg-@XQgO;WH5&x#h@q6H>1Nt^0v`r737ihp8&S4abK;xSjY&YE)RA`-u zLaxYSd)JsSFQ>G;?#ec*6WleA%eX!dx zZJ%%BPDB0Sjx}p`tg+be*Az`t_WF{EMAElc;5ENUZU3I)_DI^$w8-}29=}0th_Bf} z5^9d{*Dp}Tv#=9}m60CsmdK1S>rR97C^>HM61hHRN}M^taQOLnW@aIgJTnWTH4)D+ z&z-q6IhBZIGBJ~PO|0GdXqyDV^yp6bW2k+Nuc8B{MRik=3%7D{StiOI50&|R3;I#r zrkOg)vMLVtH6q)EY{>J!z{WA_gQ{Bn48{V{3px^;Wk z@2J{#b%4(XlbIF0-HD){UOPMhAH-w8iUY0p8jm*`kI$eA*cEXGc$%C1Tk##RnM7fQ z=`PHnbml+{SV1MNc+kPT1KLURJF5Dusy?G>B{iZxgZEiAtd6)$@JE(0`8mvp*^fyq zF(YbeX&G)1{1o$&AwSCRT|^rbu^C0w#rN(pbHSFM-I2&0%Ubjte> z%Slbd7{v@_O)yjGe6?(fv_e%&^7rnO28SDs#~PD(8^d={Q<*$+Yw&6Z3?k9;nZ?P; zr}G)$7yiwHTgxxHvTbrfXZ^*=8_<aCt`z#z>6`mFz2Egd`+C9J2^&UeS zm84$TCpUEcJG$0`^5gc~+OIUN*N`7XGmM=zbR5e|lRbo=nFfbERpb-f}M}x@ebf&p?xOJDRA9h~@Xm{!rKV zkB*NY9e-lXK^5h*hz^2d28`AfC6Z1V0Unanh!JRAgwXiW=bWvMvsL(PDHctU4KdD2 z)IvhE#1x(&ExK7K*L0ORULMQozjR9{_l@A2}4if>_=SlEo>@GrpW^*PaThSJUG^YBi_Cv-o7K=z9UQfR)pLb>~l{o nex;$10LOnbNSswvOGX}w-^+?i37(LkKdyiE&jK$0KgGWQ$0e8S literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.woff b/webtagger/static/components/flatui/fonts/Flat-UI-Icons-24.woff new file mode 100644 index 0000000000000000000000000000000000000000..6169337050675ce3f7ed81f13ff924edc8877a32 GIT binary patch literal 6076 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 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/checkbox.png b/webtagger/static/components/flatui/images/checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..0e405c1395c3207e7ebae3adccc2e1032cdfdc6f GIT binary patch literal 1792 zcmaJ?3s4hh5RRo*My11})WHHCAt0b66t1yM&(l+mJ~Xt5|rfeJG6P-~H(GL!;pd*M~5qrJJi{r`XV`*!!+y}2JE z!q-|XUcQ(>AXo^3`6Aq^Opp0z`1@9@>lAM6u)t_65|Lx+5)>i?$dCjG5GW;ykO-2< zGE(k9eguLU2^L3V(ZVoLiYUnvlMh*|RO4s@!Ovf-mPi#41|&d_x<* zp)xrr;s?#f!gm~E5{9Wk3MD-~ot#c5BWNOp>f_^M;-JwyaSu;Th6Grci2-he8qzLB$A?Jf~tr5`rO`Bt#AHB3Xc&P$Gp@ zrUUnBgir_yR2od8l0pJLhlq2KVOR$8yjgTMoy}$ivS?IlAT5AN3kdS2acO~cJ~xob zoWt@FX{r)ZVRKj+j^+BW=u9Tnixue2{UFvf3`#W~nGd0G8YBxs5hXBPGzfn@7uLsf znZe3Fkjrcx-XFzM@MI{a*1p&3xg&gjOw0Mf#W(Y#52^5ZNAbb#7)lAjzZX=%4-jh~ zz9<$dY}S2|GeWWrt6Zlm&0FGB8*zVkdFamH+wwgg)vBG|ZNGBH_##SQ)uXG^MP0FM zt%_?e_OI9J7{D>sD>I>AZqId(i*)LxbR%Y16ptQG3zry*CTr;!~y zNU4HvL?M^8YugSmHr~CrnYLxMxvI+r4$hg18+WM-#L% zjlUd^MkET(Zr3>dN*Q_KswuO3d3=dgiBDg-H4ft01D{*wve)1y>ZlsY7~ZFnm`^hvu+%_$GcN&Ke@4>DK@V;zj~B7Tvudf?4%Yf zLyiw*imU7R_XSpCVYima?C;cmb(#Shy(jIOe5_J~v&=UvcNkyUO~NA$zEa$7(|H(2 zmyc+71sg)PcBNQ1Cwsho<<~b}v#)L6!p4aK`H>n+eYT-Q=vz)#;_^AKcS#&x5L}V} zBqr?;{bG>ZD|Tg>+Hpptlx$opT=d7=?vjUUuXQeUc(yEYyf6UoNUx$ahn>}Ks{7N^ zxCTW{e{bNLqmy>Y(J~41ifYFxv-@8b*6ukATXR?#oe_1A12Dd1poj5 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/demo/browser-2x.png b/webtagger/static/components/flatui/images/demo/browser-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..15e5747090a02dbd9707d99c0af10cc7fa9f8840 GIT binary patch literal 2041 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 AO#lD@ literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/demo/browser-pic-5.jpg b/webtagger/static/components/flatui/images/demo/browser-pic-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6745422cbd9a2515bd04778268a5d883efc02d3 GIT binary patch literal 6526 zcma)82RK}7x84j!XS5{hVDw(b;EWc%MU4_f7^9mRV=#IHWloV2VAfYc!3 zTu?q}0@M}l;e}BX_}bPf0QGWH6R?Gw%9`S|(Vkugp?I`a=p}1Zs1HiTO+Z5(iX^HM z{cwJ0f(w-B=ZgtYC8`PhPOf@3{^^zxfc_pr@KF=c`nfCA&eR;Ljm4v(aA^f8l&qW_ zR7pu%P7$u8Bqs@#mz9&3kv+SVq~sJ;;YzCV2pf+hNIz5kIoz&Zqnma#+!U<2_e^jWyz zPcTkZ8;^D&VDZ*itnZ&yH21_3umPS}98}v%2`Xypg7U)rbcp?qFf~;*!~_srFetR4 zj+($3hqRZMo2s6YmWr|#LJ4tETUSm_S6&OQAgg;(NlRBtS58kyPv=jp4i**YhsF^8 z#Jc^BMf@Z7XEXTW&UV&8{egA+XD#r5#LAqBk@yj{C;$pTWDtNHLI#46k)8wh&h$}|k&*rV{sUy>APPz`Mi3VSNv~wp9`AaYkl?5H*DCjDs8ukduS{peKWnvw(gQxUf>h2+UuslNV$oy#wga z*2y6t2%rHR7Ld90#CXz@M;D0F(USK>*A_^M(lM4(jOP==M9&%R(vm+bkAB&4F-B3w z{D(Ow>t-67?1B2~4|9=3zB%4*&9_BqJ&~*XW}52-p~r%?=2B#u=4_Pz>yZ)8FzrdP zf9@Xx-li4?ym~mNsec0h!n+RsPaNiK3^`Xtc)TNCQKwX}WcUKy5!USW0grW@z+_XC zS{xil@fm>ByowU->~$W!%C7pi;}UBkiOy>iwnkS71phJv!AcwJ$Ny6tIie>_R3W8G zptNWJzq+Jlg}-gZkj%xHA7L>>6FbPPJ=gwgXw1pw$98>l9;wV6uL_lX5WFUu3&wiY zyx;EZ4`b($A;Ixo9Tp8#pCei5(%KtE7<+4UZ_($2$U~p_urgdRI;-yQCH~igYVbtq zi~2f!G3L`LMC;D7*z>TkbtJ>do5M9wntfEE_4NLw_cJ5_?nl0KJGo;bh3T}EuliAa zE8PM!6Z2M0b?m6pf}#Wgb*&!Wnw;1y&Ok&IoKNJw&Ut4~ue@mlz8#!AEg6$IhY7E- zEVNmAz_Gv@u5I|4Ti4y+!OpNSDn91BbxFhe&qM!1(Tfw2W05(n8>wzryS3t$k8h`e zI|fec43?D-V6<*^b!qIU&vZek>+Sm(qSK}&qG#;k}0@b2mqi9GS01CxMgPC7w&j7Z_eS8a1UlUma>Mx{f? z%Z7Go3Q7DO8jBiE9GU$sMnwyYzl4B}8!gbmDy;!4ySqV_Lna6n^|jiyiZU_9u&NxE zsPertwc@S@%|U~$4?lCHaN9RfC8PzSA3|2v zChGmS2RZL|f!-9IT&}cqtk#xH&aox|R^o6DmdE#}V9KXmO2u0b_W2J1F$ZH}CXhQEuW)LLO3uZo8mFBX{rHJ3VZC*vzw3 zuwDPx)M9@nNllU9u*;m5$)>npWF$PO+ z8JI$yO5HJ8n)TIA>D;d*;EoKVMQ2KH>48(9kh~%PzV@muQk$)dmgZbCa!) zPxo7HE~X)bq#g=rQa>$NB(O%IXQn0M8qAo6xgJv}+T)7|sXB)(hbOmTgd_buuqwiO z7J?U0qSD=LIZOoyx!?3P;}m|)ee1K{X9`D)^I8e#-e&4j$u2zwzcmO$s0)SR zwB@}-1y3hv-IvOD4elc5lam{(C;9qc&2?P!K28_3)WL*WlCPX*KAW6d^q#&6Pl1FK z@llh(Wj`5kKyf^y;G#RG4$OwajI}QZp&x1Ly~zA3GXuILrt?Z0t&0cMRTXt~1?rz< zR#v^L*_8&4VB0*fb@r;(%0esUmOC!OEIvUYT9j`ei?x1D748`5^C%j4p?tI53l(r* z0o5juxHTku$;4=FeLl>;+M-S_rDy5;^I@}`fI-z3?PCAB7L?Cj|BhB~t7D0)3e)!S zaSjI8z+{mT933PeaqW?0pFy+jq;6=h|2DDm1Z}iyjz-w}jcYS&F z+nAzBMo5X_3b&=)E-ZETP2FOOBvk(>C>u(g?C78!=|8>iZ3#gQLb*I&llvtl*CM`OoG)7H1a6aeXfaY%4f(^>}6Q<3jTY@|#Y1cS3Bt;nvX3 zqRfPe{M}Pqwa%%1{L+nv{$l3J7sWWL5g(=pYNhQ`1C^z`?^*p>8Y$u`5f7s~)sd%D zte@EvrY6Qf!{4X33cky1oL=pyK%CE$Q>s;CY}%``bGOl6OLG2F!)IRY*X~U0o7+L0 z?1-??2&M6H=-6JplELNysxwraf^eHENJmPpLAI$%A3HdMGC3~4(K0QRMj(-fSs$j#3+fgO4!->=dC|jfXh@Y^0Qrlk zSQ8;1_S^*HA57J8I%z_Aa!*vMJClE|D5bS|OtiVcm5w&<5u;>Ro=DO6!*X%4%M9)M z*5Bn8j?`=B3n~OZt|Pph64@cu84lMuIxp2E?zMGTL+(}b`*X);hXPzQ8%#fYm7 z^JRsJyO_eDfI}$9n|vXOTVn2Qs-5nberD_85}e1D>N6gjU{s{ntS% zflT_Eh{J&|kA9Ka*mSL4QHSrlX?8JkkH>9xIEFN221uK?;A@eJ@Q&Lf6FW~yK+96o z##1C7l2l)R=|K*Mx~N5IU)No`LkWu%OK&BQc=sV&s{JDqix;Tzwez(kV744*Ge~4E zZ)4wTif6*ar;|&q9S>c>>9^#Js^g@!xPoXAjJ9&}GflB$NvJtt+GFRSK0WS`Lar*U zEIWp_IB!0|95Nonz>3Yp_{NbNewlt=d2>`ADXW~Yl`RE+g$-S)4!jIog1}!t9eY-O zoJe*gVOn9dV9N-q%`ZwN0cIVS*-CMA*}JnpK>dlEu@Ryt1m@qAYoR>aNvP62KN!4~ z{F!mYOE?~GammmSmbd%0w_m=$-6@KgJk&`b7msm=d6_$AbAXfOmJ9ORNdU8km-1yU zE=$E3H_QEUlnvUFv%8T;H!Fa4w%=BKPhI8uOmc{`j){k2vyuvgpWiM&u3h<1V*Q1g z2e&&mmp<;HP=+weG+?xsX#sur+5df*_jf5`eqfli>a)oM8C@e^KeRp=-Aq@*qP)E{ zTs7u1)r&1Dg5Z3ykqFh$&`{O=!_}$}k}Kh*dx;7>VwHlKk!0Q4CMr%p;8GqUY~o(&dQn_u2kXGygUt1e>-u1KoBHIX~-)$A2Jwrmv@iwqA`OJgAc zg~bLBI}E+{G?}P>94jYQYH7ALIGoI3Uz{{S)^$&>Jo>Hp>2_qtL1$Ou?yCzIuPNo! z^c-Qdek?(({XQNfgXoZ-8d_LY_eZ~QC=Xcl-{Fc@4S7>vmbA6>`D7O^w3C?aD&(MM zU(@S)Q-AeKW5B~O%R6IFEg9xArLD$M@mACJoyLsimRBk}XPKnMgo3`bK4~=OMit{5 zwi+OBpA}p#e4T%k*hoio5ZdUvj<>HSUtMtHLp_OLE1VcyIgubXRjO&HP7g2tXufii zw{ciz=&8Ra5+qeB)k!5wWEymDZd{-6Xugkld+zEzok)=cNxj8nz9i1tjLCQ5-7V-4 zv&hj*eu3Ghy?$Rm$i?IbGuo-D%3F(GBX$xiSa`(!-tq4gcCYM$q>N%;cCYZkk99`{?H~7U_?K`9I7JBc3TymkcBe37(m20C|mWB97 zjtXZhl!rgC^^4u@FKGz=V&dzx9?`)WUYF555iPXQ?;=? zSA;;d6tB&s?C|49-!5)TxTy^?T$3!$3-y(#bXd+s2s1pGcV^<}6Sq0;-8S|{Lxna& zrnfpSNti#My}Q_)l45TRVoRZ+*h=3~3;w=Sr7tXGMF|^9M#dWS^~;N{lO@X77pG&S z2iup{LgAet$XcU;IrrYD%zH;tdn8dteF=KRkAu8WrnR-Qlo4y94 zbkzxFb-qC?DNtXzt_Nlx81 z)PT{wN+;P=*n6E^F*Y2xvRE0*qo{W~b0|;$Vppx#Xptn1^4x-w$|$L?n^<0ojn{5) zc=x4;FCv{jK!;P@Ke|aPrW8h~X14jCeeG-6MI^3-3I}Jy-tKV+y%q52$v|8XgWb6d z-ExUUYOPib*bIz(bLX1hY}0e&3K*oe&$#$#q|5uUDwhE)I1T|CYP9fyJj*|KFC;Ux z-*hu#c<2CIb@zfb9~nw*OS|>6NDH{S730@O990-{3PP;-D39^_&kc{PjL9|_utIe* zoCtliduF<)5~1t9zVnUjDTp5tZTWgvnuSTgb6DSwO*k{`ZOkI0UILR(a$c;e-;`6; zj;=GWsWZP0f&?fi9wbE?X|Nc&XGe%ubv-Y*>$twUUTNB_kh*mvRDEfQ3HCU|{;e3@ zX!mknU|?`ZqXJ+^aaaKtT~t~NzgH`l%qsF6FPWK>rD#iOXcwOYZ>hjn4x1QD#~kl8 zFYpI-o8Njs%|5^%dOMJ^;tu8n+aT-hva4ZylKKscPA7&mOdLPu0C{52N z=He&lpYJ${y&xxT3A3P_Wb?KIz8JHFg8llolMI{kG)TaMCS*JE?3<|LkR@*EOB9f< zGhoc#$`Pw?x|_^7!^TAdCL-<95-MBSc(c+^II}L-=bYzz{{fCl+UuCXB?nA5(_E#m zktX^-xOwi$qw8;md5F9_{tK&RDiTHSj%Suka*%dYeAK*V~@9gabmx1|}Yc9BCjPVzkK2w3+LwZ(E(yW9CUVv&vo0v251w)=#bNGHXQ6=KUg zSmJrxTU|yB)CRD!zj@}S4WUEL}CJ2?OrccsdG3Fo?2(fP&S1}(IqaGdr{5SlungZ z46SV?nDHM78zK#ZkTzis4niXxk2{6)!F)m?vgLxlIhD6!1#NE5W1mlR-Eht{`*rKU zW2lx+yWXYb>87Idi%UF1TlGpE_i#=P+)O%q)&;uMDUzW&Mjk3ZGS_a}vAR|#k}Z5Y46^n)L1 z^L=|+fV_6?!K)T#{?E(>8cP-CFk3ecgQ1$uEk4bH;8eN!549`LUq}16JnPs{G#0rr zr>gMEF_c26?&uuYsEeFr8Gy^_Ar(`ardlNDklV_DD;xU|-qy9VBgffh*1KM{X{v4)1(#7EG7? zBiHL@UzzNt%8;)e=v_~)U|qS{!SNdoo`uzbucawroW*6owTiAa+Z26OoJd2z7D?^L zk^g`Zf?KSn(%hy*N4I~gF-^ku_T{yk;&F2dhsL;*^<23xPZsCfJhnJcQKo9d>Q;lc zY!CVKw%Qa--&Up(YbkC_2Az0t@I)a$H6aXg9 zx#=CWP?(LEA9nLJvF(1!U2@?`A~i)ftNkj8LXd&>ZWLfaQ`B zkdlTPl<9d?ZdI12^2UDDg~PALM!YbZE*{&(CwCGnWu)J+UB1Ih0&?sV=jfaG<`;}b z&n7)<9-xQq57*g5C38GJxr2-56)o>{pDjcrAHOCCcfZn5zNz%70=x5CJEg^7NvCTY zAznCF)S;QGM1xVdsnK@i$;8T3#2;pq%LZDQg=F$EX_EjcP#*CD*UtP$ruRI236Dr` F{|lH3U2^~c literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/demo/browser-pic-6.jpg b/webtagger/static/components/flatui/images/demo/browser-pic-6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e89bdc83bbec46ebb34020e39d994727338f4cb5 GIT binary patch literal 8526 zcma)hby$?$*7psAAPSNqT@sSRAT1#<3^^bvr8F|&%uqvvl7e)Xl+vYiN_VJ)APgxW zf`oJo@#1ry^PKmO_k7p4uKT{$+ADr*t-aUWf9$#ZcDV@9DtRDm0YFui7q|}mhb}h& z3Mj_P!4tp(2(Hx90C2eo60mc1b(8{wQ7(cO)@Vx`K`S&8>|x;uh6oCQ0ckl8M+++l z8&_6Kn`a1=4EuIdD?2N~T890xC|n5csAyw{Q1NoM(e={Qv+{DVlC)-*lVz3mkn%t} zB5hnPSUr%>Q7%#*GVFhWOI^u-)L?ejzg%1$WZ32ZWMwskKVnrxJKL~|3f>p65`sWj z#l!?5BBEkq5Pnu+A&4+o=;{#@fQU$mib)BJv;Ix&SJ|AcZKZUeu)lL%tz_8$Zpz)= zUC{l$AlmsE7$PYt`3FN-Sm4S-z{L~gYT+S(a=H6&1gMRRl{3Q86@f;v{z0^`L}OfK z*sm)6R|`nTe_;R5z4~8{aQOe*6^Z<_0e``|xa!#ar{4b)*hSCN(FUwz z-~AKpD5dCZW8sQ+)G3A zva(Ty%CKKy2qF;HQZO-jNeOvzd2t0rB?v@GSYGtLkdlI!ypp^U1O|mc{~ZfOTVaqk zDA#|-TK^|j;lIZI83v@|Rc5G-Gs4Zr8s>~fvi{Yy6ym?vBJp4G{*JZ&@3lz&*I4jX zG2lN(`@fF*->R$m`6K=_xL1pRM&AZ?HSf+>gMGOL-1=)=0qeG_9}wOp76<|e2?z+T z5fEOxMo3I}_1?TrNO=7w$&DK~Z`>duC;5xWNp6vmliebrqN1jzqGDuVU|?kVhwzAq zh)79DY01fH>2FiqrvJzA|0`U!0TkDPY#pY+1>yUr>KL;Q_zk+jU{tk8V}Z;XKmJ-3`pHLV;V=Emtdm3Gwl8M+6vA z2kXn!;ySC3zTm}i34g4|DX-jj-WSi2GiNN^2^X9jpn5+V|Kpe($+o zu~&;fj_hJPALPh2+9l9dMae$A1T>E6jo21ZZ9eDiEP4MnAM>kGF1FV_MSsMvqaxL>x~NYE%_ zSVo`(L24JTAJLI;$GF{K^%Ry*X6CmyyMzVpgS#F7p&>EtK@ z1JAptei>~t=6tf)-Fn^QVj#=zt0&Tn(LLbB=p`_WyLT9JR(nqHAVzL2cK2eyZz_Bm z+?%sXw?n;i7ouruhLsbQR%Bz~y4$Zcte_#RK=*D-_V%OhIO;)`W9o-$g!Pv|TQ>Zy zr$w)!m9?+N47^y^Sy%14rB=75T(fLirFoS0@#iz;wS1M@Y$823+}rc&Tt}hTT5btB z-zi9XjW<&iYG-&5AH7YM|B@^HEtlW3X*swS zrz5NDhB3Z6`7?EVwTj|7{ZYdmRxe%wBVsnn{%zmek0|?fc`>;6=olT0Vt>-R*}7{0 zvC=EAqSIpL;;>y4*E;R5Lk>SJW>zBk=hGdLp{?&kaJlvhBly~fVLVgr}|W8_sNEl(p(Yzb{f-=p&r zZG3;EVC~c4ahy7}1An{GyYPT@a|r?L%ZBY79)a-0Q)ElIR6~G_m%PV*pe_5dsf{`64gA}gp)wdRSjU%tVY&oZ(L>(9T%nvFYPw8An4s8@z>NwfuiH7MHQ zlk;~O#4_7n0u7|CB=U^i%sMBOxfH>X7|}U(0bKASZcZjcIWk_U#C{Sfltd9zbqnH{ zxLR+mX!#&F77&tq#-dM0$PJC)QV%?OHKwTq8c0sl`Ys3OVI-6`vKE8#`%-7b(UU4*OHlFK_|58DW~QkTl54RVl~q00CvJOSYbSI11&N-Yp-QN`-~<`Gste$b z2u2J?s`zuI)jH_>j;Q(sE^chg^wm(k_B2jU0DWd=CrYM%)-JYXdl-Q7v|{4~&fKb}MKAbJE8a(2 z=%q_w#&+$-wX;ep)PY&GzPI?(LK!U8i*ug(i^H*K^x`E@s(bi;mZ))nA^BIW;0l#; z@&_w5LlbR<>nG4e+3pLF$woA&0sVl>x{TejKe{9;s5W-JiGH+kE6kf8M;FaCI@zRlIkCB;)Fe-TDO)$DJ~pWe9#8$f7!;i8&}y#$!cKG*AL|K3?!%%L zo|w((r?tg|PHa1v{SeJFid-WLs4dWKn=b8h6_)8e`xa5X!N3gT#7+a(P`7zdF*`PFG}jj+GSzS5qhd;z z4`bx#^N=w1f5-O%9h%$DK4YjZ5Tw(!UynZMgrZj(QFFLba&Er zbQhud+>akK5ij){sYG+hxUca3b~+qy?7f$}8ser2f`Q2F@AvmkYBq6Xq&@L#-^mN4 z5pn;%(W&6Rb9xUk6_=*sTLKomllZ#2zMt)}Cbufb+-&a%Y}S5OD(x7@fF#eeZiH0u0ozX7h+-1{CAi?d%r*z@!s^V$KT=1yX zP#6hJRaI{(_oh915eIiI5TxjJjZ1na_B=N;tr+xk+{d`CZOJ<;r>gGc<}faaiw4C! zH`ZR?62V@nK(9EyW(qTvcv?_Z7;aWuxKewn-)S>juzxgcq@x+L5SB(r(W++0(Ub_z zxuG&WuNI$&LK;0sf0@@xEcP_tbB{lgNk?O=gumOtbnUc@i0NZg8pkR7hC&vE7^vb$v&|wWu0z;JaIH05aZot-Z*M<;;*v~(e$gk>89_hx_1#~Nt;?ZMa_Px zC&?^)yclerL`p4{y2ZwnJnBxv%@=n5owZ3#SZ3|7@KXWTN?oh93)6FcEZ1%lmqy4` zykePdGx&km`=0tub)yHj>juj|woL6IPU1|rH0H`0u z{Af>%$0iFg^jazO)4;dg0CvJ21(Dy{^H1}P7LilsoJMpWQwr>&P!6WW*IDr?Cq>g$ z>-2|KKOHQ~WsR$r?%(ebRlSKVEPkL=FBPp!F>5-3`lz{ys{3iy8L=X4vEs)8?%*N2 z6LEMOwRNy!IJ-0;#iwy$pquqP{f@NN5P)$MlqC10_*GU?V_X^a0D);1{`9Nfasl>* zH_X;tF9-K_DYf*#!Oa=Dj4Y$}%CzKq)~6{h^{T(8X;ivMcI6b?xcSZHjQ;_Y)+Ar8 zpZSN5ijCr^N|0vRP2W9dEgey-wo?Z=UHhr_ow9VVWYi$#OAeFU80j{Yn@mX3reqv$Zg$I>e%l!I5x$J(mkE6 zVV%Xgta(D|qZjSt68X+3N;sR(o}|{?8&S!(aPO5B%dj6RYe)izdcX%wp>XZ!7dL&P z{m9NO(pIn1QQ5uDCYTag($zEjnDaBIC)RWKg3C>ozQar)dB>S9z`vM%AzO#(3EP*p zLs9rvY{@C6uBAxXWd@v8yRlI^6WNRIK7P};>-5$sZIfEahO(_#ntxU$oIzN4osrc1 zP_QTM5~!;kIQexH`@H2@`?T1J*!v;byQl^s{?u~(D&tWEr26$pEQX>lr$O{tTGXqj z+c_KVgEIxV@DsTrW)tlUcB@#~trOv`Mse2lUOuLs&z*ePYj*4QCiC@&2CskZR%KoS z%GgUFzeO&zXYky-Cz@o_Bi$kz8UMCH*vGO38Wv8XE$@xTv`tvMI2>7KT)3~CQMcy( zSaQOTY@6Z|czjq|GyDA$Hup7Yf29|Ks8g*l-a21lJ<9u?OiW1~`qp}b&_$|!1Kf8t z^lsnhY8BO)cuxVgsCg16m4-EZya@>t{T8+1RXNbNJcno*wFfs;TsonyeMvSJ-{kX_ z<&xvINTolcY38z0zr*S6q6JqUE?1JZyc?P38}yciW#w$(oLq6Kejc-qIZ6D_ZNFyV zovG4HfKqh4+smVg^wW?RG*0J=7+qCA4v&KMraLhi8lp5P+cR`;%SVwMWga61-BfWn+cZeeyF$zY*?ZV-b{{oZ*JIv6=R#r^d7cs& z6F7ZiqK+>do1qI@$H~P@w>Dn*U)ZDvRcuM{r6-0rbmlxelYH9Gx$*S=+Zi-!(BN_P zeP|vF8}^7Xqs11IUV>lAZ9y2BmN?1PC>?I^L*r6e&>v~0&VS7$c#HTvF|(2Pya0Ay zJM}r+xw+y8zcjz})XojdEs9hpjz;pI5@!Bl2lPK1^}`M%*3?@<-*L@nhHm{9E`2dB z#wh7q!+Wsx0MWRT^H3=S`lWn0FDN%=5M_Q78+km#q9nFIK2YF>MA z+gSZ43dwMbqv5;sOj3uwxjgw`Ok0UzBn0##sq&NN%F+@U&6teA!7`XnK6v;fn09bq;nN|{vh7>1cd`_;>^6yl{BYI1oIog_L70_9(!&P zDmx$QtxGUc^H@%`7%=W@Z$Z}&58OsomDu2fyC4q>rRz z(Q(mW(<9@IhRW4KRA!CzL(2H|(wU@1(zPR|9`3$wu(e-ZMK&eqF4;vH-soqJdgBl8 zbODN%=GV(|j2I_1%e9^n4rbNo&o+{j8gk9-)RClGkr%>g`{)M088&Ae-VQo=@)||I zW!8mlZvD7bntEbHN0&O)ZDD$khTk*hEi4b(Jg!*!As_Pt!QI#UT1+Fw z@MWHLY~N#(o8@W75~~Z!Uv0K4k1yV~Tmto;&o^T%EjIVMWtu{0H*d50uO*Tu<5)<5{eDuS8hwJv9 z?!;COzD}iB%4dY6e5FXzve%J3AZ;!7=F6Hce@_dsn=?-;!p{p1?pRtGxm1JJXyMX`7{Krhq%fW zBCW7Uu}P>nxT{!>(pRLof#6sc6c@~8KIjmqocpvoCID<5`;ANr_|ES+qjQ}}seM2E zhDKv%iQAsgVAeI49E~^pKCZe^Ok+>|bM0*oL*l>|rqiy)wYZF?I_n%)nCl7F1&N^Z zpO=xjU7DZ))?sjZ?di(DQbO7S)r<>M>uVet4}NmSvT_^nZ$o`b07fzAH!b(etb z7QD3F8VVks;|}1pv(g@5ge^#B+HwYfehbt)`hSF(OUQ*K~7EyxCOurTlH< zQy&rG4b*(qN@R8)uX{0%u7-CG8R0t2`Kf+6(6L&f;r!#G>yll3Po!t(q)4E0c_EOgHrdLk@6Q2g?Kh1D1+ zrj>2x9{v{U=`2Tz(_(4p+uNq`50VHi?#7JljW&veyU&G!c(sqC|6IS|(*qm~zOEr^ zByM%vj!UR@C9l`~@ct#Ne4hD-D9XFQLmnO8|5)h){kL)d#GnfJP@ zKKcqqV|aRbXU|DtQ?+M>OH};9+WL>7IVv~3T_U$XXShuEVV+er{j8bS%V*;}x-n-m z9TQ7GR6HAE!~Lotm#0;r>h^h)@x_r&t!8Ikmtt3C2ylL)coRE9e{}*aBfr&o55I%G(SH2rT@hXG=X!}dyPrrlIViXaV3C1S-RT+S63mR<2z%R{ zs-a3f7d?XH@5}D4H~KAaWR58s?(-?})ift7G<8r5=_tfIgF6;}m)%ZHJo7rGFuXZm z7uM>lBUzpu5jbNXVQfW$NMYdo+z*FHRf3$_4qft9zFY$Oa-qH=fK7ekB@lWp0))II z?O#+Q6kaC^Cb3tK!9>rF?FOHYPoPMDPCWyQJ4rmFGWESvfg!$*B3zojUMg+xU_6vq zd1Np5g#mTzKqNp~BCv6%qJm~+z9%xpE8PPp{=W04$xLmukbFk)jy5dS6aU-V9h%zg z##DpN;d;Ga9rRC#mQizu1`}rvxy*HlUH5g~73F9#F+z?hX;z=f#y%yiLbJv?E!nIC z^REe-$)ckN2j{v&?_seOa%-#W#xX{2SN}b%)X@);%2B;LZB09OIHGHqQ{Ov*78Diw!304y<~*57Tz#?kK1B-^HXryw+=SkoD~}nhrn&eU**$31lNzv33~uzm1%x4X3_ zX32aAnynhGn%xf3qYF>pXqDE&rcW^T&e(gNUa^&ZC1`s|P{=`~cqwy=bJW0=!K2gk z;nUa#_;BP$Q$8|e#+qJ>7xgF zs>`M#55A@}r29!f`#rZbX)>{~(o)?>w|$+kIzHpA41u!<6%jkm;TLt=V{td`RIU_% z75r)C`K*`hd1oYdWU#|Zv#sI5%?)%~3WjRGC@n7@gNj_@VJJGuJ#0lxtWPz0Uq)lDAH+eai2;m`MS<$kAelJEtm^bC>& z9bFTtlqa#OL*Y;MCYU9TzZO>P4%|Ikx(IqTVg*xSd$l`r30z2L4cPS)^2;S|G1Y&P zv7Cp~u~~jPtCBi1xA^tp^ygouXP1CQvoaQ@04!&mbo)-O2>^y?i5 zZKZA{3NXu+OZA%;mJgSBo*w*u%;W|6JJt}g{ylGf<+5Np*1%-@K}ztoACmOK*G0@c z+M5X18K}&OCcWOM^+oT&>nR_`cOH&}6U(1rk#)CYPJ1`s(a@2IM^>I$C0qj0PxuY3 z1KcwzyIiezE`j0*L+fCMPgn;=ciF7ph=p!8_%_Pyyo!0twCMqy7ShkU$4r??8|3bs z_tIK&Pm_m6q7*r>ti73-@@goBV`kBL8I^rb?frs$7<4`yLE6K#;ce=h;BApQ>X}d2 zdJ$oIn9Q_zU3U+ZRk0M$Ai3*t{`W z9BBl3)Sl(@Ym^h$ifkL}G4D z);0(*bMR(I(G#Kjp%opp=Ez~YNqV7mRqnU^%B9h7lQ|tVv3@stt_QG{`KCjgW$gj& z@Yh^CBMs z-Sck{&Ta%cN;${Apl2h9yFmYdfi8jf^))ZoRM9s_gD5HLPm&GZ56a8@;JySz$pZ|R zT=pKb)xHOv=dYfPD=8Qar~g=WT*bqHN+KTa)HE4~7OHd7&AG|;b!hv2N{c=z^2yw3Ux5^(S23V|rgB;9eJ)>B*bmJ-8@%rH=~-X*|j z^^;od4!0kC)u4(oo$wCJYoeiR(lO4Ul}kWeoM;&T%wy;hc$61+-BK>eXFxA2ibNUm zHF=}pN&!x&E21*71q&MITJ3AcC=%fwK%#3>a`$kREcp=~*JL$g$Q(G#lJ`GjVG4oq m{nIsOTtjaU*Y=ph(}b@}$??MIw7MiK?o{F(jKs)aPW=y(WR$D` literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/demo/browser.png b/webtagger/static/components/flatui/images/demo/browser.png new file mode 100644 index 0000000000000000000000000000000000000000..fca8181104cd7ec9f96f3c5faa3bcec5499eeb8d GIT binary patch literal 1347 zcmaJ>eQXnD7=K6IGBH(S;15Nz;}`^Wz3X-B)n3|-ws+k+yk%)?Y@%Xs*LU5y-N){3 zw40)f0fEFoq67p#02587#>9`Y6fj^k%7zRHL)2~zWeI-FjAbs+p}^=l8tNliStUP-|a)-*NzeJyOR;0a*45@*gZ+hHR3ktwx`FO)g=^)Mhgy=nw=_ zY7@jFvXF*RD5N^u`=Jj2Te%cZmIY!!a-a-{(W#h1)}a_{3k)nYL|xKM zNmVe5QD{;-Oh1m4&bJ_Ii?oWda82mK$gH4|6yda5DkSp!|EJ3GVzyyM;Z40u5*zVO z4U$o4s2#e92G_jSDy1vzK9vm7}0VwK?uz`5?hwKCPh^lN<0OFa``U7h@+6jZRK zM~>xo$rs`mXT{yWUK(0`tU&_F{w?w|tMc!b)qZFPXZBAqp3(f!^wULvtJ`{V^`6@8 zpc@|>y3D*>0^UB|^Xa3-V8hO_63}l4PtPGSgUcFWV8ooAc;LwP1eC!TTU$1~GU-&#=uVtQqGa#u pjW(-%-D1UZ55VR$gG-a^Pk}(+c3ZG7^SAX|i*OC>2f^eE{{jg|;D`VK literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/demo/html-icon.png b/webtagger/static/components/flatui/images/demo/html-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..db26facc9fb4bc8183dc5ebe7de08639cb343c60 GIT binary patch literal 4341 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 TysHB?e?-{Y96?rE`6T=w$YWr; literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/demo/logo-mask-2x.png b/webtagger/static/components/flatui/images/demo/logo-mask-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a3ebac092773891df02eebad81d681eceb808e GIT binary patch literal 17571 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 M)xA}rZ29>A0L}$X(f|Me literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/demo/logo-mask.png b/webtagger/static/components/flatui/images/demo/logo-mask.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8c83a038e7f438e44710e11e019a9c322cf6a5 GIT binary patch literal 7963 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 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/demo/video.jpg b/webtagger/static/components/flatui/images/demo/video.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9730775bd9c5b65d00651c674d54e3fd9658ca3 GIT binary patch literal 172944 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%0ABN4MY6<4z~ovAyA&UxA9-8Z~a@ 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 z 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 Z+z%J%>=o|rxlQqBQssaPvo0Kr{$Efsa=HKj literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/favicon.ico b/webtagger/static/components/flatui/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1e2f9c7e14d39a1a7051ad9674e464533588c613 GIT binary patch literal 932 zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?wp0ZA{>}^0iw{bmDL#Iy1{g;-o-6?>KvoZA_pg%Jb|z}o zaYKlfbti4^zE}@b3;|c~ub;iy3QbGK<5#u1){it5j{r`&j;zXQPkDtQqfRP%1^0O*VIcb)G*N0 WOD-116MY%w&9AF55CCt{|SsJ*DX$1o8t)+o4gw^@g zT@+w;_A1_PFdc6VT`O+~D{*U}tPDU3C4nPwf+3&)l#`>gy97!a_!qAPuKnjW2nhH~ z1>qnK{FhS(>RJE=xEl;0%qPfe#SaDpL`3+&Lc$^<+~KUe_7kNb-7f`uf6MI;17 z0ssC0an{_dZ6vfIO8>TnyOIXlArLMSAP^FXZWRKc-wH6x?7?1l&y* z4tM-}6t(Q&2)Mf)+y$VZBLd)5hg#V?|GDw_FNC_fgsQVU0_to9Q-w$aaU6X1_SO;* z0kDz?zp$bRL`)D2RuqsE7LZdC6_6KD6okkt3Jd>@g}|*moM6s~zp>W;gH`&k*gwJG zc4N{;^$BE zKY@$8_)qA=oN@8)h70WUJ}Xi@JZ5fHh@38JdMopnKI@C*P)d4=x1lzxbZ;29%G@wN z9F8|0Uh-cu9y4C@AD4c@eCk`Nbq})6iVv~L@!F_Sg%HZAP+BBt#AA)0_1m+A0-b*} zU^CD|;*(>)5Ppon;4et&xwT8S5T6I6HMfabLbTd&f`Wt=C*<*2{}!AUxEArP=)Xly z0Hr)J3l%?3gxpa2Tl@q24}!n2{~-7W_8$a)VgEt!zm0!UfI{z+viqNH&I`?7$N6Ie zV-$#Ui2m6AMt~(1daLd(k>I{|aO*{}HeI>C!--8P%(=JUTEK(H#(mVLX52J(_|?#6 zBk`^71CjK)Ugsw`|EuOhb=fy%WMaY<8>F^1lt)Xq5EAT^V%%o=Zc}M0`N8QJY$iBc zR8&;jYtKSdjcFwo4Vrm^k=|HsqIewxi{70%K}W^GGudM$>=v*-^^Rl$4SF_Pb!Fd_ENfXVIrz7i8p1`aQjsJ zW`L0KHZ;4(bf+cU{xj-8Dguw}cx`klBV}P=xklzSwL9A0?*!rMyjo^b>>?5WTJAxW zeyMPiKSH45wDBzMSDs(w7owiRoTX6|6+Zp%Yyay7b2I3>hLcX$==!li0kbNj^3|^RJLw2Gb)ZRhW=9WsEaX+?BDhb?~3(T?zF03CQ-C) zG^u9wVlumZ!^1>Fd3^0Su`Jmed8V5av4FriM&JT9M~XWy&;x7D4dZ6z6D~Pgh(zvj$}#>f!N~a(w6QDZ z9CS;!M3|w1Zacb-?$;Wdbw$=i!!y&<02K^MgttGNVTNgVibvChf7RB2Tj=K%aW8ATHSI>a*dZ&lZmt^EwjV#cxkYa7FqwcuHA` z-jrZrU5Gh?V@N?jYX)2AD#Z9S5{h;>dz(V`H`CN=dhR7!%voG3%ZK>*sMbd5 zOtHzz4?#ng{5xb{lqeToF*0UrtViCJ;-s_dn38WlJeZnJPKLpc3|{#WR;NqIL@6tB z#=hPdR-l@__PN~Y9l6+&dtsO8xcjg>R%6i8yETePLCRpLbaMB_{&l$wfe;})QAbkK zw&!OTop?QM8gmmw*KH_^XE$ zI($?N#OlOz3VYh}5Mn4+XjMDWZ{>%n7Di8Au?FpaezpT$#=Y7r1ORH085kO2iJ0Z` zT;JM>pJ;rR`6<~95nw~M4Z~ag+Q&9^1?-l#Q8lBsR8>R}X3NT2%&Spx2Ne5r)# zMS*oY6WN;L5F%@(<1$8d-`}hqV`D;h&0D@}t&;9M%nVr(_PPW_PV!UU<@gDUj-B4z zn*)!BZh#})nmK*B#A4d5eI0DgDpuaTm{rQyy;|50F>33KqL7H+qqblSXq^p=Z6u0UbpY6=pGHg7$q4w+Y z$i|ma{=JOID?r2=8d@_=&pxVEIOS;gbmf3^<2@Jh)06ApE3@4P{kEDiMbfZ+iOgLY zM^I4=-qG#sp#)@ftUg%Uuq1K&>~rWEpL|FI9&dF*%gk%r_ncw+54Iz%axLQ-=gS?D z8KVpPzfhQQW;3%?>6`#*3Z=fHcdSR}>F07Kx?FFaMOIHV2k%jqx85SKDkHv3`(o|R z$Gd;8@(ktdEs&G7+T}eOX3(I-;|(BKNHl7CE!0%s)UbBy^^|L0j5087qoQ4&r%RG9 zz2V+{O7_x-{`YQszjtQV7+!+zI(VSu-gl-SI&Cu#a5fVY8@GP$c)8I2X=vXNShBI^ zsJ@pz$9^Ymg`)UguJ>Jtub&N94$?7VyKnJF zj<*x3L)K#8kflWBBvK);`e@{0Ko$A2`VQCe6QRUQ{LyTN8H~=N+%Bgq_Zr>vD4Lyx z>Apqhwq4A+FjGTIqhRpkVa*#e0{#287C&%0mu^b4tEtp}EuWgg>m-haml)A{x3n2n zFxYUNjZ==EycFi74=1FOb|b;A{aW7B%1sqE`1EcUOvfK?NI9TPo+^;e&BwIZ)S3AqAy!SF zKCMchZI_wNFlC#aU>L0GBecA|{7!09)}m~Q8Y@yo#>C9*zV*a_^xL8bm`>9xo`iRI zm%TjD6|Zym9qn>4e48zuTjnG4s_V^R{i$%;H#*Wy zpxdWou8*f=&W7dOhwemu__ur);nx={Q!_E;T@^&Y3BT0@qHB94yiq&R0>HQe0Ai*|V-V(1&s_Lto$dct=7luIG)?&f_2>wTCHumAy3QG!gFtr1_aLi!$@i z(iB$IgO71rjhp;L(Z5P;$m27zGi7p5kG-Cw+xK2ahd?l<6)n#r_KL>zW)}=2SBx4? zDzxoE=QnQzv0DvqwvRf09Iq=l9MeG`T!KSD42>EnpYOLAhXd!B@$s5%A30ZOLYq6v zShG}aJ=yCt^&=wq6!=(4Eozqj=(rwuK>z)$DIBSp(lqvUND znHFJ=xzexn|Fo)<2OSpUm|c>TsYpM0AnuW4d-NhtvX}M3-+FoV@MduEjgu$qvje4a zm6a*%69%r(oq~v81_o6JCx)R{NU)L`S7o;rS+adYD>A1xR`%}etP6GgJ`=+I&fJC0 z&s(}C3m!3?1+QObLl$f@<%yT$TANJcmr&7VqUxHl9PhJddpnfPTgR0MHy`z_(Id}z z^M1*1c=CHX`ogsw?rY|)y-z6|pJkeIv5=3laP-}NK{uLR zqly}@N$}CLwWzy`Z5>l3lUNbw@`~1dHtJr=raMD z_n6;wd)QY8M#>b*BH2hi2M>laLpC)D7{9{fVvMdSAXq_x6{+H+7=Gi*WKrq?6*<@5 z;f#l12@PigYMZrwdJMHS&8;l7xX^2;CY_HwM(e9-F5McM|Ak0i*k@^C)=@nz4+{{c zB7O1{R5t8LJ1uS^T^>rpvPBni<0L?A>x4_*9qYTA>+>-a2{v~`45mtv)s_?^bg@mL z!GRYjq3kEXN{Q+REb~LzJiA69DvytT;v*Bc zBY~gWuAP=4Sr);`3W@ArD0)94YMX}E^JPYb z#^wL$p!Rl^?b=Zk5Q5Lz{EY-U_<)32S3&e`Yd%o{VE1$trJtu01b*I7-R7{3Y=dX=xzc^zI5joV zLx{oSfrgSu1x?n&d8L>h&a~N zVz++%JNJGXM-S`c=2Tu%5=pG`Qd3e~)F8aJ!F+NsI#r!!BdcV(_w>&;$8SR*pX;;XdmY5_N@q-KHeOCmLN56GwipXZAIL`YFr)1 z&9~&Eq$wnV$4p-x&xLxH`W9Z5dN7keSkxqUT>k)k@^$xc^{8G-C0`J~+GWVMEDPL_ zoY+_TBneN~X!wpKT=71dQXaAdyYB&ZlV<$kZ4$Sb!CCsGqKF=$@SBt|im##ICrXL!% zT`I>U<>-9_Y}!PvYqK*C(?Z^)38wBnv^ieO&zPc$J8($yy`)HSo)vtSW?WaWq_x&) z8`|vKOXd5uL}X`YRCYaZHt=k!Sf}|Z{qLpoi5@6X}fA=-e<%%e49G2j4P3 zkW1hm$+DtWO-`Eu{Bjn8)d$MbInnI9uAx&uXhT958S_?6kp%&Q*ER606tYut?w z?5yP4z3F)p$Bw0Y)Kj?sL?Zo=LHsIp$k@m*74yjQ`|@rIlHt%YlRhi9_rWW&tvbZn zu1|YZ3}pZ)Al^|aL!btPOMqO)8SV-6zGc#`8jRx0uj#EoM zm4D@wB9HHHrqI@XPG=>yvpRQG8z|$$ZQyjh&SujYFg+*RP&WYV9&3Zs2vackA6#rj zPRmc;7^gZRi(~asBZ^Dw?e{HoW?Kg0|IWs(CrWZ=umu~^A8=6-TT$ex?d}1?(y+@3 zF0HBezC#`HbKbn!FUTlNDK-H_mB|Hi*?L$xR|dRMJ%3tN9_1#%_`E(|@}>)bTuq!Q z#5CRC57QDL1CrlLIov~-)AB#}x|Bf&N_!Tt=SI#DTr3EAve~^HBZM$mjvCwVKJdWb zvuMkHzH=T8BX@Moy^gkBwl{W-ilzM$nJ>s?;&v*dzAas8dUvY&A;pRMyY0 zCX9*EV%->&osdjdbJJ+$Hy?Ix@nX)Z2>bHtF#Gx0`G z+#;QP3-Zm@#jy(#@`G=!3s(Fn^f>Bgyqd^bLLiTKvI^n7;#y6@Phj1$xUk?9y5Ysg zo)k?ic_Fuf1ym+J53!zI3B^BEr6^@$I23>;SEcO(V@w&<*vfOpm8NF`AG|+J#*zru z=-hW*!CT#Lh)OdVw9@SyW~c33ZkW3-PUBegc+&Ke&0?b9LgPMK!J|^4@{(%Jxc$n! zZ~Nu@n324^heS%*Jvx1nA4?b^h243o&CS&T8CH)IzM?VtpR`)t+@wkz5~sIWfn=GU zEvSW^`i~jP&okfo32#qw^{wfemE4}=ed?)KDtxp1y9B+1&Ud==u7nj+`&Q#gAR&Ut zSMfYdy*Y_IHV!?hp9Byz-`S>)$$N(o^(Pm+H+o;RnJprAe)IA29U6_gwxtF;2gjnw z>w2LByy~4gTsFx-M#!wVv(-jyfDA|=stUtb((KfFfDi2{LhR8#QcQmWpKw-!PqHWVhARjX-k!jYA)j6Lzz@)Td1{uzU4;LMLz_Q z4~%B4iPac!6slCbM{t|)#^2X5Z)~LH=)yL$o2t^T|l;O$(%rR`)6@1%P zPN&JIfVpodwl~!Mt&a$@nbvZsa9f>6q_tR7&USyFuwg4{^xYLRYnii;s2IcLa_F}( z6fGrxZ6GbVc-iCLGoVUa0TutvArJz=}BQa<(`{vg3oKFMnr%X z4-1W&#jYKXOJptL_{&MSi4pPG?4W=Sg*RyU_7UBSDh5Fj@gx}}=Vv!Eg#z1|FR8)x z?SnTLo!S!wOYiqD-0n@)?=C2_{I=y^)=Q_#!c2+bBux(suPrHPOQnHJ+#=VK^0|NR zh|yHnP)kEA9@(&W;|_y(87C;P6=ywrz!|``a}XGh@AUe2 zzxnk^<^=Y7A1-?#cJ!sq2tSC2KR-AE<3|ACazsosjrzV?;VK|-`d*C}>NevhMXDrV zpqrExwdys&K)uh*L_1KO93)4nm^@W zTB%X)FaqZj8H_*Y6^*~t2QQlR9wMGdyU3$jt~;WT-&u?<(~0}3hiU5#%aK_|A$W^d zMN#6$q#@#tHzB6mb zFTGaU7cj=uhRd-*lWC z5Z-5mX@OtUKVM)B;&<~Fv_>M-qe6H5o4hYcpBqOIZXyiYvPj9+eno%eHZ#Bo0?qIo zOosGnPK8OI&=@C?N+bu$c)9LQCey^S=Pn$DXExhI%8oOE4fh0^C}1}$2X>FCe9e%z zE6#mI8Q7L{+PyVS=Tirp`jOzv&;UGGz7MP3;q9CNU&1QDC9Xcf5P6t*`t!F?0f+Uw zVLOABLzX5!)8`4rPIZP1$)zT2AzZ8i>*2C~*sR%*iyiWk6`fd*DO=>5|0T-9DntG=;;d$L{ zarnk<_mI9Cz1z38?%ag7A4oXjs!zYv27R-7f4^P};{EQ`-wRmu6z5i9`eORX9KOvo zz@|gz&&D{QVh)Ol{!TxuA_;Ly=GHS7NkOtM7|rfJ55-pwdIJt#)rpM?!vRFz(2%62S^T?8+so z#4r*-XSnaUV`HC7o({26Rmt6m%q{vZEkyO@a3VpD;7n@1)u*MUx>?dAt1sFEfz17M zyCfq5#nhf|yfYx9olJN$UZQtHpx_re1I{Fy>kQ3FyT IZxQr=0GU8CEdT%j literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/illustrations/bag.png b/webtagger/static/components/flatui/images/illustrations/bag.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf988f7ebd8c9115fdb7b2e61327b62113ec767 GIT binary patch literal 4979 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 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/illustrations/book.png b/webtagger/static/components/flatui/images/illustrations/book.png new file mode 100644 index 0000000000000000000000000000000000000000..d944a6d0070e703556f5a14fa3f3ee5ff21d8331 GIT binary patch literal 3122 zcmd5;dpwkB8y>Q;$)VjX9mq6vP&+ebFqk#QVVue!=QCpr26Hg;4uj;-M@|WqW3*X^ z$SFb^lOhR4a>!PL5JD-3CTX;zt-f#f+rGcQ=l8zvb3gZUU)O!z&vXCrCRkaRNNw7= z2?PR3nVI6Oh4bC@S7M{^Tj5xlFPwG&Mvj0D%?Ah}Fi0SMZ<-egY(^pYlB`Jt@6ezQ zk`4&8L78mp2sq-+(L@>rMp%!5u_<&R8U)h8vgrh300{tlk$lNi3}l|u3;~n9F%Sn0 zyeghR0RSBhhlhlOz(UkuG=?u6p{=dG&VfWig%MC@C>0>Ep;V^Q z7X}=ONo0`e0GUPwuQL+7Xe9b&f?JcAG!}y>yf`1F^;C4UA%jE!Xbf8#E%3`JTKUlc8q<$P z2OHX;zz6UIBAL4GQ2B(wUzF=`QB8x(z0$;G+LaY`_LtEX@_}kd^W}wi8nQa%%D-g zpNdA4zpVxJZ7qLdz5hYW=Q=dMiG>Trz}K(#Kd$Gq6s$l}I^v#eJ=zH^3h zIm0f{R(Z9}9W$$MUp~oX2hs_Lqx5-;&xi>uInE=Mk4)xZPrXK@RyD2 zJH9=?YW3EO#M!)S<8a@P4a4K(ke^wBE?Z7Y6V2AutC*HoGG;(}pL&Jrv%bGVT4YFOA*@AYd9UMWlHGouXd=UqQmuaN{TTLF9-C&8{|oyGm#bG(yroJzcEP(p45LR4ZF7*Eppk)JJC`haZf)Ea$vq){Y6L zJbw5fNPgFopLXE&kEeSnLm7k==>;j?6*mUI$1>68aSIk!8E$_AJUARP@pf2wVNE6> zgmBm&8}9nF8Ftbqdot^HZvD)%JbSw9cJ#&PbD>FrtCOwP?ANva%f0UDyJjY%<)*@% zzuU}t*scqUwLDhLZ^TT?Ww=@1uich$Qt?n|w*BRSvAHq48mGGYR+Z{)tG@kR>bL7D zLC75)XbX6{UIqSXLSGX%>1v{KqQUq5lHq+UQmON~6^4^*PtrVew;*PFu+Qr)V%viW z+wWYQsBuy`m6F7q(iatZ|6)sos^)KaItt~ z(oH)(tKxwCv}E3qs?I){-5DJ=mIz*pRo^PuXR2AT&aF=N%Kb+d$j{a4C%TwOK?UvZ z)z{$>Rf6!z}R!?kcxN(0Ad?TsJQvmb2UFUgB)fV5+-+0>S)zMr=={ z^|p`iPTqFY-hZfAG0s5Q)0>>QI@F5f=ZDjXv78jqT|b6rU?d#x?1T$!rrw3h7Si7qp0I(h*};=De+tVby1)+oV$66$ z+Q&^jc;tgQ`qz=OISy(?i?>Ke@_pz0KeSql ziI!`mi&d~Yjleh2OT~@uxv~<~-7OIv%MxOamZwG-lCGgp1L5AWwMGBYP6;uvY?K~I zROBxPNK8~#LJtgz{;To#uus7M4*TT!Kc$rr`+HIUs5VYHHJ%A7H)|loZAkzH^ir~P zqd@@=DOprg@J(l6mk)PJ+<}PF?kP$M6qz&AvG!qr+cld{wm1!^Xre@`2TI(_~mnivrm>wY_Jhnt#43I7gPl zY%N5ml#O3QZ>|f=4Atm&wO6ZbBAE@U7Zz#aHydv5-d{-!dt^DEI*Zri_8g_vEphAw zGTLRvr#sF?`&nKhmY{c^>o!V$FPRzhmO&a^{BdNjL+M^!8Vb{`yK(Zq<$hfm|K}5D z+XDip*Glh)uD#H@Q8vad2sivV&~&#swjdXOH!UvYtM2x+H(JeGjV%uP{Dymu?ZH&=(MUWaeE7I=?sQ ilB&DY{H>32o}is}MoV|^o_VwW7jI@{fvYs|jQIoNXC>MI literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/illustrations/calendar.png b/webtagger/static/components/flatui/images/illustrations/calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..34e0b0da8b397d560592eab56d27459d5a374ea0 GIT binary patch literal 2985 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/illustrations/colors.png b/webtagger/static/components/flatui/images/illustrations/colors.png new file mode 100644 index 0000000000000000000000000000000000000000..1b329fdef23d547e526f9801adb001514e993690 GIT binary patch literal 10032 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 H7XE(#WA};@ literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/illustrations/compass.png b/webtagger/static/components/flatui/images/illustrations/compass.png new file mode 100644 index 0000000000000000000000000000000000000000..356c696e09b5680d11c7f4d4e80a4d5916a93919 GIT binary patch literal 14903 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

#YGG~!glV#+xqedw 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 P$7?w$MagP$qrm?Iv5zIj literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/illustrations/infinity.png b/webtagger/static/components/flatui/images/illustrations/infinity.png new file mode 100644 index 0000000000000000000000000000000000000000..e9dbdb97ff7c72f3238d2215b3045f0830094d5e GIT binary patch literal 8635 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 pxtlvw8yM*B~r^i(x~(vB_= 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 LnoO;f3G9CWg(_hp literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/illustrations/paper.png b/webtagger/static/components/flatui/images/illustrations/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..24148f92fecdb47677753c2b64bb1874bdb7e0d1 GIT binary patch literal 4050 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 Z5WVM)AZS;5?&>cDOEVkO@_n9>{{zx8L}&m2 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/illustrations/time.png b/webtagger/static/components/flatui/images/illustrations/time.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc8972b91bb6be1bcb4802002b45c12c5eccf30 GIT binary patch literal 9380 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 Gq5c;mmm^&O literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/login/icon.png b/webtagger/static/components/flatui/images/login/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d76293345f3586c6e6c6a4082a2c063c140b4210 GIT binary patch literal 7510 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 MXc(&3s5(UaAB0e-p#T5? literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/login/imac-2x.png b/webtagger/static/components/flatui/images/login/imac-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..07aa745a2dcb38ef3302779f34380a70e3fe5842 GIT binary patch literal 22288 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 W)aMK&o`bo7uvlwjmbJzy`hNk(&)j_g literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/login/imac.png b/webtagger/static/components/flatui/images/login/imac.png new file mode 100644 index 0000000000000000000000000000000000000000..a546ef59a89e39ce7a91b737274d636df94ecf20 GIT binary patch literal 7843 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 H$D#iMNU^JA literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/pager/next.png b/webtagger/static/components/flatui/images/pager/next.png new file mode 100644 index 0000000000000000000000000000000000000000..1d002acde686f4de3664d1d7a5c9b93228e47ff2 GIT binary patch literal 1119 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 NiB)w$c~QD`{|{>eKsW#Z literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/tile/ribbon-2x.png b/webtagger/static/components/flatui/images/tile/ribbon-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a66ca7f0264cb440ee7003f6cf71b5ea14340e84 GIT binary patch literal 4342 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 DSRt6i literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/tile/ribbon.png b/webtagger/static/components/flatui/images/tile/ribbon.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca6fa2fb41fe05fac070551ae412c7006fbf09d GIT binary patch literal 2836 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 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/todo/search.png b/webtagger/static/components/flatui/images/todo/search.png new file mode 100644 index 0000000000000000000000000000000000000000..4648aeaced918573db56a3b574f39ab78d66b9c0 GIT binary patch literal 1213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFhHZsTY(OatnYqyQCInmZhe+73JqDfIV%MiN!5$#>OTV zmQJqbj&7FN-2%~@g4-=7INhQTbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3bZLrpU z4+8_EzNd?0NX4xwm;JR}5=D-GOrOD;pAg~kCgqq;$5b`dO%kb%pO#Ny%|CSR^aU56 zDLE+%Q@S_JFxfP5lYm%U!=!`XSKeRyxNM5$*O&9E=U3L1KRdH`rc+UPfWobWA!T9>c<)3qZDT)|& zxUcO^yvH43RNlv2Y4F-S!t6PBoI_x(?N-Z`-g{QO|IW1U%J#PX+LGVe#RG!n+btgC z%yaPjJ5_u``mbc3*oFSu1z(UhcW)&fh!~ zW2NwdQ#+A0z2cbdHp7+fdln|XOE$B;yP!Tfd{5Q!zHcgOK%hRPgg&ebxsLQ0P$e1QUCw| literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/todo/todo-2x.png b/webtagger/static/components/flatui/images/todo/todo-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6924b7267e72560f2490046b306208589acb18db GIT binary patch literal 1401 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`v0qS*eb#%6HG&BP0HN~nIlo)agfHu3N7G;*DrnnX5=PH0b zZIy}JEoQjg0@0g-#Vt^OnB&x|4|I$^C~A?S8YToxKOiPN;Q~4Eq@S7xOz%a&gk6%e z%!h%2@wKOmV@SoVGc(V6F$IboclQ*(sujC5Bw)(xH`$SUo#nr08dbJVoK}?4Ba~nSN8>sLTkur}}mNgIS;K zUcdF*x2@HR<(}5?2pNn{XKECdst@bM+*x~E8EqCJIZr{@W z{Ya+q+*XAXRSMIe?({Y9_luokz44OGC6<_1mzPxN-R3>hD`#r3+Gd-w?gImJso8uT zrj=_pOt#JP6?xM*iFc#Wd+Du4%hz`w7bvdrmwnz^D#7#V`}+q|#sAsF8^+$OTSyd97#_0JmMoQ!ilSl4P-%BAyN>SQR<@ViXk=ZtT7uGX=BzvD%$a76?YdB8 zJ(NWC(hY(LDMN@7qND-?D=4UkB8(KG%S+LnN`fdlW3KhkHq6X9=jZ#r|2oqfX{Y1MtH`>vfCV&wBr>ga>Xwl9QIom?-rHuHA}1lJ!$V_PTGo68|*?p3P<`o1%?ox0m;Lyl$pu zE#qO?Am{Zn?vT5NtFNgIvECq?*8bJ%tO?JLy`3Ihe3%}6pyPQr@n9F1mVL(`#j|jr zK9(Lke?)YQFvX#9$Je=4g&7BIx_s?*<(IN|n+`wkD=3*cL~V>@X5C-0E3bL~kEXGE z1@xKn&&e=%VRUSucixOde*T)Cg4&)VO-I+49y_u3z|W;yE>%1}InP)8W}^4%73wYJ zKHD-98Q-_~(19NQnIm*)>#5ckQhfHE3jg55w`4>4>6T%MD=U2({x))kULM=_P8}+o zZPm9lj$AtZ@ztmDckLet5e_y6F05_c^9$-Hc)kDt literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/toggle/block-off.png b/webtagger/static/components/flatui/images/toggle/block-off.png new file mode 100644 index 0000000000000000000000000000000000000000..66cc2f4e44ba3a015743dba1c299c3fd7a90a361 GIT binary patch literal 961 zcmaJ=zi-n(6gEOaRZ+#l07yuO%K#Gb&)OxYn97b5YE(y28bQR=vwcZSYM*Ogh?9|x zg$0Qj303NZU}j)OVqt`dl?na?&S{(?L9lG!yQlYk?|b*&J#V+}Z>(Qi=QwV|*|j@t zycJM*v{aGlqOIVCzFXVQ3a9?M7dh6795IFVG)&V z8dH>4;%u{IuyN+6VM0R^gMtxxWK0d7DLpMAN|v;7wm2qsU}BCEQ5K}4q%zQT{~sDf z%jk@D@R{C!5@+3Mg2fKb$T;;`0c-a`bV`<~?PD{rT&=U+hw-j%{}HZ{C;p7f-y`>VbEKlb-xIIezo%#bfxF@!$rx YCUM7?&mHZ3@8aT8IgOV6);f6h8{1wivj6}9 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/toggle/block-on.png b/webtagger/static/components/flatui/images/toggle/block-on.png new file mode 100644 index 0000000000000000000000000000000000000000..68433847c2413f1448c5cab1caa08d0ecd31a4f6 GIT binary patch literal 954 zcmaJ=&2G~`5OzVTP^CTqNRd`9haxq0?8Giv#S}YsT1$0Ql1Su$L^t*(u~K`Dy&+Cc zEf?sG0}sIg@d6w;bKu5>ig)1W%7t|rCmaZt?VTOX_susuvzI5$!|km*TO7x2+ec=L zt%dBnb%XuC{`}Ep%WZ0PX`A%v1jU%sJ<`L#4$uI%F!H9)KH(b2-Ms5}y0q&YLze^s z%3_2xh!~pVY6oeA+!3arhX;PB@!vmuNfJ<1L8>UKD(wNe zB*|ily=qaaKt+Y}K3F_F%NBcm*fJZ7Tx_TDLrNnkij&Din3M$)4@9Y2t!5muTx1c& zWExVG7QvXb&Z$N7I~ z5Gr0&!-S&H#kQ&Oj6?8!4_0+qx^GqLsv#MYWXZZB>y3Tckgc+5Sc;NkP2!FN z9MT-?t+3`=Y&Hx*#4?*W_Mc;~5t9JSi-!JsE&5u%1=d@y#aN3KnHVu^?O(0VU2J|b zb2+$dvmAXKvU!i$V85z7eakMzo^9%#^s4vfs{Ha|^ZfEcJ^k|SQF8dXpiEZAlV9A! Z^9}Cx?~QlKabYvNO}5oE-y5ed{s7-WDIWj; literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/toggle/icon-off-2x.png b/webtagger/static/components/flatui/images/toggle/icon-off-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..03434f33fc127c8be86bfe2a2fc939e21ce10afa GIT binary patch literal 1516 zcmeAS@N?(olHy`uVBq!ia0vp^Hb88}!3HGXEVar9Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsTnsm{l@EB1$5BeXNr6bM+EIYV;~{3xK+T2HIB?BqnF4mMA2p zrf25aD!t#mUr8Y|#a1cY)Yrhbz&SM|)1#^=HMq(zB)KX(*)m1R-cG@$!U||WZfZ%Q zLPc&)Ua?h$trFN=DVPg@)As;uP=V3xw&xF#U(+h2=`(&xHzP;AXPso zwK%`DC>a=WY04n03ap%qQWHz^i$e1Ab6}wukda@KU!0L&px_*Arl8@Qn4Fmh63_(e z@b$Iw%quQQ%u7!7bg@+enxU7OnPO#T=4RpSYG!KYYH4g}=xXF>YUJoyn>bnwy$e0@Is<&})WMFDNnO765H_NiE7OOHFYr%Fk5*d)g`!i(A}WjNA+j z4Nc5k&0Vp(1)?_vw_AXEari?Y=oo!a)FMSSObD2MKumbT1#;j?KQ#}S-iv?k|1o=XUwxO3YhkL5`=$7a_) zJ(|K3_)akRP-aznvC_^Hfzp@MTCVf#-MmUQV0FPnuYTQ)JjY77rt8kGU;d)=vXYHl zG22q@w3WGU4t0y^H;L_Ry}U(WgXyzS_ngqg$QQ<9-030e%Bv2kvS0hA>i2LF^C4Hi zhfU0fSp6REVLnvp_ppcgkfh&3d*M}wa@k{U%{jE5k7Iukm$|G!UJ(~N9|!xKL#6C3 zujd@%J>#c zXU`g^tsXn1wxzhu^p1}Vn$DcneL?q*VEpciwJfR8SK9hG6D5mIf70-B zYI_mz&g1s7!fEZBF33x~dnxub$7Qd>ov#~w_T;~q%cl{pe9qOvj^RY87i&zmR%Gn1 zvex9Q$4ZYm`@KGQaPE&=uV*IiTDP@5>X-a(=Y@4SFP9g*x)Jo>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMj<>csM>SAQ z;^b;-3e)S7pIn-onpXnTn}X2mhEp#nG2|8iZFWg5$}CGwaVyHtRRDY1DigO`oN<~5 z)tiFbEiO3q>H{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkw4gj~8TMV2to|aSW-r z^=8^`FJ?!PwqCb0tqo0zw^;N;uZUDKDNZ=V-Q>S&f|H=r3GNjWVz-F6=!k47xGGWj zmu;EHM(J~D=NGv0{rSUfJtzN}!Sumi>wKw<)aOg-O?m<< Oc|2YHT-G@yGywoy9j{UV literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/toggle/icon-on-2x.png b/webtagger/static/components/flatui/images/toggle/icon-on-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1594a91f1a28516dfdf338870b430a96b091144a GIT binary patch literal 1610 zcmeAS@N?(olHy`uVBq!ia0vp^Hb88}!3HGXEVar9Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsTnsm{l@EB1$5BeXNr6bM+EIYV;~{3xK+T2HIB?BqnF4mMA2p zrf25aD!t#mUr8Y|#a1cY)Yrhbz&SM|)1#^=HMq(zB)KX(*)m1R-cG@$!U||WZfZ%Q zLPc&)Ua?h$trFN=DVPg@)As;uP=V3xw&xF#U(+h2=`(&xHzP;AXPso zwK%`DC>a=WY04n03ap%qQWHz^i$e1Ab6}wukda@KU!0L&px_*Arl8@Qn4Fmh63_(e z@b$Iw%quQQ%u7!7bg@+enxU7OnPO#T=4RpSYG!HXYH4g}=xXF>YUJoyn>bnwy$e0@Is<(Cdg(FDNnO765H_NiE7OOHFYr%Fk5*d)g`!w_D6{ng`XJ zg4-{_Iq{gmI@Gw;drYrutlMD*Tq)u@Uxf1TDFP&Vcn%2 zs$+WdC!?28x!ZQvrihJN+mw!!pWs}Qa9L&E&hlgD8rvg}oSAui^2sxIderBi@BXi8 z6Ly0uI#D~Pb?pacp}gpLo$p1=9Zl&EI5`@_9xT4De?ag=lkEhS*$;MI`g1=yIkb0s z+(r9M+fD6^!}d}&743A^~*34BgGQ|9Zp^=GT=wp2X~FOLH*3xqihvh404} zOBgTu@W5yKgyflF8!u~}dulR^wYNpwU|Ek*VprsZYbkfj z|GQDQG-k#U{);^g-r_0xn%@_mx_l}2QjxI`vpV0Yc>(8guO2^KbSbd?*_JaG%jF~2 zu`{r%{PnvysnogF-O?{N#^0u{^U&1xxDBT?c6-(O1@bNIE_fNFsK2$O+5dq%Z|$5* z)zvHXuPt7=DxT>nf3)y}sXsm^MeW}4JL%TG6(5tLwkEEZivp*f4Wio)y*s*=ftkUY W`+^MbpT&njrMsuApUXO@geCwiBWx@H literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/toggle/icon-on.png b/webtagger/static/components/flatui/images/toggle/icon-on.png new file mode 100644 index 0000000000000000000000000000000000000000..f6819adef9f29a92c84e4b6eb7b248d982ffd2a0 GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0vp^azHH0!3HGvF1f=4q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjW$9>SXyIyVVCH1#WN7GW z;^b;-3e)S7pIn-onpXnTn*!A9XyIt=YU+wxFDNnO765H_NiE7OOHFYr%Fk5*d)g`! zr&~;1ak~YgHwBAZApS6M!>Lyv=oo!a)FMSSObD2MKumbT1#;j?KQ#}S-iv?<`zNE< zO9lqUG*1`DkcwMxrk~Yj4HP+WU%@j-MfLQ}lZTpmTYEQb2$yr^w9fwD+&lNg?Ml0U zjDh#O#3pT;Fm=0=tqr!|a( zudC>9na(xqdDcQvy9aKc4}|`oaweB)r}=asaF zku8z++*7&qj~p@%{Y6T-lcuJw*e2S4aGB??x+6RyIY(qC?K+V7(C-AdM5nlJ`m7$- zjB8!H6AxT2%Wa8VTXCg$?TPH8weyb7y|75IT{GlFfO4LfW6W~F`^y#TE_a;P>^Lp; zabNmN%{y5~q~{%ded}!ri>m)6c1wdRs>OV9HXY9&o^z>DW4*UjIHp;3cJfAzr=PDn z?c$oO*Ly(h%b|@y5sihJ&33WT^MzkJw51*m7kcc!L4A3E#!RF4M)jRPqVu`$ACHas pF@Nc4lQ`~!|K}fxKRTU(nZZ`XIo3&V%T`c1`2I!o>gp literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/video/fullscreen-2x.png b/webtagger/static/components/flatui/images/video/fullscreen-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..79e75be014d36cc9549b6d5cffcf24211a335de7 GIT binary patch literal 1261 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#Lyv=oo!a)FMSSObD2MKumbT1#;j?KQ#}S-iv?Xf-&2ZDAy^~qopJY|&KP@&0pI<~PwPxEG`n#rBcv&$b^=-l_uvh!nmq*w;C@Aw`V z^d#~0@vRkC>KT*t73_R68U4NN{&5_UyRu=*luf^w1$Hxk)XWOK=c6(uB4qOvk#5IO z>HiK9Ib26>H_T|iC)V5`Dv-~bq*oQq!&K(5XQI@!$(NrMF+SSraK^3kC<7xKLz0Y( UNj95H4yXX~boFyt=akR{0M(7J0RR91 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/video/fullscreen.png b/webtagger/static/components/flatui/images/video/fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..abf74ddc8f8865c26fb0811b7861baddca05e2aa GIT binary patch literal 1254 zcmeAS@N?(olHy`uVBq!ia0vp^{6Or$!3HFc-q8IFq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjWoGVTYGhz;U~UNvY(rNgClg~gOG_hjQ$tfr zCrcAkm|mCsATTyT`as9%gQ6BGs$oLF^aEnT6E2VgPx`5O!1P`O zOxV}$-eoW_Fh+Q~IEGZ*dNa*1kI7KLb?*Vr2}NDHD+M$coK*CX>X;&RkgIbELsyQl zU&De%H6c?kPFeK_B6Adt?q|qICVxoV=E2qfWr^sU&o>_H)_wVKLvWr{xmDf8my~|k0pUkFi$#iMbln<=muB>ER z_D$gGHub)ftN5e^E;C)u4!_E}(op8F;}plI*Jgg1$-W>f=D2xAW2#tW#3SJ!U+yk^ zy{ar>>eJJOC%-2!cF9DB3ZHo)wLVN`smL9z4jIuW3hb6A9QleS{Gb1(yZ@1;=g-7i zyUMfT*D@L7B933HOq_e!X7M#B%eSvc0+l?Tu6{1-oD!M<-)Xu~ literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/video/pause-2x.png b/webtagger/static/components/flatui/images/video/pause-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f23db56b07c85c10c2bec386437e26c3dbf0e0dc GIT binary patch literal 1122 zcmaJ=T}TvB6dn>Sq^KzR5sKRw{n^g!tnREkxs^M!=8|KwF0~LvkI6HPi$_+)!Fz0xDY9vFEUg zq6#+Z$rMh>b%KfvM)7a~$A#hN}qjJhvSL{9J(blb82#6+(~~0wFN>&?K6zH46!;W-b;vMd((HErDgz z=`@orXOP{(a^Y~;;|K(N#KY%wnOJdsrc;_@kf5X5x`lOQ0*_H?LLE3llT2qzFsyl6 z)0t}%X&CD&7RxbyucVx#EdSrtFy_4-oPdAw{U@=L?6M%6fDY=gRWi8dQZJMxh&EI( zvXcn4=epR?iZF6okp;v?9&C{nRX07u))|B>3vtuIimAf56rl+RqwAUw6hopY`D39l zAKWa#sR35D0qm`98tc27K1DZI8)&5{>@?yPZFf0;Tg0|iXwHg~4V5Vq6 z&!3B!mv0WM<f_ae*hs#`6PIM z{Fe%bR$Y3z;nVirg}u|G-RmmPoV@h;LgsGa9)E!t%kG;V60V&n_HoZU;ON(P8rvAnK`d$amU&)`$0^VWq!6HTl8-Vt>Q4eX=81#sd7{a{7^ zThKc#jV$XQB=Y(w9Iv~D}bTfLS`!}*%do=(6 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/video/pause.png b/webtagger/static/components/flatui/images/video/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..abc9cffca77b90f6a5f9ce9d7786a8daf7b98e8f GIT binary patch literal 1090 zcmaJ=O-K|`93M3+OwI5h2F7EIFlcvn_Dg1PGk0dyjYe#D$*qWd&b)QUbv~SVx~p9@ z@FR%q&_RR(E66TUARX$^K@*|`Jp|>kpsR>bx9p9&+M#WjnfKnG-|zSTe0MrK+A7LU zmQfT{5p5S^WIay43r7!=|NAelEwa?&ND{}56wX2mQ7wwmgFsY+y(osDGCc4BHBnT_ zX*H3=N$CHH3nW4cB1ZP6@Zcs_769|TdK)~&D z$sU#k!JwP<2ZBNN9PoNrFXJI^(8c=sK#=z~g1v_(-Yg}>$Hdk>U*r^`(-@mP!(_8r zch=`NtX_uYIL^`VdR+wJvWImHb1vPk&nt+?mMzu9s-Xi%5%w5^I7E|3cT>>JeOcY! zD-$UglY=J1x;;)xd7vcyAF65lXdB1SLA?JIwiCl9Vq(ZP1}&L1E>-WiGI_y55F1v) zF#7XV>`WWju+xSKgm@4%NKjUF$8dIsAxV5xw=vXZ6cs}>(QvD(!m|;d81aXFja*P* z*@!pn_qB4Iw=uv5xG?7r9(V+SB&C$nvV>Aq8+X0I;QyoL*@o6B8rVdT~GlCMoQQ#ZzDj$CAx;E9PhYgaZL e_~NtA$Evz1nBj`&ANi-9TOEybh%dt3xBmd?EM+JF literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/video/play-2x.png b/webtagger/static/components/flatui/images/video/play-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..308390113bf9d1d0e8edef3077424d4afc15c1b6 GIT binary patch literal 1263 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yF!3HE>yta4*q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjWntjtW@utyY;I|0WN7GW}X

SAna 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 VryOuw&;}}VJzf1=);T3K0RVm+HpBn` literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/video/volume-full.png b/webtagger/static/components/flatui/images/video/volume-full.png new file mode 100644 index 0000000000000000000000000000000000000000..53d5e19d9ce111149106d505bf3a59337bc4b126 GIT binary patch literal 1221 zcmaJ>U2NM_6n2&>?b?N<3`#rkaODnd6U2_)*r~0ibsD!@#N3rMf(jK;|J){4=bzZO zOIpDe%1Z$uctC*05M$zD4}*aK326^RRVJ8t84^Fzgeq1L5Bz9CJZuvW<+^KH9tf80 zd+yQszVn@PkM0YT6Gx(*`#TAOh~|#UdA!E(Cv`;df8VpWUdKxx8kW?TghkxydVHJ8;t^ z*bG7QY4Wb9X=M^*9S;JI8i?x&h51=pfrh<-Yvm$w`pyEt4+9JbX9d}hDrn_H3Jpp|3fWnJK9HixTE(!iT%Q&3+X)c zodr+F2RGLrq;kcq2UX;F1;;tj?BZm}L5^Q?T#%jO!68M}O*?QL-b5&hn6rJP+B(e1 zX%cf#rfGGbH zXO^L7o`lA@=U8B~Xwht~g>A{Vg*94h8EA>6u^2iy+J7B&(}m|JFt-O6Z?;Dt+IZeQ zJlOl+j>rTNO6BBCp?Y0IFHy7g(CTy5NbFMk`hl4j-*i|0CjKNr53xR&6uJSmT9i6s zmv(9Vp?CU}wfj~s*9P}C)R1-(d`D>aT=+P1N^9I;yTDpk<7MfG-Ho@T$nWjiqmk8G z_pk5&ADLvC})XOCI{H~84JoDLbsN5U7*>+{QKc5^Q{ppSFBVhU7Z-on)b8TFoQ9oX) z)#^Dg9BTaaZsdIU)w2g<--pY)Vw4dwbWe>46Z}J0KfHFh QA_W&qZfrvSV03o*AFxY`y8r+H literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/video/volume-off-2x.png b/webtagger/static/components/flatui/images/video/volume-off-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..517175f43085a64a1e8e4677cb0331e9de86683e GIT binary patch literal 1197 zcmaJ>TWs4@7(R*V!lo`QAdPjR?8uw84lQ=j1Pg1{Yye3awaD0zhl7Zc-x$RB~54^5)E`lMKp zM>k`UlSEHr?1(H|sZ^NCAY;2zESE?md=8$E5RZsAZ(+3>vAlh41{rypYdF}jE$B0< zWqS@wG|BXS38u3}Yk8Y(A`N4!s>5a_4SOOrhHz%ix)jMT;hM9m=DcCB)bD=dV`4M$}xx)N*@MpM-Km1eI+V9C*J zMZOzOq)*=sc;MP1HQFCt3Evx8315;{!UKV|b*c&SuUzbF+zx%k2kSTT?{RDc1->}J#p$E+g*qC literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/images/video/volume-off.png b/webtagger/static/components/flatui/images/video/volume-off.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e95ed1874f68e3018a2644d72f380638211baa GIT binary patch literal 1145 zcmeAS@N?(olHy`uVBq!ia0vp^0zmA*!3HFSYrjteQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?@QuLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ@J&q4%mWE% zf_3=%T6yLbmn7yTr+T{BDgn*V%gju%GITX|aW!#tGq*HzHZ*iKaxyV?v$QlaH#Ic1 zbh0!th3R$4PcF?(%`1WFO@ZrmGQg=9lo)agfHu3N7G;*DrnnX5=PH0bZIy}JEiO3C zgX&Ge=@v&#DphYAP1iGQ}cl7y$G1F`3k&zfSKa8r;B4q z#jT{0ZoPy9jE5R4*aX(!-?_w|bGnk6%p*I8JscgZ4HkWj{0Gt;I0V)+C7Ef=mz>Y2 z<8X%Wh?K(_#!|Br{yjV{OcNM?H{O`k=ySlOGp(l4;s}q0-%7?lha83@Vh%Qf9segM zF=$BDGktW`_^%=`pW)HZ3nh+W5^ES9B`Ex3efnQjU0^$7A&bEN)@Ph^8b1F2|6kVIGO$Q6%viK^()1|#Nua{O)78&qol`;+0LglCfB*mh literal 0 HcmV?d00001 diff --git a/webtagger/static/components/flatui/index.html b/webtagger/static/components/flatui/index.html new file mode 100644 index 0000000..0ddcdaa --- /dev/null +++ b/webtagger/static/components/flatui/index.html @@ -0,0 +1,842 @@ + + + + + Flat UI + + + + + + + + + + + + + +

+
+

+ + Flat UI + Free Web User Interface Kit +

+
+ +

Basic elements

+

Buttons

+ +
+ + + +

Menu

+
+ +
+ +
+
+ +

Input

+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+ +

Alert

+
+
+
+ +

Warning!

+ Best check yo self, you're not looking too good. +
+
+
+
+

Danger!

+ Change a few things up and try submitting again. +
+
+
+
+ Success! You successfully read this important alert message. +
+
+
+
+ Info! This alert needs your attention, but it's not super important. +
+
+
+ +
+
+

Progress bars & Sliders

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+

Navigation

+
+
+
+
+ + + + +
+
+
+
+ +
+
+ + +
+
+ +
+
+

Checkboxes

+ + + + + +
+ +
+

Radio Buttons

+ + + + + +
+ +
+

Toggles

+ + + + + + + + + + + + +
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+
+ +
+

Tags

+ +
+
+ +
+
+

Share

+ +
+ +
+
+

Tooltips

+

+

+
+
+ +
+
+

Text Box

+

Lato is free web-font designed by Lukasz Dziedzic from Warsaw.

+

Here you can feel the color, size, line height and margins between paragraphs. Don’t forget to underline + your links, they are important visual marker for user.

+

Also, to attract attention you can mark some important words using bold weights.

+
+
+ +
+

Headings

+

Header

+

Header 2

+

Header 3

+

Header 4

+
Header 5
+
Header 6
+
+
+ +
+
+

Color Swatches

+
+
+
+
#1abc9c
+
Turquoise
+
+
+
#16a085
+
Green sea
+
+
+ +
+
+
#2ecc71
+
Emerland
+
+
+
#27ae60
+
Nephritis
+
+
+ +
+
+
#3498db
+
Peter river
+
+
+
#2980b9
+
Belize hole
+
+
+ +
+
+
#9b59b6
+
Amethyst
+
+
+
#8e44ad
+
Wisteria
+
+
+ +
+
+
#34495e
+
Wet asphalt
+
+
+
#2c3e50
+
Midnight blue
+
+
+
+ +
+
+
+
#f1c40f
+
Sun flower
+
+
+
#f39c12
+
Orange
+
+
+ +
+
+
#e67e22
+
Carrot
+
+
+
#d35400
+
Pumpkin
+
+
+ +
+
+
#e74c3c
+
Alizarin
+
+
+
#c0392b
+
Pomegranate
+
+
+ +
+
+
#ecf0f1
+
Clouds
+
+
+
#bdc3c7
+
Silver
+
+
+ +
+
+
#95a5a6
+
Concrete
+
+
+
#7f8c8d
+
Asbestos
+
+
+
+
+ +
+

 

+
SWATCHES
+

+ Colors — is almost the most important part of the Flat UI. Better to use different shades of provided colors than new. +

+

+ For your convenience we also provide Swatches Preset (flat‑ui‑swatches.aco in the Pack folder). +

+

+ No gradients, no shadows. +

+
+
+ +

Vector Icons (14)

+
+ + + + + + + +
+
+ + + + + + + +
+ +
+

Glyphs (20)

+
+ + + + + + + + + + + + + + + + + + + + + 24 pixel grid +
+ +
+ + + + + + + + + + + + + + + + + + + + + 16 pixel grid +
+
+ +

Samples

+
+
+
+ +
    +
  • +
    +
    +

    + Meet Adrian at 6pm +

    + Times Square +
    +
  • + +
  • +
    +
    +

    + Chat with V.Kudinov +

    + Skype conference an 9 am +
    +
  • + +
  • +
    +
    +

    + Watch Iron Man +

    + 1998 Broadway +
    +
  • + +
  • +
    +
    +

    + Fix bug on a Website +

    + As soon as possible +
    +
  • +
+
+
+ +
+ + + + + +
+
+ +
+
+
+ +

Web Oriented

+

100% convertable to HTML/CSS layout.

+ Get Pro +
+
+ +
+
+ +

Easy to Customize

+

Vector-based shapes and minimum of layer styles.

+ Get Pro +
+
+ +
+
+ +

Color Swatches

+

Easy to add or change elements.

+ Get Pro +
+
+ +
+
+ +

Free for Share

+

Your likes, shares and comments helps us.

+ Get Pro +
+ +
+
+ + + +
+
+
+
+
+ +
@monstercritic
+
+ Tourist. Designer. NYC + shmidt.in +
+
+
+ + + + + + +
+
+
+ +
+
+ +
+ + Download + +

Your likes, shares and comments make us happy!

+
+
+ +
+ +
+
+
+
+ +

Do you like this freebie? Want to get more stuff like this?
+ Subscribe to designmodo news and updates to stay tuned on great designs.
+ Go to: designmodo.com/flat-free +

+ +

+ + +

+ + + Designmodo.com + +
+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/webtagger/static/components/flatui/js/application.js b/webtagger/static/components/flatui/js/application.js new file mode 100644 index 0000000..752f723 --- /dev/null +++ b/webtagger/static/components/flatui/js/application.js @@ -0,0 +1,51 @@ +// Some general UI pack related JS + +$(function () { + // Custom selects + $("select").dropkick(); +}); + +$(document).ready(function() { + // Todo list + $(".todo li").click(function() { + $(this).toggleClass("todo-done"); + }); + + // Init tooltips + $("[data-toggle=tooltip]").tooltip("show"); + + // Init tags input + $("#tagsinput").tagsInput(); + + // Init jQuery UI slider + $("#slider").slider({ + min: 1, + max: 5, + value: 2, + orientation: "horizontal", + range: "min", + }); + + // JS input/textarea placeholder + $("input, textarea").placeholder(); + + // Make pagination demo work + $(".pagination a").click(function() { + if (!$(this).parent().hasClass("previous") && !$(this).parent().hasClass("next")) { + $(this).parent().siblings("li").removeClass("active"); + $(this).parent().addClass("active"); + } + }); + + $(".btn-group a").click(function() { + $(this).siblings().removeClass("active"); + $(this).addClass("active"); + }); + + // Disable link click not scroll top + $("a[href='#']").click(function() { + return false + }); + +}); + diff --git a/webtagger/static/components/flatui/js/bootstrap-tooltip.js b/webtagger/static/components/flatui/js/bootstrap-tooltip.js new file mode 100644 index 0000000..9813190 --- /dev/null +++ b/webtagger/static/components/flatui/js/bootstrap-tooltip.js @@ -0,0 +1,353 @@ +/* =========================================================== + * bootstrap-tooltip.js v2.3.0 + * http://twitter.github.com/bootstrap/javascript.html#tooltips + * Inspired by the original jQuery.tipsy by Jason Frame + * =========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* TOOLTIP PUBLIC CLASS DEFINITION + * =============================== */ + + var Tooltip = function (element, options) { + this.init('tooltip', element, options) + } + + Tooltip.prototype = { + + constructor: Tooltip + + , init: function (type, element, options) { + var eventIn + , eventOut + , triggers + , trigger + , i + + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.enabled = true + + triggers = this.options.trigger.split(' ') + + for (i = triggers.length; i--;) { + trigger = triggers[i] + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' + eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + , getOptions: function (options) { + options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay + , hide: options.delay + } + } + + return options + } + + , enter: function (e) { + var self = $(e.currentTarget)[this.type](this._options).data(this.type) + + if (!self.options.delay || !self.options.delay.show) return self.show() + + clearTimeout(this.timeout) + self.hoverState = 'in' + this.timeout = setTimeout(function() { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + , leave: function (e) { + var self = $(e.currentTarget)[this.type](this._options).data(this.type) + + if (this.timeout) clearTimeout(this.timeout) + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.hoverState = 'out' + this.timeout = setTimeout(function() { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + , show: function () { + var $tip + , pos + , actualWidth + , actualHeight + , placement + , tp + , e = $.Event('show') + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $tip = this.tip() + this.setContent() + + if (this.options.animation) { + $tip.addClass('fade') + } + + placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + pos = this.getPosition() + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + + switch (placement) { + case 'bottom': + tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'top': + tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'left': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} + break + case 'right': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} + break + } + + this.applyPlacement(tp, placement) + this.$element.trigger('shown') + } + } + + , applyPlacement: function(offset, placement){ + var $tip = this.tip() + , width = $tip[0].offsetWidth + , height = $tip[0].offsetHeight + , actualWidth + , actualHeight + , delta + , replace + + $tip + .offset(offset) + .addClass(placement) + .addClass('in') + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + replace = true + } + + if (placement == 'bottom' || placement == 'top') { + delta = 0 + + if (offset.left < 0){ + delta = offset.left * -2 + offset.left = 0 + $tip.offset(offset) + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + } + + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') + } else { + this.replaceArrow(actualHeight - height, actualHeight, 'top') + } + + if (replace) $tip.offset(offset) + } + + , replaceArrow: function(delta, dimension, position){ + this + .arrow() + .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + } + + , setContent: function () { + var $tip = this.tip() + , title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + , hide: function () { + var that = this + , $tip = this.tip() + , e = $.Event('hide') + + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + function removeWithAnimation() { + var timeout = setTimeout(function () { + $tip.off($.support.transition.end).detach() + }, 500) + + $tip.one($.support.transition.end, function () { + clearTimeout(timeout) + $tip.detach() + }) + } + + $.support.transition && this.$tip.hasClass('fade') ? + removeWithAnimation() : + $tip.detach() + + this.$element.trigger('hidden') + + return this + } + + , fixTitle: function () { + var $e = this.$element + if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + , hasContent: function () { + return this.getTitle() + } + + , getPosition: function () { + var el = this.$element[0] + return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { + width: el.offsetWidth + , height: el.offsetHeight + }, this.$element.offset()) + } + + , getTitle: function () { + var title + , $e = this.$element + , o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + , tip: function () { + return this.$tip = this.$tip || $(this.options.template) + } + + , arrow: function(){ + return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") + } + + , validate: function () { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null + } + } + + , enable: function () { + this.enabled = true + } + + , disable: function () { + this.enabled = false + } + + , toggleEnabled: function () { + this.enabled = !this.enabled + } + + , toggle: function (e) { + var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this + self.tip().hasClass('in') ? self.hide() : self.show() + } + + , destroy: function () { + this.hide().$element.off('.' + this.type).removeData(this.type) + } + + } + + + /* TOOLTIP PLUGIN DEFINITION + * ========================= */ + + var old = $.fn.tooltip + + $.fn.tooltip = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('tooltip') + , options = typeof option == 'object' && option + if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tooltip.Constructor = Tooltip + + $.fn.tooltip.defaults = { + animation: true + , placement: 'top' + , selector: false + , template: '
' + , trigger: 'hover focus' + , title: '' + , delay: 0 + , html: false + , container: false + } + + + /* TOOLTIP NO CONFLICT + * =================== */ + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(window.jQuery); diff --git a/webtagger/static/components/flatui/js/custom_checkbox_and_radio.js b/webtagger/static/components/flatui/js/custom_checkbox_and_radio.js new file mode 100644 index 0000000..a52c6e4 --- /dev/null +++ b/webtagger/static/components/flatui/js/custom_checkbox_and_radio.js @@ -0,0 +1,53 @@ +// Custom checkbox and radios +function setupLabel() { + // Checkbox + var checkBox = ".checkbox"; + var checkBoxInput = checkBox + " input[type='checkbox']"; + var checkBoxChecked = "checked"; + var checkBoxDisabled = "disabled"; + + // Radio + var radio = ".radio"; + var radioInput = radio + " input[type='radio']"; + var radioOn = "checked"; + var radioDisabled = "disabled"; + + // Checkboxes + if ($(checkBoxInput).length) { + $(checkBox).each(function(){ + $(this).removeClass(checkBoxChecked); + }); + $(checkBoxInput + ":checked").each(function(){ + $(this).parent(checkBox).addClass(checkBoxChecked); + }); + $(checkBoxInput + ":disabled").each(function(){ + $(this).parent(checkBox).addClass(checkBoxDisabled); + }); + }; + + // Radios + if ($(radioInput).length) { + $(radio).each(function(){ + $(this).removeClass(radioOn); + }); + $(radioInput + ":checked").each(function(){ + $(this).parent(radio).addClass(radioOn); + }); + $(radioInput + ":disabled").each(function(){ + $(this).parent(radio).addClass(radioDisabled); + }); + }; +}; + +$(document).ready(function(){ + $("html").addClass("has-js"); + + // First let's prepend icons (needed for effects) + $(".checkbox, .radio").prepend(""); + + $(".checkbox, .radio").click(function(){ + setupLabel(); + }); + setupLabel(); +}); + diff --git a/webtagger/static/components/flatui/js/custom_radio.js b/webtagger/static/components/flatui/js/custom_radio.js new file mode 100644 index 0000000..fd44ab9 --- /dev/null +++ b/webtagger/static/components/flatui/js/custom_radio.js @@ -0,0 +1,28 @@ +var toggleHandler = function(toggle) { + var toggle = toggle; + var radio = $(toggle).find("input"); + + var checkToggleState = function() { + if (radio.eq(0).is(":checked")) { + $(toggle).removeClass("toggle-off"); + } else { + $(toggle).addClass("toggle-off"); + } + }; + + checkToggleState(); + + radio.eq(0).click(function() { + $(toggle).toggleClass("toggle-off"); + }); + + radio.eq(1).click(function() { + $(toggle).toggleClass("toggle-off"); + }); +}; + +$(document).ready(function() { + $(".toggle").each(function(index, toggle) { + toggleHandler(toggle); + }); +}); diff --git a/webtagger/static/components/flatui/js/html5shiv.js b/webtagger/static/components/flatui/js/html5shiv.js new file mode 100644 index 0000000..784f221 --- /dev/null +++ b/webtagger/static/components/flatui/js/html5shiv.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); +for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d' + entity + '' + html; + } + var icons = { + 'fui-volume-16' : '', + 'fui-video-16' : '', + 'fui-time-16' : '', + 'fui-settings-16' : '', + 'fui-plus-16' : '', + 'fui-new-16' : '', + 'fui-menu-16' : '', + 'fui-man-16' : '', + 'fui-mail-16' : '', + 'fui-lock-16' : '', + 'fui-location-16' : '', + 'fui-heart-16' : '', + 'fui-eye-16' : '', + 'fui-cross-16' : '', + 'fui-cmd-16' : '', + 'fui-checkround-16' : '', + 'fui-checkmark-16' : '', + 'fui-camera-16' : '', + 'fui-calendar-16' : '', + 'fui-bubble-16' : '' + }, + els = document.getElementsByTagName('*'), + i, attr, html, c, el; + for (i = 0; i < els.length; i += 1) { + el = els[i]; + attr = el.getAttribute('data-icon'); + if (attr) { + addIcon(el, attr); + } + c = el.className; + c = c.match(/fui-[^\s'"]+/); + if (c && icons[c[0]]) { + addIcon(el, icons[c[0]]); + } + } +}; diff --git a/webtagger/static/components/flatui/js/jquery-1.8.2.min.js b/webtagger/static/components/flatui/js/jquery-1.8.2.min.js new file mode 100644 index 0000000..f65cf1d --- /dev/null +++ b/webtagger/static/components/flatui/js/jquery-1.8.2.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.2 jquery.com | jquery.org/license */ +(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
t
",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
","
"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/webtagger/static/components/flatui/js/jquery-ui-1.10.0.custom.min.js b/webtagger/static/components/flatui/js/jquery-ui-1.10.0.custom.min.js new file mode 100755 index 0000000..7b0b29f --- /dev/null +++ b/webtagger/static/components/flatui/js/jquery-ui-1.10.0.custom.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.10.0 - 2013-02-11 +* http://jqueryui.com +* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.datepicker.js, jquery.ui.slider.js, jquery.ui.tooltip.js, jquery.ui.effect.js +* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */ + +(function(e,t){function i(t,n){var r,i,o,u=t.nodeName.toLowerCase();return"area"===u?(r=t.parentNode,i=r.name,!t.href||!i||r.nodeName.toLowerCase()!=="map"?!1:(o=e("img[usemap=#"+i+"]")[0],!!o&&s(o))):(/input|select|textarea|button|object/.test(u)?!t.disabled:"a"===u?t.href||n:n)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return e.css(this,"visibility")==="hidden"}).length}var n=0,r=/^ui-id-\d+$/;e.ui=e.ui||{};if(e.ui.version)return;e.extend(e.ui,{version:"1.10.0",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({_focus:e.fn.focus,focus:function(t,n){return typeof t=="number"?this.each(function(){var r=this;setTimeout(function(){e(r).focus(),n&&n.call(r)},t)}):this._focus.apply(this,arguments)},scrollParent:function(){var t;return e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?t=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):t=this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(n){if(n!==t)return this.css("zIndex",n);if(this.length){var r=e(this[0]),i,s;while(r.length&&r[0]!==document){i=r.css("position");if(i==="absolute"||i==="relative"||i==="fixed"){s=parseInt(r.css("zIndex"),10);if(!isNaN(s)&&s!==0)return s}r=r.parent()}}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){r.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(n){return!!e.data(n,t)}}):function(t,n,r){return!!e.data(t,r[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),r=isNaN(n);return(r||n>=0)&&i(t,!r)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(n,r){function u(t,n,r,s){return e.each(i,function(){n-=parseFloat(e.css(t,"padding"+this))||0,r&&(n-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(n-=parseFloat(e.css(t,"margin"+this))||0)}),n}var i=r==="Width"?["Left","Right"]:["Top","Bottom"],s=r.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+r]=function(n){return n===t?o["inner"+r].call(this):this.each(function(){e(this).css(s,u(this,n)+"px")})},e.fn["outer"+r]=function(t,n){return typeof t!="number"?o["outer"+r].call(this,t):this.each(function(){e(this).css(s,u(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(n){return arguments.length?t.call(this,e.camelCase(n)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,n,r){var i,s=e.ui[t].prototype;for(i in r)s.plugins[i]=s.plugins[i]||[],s.plugins[i].push([n,r[i]])},call:function(e,t,n){var r,i=e.plugins[t];if(!i||!e.element[0].parentNode||e.element[0].parentNode.nodeType===11)return;for(r=0;r0?!0:(t[r]=1,i=t[r]>0,t[r]=0,i)}})})(jQuery);(function(e,t){var n=0,r=Array.prototype.slice,i=e.cleanData;e.cleanData=function(t){for(var n=0,r;(r=t[n])!=null;n++)try{e(r).triggerHandler("remove")}catch(s){}i(t)},e.widget=function(t,n,r){var i,s,o,u,a={},f=t.split(".")[0];t=t.split(".")[1],i=f+"-"+t,r||(r=n,n=e.Widget),e.expr[":"][i.toLowerCase()]=function(t){return!!e.data(t,i)},e[f]=e[f]||{},s=e[f][t],o=e[f][t]=function(e,t){if(!this._createWidget)return new o(e,t);arguments.length&&this._createWidget(e,t)},e.extend(o,s,{version:r.version,_proto:e.extend({},r),_childConstructors:[]}),u=new n,u.options=e.widget.extend({},u.options),e.each(r,function(t,r){if(!e.isFunction(r)){a[t]=r;return}a[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},i=function(e){return n.prototype[t].apply(this,e)};return function(){var t=this._super,n=this._superApply,s;return this._super=e,this._superApply=i,s=r.apply(this,arguments),this._super=t,this._superApply=n,s}}()}),o.prototype=e.widget.extend(u,{widgetEventPrefix:s?u.widgetEventPrefix:t},a,{constructor:o,namespace:f,widgetName:t,widgetFullName:i}),s?(e.each(s._childConstructors,function(t,n){var r=n.prototype;e.widget(r.namespace+"."+r.widgetName,o,n._proto)}),delete s._childConstructors):n._childConstructors.push(o),e.widget.bridge(t,o)},e.widget.extend=function(n){var i=r.call(arguments,1),s=0,o=i.length,u,a;for(;s",options:{disabled:!1,create:null},_createWidget:function(t,r){r=e(r||this.defaultElement||this)[0],this.element=e(r),this.uuid=n++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),r!==this&&(e.data(r,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===r&&this.destroy()}}),this.document=e(r.style?r.ownerDocument:r.document||r),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(n,r){var i=n,s,o,u;if(arguments.length===0)return e.widget.extend({},this.options);if(typeof n=="string"){i={},s=n.split("."),n=s.shift();if(s.length){o=i[n]=e.widget.extend({},this.options[n]);for(u=0;u=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e,t){function h(e,t,n){return[parseInt(e[0],10)*(l.test(e[0])?t/100:1),parseInt(e[1],10)*(l.test(e[1])?n/100:1)]}function p(t,n){return parseInt(e.css(t,n),10)||0}function d(t){var n=t[0];return n.nodeType===9?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(n)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:n.preventDefault?{width:0,height:0,offset:{top:n.pageY,left:n.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,r=Math.max,i=Math.abs,s=Math.round,o=/left|center|right/,u=/top|center|bottom/,a=/[\+\-]\d+%?/,f=/^\w+/,l=/%$/,c=e.fn.position;e.position={scrollbarWidth:function(){if(n!==t)return n;var r,i,s=e("
"),o=s.children()[0];return e("body").append(s),r=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,r===i&&(i=s[0].clientWidth),s.remove(),n=r-i},getScrollInfo:function(t){var n=t.isWindow?"":t.element.css("overflow-x"),r=t.isWindow?"":t.element.css("overflow-y"),i=n==="scroll"||n==="auto"&&t.width0?"right":"center",vertical:u<0?"top":o>0?"bottom":"middle"};lr(i(o),i(u))?h.important="horizontal":h.important="vertical",t.using.call(this,e,h)}),a.offset(e.extend(C,{using:u}))})},e.ui.position={fit:{left:function(e,t){var n=t.within,i=n.isWindow?n.scrollLeft:n.offset.left,s=n.width,o=e.left-t.collisionPosition.marginLeft,u=i-o,a=o+t.collisionWidth-s-i,f;t.collisionWidth>s?u>0&&a<=0?(f=e.left+u+t.collisionWidth-s-i,e.left+=u-f):a>0&&u<=0?e.left=i:u>a?e.left=i+s-t.collisionWidth:e.left=i:u>0?e.left+=u:a>0?e.left-=a:e.left=r(e.left-o,e.left)},top:function(e,t){var n=t.within,i=n.isWindow?n.scrollTop:n.offset.top,s=t.within.height,o=e.top-t.collisionPosition.marginTop,u=i-o,a=o+t.collisionHeight-s-i,f;t.collisionHeight>s?u>0&&a<=0?(f=e.top+u+t.collisionHeight-s-i,e.top+=u-f):a>0&&u<=0?e.top=i:u>a?e.top=i+s-t.collisionHeight:e.top=i:u>0?e.top+=u:a>0?e.top-=a:e.top=r(e.top-o,e.top)}},flip:{left:function(e,t){var n=t.within,r=n.offset.left+n.scrollLeft,s=n.width,o=n.isWindow?n.scrollLeft:n.offset.left,u=e.left-t.collisionPosition.marginLeft,a=u-o,f=u+t.collisionWidth-s-o,l=t.my[0]==="left"?-t.elemWidth:t.my[0]==="right"?t.elemWidth:0,c=t.at[0]==="left"?t.targetWidth:t.at[0]==="right"?-t.targetWidth:0,h=-2*t.offset[0],p,d;if(a<0){p=e.left+l+c+h+t.collisionWidth-s-r;if(p<0||p0){d=e.left-t.collisionPosition.marginLeft+l+c+h-o;if(d>0||i(d)a&&(v<0||v0&&(d=e.top-t.collisionPosition.marginTop+c+h+p-o,e.top+c+h+p>f&&(d>0||i(d)10&&i<11,t.innerHTML="",n.removeChild(t)}()})(jQuery);(function(e,t){function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.dpDiv=o(e("
"))}function o(t){var n="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(n,"mouseout",function(){e(this).removeClass("ui-state-hover"),this.className.indexOf("ui-datepicker-prev")!==-1&&e(this).removeClass("ui-datepicker-prev-hover"),this.className.indexOf("ui-datepicker-next")!==-1&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(n,"mouseover",function(){e.datepicker._isDisabledDatepicker(i.inline?t.parent()[0]:i.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),this.className.indexOf("ui-datepicker-prev")!==-1&&e(this).addClass("ui-datepicker-prev-hover"),this.className.indexOf("ui-datepicker-next")!==-1&&e(this).addClass("ui-datepicker-next-hover"))})}function u(t,n){e.extend(t,n);for(var r in n)n[r]==null&&(t[r]=n[r]);return t}e.extend(e.ui,{datepicker:{version:"1.10.0"}});var n="datepicker",r=(new Date).getTime(),i;e.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return u(this._defaults,e||{}),this},_attachDatepicker:function(t,n){var r,i,s;r=t.nodeName.toLowerCase(),i=r==="div"||r==="span",t.id||(this.uuid+=1,t.id="dp"+this.uuid),s=this._newInst(e(t),i),s.settings=e.extend({},n||{}),r==="input"?this._connectDatepicker(t,s):i&&this._inlineDatepicker(t,s)},_newInst:function(t,n){var r=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:r,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:n,dpDiv:n?o(e("
")):this.dpDiv}},_connectDatepicker:function(t,r){var i=e(t);r.append=e([]),r.trigger=e([]);if(i.hasClass(this.markerClassName))return;this._attachments(i,r),i.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(r),e.data(t,n,r),r.settings.disabled&&this._disableDatepicker(t)},_attachments:function(t,n){var r,i,s,o=this._get(n,"appendText"),u=this._get(n,"isRTL");n.append&&n.append.remove(),o&&(n.append=e(""+o+""),t[u?"before":"after"](n.append)),t.unbind("focus",this._showDatepicker),n.trigger&&n.trigger.remove(),r=this._get(n,"showOn"),(r==="focus"||r==="both")&&t.focus(this._showDatepicker);if(r==="button"||r==="both")i=this._get(n,"buttonText"),s=this._get(n,"buttonImage"),n.trigger=e(this._get(n,"buttonImageOnly")?e("").addClass(this._triggerClass).attr({src:s,alt:i,title:i}):e("").addClass(this._triggerClass).html(s?e("").attr({src:s,alt:i,title:i}):i)),t[u?"before":"after"](n.trigger),n.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1})},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,n,r,i,s=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){n=0,r=0;for(i=0;in&&(n=e[i].length,r=i);return r},s.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),s.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-s.getDay())),e.input.attr("size",this._formatDate(e,s).length)}},_inlineDatepicker:function(t,r){var i=e(t);if(i.hasClass(this.markerClassName))return;i.addClass(this.markerClassName).append(r.dpDiv),e.data(t,n,r),this._setDate(r,this._getDefaultDate(r),!0),this._updateDatepicker(r),this._updateAlternate(r),r.settings.disabled&&this._disableDatepicker(t),r.dpDiv.css("display","block")},_dialogDatepicker:function(t,r,i,s,o){var a,f,l,c,h,p=this._dialogInst;return p||(this.uuid+=1,a="dp"+this.uuid,this._dialogInput=e(""),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},e.data(this._dialogInput[0],n,p)),u(p.settings,s||{}),r=r&&r.constructor===Date?this._formatDate(p,r):r,this._dialogInput.val(r),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(f=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,h=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[f/2-100+c,l/2-150+h]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=i,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],n,p),this},_destroyDatepicker:function(t){var r,i=e(t),s=e.data(t,n);if(!i.hasClass(this.markerClassName))return;r=t.nodeName.toLowerCase(),e.removeData(t,n),r==="input"?(s.append.remove(),s.trigger.remove(),i.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(r==="div"||r==="span")&&i.removeClass(this.markerClassName).empty()},_enableDatepicker:function(t){var r,i,s=e(t),o=e.data(t,n);if(!s.hasClass(this.markerClassName))return;r=t.nodeName.toLowerCase();if(r==="input")t.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(r==="div"||r==="span")i=s.children("."+this._inlineClass),i.children().removeClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1);this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e})},_disableDatepicker:function(t){var r,i,s=e(t),o=e.data(t,n);if(!s.hasClass(this.markerClassName))return;r=t.nodeName.toLowerCase();if(r==="input")t.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(r==="div"||r==="span")i=s.children("."+this._inlineClass),i.children().addClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0);this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;t-1},_doKeyUp:function(t){var n,r=e.datepicker._getInst(t.target);if(r.input.val()!==r.lastVal)try{n=e.datepicker.parseDate(e.datepicker._get(r,"dateFormat"),r.input?r.input.val():null,e.datepicker._getFormatConfig(r)),n&&(e.datepicker._setDateFromField(r),e.datepicker._updateAlternate(r),e.datepicker._updateDatepicker(r))}catch(i){}return!0},_showDatepicker:function(t){t=t.target||t,t.nodeName.toLowerCase()!=="input"&&(t=e("input",t.parentNode)[0]);if(e.datepicker._isDisabledDatepicker(t)||e.datepicker._lastInput===t)return;var n,r,i,s,o,a,f;n=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==n&&(e.datepicker._curInst.dpDiv.stop(!0,!0),n&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),r=e.datepicker._get(n,"beforeShow"),i=r?r.apply(t,[t,n]):{};if(i===!1)return;u(n.settings,i),n.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(n),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),s=!1,e(t).parents().each(function(){return s|=e(this).css("position")==="fixed",!s}),o={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,n.dpDiv.empty(),n.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(n),o=e.datepicker._checkOffset(n,o,s),n.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":s?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),n.inline||(a=e.datepicker._get(n,"showAnim"),f=e.datepicker._get(n,"duration"),n.dpDiv.zIndex(e(t).zIndex()+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[a]?n.dpDiv.show(a,e.datepicker._get(n,"showOptions"),f):n.dpDiv[a||"show"](a?f:null),n.input.is(":visible")&&!n.input.is(":disabled")&&n.input.focus(),e.datepicker._curInst=n)},_updateDatepicker:function(t){this.maxRows=4,i=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t),t.dpDiv.find("."+this._dayOverClass+" a").mouseover();var n,r=this._getNumberOfMonths(t),s=r[1],o=17;t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),s>1&&t.dpDiv.addClass("ui-datepicker-multi-"+s).css("width",o*s+"em"),t.dpDiv[(r[0]!==1||r[1]!==1?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&t.input[0]!==document.activeElement&&t.input.focus(),t.yearshtml&&(n=t.yearshtml,setTimeout(function(){n===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),n=t.yearshtml=null},0))},_getBorders:function(e){var t=function(e){return{thin:1,medium:2,thick:3}[e]||e};return[parseFloat(t(e.css("border-left-width"))),parseFloat(t(e.css("border-top-width")))]},_checkOffset:function(t,n,r){var i=t.dpDiv.outerWidth(),s=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,u=t.input?t.input.outerHeight():0,a=document.documentElement.clientWidth+(r?0:e(document).scrollLeft()),f=document.documentElement.clientHeight+(r?0:e(document).scrollTop());return n.left-=this._get(t,"isRTL")?i-o:0,n.left-=r&&n.left===t.input.offset().left?e(document).scrollLeft():0,n.top-=r&&n.top===t.input.offset().top+u?e(document).scrollTop():0,n.left-=Math.min(n.left,n.left+i>a&&a>i?Math.abs(n.left+i-a):0),n.top-=Math.min(n.top,n.top+s>f&&f>s?Math.abs(s+u):0),n},_findPos:function(t){var n,r=this._getInst(t),i=this._get(r,"isRTL");while(t&&(t.type==="hidden"||t.nodeType!==1||e.expr.filters.hidden(t)))t=t[i?"previousSibling":"nextSibling"];return n=e(t).offset(),[n.left,n.top]},_hideDatepicker:function(t){var r,i,s,o,u=this._curInst;if(!u||t&&u!==e.data(t,n))return;this._datepickerShowing&&(r=this._get(u,"showAnim"),i=this._get(u,"duration"),s=function(){e.datepicker._tidyDialog(u)},e.effects&&(e.effects.effect[r]||e.effects[r])?u.dpDiv.hide(r,e.datepicker._get(u,"showOptions"),i,s):u.dpDiv[r==="slideDown"?"slideUp":r==="fadeIn"?"fadeOut":"hide"](r?i:null,s),r||s(),this._datepickerShowing=!1,o=this._get(u,"onClose"),o&&o.apply(u.input?u.input[0]:null,[u.input?u.input.val():"",u]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(!e.datepicker._curInst)return;var n=e(t.target),r=e.datepicker._getInst(n[0]);(n[0].id!==e.datepicker._mainDivId&&n.parents("#"+e.datepicker._mainDivId).length===0&&!n.hasClass(e.datepicker.markerClassName)&&!n.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||n.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==r)&&e.datepicker._hideDatepicker()},_adjustDate:function(t,n,r){var i=e(t),s=this._getInst(i[0]);if(this._isDisabledDatepicker(i[0]))return;this._adjustInstDate(s,n+(r==="M"?this._get(s,"showCurrentAtPos"):0),r),this._updateDatepicker(s)},_gotoToday:function(t){var n,r=e(t),i=this._getInst(r[0]);this._get(i,"gotoCurrent")&&i.currentDay?(i.selectedDay=i.currentDay,i.drawMonth=i.selectedMonth=i.currentMonth,i.drawYear=i.selectedYear=i.currentYear):(n=new Date,i.selectedDay=n.getDate(),i.drawMonth=i.selectedMonth=n.getMonth(),i.drawYear=i.selectedYear=n.getFullYear()),this._notifyChange(i),this._adjustDate(r)},_selectMonthYear:function(t,n,r){var i=e(t),s=this._getInst(i[0]);s["selected"+(r==="M"?"Month":"Year")]=s["draw"+(r==="M"?"Month":"Year")]=parseInt(n.options[n.selectedIndex].value,10),this._notifyChange(s),this._adjustDate(i)},_selectDay:function(t,n,r,i){var s,o=e(t);if(e(i).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))return;s=this._getInst(o[0]),s.selectedDay=s.currentDay=e("a",i).html(),s.selectedMonth=s.currentMonth=n,s.selectedYear=s.currentYear=r,this._selectDate(t,this._formatDate(s,s.currentDay,s.currentMonth,s.currentYear))},_clearDate:function(t){var n=e(t);this._selectDate(n,"")},_selectDate:function(t,n){var r,i=e(t),s=this._getInst(i[0]);n=n!=null?n:this._formatDate(s),s.input&&s.input.val(n),this._updateAlternate(s),r=this._get(s,"onSelect"),r?r.apply(s.input?s.input[0]:null,[n,s]):s.input&&s.input.trigger("change"),s.inline?this._updateDatepicker(s):(this._hideDatepicker(),this._lastInput=s.input[0],typeof s.input[0]!="object"&&s.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var n,r,i,s=this._get(t,"altField");s&&(n=this._get(t,"altFormat")||this._get(t,"dateFormat"),r=this._getDate(t),i=this.formatDate(n,r,this._getFormatConfig(t)),e(s).each(function(){e(this).val(i)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&t<6,""]},iso8601Week:function(e){var t,n=new Date(e.getTime());return n.setDate(n.getDate()+4-(n.getDay()||7)),t=n.getTime(),n.setMonth(0),n.setDate(1),Math.floor(Math.round((t-n)/864e5)/7)+1},parseDate:function(t,n,r){if(t==null||n==null)throw"Invalid arguments";n=typeof n=="object"?n.toString():n+"";if(n==="")return null;var i,s,o,u=0,a=(r?r.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=typeof a!="string"?a:(new Date).getFullYear()%100+parseInt(a,10),l=(r?r.dayNamesShort:null)||this._defaults.dayNamesShort,c=(r?r.dayNames:null)||this._defaults.dayNames,h=(r?r.monthNamesShort:null)||this._defaults.monthNamesShort,p=(r?r.monthNames:null)||this._defaults.monthNames,d=-1,v=-1,m=-1,g=-1,y=!1,b,w=function(e){var n=i+1-1){v=1,m=g;do{s=this._getDaysInMonth(d,v-1);if(m<=s)break;v++,m-=s}while(!0)}b=this._daylightSavingAdjust(new Date(d,v-1,m));if(b.getFullYear()!==d||b.getMonth()+1!==v||b.getDate()!==m)throw"Invalid date";return b},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(e,t,n){if(!t)return"";var r,i=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,s=(n?n.dayNames:null)||this._defaults.dayNames,o=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,u=(n?n.monthNames:null)||this._defaults.monthNames,a=function(t){var n=r+112?e.getHours()+2:0),e):null},_setDate:function(e,t,n){var r=!t,i=e.selectedMonth,s=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),(i!==e.selectedMonth||s!==e.selectedYear)&&!n&&this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(r?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&e.input.val()===""?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var n=this._get(t,"stepMonths"),i="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){window["DP_jQuery_"+r].datepicker._adjustDate(i,-n,"M")},next:function(){window["DP_jQuery_"+r].datepicker._adjustDate(i,+n,"M")},hide:function(){window["DP_jQuery_"+r].datepicker._hideDatepicker()},today:function(){window["DP_jQuery_"+r].datepicker._gotoToday(i)},selectDay:function(){return window["DP_jQuery_"+r].datepicker._selectDay(i,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return window["DP_jQuery_"+r].datepicker._selectMonthYear(i,this,"M"),!1},selectYear:function(){return window["DP_jQuery_"+r].datepicker._selectMonthYear(i,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q=new Date,R=this._daylightSavingAdjust(new Date(q.getFullYear(),q.getMonth(),q.getDate())),U=this._get(e,"isRTL"),z=this._get(e,"showButtonPanel"),W=this._get(e,"hideIfNoPrevNext"),X=this._get(e,"navigationAsDateFormat"),V=this._getNumberOfMonths(e),$=this._get(e,"showCurrentAtPos"),J=this._get(e,"stepMonths"),K=V[0]!==1||V[1]!==1,Q=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(e,"min"),Y=this._getMinMaxDate(e,"max"),Z=e.drawMonth-$,et=e.drawYear;Z<0&&(Z+=12,et--);if(Y){t=this._daylightSavingAdjust(new Date(Y.getFullYear(),Y.getMonth()-V[0]*V[1]+1,Y.getDate())),t=G&&tt)Z--,Z<0&&(Z=11,et--)}e.drawMonth=Z,e.drawYear=et,n=this._get(e,"prevText"),n=X?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z-J,1)),this._getFormatConfig(e)):n,r=this._canAdjustMonth(e,-1,et,Z)?"
"+n+"":W?"":""+n+"",i=this._get(e,"nextText"),i=X?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z+J,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,1,et,Z)?""+i+"":W?"":""+i+"",o=this._get(e,"currentText"),u=this._get(e,"gotoCurrent")&&e.currentDay?Q:R,o=X?this.formatDate(o,u,this._getFormatConfig(e)):o,a=e.inline?"":"",f=z?"
"+(U?a:"")+(this._isInRange(e,u)?"":"")+(U?"":a)+"
":"",l=parseInt(this._get(e,"firstDay"),10),l=isNaN(l)?0:l,c=this._get(e,"showWeek"),h=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),d=this._get(e,"monthNames"),v=this._get(e,"monthNamesShort"),m=this._get(e,"beforeShowDay"),g=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),w="",E;for(S=0;S1)switch(T){case 0:k+=" ui-datepicker-group-first",C=" ui-corner-"+(U?"right":"left");break;case V[1]-1:k+=" ui-datepicker-group-last",C=" ui-corner-"+(U?"left":"right");break;default:k+=" ui-datepicker-group-middle",C=""}k+="'>"}k+="
"+(/all|left/.test(C)&&S===0?U?s:r:"")+(/all|right/.test(C)&&S===0?U?r:s:"")+this._generateMonthYearHeader(e,Z,et,G,Y,S>0||T>0,d,v)+"
"+"",L=c?"":"";for(E=0;E<7;E++)A=(E+l)%7,L+="=5?" class='ui-datepicker-week-end'":"")+">"+""+p[A]+"";k+=L+"",O=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,O)),M=(this._getFirstDayOfMonth(et,Z)-l+7)%7,_=Math.ceil((M+O)/7),D=K?this.maxRows>_?this.maxRows:_:_,this.maxRows=D,P=this._daylightSavingAdjust(new Date(et,Z,1-M));for(H=0;H",B=c?"":"";for(E=0;E<7;E++)j=m?m.apply(e.input?e.input[0]:null,[P]):[!0,""],F=P.getMonth()!==Z,I=F&&!y||!j[0]||G&&PY,B+="",P.setDate(P.getDate()+1),P=this._daylightSavingAdjust(P);k+=B+""}Z++,Z>11&&(Z=0,et++),k+="
"+this._get(e,"weekHeader")+"
"+this._get(e,"calculateWeek")(P)+""+(F&&!g?" ":I?""+P.getDate()+"":""+P.getDate()+"")+"
"+(K?""+(V[0]>0&&T===V[1]-1?"
":""):""),x+=k}w+=x}return w+=f,e._keyEvent=!1,w},_generateMonthYearHeader:function(e,t,n,r,i,s,o,u){var a,f,l,c,h,p,d,v,m=this._get(e,"changeMonth"),g=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="
",w="";if(s||!m)w+=""+o[t]+"";else{a=r&&r.getFullYear()===n,f=i&&i.getFullYear()===n,w+=""}y||(b+=w+(s||!m||!g?" ":""));if(!e.yearshtml){e.yearshtml="";if(s||!g)b+=""+n+"";else{c=this._get(e,"yearRange").split(":"),h=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?n+parseInt(e.substring(1),10):e.match(/[+\-].*/)?h+parseInt(e,10):parseInt(e,10);return isNaN(t)?h:t},d=p(c[0]),v=Math.max(d,p(c[1]||"")),d=r?Math.max(d,r.getFullYear()):d,v=i?Math.min(v,i.getFullYear()):v,e.yearshtml+="",b+=e.yearshtml,e.yearshtml=null}}return b+=this._get(e,"yearSuffix"),y&&(b+=(s||!m||!g?" ":"")+w),b+="
",b},_adjustInstDate:function(e,t,n){var r=e.drawYear+(n==="Y"?t:0),i=e.drawMonth+(n==="M"?t:0),s=Math.min(e.selectedDay,this._getDaysInMonth(r,i))+(n==="D"?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(r,i,s)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),(n==="M"||n==="Y")&&this._notifyChange(e)},_restrictMinMax:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max"),i=n&&tr?r:i},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return t==null?[1,1]:typeof t=="number"?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return(new Date(e,t,1)).getDay()},_canAdjustMonth:function(e,t,n,r){var i=this._getNumberOfMonths(e),s=this._daylightSavingAdjust(new Date(n,r+(t<0?t:i[0]*i[1]),1));return t<0&&s.setDate(this._getDaysInMonth(s.getFullYear(),s.getMonth())),this._isInRange(e,s)},_isInRange:function(e,t){var n,r,i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),o=null,u=null,a=this._get(e,"yearRange");return a&&(n=a.split(":"),r=(new Date).getFullYear(),o=parseInt(n[0],10)+r,u=parseInt(n[1],10)+r),(!i||t.getTime()>=i.getTime())&&(!s||t.getTime()<=s.getTime())&&(!o||t.getFullYear()>=o)&&(!u||t.getFullYear()<=u)},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t=typeof t!="string"?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,n,r){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var i=t?typeof t=="object"?t:this._daylightSavingAdjust(new Date(r,n,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),i,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),e("#"+e.datepicker._mainDivId).length===0&&e("body").append(e.datepicker.dpDiv);var n=Array.prototype.slice.call(arguments,1);return typeof t!="string"||t!=="isDisabled"&&t!=="getDate"&&t!=="widget"?t==="option"&&arguments.length===2&&typeof arguments[1]=="string"?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(n)):this.each(function(){typeof t=="string"?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(n)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(n))},e.datepicker=new s,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.10.0",window["DP_jQuery_"+r]=e})(jQuery);(function(e,t){var n=5;e.widget("ui.slider",e.ui.mouse,{version:"1.10.0",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){var t,n,r=this.options,i=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),s="",o=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this.range=e([]),r.range&&(r.range===!0&&(r.values?r.values.length&&r.values.length!==2?r.values=[r.values[0],r.values[0]]:e.isArray(r.values)&&(r.values=r.values.slice(0)):r.values=[this._valueMin(),this._valueMin()]),this.range=e("
").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(r.range==="min"||r.range==="max"?" ui-slider-range-"+r.range:""))),n=r.values&&r.values.length||1;for(t=i.length;tn||i===n&&(t===l._lastChangedValue||l.values(t)===c.min))i=n,s=e(this),o=t}),u=this._start(t,o),u===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,s.addClass("ui-state-active").focus(),a=s.offset(),f=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=f?{left:0,top:0}:{left:t.pageX-a.left-s.width()/2,top:t.pageY-a.top-s.height()/2-(parseInt(s.css("borderTopWidth"),10)||0)-(parseInt(s.css("borderBottomWidth"),10)||0)+(parseInt(s.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,r),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},n=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,n),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,n,r,i,s;return this.orientation==="horizontal"?(t=this.elementSize.width,n=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,n=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),r=n/t,r>1&&(r=1),r<0&&(r=0),this.orientation==="vertical"&&(r=1-r),i=this._valueMax()-this._valueMin(),s=this._valueMin()+r*i,this._trimAlignValue(s)},_start:function(e,t){var n={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(n.value=this.values(t),n.values=this.values()),this._trigger("start",e,n)},_slide:function(e,t,n){var r,i,s;this.options.values&&this.options.values.length?(r=this.values(t?0:1),this.options.values.length===2&&this.options.range===!0&&(t===0&&n>r||t===1&&n1){this.options.values[t]=this._trimAlignValue(n),this._refreshValue(),this._change(null,t);return}if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();r=this.options.values,i=arguments[0];for(s=0;s=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,n=(e-this._valueMin())%t,r=e-n;return Math.abs(n)*2>=t&&(r+=n>0?t:-t),parseFloat(r.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,n,r,i,s,o=this.options.range,u=this.options,a=this,f=this._animateOff?!1:u.animate,l={};this.options.values&&this.options.values.length?this.handles.each(function(r){n=(a.values(r)-a._valueMin())/(a._valueMax()-a._valueMin())*100,l[a.orientation==="horizontal"?"left":"bottom"]=n+"%",e(this).stop(1,1)[f?"animate":"css"](l,u.animate),a.options.range===!0&&(a.orientation==="horizontal"?(r===0&&a.range.stop(1,1)[f?"animate":"css"]({left:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({width:n-t+"%"},{queue:!1,duration:u.animate})):(r===0&&a.range.stop(1,1)[f?"animate":"css"]({bottom:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({height:n-t+"%"},{queue:!1,duration:u.animate}))),t=n}):(r=this.value(),i=this._valueMin(),s=this._valueMax(),n=s!==i?(r-i)/(s-i)*100:0,l[this.orientation==="horizontal"?"left":"bottom"]=n+"%",this.handle.stop(1,1)[f?"animate":"css"](l,u.animate),o==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[f?"animate":"css"]({width:n+"%"},u.animate),o==="max"&&this.orientation==="horizontal"&&this.range[f?"animate":"css"]({width:100-n+"%"},{queue:!1,duration:u.animate}),o==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[f?"animate":"css"]({height:n+"%"},u.animate),o==="max"&&this.orientation==="vertical"&&this.range[f?"animate":"css"]({height:100-n+"%"},{queue:!1,duration:u.animate}))},_handleEvents:{keydown:function(t){var r,i,s,o,u=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:t.preventDefault();if(!this._keySliding){this._keySliding=!0,e(t.target).addClass("ui-state-active"),r=this._start(t,u);if(r===!1)return}}o=this.options.step,this.options.values&&this.options.values.length?i=s=this.values(u):i=s=this.value();switch(t.keyCode){case e.ui.keyCode.HOME:s=this._valueMin();break;case e.ui.keyCode.END:s=this._valueMax();break;case e.ui.keyCode.PAGE_UP:s=this._trimAlignValue(i+(this._valueMax()-this._valueMin())/n);break;case e.ui.keyCode.PAGE_DOWN:s=this._trimAlignValue(i-(this._valueMax()-this._valueMin())/n);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(i===this._valueMax())return;s=this._trimAlignValue(i+o);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(i===this._valueMin())return;s=this._trimAlignValue(i-o)}this._slide(t,u,s)},keyup:function(t){var n=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,n),this._change(t,n),e(t.target).removeClass("ui-state-active"))}}})})(jQuery);(function(e){function n(t,n){var r=(t.attr("aria-describedby")||"").split(/\s+/);r.push(n),t.data("ui-tooltip-id",n).attr("aria-describedby",e.trim(r.join(" ")))}function r(t){var n=t.data("ui-tooltip-id"),r=(t.attr("aria-describedby")||"").split(/\s+/),i=e.inArray(n,r);i!==-1&&r.splice(i,1),t.removeData("ui-tooltip-id"),r=e.trim(r.join(" ")),r?t.attr("aria-describedby",r):t.removeAttr("aria-describedby")}var t=0;e.widget("ui.tooltip",{version:"1.10.0",options:{content:function(){var t=e(this).attr("title")||"";return e("").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(t,n){var r=this;if(t==="disabled"){this[n?"_disable":"_enable"](),this.options[t]=n;return}this._super(t,n),t==="content"&&e.each(this.tooltips,function(e,t){r._updateContent(t)})},_disable:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var n=this,r=e(t?t.target:this.element).closest(this.options.items);if(!r.length||r.data("ui-tooltip-id"))return;r.attr("title")&&r.data("ui-tooltip-title",r.attr("title")),r.data("ui-tooltip-open",!0),t&&t.type==="mouseover"&&r.parents().each(function(){var t=e(this),r;t.data("ui-tooltip-open")&&(r=e.Event("blur"),r.target=r.currentTarget=this,n.close(r,!0)),t.attr("title")&&(t.uniqueId(),n.parents[this.id]={element:this,title:t.attr("title")},t.attr("title",""))}),this._updateContent(r,t)},_updateContent:function(e,t){var n,r=this.options.content,i=this,s=t?t.type:null;if(typeof r=="string")return this._open(t,e,r);n=r.call(e[0],function(n){if(!e.data("ui-tooltip-open"))return;i._delay(function(){t&&(t.type=s),this._open(t,e,n)})}),n&&this._open(t,e,n)},_open:function(t,r,i){function f(e){a.of=e;if(s.is(":hidden"))return;s.position(a)}var s,o,u,a=e.extend({},this.options.position);if(!i)return;s=this._find(r);if(s.length){s.find(".ui-tooltip-content").html(i);return}r.is("[title]")&&(t&&t.type==="mouseover"?r.attr("title",""):r.removeAttr("title")),s=this._tooltip(r),n(r,s.attr("id")),s.find(".ui-tooltip-content").html(i),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:f}),f(t)):s.position(e.extend({of:r},this.options.position)),s.hide(),this._show(s,this.options.show),this.options.show&&this.options.show.delay&&(u=this.delayedShow=setInterval(function(){s.is(":visible")&&(f(a.of),clearInterval(u))},e.fx.interval)),this._trigger("open",t,{tooltip:s}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var n=e.Event(t);n.currentTarget=r[0],this.close(n,!0)}},remove:function(){this._removeTooltip(s)}};if(!t||t.type==="mouseover")o.mouseleave="close";if(!t||t.type==="focusin")o.focusout="close";this._on(!0,r,o)},close:function(t){var n=this,i=e(t?t.currentTarget:this.element),s=this._find(i);if(this.closing)return;clearInterval(this.delayedShow),i.data("ui-tooltip-title")&&i.attr("title",i.data("ui-tooltip-title")),r(i),s.stop(!0),this._hide(s,this.options.hide,function(){n._removeTooltip(e(this))}),i.removeData("ui-tooltip-open"),this._off(i,"mouseleave focusout keyup"),i[0]!==this.element[0]&&this._off(i,"remove"),this._off(this.document,"mousemove"),t&&t.type==="mouseleave"&&e.each(this.parents,function(t,r){e(r.element).attr("title",r.title),delete n.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:s}),this.closing=!1},_tooltip:function(n){var r="ui-tooltip-"+t++,i=e("
").attr({id:r,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return e("
").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[r]=n,i},_find:function(t){var n=t.data("ui-tooltip-id");return n?e("#"+n):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0),e("#"+n).remove(),r.data("ui-tooltip-title")&&(r.attr("title",r.data("ui-tooltip-title")),r.removeData("ui-tooltip-title"))})}})})(jQuery);jQuery.effects||function(e,t){var n="ui-effects-";e.effects={effect:{}},function(e,t){function h(e,t,n){var r=u[t.type]||{};return e==null?n||!t.def?null:t.def:(e=r.floor?~~e:parseFloat(e),isNaN(e)?t.def:r.mod?(e+r.mod)%r.mod:0>e?0:r.max")[0],l,c=e.each;f.style.cssText="background-color:rgba(1,1,1,.5)",a.rgba=f.style.backgroundColor.indexOf("rgba")>-1,c(o,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),s.fn=e.extend(s.prototype,{parse:function(n,r,i,u){if(n===t)return this._rgba=[null,null,null,null],this;if(n.jquery||n.nodeType)n=e(n).css(r),r=t;var a=this,f=e.type(n),d=this._rgba=[];r!==t&&(n=[n,r,i,u],f="array");if(f==="string")return this.parse(p(n)||l._default);if(f==="array")return c(o.rgba.props,function(e,t){d[t.idx]=h(n[t.idx],t)}),this;if(f==="object")return n instanceof s?c(o,function(e,t){n[t.cache]&&(a[t.cache]=n[t.cache].slice())}):c(o,function(t,r){var i=r.cache;c(r.props,function(e,t){if(!a[i]&&r.to){if(e==="alpha"||n[e]==null)return;a[i]=r.to(a._rgba)}a[i][t.idx]=h(n[e],t,!0)}),a[i]&&e.inArray(null,a[i].slice(0,3))<0&&(a[i][3]=1,r.from&&(a._rgba=r.from(a[i])))}),this},is:function(e){var t=s(e),n=!0,r=this;return c(o,function(e,i){var s,o=t[i.cache];return o&&(s=r[i.cache]||i.to&&i.to(r._rgba)||[],c(i.props,function(e,t){if(o[t.idx]!=null)return n=o[t.idx]===s[t.idx],n})),n}),n},_space:function(){var e=[],t=this;return c(o,function(n,r){t[r.cache]&&e.push(n)}),e.pop()},transition:function(e,t){var n=s(e),r=n._space(),i=o[r],a=this.alpha()===0?s("transparent"):this,f=a[i.cache]||i.to(a._rgba),l=f.slice();return n=n[i.cache],c(i.props,function(e,r){var i=r.idx,s=f[i],o=n[i],a=u[r.type]||{};if(o===null)return;s===null?l[i]=o:(a.mod&&(o-s>a.mod/2?s+=a.mod:s-o>a.mod/2&&(s-=a.mod)),l[i]=h((o-s)*t+s,r))}),this[r](l)},blend:function(t){if(this._rgba[3]===1)return this;var n=this._rgba.slice(),r=n.pop(),i=s(t)._rgba;return s(e.map(n,function(e,t){return(1-r)*i[t]+r*e}))},toRgbaString:function(){var t="rgba(",n=e.map(this._rgba,function(e,t){return e==null?t>2?1:0:e});return n[3]===1&&(n.pop(),t="rgb("),t+n.join()+")"},toHslaString:function(){var t="hsla(",n=e.map(this.hsla(),function(e,t){return e==null&&(e=t>2?1:0),t&&t<3&&(e=Math.round(e*100)+"%"),e});return n[3]===1&&(n.pop(),t="hsl("),t+n.join()+")"},toHexString:function(t){var n=this._rgba.slice(),r=n.pop();return t&&n.push(~~(r*255)),"#"+e.map(n,function(e){return e=(e||0).toString(16),e.length===1?"0"+e:e}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}}),s.fn.parse.prototype=s.fn,o.hsla.to=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=e[3],s=Math.max(t,n,r),o=Math.min(t,n,r),u=s-o,a=s+o,f=a*.5,l,c;return o===s?l=0:t===s?l=60*(n-r)/u+360:n===s?l=60*(r-t)/u+120:l=60*(t-n)/u+240,u===0?c=0:f<=.5?c=u/a:c=u/(2-a),[Math.round(l)%360,c,f,i==null?1:i]},o.hsla.from=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/360,n=e[1],r=e[2],i=e[3],s=r<=.5?r*(1+n):r+n-r*n,o=2*r-s;return[Math.round(d(o,s,t+1/3)*255),Math.round(d(o,s,t)*255),Math.round(d(o,s,t-1/3)*255),i]},c(o,function(n,i){var o=i.props,u=i.cache,a=i.to,f=i.from;s.fn[n]=function(n){a&&!this[u]&&(this[u]=a(this._rgba));if(n===t)return this[u].slice();var r,i=e.type(n),l=i==="array"||i==="object"?n:arguments,p=this[u].slice();return c(o,function(e,t){var n=l[i==="object"?e:t.idx];n==null&&(n=p[t.idx]),p[t.idx]=h(n,t)}),f?(r=s(f(p)),r[u]=p,r):s(p)},c(o,function(t,i){if(s.fn[t])return;s.fn[t]=function(s){var o=e.type(s),u=t==="alpha"?this._hsla?"hsla":"rgba":n,a=this[u](),f=a[i.idx],l;return o==="undefined"?f:(o==="function"&&(s=s.call(this,f),o=e.type(s)),s==null&&i.empty?this:(o==="string"&&(l=r.exec(s),l&&(s=f+parseFloat(l[2])*(l[1]==="+"?1:-1))),a[i.idx]=s,this[u](a)))}})}),s.hook=function(t){var n=t.split(" ");c(n,function(t,n){e.cssHooks[n]={set:function(t,r){var i,o,u="";if(r!=="transparent"&&(e.type(r)!=="string"||(i=p(r)))){r=s(i||r);if(!a.rgba&&r._rgba[3]!==1){o=n==="backgroundColor"?t.parentNode:t;while((u===""||u==="transparent")&&o&&o.style)try{u=e.css(o,"backgroundColor"),o=o.parentNode}catch(f){}r=r.blend(u&&u!=="transparent"?u:"_default")}r=r.toRgbaString()}try{t.style[n]=r}catch(f){}}},e.fx.step[n]=function(t){t.colorInit||(t.start=s(t.elem,n),t.end=s(t.end),t.colorInit=!0),e.cssHooks[n].set(t.elem,t.start.transition(t.end,t.pos))}})},s.hook(n),e.cssHooks.borderColor={expand:function(e){var t={};return c(["Top","Right","Bottom","Left"],function(n,r){t["border"+r+"Color"]=e}),t}},l=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(t){var n,r,i=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,s={};if(i&&i.length&&i[0]&&i[i[0]]){r=i.length;while(r--)n=i[r],typeof i[n]=="string"&&(s[e.camelCase(n)]=i[n])}else for(n in i)typeof i[n]=="string"&&(s[n]=i[n]);return s}function s(t,n){var i={},s,o;for(s in n)o=n[s],t[s]!==o&&!r[s]&&(e.fx.step[s]||!isNaN(parseFloat(o)))&&(i[s]=o);return i}var n=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,n){e.fx.step[n]=function(e){if(e.end!=="none"&&!e.setAttr||e.pos===1&&!e.setAttr)jQuery.style(e.elem,n,e.end),e.setAttr=!0}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(t,r,o,u){var a=e.speed(r,o,u);return this.queue(function(){var r=e(this),o=r.attr("class")||"",u,f=a.children?r.find("*").addBack():r;f=f.map(function(){var t=e(this);return{el:t,start:i(this)}}),u=function(){e.each(n,function(e,n){t[n]&&r[n+"Class"](t[n])})},u(),f=f.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),r.attr("class",o),f=f.map(function(){var t=this,n=e.Deferred(),r=e.extend({},a,{queue:!1,complete:function(){n.resolve(t)}});return this.el.animate(this.diff,r),n.promise()}),e.when.apply(e,f.get()).done(function(){u(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),a.complete.call(r[0])})})},e.fn.extend({_addClass:e.fn.addClass,addClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{add:t},n,r,i):this._addClass(t)},_removeClass:e.fn.removeClass,removeClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{remove:t},n,r,i):this._removeClass(t)},_toggleClass:e.fn.toggleClass,toggleClass:function(n,r,i,s,o){return typeof r=="boolean"||r===t?i?e.effects.animateClass.call(this,r?{add:n}:{remove:n},i,s,o):this._toggleClass(n,r):e.effects.animateClass.call(this,{toggle:n},r,i,s)},switchClass:function(t,n,r,i,s){return e.effects.animateClass.call(this,{add:n,remove:t},r,i,s)}})}(),function(){function r(t,n,r,i){e.isPlainObject(t)&&(n=t,t=t.effect),t={effect:t},n==null&&(n={}),e.isFunction(n)&&(i=n,r=null,n={});if(typeof n=="number"||e.fx.speeds[n])i=r,r=n,n={};return e.isFunction(r)&&(i=r,r=null),n&&e.extend(t,n),r=r||n.duration,t.duration=e.fx.off?0:typeof r=="number"?r:r in e.fx.speeds?e.fx.speeds[r]:e.fx.speeds._default,t.complete=i||n.complete,t}function i(t){return!t||typeof t=="number"||e.fx.speeds[t]?!0:typeof t=="string"&&!e.effects.effect[t]}e.extend(e.effects,{version:"1.10.0",save:function(e,t){for(var r=0;r
").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),i={width:t.width(),height:t.height()},s=document.activeElement;try{s.id}catch(o){s=document.body}return t.wrap(r),(t[0]===s||e.contains(t[0],s))&&e(s).focus(),r=t.parent(),t.css("position")==="static"?(r.css({position:"relative"}),t.css({position:"relative"})):(e.extend(n,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,r){n[r]=t.css(r),isNaN(parseInt(n[r],10))&&(n[r]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(i),r.css(n).show()},removeWrapper:function(t){var n=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===n||e.contains(t[0],n))&&e(n).focus()),t},setTransition:function(t,n,r,i){return i=i||{},e.each(n,function(e,n){var s=t.cssUnit(n);s[0]>0&&(i[n]=s[0]*r+s[1])}),i}}),e.fn.extend({effect:function(){function o(n){function u(){e.isFunction(i)&&i.call(r[0]),e.isFunction(n)&&n()}var r=e(this),i=t.complete,o=t.mode;(r.is(":hidden")?o==="hide":o==="show")?u():s.call(r[0],t,u)}var t=r.apply(this,arguments),n=t.mode,i=t.queue,s=e.effects.effect[t.effect];return e.fx.off||!s?n?this[n](t.duration,t.complete):this.each(function(){t.complete&&t.complete.call(this)}):i===!1?this.each(o):this.queue(i||"fx",o)},_show:e.fn.show,show:function(e){if(i(e))return this._show.apply(this,arguments);var t=r.apply(this,arguments);return t.mode="show",this.effect.call(this,t)},_hide:e.fn.hide,hide:function(e){if(i(e))return this._hide.apply(this,arguments);var t=r.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)},__toggle:e.fn.toggle,toggle:function(t){if(i(t)||typeof t=="boolean"||e.isFunction(t))return this.__toggle.apply(this,arguments);var n=r.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)},cssUnit:function(t){var n=this.css(t),r=[];return e.each(["em","px","%","pt"],function(e,t){n.indexOf(t)>0&&(r=[parseFloat(n),t])}),r}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,n){t[n]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return e===0||e===1?e:-Math.pow(2,8*(e-1))*Math.sin(((e-1)*80-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){var t,n=4;while(e<((t=Math.pow(2,--n))-1)/11);return 1/Math.pow(4,3-n)-7.5625*Math.pow((t*3-2)/22-e,2)}}),e.each(t,function(t,n){e.easing["easeIn"+t]=n,e.easing["easeOut"+t]=function(e){return 1-n(1-e)},e.easing["easeInOut"+t]=function(e){return e<.5?n(e*2)/2:1-n(e*-2+2)/2}})}()}(jQuery); \ No newline at end of file diff --git a/webtagger/static/components/flatui/js/jquery.dropkick-1.0.0.js b/webtagger/static/components/flatui/js/jquery.dropkick-1.0.0.js new file mode 100755 index 0000000..357d220 --- /dev/null +++ b/webtagger/static/components/flatui/js/jquery.dropkick-1.0.0.js @@ -0,0 +1,400 @@ +/** + * DropKick + * + * Highly customizable element that gets dropkicked + lists = [], + + // Convenience keys for keyboard navigation + keyMap = { + 'left' : 37, + 'up' : 38, + 'right' : 39, + 'down' : 40, + 'enter' : 13 + }, + + // HTML template for the dropdowns + dropdownTemplate = [ + '
', + '', + '{{ label }}', + '', + '', + '
', + '
    ', + '
', + '
', + '
' + ].join(''), + + // HTML template for dropdown options + optionTemplate = '
  • {{ text }}
  • ', + + // Some nice default values + defaults = { + startSpeed : 100, // I recommend a high value here, I feel it makes the changes less noticeable to the user + theme : false, + change : false + }, + + // Make sure we only bind keydown on the document once + keysBound = false + ; + + // Called by using $('foo').dropkick(); + methods.init = function (settings) { + settings = $.extend({}, defaults, settings); + + return this.each(function () { + var + // The current list and place our new one in front of it + $select.before($dk); + + // Update the reference to $dk + $dk = $('#dk_container_' + id).addClass('dk_shown'); + + // Save the current theme + theme = settings.theme ? settings.theme : 'default'; + $dk.addClass('dk_theme_' + theme); + data.theme = theme; + + // Save the updated $dk reference into our data object + data.$dk = $dk; + + // Save the dropkick data onto the ').attr($.extend(args(this), { 'type': 'text' })); + } + $replacement + .removeAttr('name') + .data({ + 'placeholder-password': true, + 'placeholder-id': id + }) + .bind('focus.placeholder', clearPlaceholder); + $input + .data({ + 'placeholder-textinput': $replacement, + 'placeholder-id': id + }) + .before($replacement); + } + $input = $input.removeAttr('id').hide().prev().attr('id', id).show(); + // Note: `$input[0] != input` now! + } + $input.addClass('placeholder'); + $input[0].value = $input.attr('placeholder'); + } else { + $input.removeClass('placeholder'); + } + } + +}(this, document, jQuery)); \ No newline at end of file diff --git a/webtagger/static/components/flatui/js/jquery.tagsinput.js b/webtagger/static/components/flatui/js/jquery.tagsinput.js new file mode 100644 index 0000000..c93e83b --- /dev/null +++ b/webtagger/static/components/flatui/js/jquery.tagsinput.js @@ -0,0 +1,354 @@ +/* + + jQuery Tags Input Plugin 1.3.3 + + Copyright (c) 2011 XOXCO, Inc + + Documentation for this plugin lives here: + http://xoxco.com/clickable/jquery-tags-input + + Licensed under the MIT license: + http://www.opensource.org/licenses/mit-license.php + + ben@xoxco.com + +*/ + +(function($) { + + var delimiter = new Array(); + var tags_callbacks = new Array(); + $.fn.doAutosize = function(o){ + var minWidth = $(this).data('minwidth'), + maxWidth = $(this).data('maxwidth'), + val = '', + input = $(this), + testSubject = $('#'+$(this).data('tester_id')); + + if (val === (val = input.val())) {return;} + + // Enter new content into testSubject + var escaped = val.replace(/&/g, '&').replace(/\s/g,' ').replace(//g, '>'); + testSubject.html(escaped); + // Calculate new width + whether to change + var testerWidth = testSubject.width(), + newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth, + currentWidth = input.width(), + isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth) + || (newWidth > minWidth && newWidth < maxWidth); + + // Animate width + if (isValidWidthChange) { + input.width(newWidth); + } + + + }; + $.fn.resetAutosize = function(options){ + // alert(JSON.stringify(options)); + var minWidth = $(this).data('minwidth') || options.minInputWidth || $(this).width(), + maxWidth = $(this).data('maxwidth') || options.maxInputWidth || ($(this).closest('.tagsinput').width() - options.inputPadding), + val = '', + input = $(this), + testSubject = $('').css({ + position: 'absolute', + top: -9999, + left: -9999, + width: 'auto', + fontSize: input.css('fontSize'), + fontFamily: input.css('fontFamily'), + fontWeight: input.css('fontWeight'), + letterSpacing: input.css('letterSpacing'), + whiteSpace: 'nowrap' + }), + testerId = $(this).attr('id')+'_autosize_tester'; + if(! $('#'+testerId).length > 0){ + testSubject.attr('id', testerId); + testSubject.appendTo('body'); + } + + input.data('minwidth', minWidth); + input.data('maxwidth', maxWidth); + input.data('tester_id', testerId); + input.css('width', minWidth); + }; + + $.fn.addTag = function(value,options) { + options = jQuery.extend({focus:false,callback:true},options); + this.each(function() { + var id = $(this).attr('id'); + + var tagslist = $(this).val().split(delimiter[id]); + if (tagslist[0] == '') { + tagslist = new Array(); + } + + value = jQuery.trim(value); + + if (options.unique) { + var skipTag = $(this).tagExist(value); + if(skipTag == true) { + //Marks fake input as not_valid to let styling it + $('#'+id+'_tag').addClass('not_valid'); + } + } else { + var skipTag = false; + } + + if (value !='' && skipTag != true) { + $('').addClass('tag').append( + $('').text(value).append('  '), + $('', { + href : '#', + title : 'Remove tag', + text : '' + }).click(function () { + return $('#' + id).removeTag(escape(value)); + }) + ).insertBefore('#' + id + '_addTag'); + + tagslist.push(value); + + $('#'+id+'_tag').val(''); + if (options.focus) { + $('#'+id+'_tag').focus(); + } else { + $('#'+id+'_tag').blur(); + } + + $.fn.tagsInput.updateTagsField(this,tagslist); + + if (options.callback && tags_callbacks[id] && tags_callbacks[id]['onAddTag']) { + var f = tags_callbacks[id]['onAddTag']; + f.call(this, value); + } + if(tags_callbacks[id] && tags_callbacks[id]['onChange']) + { + var i = tagslist.length; + var f = tags_callbacks[id]['onChange']; + f.call(this, $(this), tagslist[i-1]); + } + } + + }); + + return false; + }; + + $.fn.removeTag = function(value) { + value = unescape(value); + this.each(function() { + var id = $(this).attr('id'); + + var old = $(this).val().split(delimiter[id]); + + $('#'+id+'_tagsinput .tag').remove(); + str = ''; + for (i=0; i< old.length; i++) { + if (old[i]!=value) { + str = str + delimiter[id] +old[i]; + } + } + + $.fn.tagsInput.importTags(this,str); + + if (tags_callbacks[id] && tags_callbacks[id]['onRemoveTag']) { + var f = tags_callbacks[id]['onRemoveTag']; + f.call(this, value); + } + }); + + return false; + }; + + $.fn.tagExist = function(val) { + var id = $(this).attr('id'); + var tagslist = $(this).val().split(delimiter[id]); + return (jQuery.inArray(val, tagslist) >= 0); //true when tag exists, false when not + }; + + // clear all existing tags and import new ones from a string + $.fn.importTags = function(str) { + id = $(this).attr('id'); + $('#'+id+'_tagsinput .tag').remove(); + $.fn.tagsInput.importTags(this,str); + } + + $.fn.tagsInput = function(options) { + var settings = jQuery.extend({ + interactive:true, + defaultText:'', + minChars:0, + width:'', + height:'', + autocomplete: {selectFirst: false }, + 'hide':true, + 'delimiter':',', + 'unique':true, + removeWithBackspace:true, + placeholderColor:'#666666', + autosize: true, + comfortZone: 20, + inputPadding: 6*2 + },options); + + this.each(function() { + if (settings.hide) { + $(this).hide(); + } + var id = $(this).attr('id'); + if (!id || delimiter[$(this).attr('id')]) { + id = $(this).attr('id', 'tags' + new Date().getTime()).attr('id'); + } + + var data = jQuery.extend({ + pid:id, + real_input: '#'+id, + holder: '#'+id+'_tagsinput', + input_wrapper: '#'+id+'_addTag', + fake_input: '#'+id+'_tag' + },settings); + + delimiter[id] = data.delimiter; + + if (settings.onAddTag || settings.onRemoveTag || settings.onChange) { + tags_callbacks[id] = new Array(); + tags_callbacks[id]['onAddTag'] = settings.onAddTag; + tags_callbacks[id]['onRemoveTag'] = settings.onRemoveTag; + tags_callbacks[id]['onChange'] = settings.onChange; + } + + var markup = '
    '; + + if (settings.interactive) { + markup = markup + ''; + } + + markup = markup + '
    '; + + $(markup).insertAfter(this); + + $(data.holder).css('width',settings.width); + $(data.holder).css('min-height',settings.height); + $(data.holder).css('height','100%'); + + if ($(data.real_input).val()!='') { + $.fn.tagsInput.importTags($(data.real_input),$(data.real_input).val()); + } + if (settings.interactive) { + $(data.fake_input).val($(data.fake_input).attr('data-default')); + $(data.fake_input).css('color',settings.placeholderColor); + $(data.fake_input).resetAutosize(settings); + + $(data.holder).bind('click',data,function(event) { + $(event.data.fake_input).focus(); + }); + + $(data.fake_input).bind('focus',data,function(event) { + if ($(event.data.fake_input).val()==$(event.data.fake_input).attr('data-default')) { + $(event.data.fake_input).val(''); + } + $(event.data.fake_input).css('color','#000000'); + }); + + if (settings.autocomplete_url != undefined) { + autocomplete_options = {source: settings.autocomplete_url}; + for (attrname in settings.autocomplete) { + autocomplete_options[attrname] = settings.autocomplete[attrname]; + } + + if (jQuery.Autocompleter !== undefined) { + $(data.fake_input).autocomplete(settings.autocomplete_url, settings.autocomplete); + $(data.fake_input).bind('result',data,function(event,data,formatted) { + if (data) { + $('#'+id).addTag(data[0] + "",{focus:true,unique:(settings.unique)}); + } + }); + } else if (jQuery.ui.autocomplete !== undefined) { + $(data.fake_input).autocomplete(autocomplete_options); + $(data.fake_input).bind('autocompleteselect',data,function(event,ui) { + $(event.data.real_input).addTag(ui.item.value,{focus:true,unique:(settings.unique)}); + return false; + }); + } + + + } else { + // if a user tabs out of the field, create a new tag + // this is only available if autocomplete is not used. + $(data.fake_input).bind('blur',data,function(event) { + var d = $(this).attr('data-default'); + if ($(event.data.fake_input).val()!='' && $(event.data.fake_input).val()!=d) { + if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) ) + $(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)}); + } else { + $(event.data.fake_input).val($(event.data.fake_input).attr('data-default')); + $(event.data.fake_input).css('color',settings.placeholderColor); + } + return false; + }); + + } + // if user types a comma, create a new tag + $(data.fake_input).bind('keypress',data,function(event) { + if (event.which==event.data.delimiter.charCodeAt(0) || event.which==13 ) { + event.preventDefault(); + if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) ) + $(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)}); + $(event.data.fake_input).resetAutosize(settings); + return false; + } else if (event.data.autosize) { + $(event.data.fake_input).doAutosize(settings); + + } + }); + //Delete last tag on backspace + data.removeWithBackspace && $(data.fake_input).bind('keydown', function(event) + { + if(event.keyCode == 8 && $(this).val() == '') + { + event.preventDefault(); + var last_tag = $(this).closest('.tagsinput').find('.tag:last').text(); + var id = $(this).attr('id').replace(/_tag$/, ''); + last_tag = last_tag.replace(/[\s\u00a0]+x$/, ''); + $('#' + id).removeTag(escape(last_tag)); + $(this).trigger('focus'); + } + }); + $(data.fake_input).blur(); + + //Removes the not_valid class when user changes the value of the fake input + if(data.unique) { + $(data.fake_input).keydown(function(event){ + if(event.keyCode == 8 || String.fromCharCode(event.which).match(/\w+|[áéíóúÃÉÃÓÚñÑ,/]+/)) { + $(this).removeClass('not_valid'); + } + }); + } + } // if settings.interactive + }); + + return this; + + }; + + $.fn.tagsInput.updateTagsField = function(obj,tagslist) { + var id = $(obj).attr('id'); + $(obj).val(tagslist.join(delimiter[id])); + }; + + $.fn.tagsInput.importTags = function(obj,val) { + $(obj).val(''); + var id = $(obj).attr('id'); + var tags = val.split(delimiter[id]); + for (i=0; i' + entity + '
    ' + html; + } + var icons = { + 'fui-video-24' : '', + 'fui-time-24' : '', + 'fui-settings-24' : '', + 'fui-plus-24' : '', + 'fui-new-24' : '', + 'fui-menu-24' : '', + 'fui-man-24' : '', + 'fui-mail-24' : '', + 'fui-lock-24' : '', + 'fui-location-24' : '', + 'fui-heart-24' : '', + 'fui-eye-24' : '', + 'fui-cross-24' : '', + 'fui-cmd-24' : '', + 'fui-checkround-24' : '', + 'fui-checkmark-24' : '', + 'fui-calendar-24' : '', + 'fui-bubble-24' : '', + 'fui-volume-24' : '', + 'fui-camera-24' : '' + }, + els = document.getElementsByTagName('*'), + i, attr, html, c, el; + for (i = 0; i < els.length; i += 1) { + el = els[i]; + attr = el.getAttribute('data-icon'); + if (attr) { + addIcon(el, attr); + } + c = el.className; + c = c.match(/fui-[^\s'"]+/); + if (c && icons[c[0]]) { + addIcon(el, icons[c[0]]); + } + } +}; \ No newline at end of file diff --git a/webtagger/static/components/flatui/sass/_config.sass b/webtagger/static/components/flatui/sass/_config.sass new file mode 100644 index 0000000..7f72427 --- /dev/null +++ b/webtagger/static/components/flatui/sass/_config.sass @@ -0,0 +1,16 @@ +// Colors +$base: #34495e +$firm: #1abc9c + +$gray: #95a5a6 +$lightgray: #ecf0f1 +$inverse: #fff + +$success: #2ecc71 +$danger: #e74c3c +$warning: #f1c40f +$info: #3498db + +// Font +$base-font-family: 'Lato', sans-serif +$base-font-size: 14px diff --git a/webtagger/static/components/flatui/sass/_icon-font-24.sass b/webtagger/static/components/flatui/sass/_icon-font-24.sass new file mode 100644 index 0000000..004302f --- /dev/null +++ b/webtagger/static/components/flatui/sass/_icon-font-24.sass @@ -0,0 +1,91 @@ +@font-face + font-family: 'Flat-UI-Icons-24' + src: url('../fonts/Flat-UI-Icons-24.eot') + src: url('../fonts/Flat-UI-Icons-24.eot?#iefix') format("embedded-opentype"), url('../fonts/Flat-UI-Icons-24.woff') format("woff"), url('../fonts/Flat-UI-Icons-24.ttf') format("truetype"), url('../fonts/Flat-UI-Icons-24.svg#Flat-UI-Icons-24') format("svg") + font-weight: normal + font-style: normal + + +/* Use the following CSS code if you want to use data attributes for inserting your icons + +[data-icon]:before + font-family: 'Flat-UI-Icons-24' + content: attr(data-icon) + speak: none + font-weight: normal + line-height: 1 + -webkit-font-smoothing: antialiased + +/* Use the following CSS code if you want to have a class per icon +/* + *Instead of a list of all class selectors, + *you can use the generic selector below, but it's slower: + *[class*="fui-"]:before { + +.fui-video-24:before, .fui-time-24:before, .fui-settings-24:before, .fui-plus-24:before, .fui-new-24:before, .fui-menu-24:before, .fui-man-24:before, .fui-mail-24:before, .fui-lock-24:before, .fui-location-24:before, .fui-heart-24:before, .fui-eye-24:before, .fui-cross-24:before, .fui-cmd-24:before, .fui-checkround-24:before, .fui-checkmark-24:before, .fui-calendar-24:before, .fui-bubble-24:before, .fui-volume-24:before, .fui-camera-24:before + font-family: 'Flat-UI-Icons-24' + speak: none + font-style: normal + font-weight: normal + line-height: 1 + -webkit-font-smoothing: antialiased + +.fui-video-24:before + content: "\e000" + +.fui-time-24:before + content: "\e001" + +.fui-settings-24:before + content: "\e002" + +.fui-plus-24:before + content: "\e003" + +.fui-new-24:before + content: "\e005" + +.fui-menu-24:before + content: "\e006" + +.fui-man-24:before + content: "\e007" + +.fui-mail-24:before + content: "\e008" + +.fui-lock-24:before + content: "\e009" + +.fui-location-24:before + content: "\e00a" + +.fui-heart-24:before + content: "\e00b" + +.fui-eye-24:before + content: "\e00c" + +.fui-cross-24:before + content: "\e00d" + +.fui-cmd-24:before + content: "\e00e" + +.fui-checkround-24:before + content: "\e00f" + +.fui-checkmark-24:before + content: "\e010" + +.fui-calendar-24:before + content: "\e011" + +.fui-bubble-24:before + content: "\e012" + +.fui-volume-24:before + content: "\e013" + +.fui-camera-24:before + content: "\e004" diff --git a/webtagger/static/components/flatui/sass/_icon-font.sass b/webtagger/static/components/flatui/sass/_icon-font.sass new file mode 100644 index 0000000..50ceba2 --- /dev/null +++ b/webtagger/static/components/flatui/sass/_icon-font.sass @@ -0,0 +1,91 @@ +@font-face + font-family: 'Flat-UI-Icons-16' + src: url('../fonts/Flat-UI-Icons-16.eot') + src: url('../fonts/Flat-UI-Icons-16.eot?#iefix') format("embedded-opentype"), url('../fonts/Flat-UI-Icons-16.woff') format("woff"), url('../fonts/Flat-UI-Icons-16.ttf') format("truetype"), url('../fonts/Flat-UI-Icons-16.svg#Flat-UI-Icons-16') format("svg") + font-weight: normal + font-style: normal + + +/* Use the following CSS code if you want to use data attributes for inserting your icons + +[data-icon]:before + font-family: 'Flat-UI-Icons-16' + content: attr(data-icon) + speak: none + font-weight: normal + line-height: 1 + -webkit-font-smoothing: antialiased + +/* Use the following CSS code if you want to have a class per icon +/* + *Instead of a list of all class selectors, + *you can use the generic selector below, but it's slower: + *[class*="fui-"]:before { + +.fui-volume-16:before, .fui-video-16:before, .fui-time-16:before, .fui-settings-16:before, .fui-plus-16:before, .fui-new-16:before, .fui-menu-16:before, .fui-man-16:before, .fui-mail-16:before, .fui-lock-16:before, .fui-location-16:before, .fui-heart-16:before, .fui-eye-16:before, .fui-cross-16:before, .fui-cmd-16:before, .fui-checkround-16:before, .fui-checkmark-16:before, .fui-camera-16:before, .fui-calendar-16:before, .fui-bubble-16:before + font-family: 'Flat-UI-Icons-16' + speak: none + font-style: normal + font-weight: normal + line-height: 1 + -webkit-font-smoothing: antialiased + +.fui-volume-16:before + content: "\e000" + +.fui-video-16:before + content: "\e001" + +.fui-time-16:before + content: "\e002" + +.fui-settings-16:before + content: "\e003" + +.fui-plus-16:before + content: "\e004" + +.fui-new-16:before + content: "\e005" + +.fui-menu-16:before + content: "\e006" + +.fui-man-16:before + content: "\e007" + +.fui-mail-16:before + content: "\e008" + +.fui-lock-16:before + content: "\e009" + +.fui-location-16:before + content: "\e00a" + +.fui-heart-16:before + content: "\e00b" + +.fui-eye-16:before + content: "\e00c" + +.fui-cross-16:before + content: "\e00d" + +.fui-cmd-16:before + content: "\e00e" + +.fui-checkround-16:before + content: "\e00f" + +.fui-checkmark-16:before + content: "\e010" + +.fui-camera-16:before + content: "\e011" + +.fui-calendar-16:before + content: "\e012" + +.fui-bubble-16:before + content: "\e013" diff --git a/webtagger/static/components/flatui/sass/_mixins.sass b/webtagger/static/components/flatui/sass/_mixins.sass new file mode 100644 index 0000000..2b74fa5 --- /dev/null +++ b/webtagger/static/components/flatui/sass/_mixins.sass @@ -0,0 +1,96 @@ +// Mixins +=animation($properties) + -webkit-animation: $properties + -moz-animation: $properties + -o-animation: $properties + animation: $properties + +=border-radius($radius) + -webkit-border-radius: $radius + -moz-border-radius: $radius + border-radius: $radius + +=box-sizing + -webkit-box-sizing: border-box + -moz-box-sizing: border-box + box-sizing: border-box + // *behavior: url('../js/boxsizing.htc') + +=box-shadow($properties) + -webkit-box-shadow: $properties + -moz-box-shadow: $properties + box-shadow: $properties + +=inline-block + display: inline-block + zoom: 1 + *display: inline + +=opacity($value) + opacity: $value + filter: alpha(opacity=$value*100) + zoom: 1 + +=placeholder-color($color) + &:-moz-placeholder + color: $color + &::-webkit-input-placeholder + color: $color + &.placeholder + color: $color + +=transition($properties) + -webkit-transition: $properties + -moz-transition: $properties + -o-transition: $properties + transition: $properties + -webkit-backface-visibility: hidden + +=transform($properties) + -webkit-transform: $properties + -moz-transform: $properties + -ms-transform: $properties + -o-transform: $properties + transform: $properties + +=vertical-gradient($from, $to) + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, $from), color-stop(100%, $to)) + background: -webkit-linear-gradient(top, $from, $to) + background: -moz-linear-gradient(top, $from, $to) + background: -ms-linear-gradient(top, $from, $to) + background: -o-linear-gradient(top, $from, $to) + background: linear-gradient(to bottom, $from, $to) + +=selection($color) + &::selection + background: $color + + &::-moz-selection + background: $color + +=clearfix + *zoom: 1 + &:before, + &:after + display: table + content: '' + &:after + clear: both + +=dropdown-arrow($color: $base, $top: 5px, $left: 15px, $size: 9px) + &:before + content: '' + border-style: solid + border-width: 0 $size $size $size + border-color: transparent transparent $color transparent + height: 0px + position: absolute + left: $left + top: $top + width: 0px + // Make corners smooth + -webkit-transform: rotate(360deg) + +=drop-ie-gradient + filter: unquote('progid:DXImageTransform.Microsoft.gradient(enabled = false)') + diff --git a/webtagger/static/components/flatui/sass/_spaces.sass b/webtagger/static/components/flatui/sass/_spaces.sass new file mode 100644 index 0000000..943a17a --- /dev/null +++ b/webtagger/static/components/flatui/sass/_spaces.sass @@ -0,0 +1,129 @@ +// Should be used to modify the default spacing between objects (not between nodes of * the same object) +// p,m = padding,margin +// a,t,r,b,l,h,v = all,top,right,bottom,left,horizontal,vertical +// x,s,m,l,n = extra-small($x),small($s),medium($m),large($l),none(0px) +$x: 3px +$s: 5px +$m: 10px +$l: 20px + +.ptn, .pvn, .pan + padding-top: 0 + +.ptx, .pvx, .pax + padding-top: $x + +.pts, .pvs, .pas + padding-top: $s + +.ptm, .pvm, .pam + padding-top: $m + +.ptl, .pvl, .pal + padding-top: $l + +.prn, .phn, .pan + padding-right: 0 + +.prx, .phx, .pax + padding-right: $x + +.prs, .phs, .pas + padding-right: $s + +.prm, .phm, .pam + padding-right: $m + +.prl, .phl, .pal + padding-right: $l + +.pbn, .pvn, .pan + padding-bottom: 0 + +.pbx, .pvx, .pax + padding-bottom: $x + +.pbs, .pvs, .pas + padding-bottom: $s + +.pbm, .pvm, .pam + padding-bottom: $m + +.pbl, .pvl, .pal + padding-bottom: $l + +.pln, .phn, .pan + padding-left: 0 + +.plx, .phx, .pax + padding-left: $x + +.pls, .phs, .pas + padding-left: $s + +.plm, .phm, .pam + padding-left: $m + +.pll, .phl, .pal + padding-left: $l + +.mtn, .mvn, .man + margin-top: 0px + +.mtx, .mvx, .max + margin-top: $x + +.mts, .mvs, .mas + margin-top: $s + +.mtm, .mvm, .mam + margin-top: $m + +.mtl, .mvl, .mal + margin-top: $l + +.mrn, .mhn, .man + margin-right: 0px + +.mrx, .mhx, .max + margin-right: $x + +.mrs, .mhs, .mas + margin-right: $s + +.mrm, .mhm, .mam + margin-right: $m + +.mrl, .mhl, .mal + margin-right: $l + +.mbn, .mvn, .man + margin-bottom: 0px + +.mbx, .mvx, .max + margin-bottom: $x + +.mbs, .mvs, .mas + margin-bottom: $s + +.mbm, .mvm, .mam + margin-bottom: $m + +.mbl, .mvl, .mal + margin-bottom: $l + +.mln, .mhn, .man + margin-left: 0px + +.mlx, .mhx, .max + margin-left: $x + +.mls, .mhs, .mas + margin-left: $s + +.mlm, .mhm, .mam + margin-left: $m + +.mll, .mhl, .mal + margin-left: $l + diff --git a/webtagger/static/components/flatui/sass/flat-ui.sass b/webtagger/static/components/flatui/sass/flat-ui.sass new file mode 100644 index 0000000..7fb4d5d --- /dev/null +++ b/webtagger/static/components/flatui/sass/flat-ui.sass @@ -0,0 +1,39 @@ +// Flat UI main stylesheet that aggregates all modules + +// Loading custom fonts +@import url('http://fonts.googleapis.com/css?family=Lato:400,700,900,400italic') +@import 'icon-font' +@import 'icon-font-24' + +// Loading config with variables (changing them leads to changing a color scheme) +@import 'config' + +// Utility mixins for greater good +@import 'mixins' + +// Modules +@import 'modules/type' +@import 'modules/btn' +@import 'modules/demo' +@import 'modules/navbar' +@import 'modules/select' +@import 'modules/input' +@import 'modules/checkbox-and-radio' +@import 'modules/toggle' +@import 'modules/tagsinput' +@import 'modules/progress' +@import 'modules/ui-slider' +@import 'modules/pager' +@import 'modules/pagination' +@import 'modules/share' +@import 'modules/tooltip' +@import 'modules/palette' +@import 'modules/tile' +@import 'modules/todo' +@import 'modules/footer' +@import 'modules/video' +@import 'modules/login' + +// Spaces +@import 'spaces' + diff --git a/webtagger/static/components/flatui/sass/modules/_btn.sass b/webtagger/static/components/flatui/sass/modules/_btn.sass new file mode 100644 index 0000000..9e3c8d6 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_btn.sass @@ -0,0 +1,73 @@ +=button-states($color) + background-color: $color + &:hover, + &:focus + background-color: scale-color($color, $lightness: 20%) + &:active, + &.active + background-color: scale-color($color, $lightness: -15%) + +// Buttons ----------------------- +.btn + border: none + background: $base + color: $inverse + font-size: 16.5px + text-decoration: none + text-shadow: none + +box-shadow(none) + +transition(.25s) + + &:hover, + &:focus + background-color: scale-color($base, $lightness: 20%) + color: $inverse + +transition(.25s) + + &:active, + &.active + background-color: scale-color($base, $lightness: -15%) + color: rgba($inverse, .75) + +box-shadow(none) + + &.disabled, + &[disabled] + background-color: $gray + color: $inverse + + // Sizes ----------------------- + &.btn-large + padding-bottom: 12px + padding-top: 13px + + // Colors ----------------------- + &.btn-primary + +button-states($firm) + + &.btn-info + +button-states($info) + + &.btn-danger + +button-states($danger) + + &.btn-success + +button-states($success) + + &.btn-warning + +button-states($warning) + + // Button with icon inside + .btn-toolbar & + font-size: 18px + padding: 10px 14px 9px + + &:first-child + +border-radius(6px 0 0 6px) + + &:last-child + +border-radius(0 6px 6px 0) + +.btn-toolbar + .btn.active + color: $inverse + diff --git a/webtagger/static/components/flatui/sass/modules/_checkbox-and-radio.sass b/webtagger/static/components/flatui/sass/modules/_checkbox-and-radio.sass new file mode 100644 index 0000000..4c6c03e --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_checkbox-and-radio.sass @@ -0,0 +1,86 @@ +// Checkbox & Radio +.checkbox, +.radio + margin-bottom: 12px + padding-left: 32px + position: relative + +transition(.25s) + + &:hover + color: $firm + + input + outline: none !important + +opacity(0) + + &.checked + .icon + background-position: -60px -30px + opacity: 1 + display: block\9 + + .icon-to-fade + opacity: 0 + display: none\9 + + // Disabled state + &.disabled + color: scale-color($gray, $lightness: 62%) + cursor: default + + .icon + opacity: 0 + display: none\9 + + .icon-to-fade + background-position: -30px -60px + opacity: 1 + display: block\9 + + &.checked + .icon + background-position: 0 -90px + opacity: 1 + display: block\9 + + .icon-to-fade + opacity: 0 + display: none\9 + + // Icon + .icon, + .icon-to-fade + background: url('../images/checkbox.png') -90px 0 no-repeat + display: block + height: 20px + left: 0 + opacity: 1 + position: absolute + top: -1px + width: 20px + +transition(opacity .1s linear) + + .icon + opacity: 0 + top: 0 + z-index: 2 + display: none\9 + +// Radio +.radio + .icon, + .icon-to-fade + background-image: url('../images/radio.png') + +// Serving 2x images +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) + .checkbox + .icon + background-image: url('../images/checkbox-2x.png') + background-size: 110px 110px + + .radio + .icon + background-image: url('../images/radio-2x.png') + background-size: 110px 110px + diff --git a/webtagger/static/components/flatui/sass/modules/_demo.sass b/webtagger/static/components/flatui/sass/modules/_demo.sass new file mode 100644 index 0000000..2da3270 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_demo.sass @@ -0,0 +1,228 @@ +// For demo purposes only +.demo-headline + padding: 73px 0 110px + text-align: center + +.demo-logo + font-size: 90px + font-weight: 900 + letter-spacing: -2px + line-height: 100px + + .logo + background: url('../images/demo/logo-mask.png') center 0 no-repeat + background-size: 256px 186px + height: 186px + margin: 0 auto 26px + overflow: hidden + text-indent: -9999em + width: 256px + + small + color: rgba($base, .3) + display: block + font-size: 22px + font-weight: 700 + letter-spacing: -1px + padding-top: 5px + +// Panels delimiter +.demo-row + margin-bottom: 20px + +.demo-panel-title + margin-bottom: 20px + padding-top: 20px + + small + color: scale-color(desaturate($base, 25%), $lightness: 66%) + font-size: inherit + font-weight: 400 + +// Shift blocks to fit design +.demo-navigation + margin-bottom: -4px + margin-top: -10px + +.demo-pager + margin-top: -10px + +.demo-tooltips + height: 126px + + // Needed just for the demo. Don't use it in producion ;) + .tooltip + left: -8px !important + position: relative !important + top: -8px !important + +.demo-headings + margin-bottom: 12px + +.demo-tiles + margin-bottom: 46px + +.demo-icons + margin-bottom: 115px + +.demo-icons-24 + font-size: 24px + margin-bottom: 38px + position: relative + span + margin: 0 0 0 18px + &:first-child + margin-left: 0 + +.demo-icons-16 + font-size: 16px + margin: 0 0 38px 5px + position: relative + span + margin: 0 0 0 28px + &:first-child + margin-left: 0 + +.demo-icons-tooltip + bottom: 0 + color: scale-color($base, $lightness: 70%) + font-size: 12px + left: 100% + margin-left: 0 !important + position: absolute + width: 80px + +.demo-illustrations + margin-bottom: 45px + + img + height: 100px + margin-left: 35px + width: 100px + vertical-align: bottom + + &:first-child + margin-left: 0 + + &.big-illustration + height: 111px + width: 112px + + &.big-retina-illustration + height: 104px + margin-right: -24px + width: 117px + + &.big-illustration-pusher + margin-right: 12px + +.demo-samples + margin-bottom: 46px + +.demo-video + border-radius: 6px + padding-top: 95px + +.demo-download-section + float: none + margin: 0 auto + padding: 60px 0 90px 20px + text-align: center + + [class*='fui-'] + margin: 3px 0 -3px + +.demo-download + background-color: scale-color($base, $lightness: 90%) + border-radius: 50% + height: 120px + margin: 0 auto 32px + padding: 40px 28px 30px 32px + text-align: center + width: 130px + + img + height: 104px + width: 82px + +.demo-download-text + font-size: 15px + padding: 20px 0 + text-align: center + +.demo-text-box + a:hover + color: $firm + +.demo-browser + background: scale-color($base, $lightness: -15%) url('../images/demo/browser.png') 0 0 no-repeat + background-size: 659px 42px + border-radius: 0 0 6px 6px + color: $inverse + margin: 0 41px 140px 0 + padding-top: 42px + +.demo-browser-side + float: left + padding: 22px 20px + width: 111px + + > h5 + margin-bottom: 3px + text-transform: none + + > h6 + font-size: 11px + font-weight: 300 + line-height: 18px + margin-top: 3px + text-transform: none + +.demo-browser-author + background: url('../images/demo/browser-author.jpg') center center no-repeat + border: 3px solid $inverse + display: block + height: 84px + margin: 0 auto + width: 84px + +border-radius(50%) + +.demo-browser-action + padding: 30px 0 12px + + > .btn + padding: 9px 0 10px 11px + text-align: left + +border-radius(3px) + + &:before + color: $inverse + content: '\e004' + font-size: 16px + font-family: 'Flat-UI-Icons-16' + font-weight: 300 + margin-right: 12px + position: relative + top: 1px + -webkit-font-smoothing: antialiased + +.demo-browser-content + background-color: $base + border-radius: 0 0 6px + overflow: hidden + padding: 21px 0 0 20px + + > img + border: 6px solid $inverse + float: left + margin: 0 15px 20px 0 + width: 134px + +// Serving 2x images +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) + .logo + background-image: url('../images/demo/logo-mask-2x.png') + + .demo-browser + background-image: url('../images/demo/browser-2x.png') + diff --git a/webtagger/static/components/flatui/sass/modules/_footer.sass b/webtagger/static/components/flatui/sass/modules/_footer.sass new file mode 100644 index 0000000..cfeb7f1 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_footer.sass @@ -0,0 +1,57 @@ +// Footer +footer + background-color: desaturate(scale-color($base, $lightness: 91%), 15%) + color: desaturate(scale-color($base, $lightness: 66%), 22%) + font-size: 15px + padding: 0 + + a + color: desaturate(scale-color($base, $lightness: 50%), 25%) + font-weight: 700 + + p + font-size: 15px + line-height: 20px + +.footer-title + margin: 0 0 22px + padding-top: 21px + +.footer-brand + display: block + margin-bottom: 26px + width: 220px + + img + width: 216px + +// Footer banner +.footer-banner + background-color: $firm + color: scale-color(desaturate($firm, 15%), $lightness: 80%) + margin-left: 42px + min-height: 286px + padding: 0 30px 30px + + .footer-title + color: $inverse + + a + color: scale-color(desaturate($firm, 15%), $lightness: 80%) + text-decoration: underline + &:hover + text-decoration: none + + ul + list-style-type: none + margin: 0 0 26px + + li + border-top: 1px solid scale-color($firm, $lightness: 4%) + line-height: 19px + padding: 6px 0 + &:first-child + border-top: none + padding-top: 1px + + diff --git a/webtagger/static/components/flatui/sass/modules/_input.sass b/webtagger/static/components/flatui/sass/modules/_input.sass new file mode 100644 index 0000000..3e95541 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_input.sass @@ -0,0 +1,66 @@ +=input-states($color) + border-color: $color + color: $color + +box-shadow(none) + &:focus + +box-shadow(none) + +// Text fields +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input + border: 2px solid scale-color($base, $lightness: 85%) + color: $base + font-family: $base-font-family + font-size: $base-font-size + padding: 8px 0 9px 10px + text-indent: 1px + +border-radius(6px) + +box-shadow(none) + +placeholder-color(desaturate(scale-color($base, $lightness: 60%), 15%)) + + &:focus + border-color: $firm + +box-shadow(none) + + .control-group.error & + +input-states($danger) + + .control-group.success & + +input-states($success) + + .control-group.warning & + +input-states($warning) + + .control-group.info & + +input-states($info) + +// Disabled state ----------------- +input[disabled], +input[readonly], +textarea[disabled], +textarea[readonly] + background-color: scale-color($gray, $lightness: 80%) + border-color: transparent + color: scale-color($gray, $lightness: 50%) + cursor: default + +// Text field grids ----------------- +input, +textarea, +.uneditable-input + width: 192px + diff --git a/webtagger/static/components/flatui/sass/modules/_login.sass b/webtagger/static/components/flatui/sass/modules/_login.sass new file mode 100644 index 0000000..8cec18d --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_login.sass @@ -0,0 +1,95 @@ +$form-color: scale-color(desaturate($base, 15%), $lightness: 91%) + +// Login screen +.login + background: url('../images/login/imac.png') 0 0 no-repeat + background-size: 940px 778px + color: $inverse + margin-bottom: 77px + padding: 38px 38px 267px + position: relative + +.login-screen + background-color: $firm + min-height: 317px + padding: 123px 199px 33px 306px + +.login-icon + left: 200px + position: absolute + top: 160px + width: 96px + + > img + display: block + margin-bottom: 6px + width: 100% + + > h4 + font-size: 17px + font-weight: 200 + line-height: 34px + opacity: .95 + + small + color: inherit + display: block + font-size: inherit + font-weight: 700 + +// Login form +.login-form + background-color: $form-color + border-radius: 6px + padding: 24px 23px 20px + position: relative + + // Ear + &:before + content: '' + border-style: solid + border-width: 12px 12px 12px 0 + border-color: transparent $form-color transparent transparent + height: 0px + position: absolute + left: -12px + top: 35px + width: 0 + // Make corners smooth + -webkit-transform: rotate(360deg) + + .control-group + margin-bottom: 6px + position: relative + + .login-field + border-color: transparent + font-size: 17px + padding-bottom: 11px + padding-top: 11px + text-indent: 3px + width: 299px + &:focus + & + .login-field-icon + color: $firm + + .login-field-icon + color: scale-color($gray, $lightness: 40%) + font-size: 16px + position: absolute + right: 13px + top: 14px + +transition(.25s) + +.login-link + color: scale-color($gray, $lightness: 40%) + display: block + font-size: 13px + margin-top: 15px + text-align: center + +// Serving 2x images +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) + .login + background-image: url('../images/login/imac-2x.png') + diff --git a/webtagger/static/components/flatui/sass/modules/_navbar.sass b/webtagger/static/components/flatui/sass/modules/_navbar.sass new file mode 100644 index 0000000..0bf5d2c --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_navbar.sass @@ -0,0 +1,152 @@ +// Top navigation +.navbar + font-size: 18px + + .brand + color: $firm + font-size: inherit + font-weight: 700 + padding-bottom: 16px + padding-top: 15px + + .nav + // First level nav + > li + &:hover + > ul + top: 100% + + // Second level nav + > ul + padding-top: 13px + top: 80% + // IE treats transparent background as not hoverable area. Let's fix that. + background-color: #{$inverse}\9 + // Dropdown triangle ear + +dropdown-arrow + + // Third level nav + li + &:hover + ul + opacity: 1 + -webkit-transform: scale(1, 1) + visibility: visible + display: block\9 + ul + left: 100% + + // First level level + > a + padding: 14px 15px 17px + &:hover + color: $firm + + li + position: relative + + &:hover + > ul + opacity: 1 + z-index: 100 + -webkit-transform: scale(1, 1) + visibility: visible + // Show on hover + display: block\9 + + // Sub menu + ul + border-radius: 4px + left: 15px + list-style-type: none + margin-left: 0 + opacity: 0 + position: absolute + top: 0 + width: 234px + z-index: -100 + // Trigger transform to hide nav completely without 'ghost' bug (when switching from :hover to initial) + -webkit-transform: scale(1, .99) + -webkit-transform-origin: 0 0 + // Don't show it at all by default since IE doesn't get modern transitions + visibility: hidden + display: none\9 + +transition(.3s ease-out) + + // Deep level sub menu + ul + left: 95% + padding-left: 5px + + // Sub menu item + li + background-color: $base + padding: 0 3px 3px + + &:first-child + border-radius: 4px 4px 0 0 + padding-top: 3px + + &:last-child + border-radius: 0 0 4px 4px + + &.active + > a, > a:hover + background-color: $firm + color: $inverse + + // Sub menu link + a + border-radius: 2px + color: $inverse + display: block + font-size: 14px + padding: 6px 9px + text-decoration: none + &:hover + background-color: $firm + +.navbar-inner + border: none + padding-left: 4px + padding-right: 4px + +border-radius(6px) + +drop-ie-gradient + +// Inverse skin -------------------------- +.navbar-inverse + .navbar-inner + background: $base + +drop-ie-gradient + + .nav + > li > a + color: $inverse + + .active > a + &, &:hover, &:focus + background-color: transparent + color: $firm + +box-shadow(none) + +// Unread icon --------------------------- +.navbar-unread + background-color: $danger + border-radius: 30px + color: $inverse + display: none + font-size: 12px + font-weight: 500 + line-height: 18px + min-width: 8px + padding: 0 5px + position: absolute + right: -7px + text-align: center + text-shadow: none + top: 8px + z-index: 10 + + .active & + display: block + diff --git a/webtagger/static/components/flatui/sass/modules/_pager.sass b/webtagger/static/components/flatui/sass/modules/_pager.sass new file mode 100644 index 0000000..f12e397 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_pager.sass @@ -0,0 +1,56 @@ +// Pager module +$pager-padding: 9px 18px 10px + +.pager + background-color: $base + border-radius: 6px + color: $inverse + font-size: 16px + font-weight: 700 + +inline-block + + li + &:first-child + > a, > span + border-left: none + padding-left: 20px + +border-radius(6px 0 0 6px) + + img + margin-left: 0 + margin-right: 13px + margin-left: 0\9 + margin-right: 9px\9 + + &.pager-center + padding: $pager-padding + padding-left: 0 + padding-right: 0 + +inline-block + + &.previous, &.next + img + // For retina 2x image that is scaled down to 14px for all common screens + height: 14px + margin: -1px 0 0 13px + margin-left: 9px\9 + vertical-align: middle + + + > a, > span + background: none + border: none + border-left: 2px solid scale-color($base, $lightness: -15%) + color: $inverse + padding: $pager-padding + padding-left: 7px + text-decoration: none + white-space: nowrap + +border-radius(0 6px 6px 0) + + &:hover, &:focus + background-color: scale-color($base, $lightness: 20%) + + &:active + background-color: scale-color($base, $lightness: -15%) + diff --git a/webtagger/static/components/flatui/sass/modules/_pagination.sass b/webtagger/static/components/flatui/sass/modules/_pagination.sass new file mode 100644 index 0000000..6e34d25 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_pagination.sass @@ -0,0 +1,75 @@ +// Pagination (very similar to Pager) +$pagination-color: desaturate(lighten($base, 57.5%), 17%) + +.pagination + ul + background: $pagination-color + +border-radius(6px) + +box-shadow(none) + + > li + &:first-child + +border-radius(6px 0 0 6px) + + &:last-child + +border-radius(0 6px 6px 0) + + &.previous, + &.next + > a, > span + background: transparent + border: none + border-right: 2px solid $inverse !important + margin: 0 9px 0 0 + padding: 11px 17px 12px 17px + +border-radius(6px 0 0 6px) + +box-shadow(none !important) + + &.next + > a, > span + border-left: 2px solid $inverse !important + margin-left: 9px + margin-right: 0 + +border-radius(0 6px 6px 0) + + &.active + > a, > span + background-color: $inverse + border-color: $inverse + border-width: 2px + color: $pagination-color + margin: 10px 5px 9px + + &:hover, &:focus + background-color: $inverse + border-color: $inverse + color: $pagination-color + +box-shadow(none) + + > a, > span + background: $inverse + border: 5px solid $pagination-color + border-radius: 50px + color: $inverse + line-height: 16px + margin: 7px 2px 6px + padding: 0 4px + +transition((background .2s ease-out, border-color 0s ease-out, color .2s ease-out)) + + &:hover, :focus + background-color: $firm + border-color: $firm + color: $inverse + +transition((background .2s ease-out, border-color .2s ease-out, color .2s ease-out)) + + &:active + background-color: scale-color($firm, $lightness: -15%) + border-color: scale-color($firm, $lightness: -15%) + + img + // For retina 2x image that is scaled down to 14px for all common screens + height: 14px + margin-top: -1px + vertical-align: middle + width: 13px + diff --git a/webtagger/static/components/flatui/sass/modules/_palette.sass b/webtagger/static/components/flatui/sass/modules/_palette.sass new file mode 100644 index 0000000..8ad7e59 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_palette.sass @@ -0,0 +1,88 @@ +// Color swatches grid +=calc-color($name, $color) + .palette-#{$name} + background-color: $color + + .palette-#{$name}-dark + background-color: scale-color($color, $lightness: -15%) + +.palette + color: $inverse + margin: 0 + padding: 15px + text-transform: uppercase + + dt + display: block + font-weight: 500 + opacity: .8 + + dd + font-weight: 200 + margin-left: 0 + opacity: .8 + +// Colors ++calc-color(firm, $firm) ++calc-color(success, $success) ++calc-color(info, $info) ++calc-color(warning, $warning) ++calc-color(danger, $danger) ++calc-color(night, #34495e) ++calc-color(bright, #f1c40f) + +.palette-success-dark + background-color: #27ae60 + +.palette-info-dark + background-color: #2980b9 + +.palette-bright-dark + background-color: #f39c12 + +.palette-amethyst + background-color: #9b59b6 + +.palette-wisteria + background-color: #8e44ad + +.palette-carrot + background-color: #e67e22 + +.palette-pumpkin + background-color: #d35400 + +.palette-alizarin + background-color: #e74c3c + +.palette-pomegranate + background-color: #c0392b + +.palette-clouds + background-color: #ecf0f1 + color: #bdc3c7 + +.palette-silver + background-color: #bdc3c7 + +.palette-concrete + background-color: #95a5a6 + +.palette-asbestos + background-color: #7f8c8d + +// Palette paragraph +.palette-paragraph + color: #7f8c8d + font-size: 12px + line-height: 17px + + span + color: #bdc3c7 + +// Headline +.palette-headline + color: #7f8c8d + font-weight: 700 + margin-top: -5px + diff --git a/webtagger/static/components/flatui/sass/modules/_progress.sass b/webtagger/static/components/flatui/sass/modules/_progress.sass new file mode 100644 index 0000000..0dfc069 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_progress.sass @@ -0,0 +1,29 @@ +// Progress bar +.progress + background: scale-color($base, $lightness: 90%) + border-radius: 32px + height: 12px + +box-shadow(none) + +drop-ie-gradient + + .bar + background: $firm + +box-shadow(none !important) + +drop-ie-gradient + + .bar-success + background-color: $success + +drop-ie-gradient + + .bar-warning + background-color: $warning + +drop-ie-gradient + + .bar-danger + background-color: $danger + +drop-ie-gradient + + .bar-info + background-color: $info + +drop-ie-gradient + diff --git a/webtagger/static/components/flatui/sass/modules/_select.sass b/webtagger/static/components/flatui/sass/modules/_select.sass new file mode 100644 index 0000000..2e48e40 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_select.sass @@ -0,0 +1,163 @@ +// Default DropKick theme +// You can: +// 1. Align options by right: add "select-right" class to width: add "span6" for example ;) (you can use all available Twitter Bootstrap grids) + +// One container to bind them +.dk_container + cursor: pointer + font-size: 14px + margin-bottom: 10px + outline: none + +// Opens the dropdown and holds the menu label +.dk_toggle + background-color: $firm + color: $inverse + border-radius: 6px + overflow: hidden + padding: 11px 45px 11px 13px + text-decoration: none + white-space: nowrap + +transition(.25s) + + &:hover, + &:focus, + .dk_focus & + background-color: scale-color($firm, $lightness: 20%) + color: $inverse + outline: none + + &:active + background-color: scale-color($firm, $lightness: -15%) + outline: none + .select-icon + border-left-color: transparent + +// Dropdown icon (arrow by default) +.select-icon + background: $firm url('../images/select/toggle.png') no-repeat right center + border-left: 2px solid rgba($base, .15) + border-radius: 0 6px 6px 0 + height: 100% + position: absolute + right: 0 + top: 0 + width: 42px + +transition(.25s) + +// Applied whenever the dropdown is open +.dk_open + // Dropdown menu is covered by something. Try setting this value higher + z-index: 10 + + .dk_toggle + background-color: $firm + .select-icon + background-color: scale-color($firm, $lightness: -15%) + border-left-color: transparent + +// The outer container of the options +.dk_options + padding-top: 14px + // Dropdown triangle ear + +dropdown-arrow + &:before + left: auto + right: 12px + + li + padding-bottom: 3px + + a + border-radius: 3px + color: $inverse + display: block + padding: 5px 9px + text-decoration: none + &:hover + background-color: $firm + +.dk_option_current a + background-color: $firm + +// Inner container for options, this is what makes the scrollbar possible. +.dk_options_inner + background-color: $base + border-radius: 5px + margin: 0 + max-height: 244px + padding: 3px 3px 0 + +// Set a max-height on the options inner +.dk_touch .dk_options + max-height: 250px + +//------- End Theme -------- + +//------- Critical to the continued enjoyment of working dropdowns -------- +.dk_container + display: none + position: relative + vertical-align: middle + + &.dk_shown + +inline-block + + // Twitter Bootstrap grids ----------------------- + &[class*="span"] + float: none + margin-left: 0 + + +.dk_toggle + display: block + position: relative + +.dk_open + position: relative + .dk_options + margin-top: -1px + opacity: 1 + z-index: 10 + // Opacity fallback for IE + display: block\9 + .dk_label + color: inherit + +.dk_options + margin-top: -21px + position: absolute + left: 0 + opacity: 0 + width: 220px + z-index: -100 + // Opacity fallback for IE + display: none\9 + +transition(.3s ease-out) + + // Align by right + .select-right & + left: auto + right: 0 + + a + display: block + +.dk_options_inner + overflow: auto + outline: none + position: relative + +.dk_touch + .dk_options + overflow: hidden + .dk_options_inner + max-height: none + overflow: visible + +.dk_fouc select + position: relative + top: -99999em + visibility: hidden + diff --git a/webtagger/static/components/flatui/sass/modules/_share.sass b/webtagger/static/components/flatui/sass/modules/_share.sass new file mode 100644 index 0000000..5ffd667 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_share.sass @@ -0,0 +1,34 @@ +// Sharing box include variety of ways to share something +// By idea this block should have +$share-color: scale-color($base, $lightness: 92%) + +.share + background-color: $share-color + border-radius: 6px + position: relative + +dropdown-arrow($share-color, -9px, 23px) + + ul + list-style-type: none + margin: 0 + padding: 15px + + li + padding-top: 11px + +clearfix + &:first-child + padding-top: 0 + + .toggle + float: right + margin: 0 + + .btn + +border-radius(0 0 6px 6px) + +.share-label + float: left + font-size: 15px + padding-top: 5px + width: 50% + diff --git a/webtagger/static/components/flatui/sass/modules/_tagsinput.sass b/webtagger/static/components/flatui/sass/modules/_tagsinput.sass new file mode 100644 index 0000000..18ae948 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_tagsinput.sass @@ -0,0 +1,91 @@ +.tagsinput + background: #fff + border: 2px solid $firm + border-radius: 6px + height: 100px + padding: 6px 1px 1px 6px + overflow-y: auto + text-align: left + + .tag + border-radius: 4px + background: $firm + color: $inverse + cursor: pointer + margin-right: 5px + margin-bottom: 5px + overflow: hidden + padding: 6px 13px 6px 19px + position: relative + vertical-align: middle + +inline-block + +transition(.14s linear) + &:hover + background-color: scale-color($firm, $lightness: -15%) + padding-left: 12px + padding-right: 20px + + .tagsinput-remove-link + color: $inverse + opacity: 1 + // Opacity fallback for IE + display: block\9 + + input + background: transparent + border: none + color: $base + font-family: $base-font-family + font-size: $base-font-size + margin: 0px + padding: 0 0 0 5px + outline: 0 + margin-right: 5px + margin-bottom: 5px + width: 12px + +.tagsinput-remove-link + bottom: 0 + color: $inverse + cursor: pointer + font-size: 12px + opacity: 0 + padding: 9px 7px 3px 0 + position: absolute + right: 0 + text-align: right + text-decoration: none + top: 0 + width: 100% + z-index: 2 + // Opacity fallback for IE + display: none\9 + + &:before + color: $inverse + +.tagsinput-add-container + vertical-align: middle + +inline-block + +.tagsinput-add + background-color: scale-color(desaturate($base, 15%), $lightness: 67%) + border-radius: 3px + color: $inverse + cursor: pointer + margin-bottom: 5px + padding: 6px 9px + +inline-block + +transition(.25s) + &:hover + background-color: $firm + +.tags_clear + clear: both + width: 100% + height: 0px + +.not_valid + background: #FBD8DB !important + color: #90111A !important + diff --git a/webtagger/static/components/flatui/sass/modules/_tile.sass b/webtagger/static/components/flatui/sass/modules/_tile.sass new file mode 100644 index 0000000..83769ac --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_tile.sass @@ -0,0 +1,42 @@ +// Tile module +.tile + background-color: scale-color($base, $lightness: 92%) + border-radius: 6px + padding: 14px + position: relative + text-align: center + + &.tile-hot + &:before + background: url('../images/tile/ribbon.png') 0 0 no-repeat + background-size: 82px 82px + content: '' + height: 82px + position: absolute + right: -4px + top: -4px + width: 82px + + p + font-size: 15px + margin-bottom: 33px + +.tile-image + height: 100px + margin: 31px 0 27px + vertical-align: bottom + &.big-illustration + height: 111px + margin-top: 20px + width: 112px + +.tile-title + font-size: 20px + margin: 0 + +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) + .tile + &.tile-hot + &:before + background-image: url('../images/tile/ribbon-2x.png') + diff --git a/webtagger/static/components/flatui/sass/modules/_todo.sass b/webtagger/static/components/flatui/sass/modules/_todo.sass new file mode 100644 index 0000000..38af845 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_todo.sass @@ -0,0 +1,77 @@ +// Todo list +.todo + background-color: scale-color($base, $lightness: -15%) + border-radius: 8px 8px 6px 6px + color: scale-color($base, $lightness: 33%) + margin-bottom: 20px + + ul + margin: 0 + list-style-type: none + + li + background: $base url('../images/todo/todo.png') 92% center no-repeat + background-size: 20px 20px + cursor: pointer + margin-top: 2px + padding: 18px 42px 17px 25px + position: relative + +transition(.25s) + &:first-child + margin-top: 0 + &:last-child + border-radius: 0 0 6px 6px + padding-bottom: 18px + &.todo-done + background: transparent url('../images/todo/done.png') 92% center no-repeat + background-size: 20px 20px + color: $firm + + .todo-name + color: $firm + +.todo-search + background: $firm url('../images/todo/search.png') 92% center no-repeat + background-size: 16px 16px + border-radius: 6px 6px 0 0 + color: $base + padding: 19px 25px 20px + +input.todo-search-field + background: none + border: none + color: $base + font-size: 19px + font-weight: 700 + margin: 0 + line-height: 23px + padding: 5px 0 + text-indent: 0 + +box-shadow(none) + +placeholder-color($base) + +.todo-icon + float: left + font-size: 24px + padding: 11px 22px 0 0 + +.todo-content + padding-top: 1px + overflow: hidden + +.todo-name + color: $inverse + font-size: 17px + margin: 1px 0 3px + +// Serving 2x images +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) + .todo + li + background-image: ('../images/todo/todo-2x.png') + &.todo-done + background-image: ('../images/todo/done-2x.png') + + .todo-search + background-image: ('../images/todo/search-2x.png') + diff --git a/webtagger/static/components/flatui/sass/modules/_toggle.sass b/webtagger/static/components/flatui/sass/modules/_toggle.sass new file mode 100644 index 0000000..33f34fb --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_toggle.sass @@ -0,0 +1,85 @@ +// Toggle +.toggle + background-color: $base + border-radius: 60px + color: $inverse + height: 29px + margin: 0 12px 12px 0 + overflow: hidden + +clearfix + +inline-block + +transition(.25s) + + // Common style ----------------------------- + &.toggle-off + background-color: scale-color(desaturate($base, 15%), $lightness: 75%) + + .toggle-radio + background-image: url('../images/toggle/icon-off.png') + background-position: 0 0 + color: $inverse + left: 0 + margin-left: .5px + margin-right: -13px + z-index: 1 + &:first-child + left: -120% + + .toggle-radio + background: url('../images/toggle/icon-on.png') right top no-repeat + color: $firm + display: block + font-weight: 700 + height: 21px + left: 120% + margin-left: -13px + padding: 5px 32px 3px + position: relative + text-align: center + z-index: 2 + +transition(.25s) + + &:first-child + margin-bottom: -29px + left: 0 + + input + display: none + position: absolute + outline: none !important + // Radios in IE should be always visible in order to work + display: block\9 + +opacity(0.01) + + // Iconic style ----------------------------- + &.toggle-icon + border-radius: 6px 7px 7px 6px + + &.toggle-off + border-radius: 7px 6px 6px 7px + .toggle-radio + background-image: url('../images/toggle/block-off.png') + background-position: 0 0 + + .toggle-radio + background-image: url('../images/toggle/block-on.png') + background-position: 62px 0 + border-radius: 6px + min-width: 27px + text-align: right + + &:first-child + text-align: left + +// Serving 2x images +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 2) + .toggle + &.toggle-off + .toggle-radio + background-image: url('../images/toggle/icon-off-2x.png') + background-size: 30px 29px + + .toggle-radio + background-image: url('../images/toggle/icon-on-2x.png') + background-size: 30px 29px + diff --git a/webtagger/static/components/flatui/sass/modules/_tooltip.sass b/webtagger/static/components/flatui/sass/modules/_tooltip.sass new file mode 100644 index 0000000..91fbef4 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_tooltip.sass @@ -0,0 +1,45 @@ +// Tooltip on hover +.tooltip + font-size: 13px + + &.in + +opacity(1) + + &.top + padding-bottom: 9px + .tooltip-arrow + border-top-color: $base + border-width: 9px 9px 0 + bottom: 0 + margin-left: -9px + + &.right + .tooltip-arrow + border-right-color: $base + border-width: 9px 9px 9px 0 + margin-top: -9px + left: -3px + + &.bottom + padding-top: 8px + .tooltip-arrow + border-bottom-color: $base + border-width: 0 9px 9px + margin-left: -9px + top: -1px + + &.left + .tooltip-arrow + border-right-color: $base + border-width: 9px 9px 9px 0 + margin-top: -3px + top: -3px + +.tooltip-inner + background-color: $base + line-height: 18px + padding: 12px 12px + text-align: center + width: 183px + +border-radius(6px) + diff --git a/webtagger/static/components/flatui/sass/modules/_type.sass b/webtagger/static/components/flatui/sass/modules/_type.sass new file mode 100644 index 0000000..80cb58b --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_type.sass @@ -0,0 +1,43 @@ +// Typography +body + color: $base + font: #{$base-font-size}/#{1.231} 'Lato', sans-serif + +a + color: $firm + text-decoration: underline + +transition(.25s) + &:hover + color: $success + text-decoration: none + +h1 + font-size: 32px + font-weight: 900 + +h2 + font-size: 26px + font-weight: 700 + margin-bottom: 2px + +h3 + font-size: 24px + font-weight: 700 + margin-bottom: 4px + margin-top: 2px + +h4 + font-size: 18px + font-weight: 500 + margin-top: 4px + +h5 + font-size: 16px + font-weight: 500 + text-transform: uppercase + +h6 + font-size: 13px + font-weight: 500 + text-transform: uppercase + diff --git a/webtagger/static/components/flatui/sass/modules/_ui-slider.sass b/webtagger/static/components/flatui/sass/modules/_ui-slider.sass new file mode 100644 index 0000000..05e98d9 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_ui-slider.sass @@ -0,0 +1,44 @@ +// jQuery UI Slider +.ui-slider + @extend .progress + margin-bottom: 20px + position: relative + +.ui-slider-handle + background-color: scale-color($firm, $lightness: -15%) + border-radius: 50% + cursor: pointer + height: 18px + margin-left: -9px + position: absolute + top: -3px + width: 18px + z-index: 2 + +transition(background .25s) + + &[style*='100'] + margin-left: -15px + + &:hover, + &:focus + background-color: scale-color($firm, $lightness: 20%) + outline: none + &:active + background-color: scale-color($firm, $lightness: -15%) + +.ui-slider-range + background-color: $firm + border-radius: 30px 0 0 30px + display: block + height: 100% + position: absolute + z-index: 1 + +.ui-slider-segment + background-color: scale-color(desaturate($base, 15%), $lightness: 80%) + border-radius: 50% + float: left + height: 6px + margin: 3px -6px 0 25% + width: 6px + diff --git a/webtagger/static/components/flatui/sass/modules/_video.sass b/webtagger/static/components/flatui/sass/modules/_video.sass new file mode 100644 index 0000000..06c61a4 --- /dev/null +++ b/webtagger/static/components/flatui/sass/modules/_video.sass @@ -0,0 +1,358 @@ +// Styling JS Video plugin +$controls-color: scale-color($base, $lightness: -15%) + +.video-js + background-color: $base + border-radius: 6px 6px 0 0 + // Otherwise you won't see controls in Fullscreen mode + margin-top: -95px + position: relative + padding: 0 + font-size: 10px + vertical-align: middle + .vjs-tech + border-radius: 6px 6px 0 0 + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + &:-moz-full-screen + position: absolute + +body.vjs-full-window + padding: 0 + margin: 0 + height: 100% + overflow-y: auto + +.video-js + &.vjs-fullscreen + position: fixed + overflow: hidden + z-index: 1000 + left: 0 + top: 0 + bottom: 0 + right: 0 + width: 100%!important + height: 100%!important + _position: absolute + &:-webkit-full-screen + width: 100%!important + height: 100%!important + +.vjs-poster + margin: 0 auto + padding: 0 + cursor: pointer + position: relative + width: 100% + max-height: 100% + +.video-js + .vjs-text-track-display + text-align: center + position: absolute + bottom: 4em + left: 1em + right: 1em + font-family: $base-font-family + .vjs-text-track + display: none + color: #fff + font-size: 1.4em + text-align: center + margin-bottom: .1em + background: #000 + background: rgba(0, 0, 0, 0.5) + .vjs-subtitles + color: #fff + .vjs-captions + color: #fc6 + +.vjs-tt-cue + display: block + +.vjs-fade-in + visibility: visible!important + opacity: 1!important + +transition((visibility 0s linear 0s, opacity .3s linear)) + +.vjs-fade-out + visibility: hidden!important + opacity: 0!important + +transition((visibility 0s linear 1.5s, opacity 1.5s linear)) + +.vjs-controls + border-radius: 0 0 6px 6px + position: absolute + bottom: -47px + left: 0 + right: 0 + margin: 0 + padding: 0 + height: 47px + color: $inverse + background: $controls-color + &.vjs-fade-out + visibility: visible!important + opacity: 1!important + +// Video player control general style +.vjs-control + background-position: center center + background-repeat: no-repeat + position: relative + float: left + text-align: center + margin: 0 + padding: 0 + height: 18px + width: 18px + &:focus + outline: 0 + div + background-position: center center + background-repeat: no-repeat + +// Control tooltip +.vjs-control-text + border: 0 + clip: rect(0 0 0 0) + height: 1px + margin: -1px + overflow: hidden + padding: 0 + position: absolute + width: 1px + +.vjs-play-control + cursor: pointer!important + height: 47px + left: 0 + position: absolute + top: 0 + width: 58px + +.vjs-paused .vjs-play-control + background: url('../images/video/play.png') center -31px no-repeat + background-size: 16px 64px + &:hover + div + opacity: 0 + div + background: url('../images/video/play.png') center 15px no-repeat + background-size: 16px 64px + height: 47px + +transition(opacity .25s) + +.vjs-playing .vjs-play-control + background: url('../images/video/pause.png') center -31px no-repeat + background-size: 15px 64px + &:hover + div + opacity: 0 + + div + background: url('../images/video/pause.png') center 15px no-repeat + background-size: 15px 64px + height: 47px + +transition(opacity .25s) + +.vjs-rewind-control + width: 5em + cursor: pointer!important + div + width: 19px + height: 16px + background: url('video-js.png') + margin: .5em auto 0 + +.vjs-mute-control + background: url('../images/video/volume-full.png') center -48px no-repeat + background-size: 16px 64px + cursor: pointer!important + position: absolute + right: 51px + top: 14px + + &:hover, + &:focus + div + opacity: 0 + + // Muted state + &.vjs-vol-0 + &, + div + background-image: url('../images/video/volume-off.png') + + div + background: $controls-color url('../images/video/volume-full.png') no-repeat center 2px + background-size: 16px 64px + height: 18px + +transition(opacity .25s) + +.vjs-volume-control, +.vjs-volume-level, +.vjs-volume-handle, +.vjs-volume-bar + display: none + +.vjs-progress-control + border-radius: 32px + position: absolute + left: 60px + right: 180px + height: 12px + width: auto + top: 18px + background: scale-color($base, $lightness: 93%) + +.vjs-progress-holder + position: relative + cursor: pointer!important + padding: 0 + margin: 0 + height: 12px + +.vjs-play-progress, .vjs-load-progress + border-radius: 32px + position: absolute + display: block + height: 12px + margin: 0 + padding: 0 + left: 0 + top: 0 + +.vjs-play-progress + background: $firm + left: -1px + +.vjs-load-progress + background: scale-color(desaturate($base, 15%), $lightness: 80%) + border-radius: 32px 0 0 32px + &[style*='100%'], + &[style*='99%'] + border-radius: 32px + +.vjs-seek-handle + background-color: scale-color($firm, $lightness: -15%) + border-radius: 50% + position: absolute + width: 18px + height: 18px + margin: -3px 0 0 1px + left: 0 + top: 0 + +transition(background-color .25s) + + &[style*='95.'] + margin-left: 3px + + &[style='left: 0%;'] + margin-left: -2px + + &:hover, + &:focus + background-color: scale-color($firm, $lightness: -25%) + &:active + background-color: scale-color($firm, $lightness: -33%) + +// Player time controls +.vjs-time-controls + position: absolute + height: 20px + width: 50px + top: 16px + font: 300 13px $base-font-family + +.vjs-current-time + right: 128px + text-align: right + +.vjs-duration + color: scale-color(desaturate($base, 15%), $lightness: 25%) + right: 69px + text-align: left + +.vjs-remaining-time + display: none + +.vjs-time-divider + color: scale-color(desaturate($base, 15%), $lightness: 25%) + font-size: 14px + position: absolute + right: 121px + top: 15px + +.vjs-secondary-controls + float: right + +.vjs-fullscreen-control + background-image: url('../images/video/fullscreen.png') + background-position: center -47px + background-size: 15px 64px + cursor: pointer!important + position: absolute + right: 17px + top: 13px + + &:hover, + &:focus + div + opacity: 0 + + div + height: 18px + background: url('../images/video/fullscreen.png') no-repeat center 2px + background-size: 15px 64px + +transition(opacity .25s) + +// Subtitles menu. Hide for no need by design. +.vjs-menu-button + display: none !important + +// Video preloader +=sharp-keyframes + 0% + background: #e74c3c + border-radius: 10px + +transform(rotate(0deg)) + + 50% + background: #ebedee + border-radius: 0 + +transform(rotate(180deg)) + + 100% + background: #e74c3c + border-radius: 10px + +transform(rotate(360deg)) + +@-webkit-keyframes sharp + +sharp-keyframes + +@-moz-keyframes sharp + +sharp-keyframes + +@-o-keyframes sharp + +sharp-keyframes + +@keyframes sharp + +sharp-keyframes + +.vjs-loading-spinner + background: #ebedee + border-radius: 10px + display: none + height: 16px + left: 50% + margin: -8px 0 0 -8px + position: absolute + top: 50% + width: 16px + +animation(sharp 2s ease infinite) + diff --git a/webtagger/static/components/underscore/.gitignore b/webtagger/static/components/underscore/.gitignore new file mode 100644 index 0000000..029616c --- /dev/null +++ b/webtagger/static/components/underscore/.gitignore @@ -0,0 +1,2 @@ +raw +node_modules diff --git a/webtagger/static/components/underscore/.npmignore b/webtagger/static/components/underscore/.npmignore new file mode 100644 index 0000000..4e5886d --- /dev/null +++ b/webtagger/static/components/underscore/.npmignore @@ -0,0 +1,4 @@ +test/ +Rakefile +docs/ +raw/ diff --git a/webtagger/static/components/underscore/.travis.yml b/webtagger/static/components/underscore/.travis.yml new file mode 100644 index 0000000..99dc771 --- /dev/null +++ b/webtagger/static/components/underscore/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - 0.8 +notifications: + email: false diff --git a/webtagger/static/components/underscore/CNAME b/webtagger/static/components/underscore/CNAME new file mode 100644 index 0000000..a007e65 --- /dev/null +++ b/webtagger/static/components/underscore/CNAME @@ -0,0 +1 @@ +underscorejs.org diff --git a/webtagger/static/components/underscore/CONTRIBUTING.md b/webtagger/static/components/underscore/CONTRIBUTING.md new file mode 100644 index 0000000..de5d562 --- /dev/null +++ b/webtagger/static/components/underscore/CONTRIBUTING.md @@ -0,0 +1,9 @@ +## How to contribute to Underscore.js + +* Before you open a ticket or send a pull request, [search](https://github.com/documentcloud/underscore/issues) for previous discussions about the same feature or issue. Add to the earlier ticket if you find one. + +* Before sending a pull request for a feature, be sure to have [tests](http://underscorejs.org/test/). + +* Use the same coding style as the rest of the [codebase](https://github.com/documentcloud/underscore/blob/master/underscore.js). + +* In your pull request, do not add documentation or re-build the minified `underscore-min.js` file. We'll do those things before cutting a new release. diff --git a/webtagger/static/components/underscore/LICENSE b/webtagger/static/components/underscore/LICENSE new file mode 100644 index 0000000..0d8dbe4 --- /dev/null +++ b/webtagger/static/components/underscore/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2009-2013 Jeremy Ashkenas, DocumentCloud + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/webtagger/static/components/underscore/README.md b/webtagger/static/components/underscore/README.md new file mode 100644 index 0000000..b1f3e50 --- /dev/null +++ b/webtagger/static/components/underscore/README.md @@ -0,0 +1,19 @@ + __ + /\ \ __ + __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ + /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ + \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ + \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ + \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ + \ \____/ + \/___/ + +Underscore.js is a utility-belt library for JavaScript that provides +support for the usual functional suspects (each, map, reduce, filter...) +without extending any core JavaScript objects. + +For Docs, License, Tests, and pre-packed downloads, see: +http://underscorejs.org + +Many thanks to our contributors: +https://github.com/documentcloud/underscore/contributors diff --git a/webtagger/static/components/underscore/Rakefile b/webtagger/static/components/underscore/Rakefile new file mode 100644 index 0000000..3131e7e --- /dev/null +++ b/webtagger/static/components/underscore/Rakefile @@ -0,0 +1,10 @@ +desc "Use Uglify JS to compress Underscore.js" +task :build do + sh "uglifyjs underscore.js -c \"evaluate=false\" -m -o underscore-min.js" +end + +desc "Build the docco documentation" +task :doc do + sh "docco underscore.js" +end + diff --git a/webtagger/static/components/underscore/bower.json b/webtagger/static/components/underscore/bower.json new file mode 100644 index 0000000..560907d --- /dev/null +++ b/webtagger/static/components/underscore/bower.json @@ -0,0 +1,8 @@ +{ + "name": "underscore", + "version": "1.4.4", + "repository": { + "type": "git", + "url": "git://github.com/documentcloud/underscore.git" + } +} \ No newline at end of file diff --git a/webtagger/static/components/underscore/docs/docco.css b/webtagger/static/components/underscore/docs/docco.css new file mode 100644 index 0000000..04cc7ec --- /dev/null +++ b/webtagger/static/components/underscore/docs/docco.css @@ -0,0 +1,192 @@ +/*--------------------- Layout and Typography ----------------------------*/ +body { + font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; + font-size: 15px; + line-height: 22px; + color: #252519; + margin: 0; padding: 0; +} +a { + color: #261a3b; +} + a:visited { + color: #261a3b; + } +p { + margin: 0 0 15px 0; +} +h1, h2, h3, h4, h5, h6 { + margin: 0px 0 15px 0; +} + h1 { + margin-top: 40px; + } +hr { + border: 0 none; + border-top: 1px solid #e5e5ee; + height: 1px; + margin: 20px 0; +} +#container { + position: relative; +} +#background { + position: fixed; + top: 0; left: 525px; right: 0; bottom: 0; + background: #f5f5ff; + border-left: 1px solid #e5e5ee; + z-index: -1; +} +#jump_to, #jump_page { + background: white; + -webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777; + -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; + font: 10px Arial; + text-transform: uppercase; + cursor: pointer; + text-align: right; +} +#jump_to, #jump_wrapper { + position: fixed; + right: 0; top: 0; + padding: 5px 10px; +} + #jump_wrapper { + padding: 0; + display: none; + } + #jump_to:hover #jump_wrapper { + display: block; + } + #jump_page { + padding: 5px 0 3px; + margin: 0 0 25px 25px; + } + #jump_page .source { + display: block; + padding: 5px 10px; + text-decoration: none; + border-top: 1px solid #eee; + } + #jump_page .source:hover { + background: #f5f5ff; + } + #jump_page .source:first-child { + } +table td { + border: 0; + outline: 0; +} + td.docs, th.docs { + max-width: 450px; + min-width: 450px; + min-height: 5px; + padding: 10px 25px 1px 50px; + overflow-x: hidden; + vertical-align: top; + text-align: left; + } + .docs pre { + margin: 15px 0 15px; + padding-left: 15px; + } + .docs p tt, .docs p code { + background: #f8f8ff; + border: 1px solid #dedede; + font-size: 12px; + padding: 0 0.2em; + } + .pilwrap { + position: relative; + } + .pilcrow { + font: 12px Arial; + text-decoration: none; + color: #454545; + position: absolute; + top: 3px; left: -20px; + padding: 1px 2px; + opacity: 0; + -webkit-transition: opacity 0.2s linear; + } + td.docs:hover .pilcrow { + opacity: 1; + } + td.code, th.code { + padding: 14px 15px 16px 25px; + width: 100%; + vertical-align: top; + background: #f5f5ff; + border-left: 1px solid #e5e5ee; + } + pre, tt, code { + font-size: 12px; line-height: 18px; + font-family: Menlo, Monaco, Consolas, "Lucida Console", monospace; + margin: 0; padding: 0; + } + + +/*---------------------- Syntax Highlighting -----------------------------*/ +td.linenos { background-color: #f0f0f0; padding-right: 10px; } +span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; } +body .hll { background-color: #ffffcc } +body .c { color: #408080; font-style: italic } /* Comment */ +body .err { border: 1px solid #FF0000 } /* Error */ +body .k { color: #954121 } /* Keyword */ +body .o { color: #666666 } /* Operator */ +body .cm { color: #408080; font-style: italic } /* Comment.Multiline */ +body .cp { color: #BC7A00 } /* Comment.Preproc */ +body .c1 { color: #408080; font-style: italic } /* Comment.Single */ +body .cs { color: #408080; font-style: italic } /* Comment.Special */ +body .gd { color: #A00000 } /* Generic.Deleted */ +body .ge { font-style: italic } /* Generic.Emph */ +body .gr { color: #FF0000 } /* Generic.Error */ +body .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +body .gi { color: #00A000 } /* Generic.Inserted */ +body .go { color: #808080 } /* Generic.Output */ +body .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +body .gs { font-weight: bold } /* Generic.Strong */ +body .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +body .gt { color: #0040D0 } /* Generic.Traceback */ +body .kc { color: #954121 } /* Keyword.Constant */ +body .kd { color: #954121; font-weight: bold } /* Keyword.Declaration */ +body .kn { color: #954121; font-weight: bold } /* Keyword.Namespace */ +body .kp { color: #954121 } /* Keyword.Pseudo */ +body .kr { color: #954121; font-weight: bold } /* Keyword.Reserved */ +body .kt { color: #B00040 } /* Keyword.Type */ +body .m { color: #666666 } /* Literal.Number */ +body .s { color: #219161 } /* Literal.String */ +body .na { color: #7D9029 } /* Name.Attribute */ +body .nb { color: #954121 } /* Name.Builtin */ +body .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +body .no { color: #880000 } /* Name.Constant */ +body .nd { color: #AA22FF } /* Name.Decorator */ +body .ni { color: #999999; font-weight: bold } /* Name.Entity */ +body .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +body .nf { color: #0000FF } /* Name.Function */ +body .nl { color: #A0A000 } /* Name.Label */ +body .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +body .nt { color: #954121; font-weight: bold } /* Name.Tag */ +body .nv { color: #19469D } /* Name.Variable */ +body .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +body .w { color: #bbbbbb } /* Text.Whitespace */ +body .mf { color: #666666 } /* Literal.Number.Float */ +body .mh { color: #666666 } /* Literal.Number.Hex */ +body .mi { color: #666666 } /* Literal.Number.Integer */ +body .mo { color: #666666 } /* Literal.Number.Oct */ +body .sb { color: #219161 } /* Literal.String.Backtick */ +body .sc { color: #219161 } /* Literal.String.Char */ +body .sd { color: #219161; font-style: italic } /* Literal.String.Doc */ +body .s2 { color: #219161 } /* Literal.String.Double */ +body .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +body .sh { color: #219161 } /* Literal.String.Heredoc */ +body .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +body .sx { color: #954121 } /* Literal.String.Other */ +body .sr { color: #BB6688 } /* Literal.String.Regex */ +body .s1 { color: #219161 } /* Literal.String.Single */ +body .ss { color: #19469D } /* Literal.String.Symbol */ +body .bp { color: #954121 } /* Name.Builtin.Pseudo */ +body .vc { color: #19469D } /* Name.Variable.Class */ +body .vg { color: #19469D } /* Name.Variable.Global */ +body .vi { color: #19469D } /* Name.Variable.Instance */ +body .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/webtagger/static/components/underscore/docs/favicon.ico b/webtagger/static/components/underscore/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..03049683875ee7207b4ee62241fc6977956723c7 GIT binary patch literal 1406 zcmZQzU<5(|0R|w+!H~hqz#zuJz@P!dKp_SNAO?x!16vCj7#y|msTh?T4S~@R7;Yi( a|NnmmMkru{0(Aax^D{300E2>o91H*{%ptM> literal 0 HcmV?d00001 diff --git a/webtagger/static/components/underscore/docs/images/background.png b/webtagger/static/components/underscore/docs/images/background.png new file mode 100644 index 0000000000000000000000000000000000000000..90ee6934dd8d0c334ea38a0a74e32bdec2b7dba0 GIT binary patch literal 2108 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 literal 0 HcmV?d00001 diff --git a/webtagger/static/components/underscore/docs/underscore.html b/webtagger/static/components/underscore/docs/underscore.html new file mode 100644 index 0000000..fbe3977 --- /dev/null +++ b/webtagger/static/components/underscore/docs/underscore.html @@ -0,0 +1,823 @@ + underscore.js

    underscore.js

    Underscore.js 1.4.4
    +http://underscorejs.org
    +(c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
    +Underscore may be freely distributed under the MIT license.
    +
    (function() {

    Baseline setup

    Establish the root object, window in the browser, or global on the server.

      var root = this;

    Save the previous value of the _ variable.

      var previousUnderscore = root._;

    Establish the object that gets returned to break out of a loop iteration.

      var breaker = {};

    Save bytes in the minified (but not gzipped) version:

      var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;

    Create quick reference variables for speed access to core prototypes.

      var push             = ArrayProto.push,
    +      slice            = ArrayProto.slice,
    +      concat           = ArrayProto.concat,
    +      toString         = ObjProto.toString,
    +      hasOwnProperty   = ObjProto.hasOwnProperty;

    All ECMAScript 5 native function implementations that we hope to use +are declared here.

      var
    +    nativeForEach      = ArrayProto.forEach,
    +    nativeMap          = ArrayProto.map,
    +    nativeReduce       = ArrayProto.reduce,
    +    nativeReduceRight  = ArrayProto.reduceRight,
    +    nativeFilter       = ArrayProto.filter,
    +    nativeEvery        = ArrayProto.every,
    +    nativeSome         = ArrayProto.some,
    +    nativeIndexOf      = ArrayProto.indexOf,
    +    nativeLastIndexOf  = ArrayProto.lastIndexOf,
    +    nativeIsArray      = Array.isArray,
    +    nativeKeys         = Object.keys,
    +    nativeBind         = FuncProto.bind;

    Create a safe reference to the Underscore object for use below.

      var _ = function(obj) {
    +    if (obj instanceof _) return obj;
    +    if (!(this instanceof _)) return new _(obj);
    +    this._wrapped = obj;
    +  };

    Export the Underscore object for Node.js, with +backwards-compatibility for the old require() API. If we're in +the browser, add _ as a global object via a string identifier, +for Closure Compiler "advanced" mode.

      if (typeof exports !== 'undefined') {
    +    if (typeof module !== 'undefined' && module.exports) {
    +      exports = module.exports = _;
    +    }
    +    exports._ = _;
    +  } else {
    +    root._ = _;
    +  }

    Current version.

      _.VERSION = '1.4.4';

    Collection Functions

    The cornerstone, an each implementation, aka forEach. +Handles objects with the built-in forEach, arrays, and raw objects. +Delegates to ECMAScript 5's native forEach if available.

      var each = _.each = _.forEach = function(obj, iterator, context) {
    +    if (obj == null) return;
    +    if (nativeForEach && obj.forEach === nativeForEach) {
    +      obj.forEach(iterator, context);
    +    } else if (obj.length === +obj.length) {
    +      for (var i = 0, l = obj.length; i < l; i++) {
    +        if (iterator.call(context, obj[i], i, obj) === breaker) return;
    +      }
    +    } else {
    +      for (var key in obj) {
    +        if (_.has(obj, key)) {
    +          if (iterator.call(context, obj[key], key, obj) === breaker) return;
    +        }
    +      }
    +    }
    +  };

    Return the results of applying the iterator to each element. +Delegates to ECMAScript 5's native map if available.

      _.map = _.collect = function(obj, iterator, context) {
    +    var results = [];
    +    if (obj == null) return results;
    +    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
    +    each(obj, function(value, index, list) {
    +      results[results.length] = iterator.call(context, value, index, list);
    +    });
    +    return results;
    +  };
    +
    +  var reduceError = 'Reduce of empty array with no initial value';

    Reduce builds up a single result from a list of values, aka inject, +or foldl. Delegates to ECMAScript 5's native reduce if available.

      _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
    +    var initial = arguments.length > 2;
    +    if (obj == null) obj = [];
    +    if (nativeReduce && obj.reduce === nativeReduce) {
    +      if (context) iterator = _.bind(iterator, context);
    +      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
    +    }
    +    each(obj, function(value, index, list) {
    +      if (!initial) {
    +        memo = value;
    +        initial = true;
    +      } else {
    +        memo = iterator.call(context, memo, value, index, list);
    +      }
    +    });
    +    if (!initial) throw new TypeError(reduceError);
    +    return memo;
    +  };

    The right-associative version of reduce, also known as foldr. +Delegates to ECMAScript 5's native reduceRight if available.

      _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
    +    var initial = arguments.length > 2;
    +    if (obj == null) obj = [];
    +    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
    +      if (context) iterator = _.bind(iterator, context);
    +      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
    +    }
    +    var length = obj.length;
    +    if (length !== +length) {
    +      var keys = _.keys(obj);
    +      length = keys.length;
    +    }
    +    each(obj, function(value, index, list) {
    +      index = keys ? keys[--length] : --length;
    +      if (!initial) {
    +        memo = obj[index];
    +        initial = true;
    +      } else {
    +        memo = iterator.call(context, memo, obj[index], index, list);
    +      }
    +    });
    +    if (!initial) throw new TypeError(reduceError);
    +    return memo;
    +  };

    Return the first value which passes a truth test. Aliased as detect.

      _.find = _.detect = function(obj, iterator, context) {
    +    var result;
    +    any(obj, function(value, index, list) {
    +      if (iterator.call(context, value, index, list)) {
    +        result = value;
    +        return true;
    +      }
    +    });
    +    return result;
    +  };

    Return all the elements that pass a truth test. +Delegates to ECMAScript 5's native filter if available. +Aliased as select.

      _.filter = _.select = function(obj, iterator, context) {
    +    var results = [];
    +    if (obj == null) return results;
    +    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
    +    each(obj, function(value, index, list) {
    +      if (iterator.call(context, value, index, list)) results[results.length] = value;
    +    });
    +    return results;
    +  };

    Return all the elements for which a truth test fails.

      _.reject = function(obj, iterator, context) {
    +    return _.filter(obj, function(value, index, list) {
    +      return !iterator.call(context, value, index, list);
    +    }, context);
    +  };

    Determine whether all of the elements match a truth test. +Delegates to ECMAScript 5's native every if available. +Aliased as all.

      _.every = _.all = function(obj, iterator, context) {
    +    iterator || (iterator = _.identity);
    +    var result = true;
    +    if (obj == null) return result;
    +    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
    +    each(obj, function(value, index, list) {
    +      if (!(result = result && iterator.call(context, value, index, list))) return breaker;
    +    });
    +    return !!result;
    +  };

    Determine if at least one element in the object matches a truth test. +Delegates to ECMAScript 5's native some if available. +Aliased as any.

      var any = _.some = _.any = function(obj, iterator, context) {
    +    iterator || (iterator = _.identity);
    +    var result = false;
    +    if (obj == null) return result;
    +    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
    +    each(obj, function(value, index, list) {
    +      if (result || (result = iterator.call(context, value, index, list))) return breaker;
    +    });
    +    return !!result;
    +  };

    Determine if the array or object contains a given value (using ===). +Aliased as include.

      _.contains = _.include = function(obj, target) {
    +    if (obj == null) return false;
    +    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
    +    return any(obj, function(value) {
    +      return value === target;
    +    });
    +  };

    Invoke a method (with arguments) on every item in a collection.

      _.invoke = function(obj, method) {
    +    var args = slice.call(arguments, 2);
    +    var isFunc = _.isFunction(method);
    +    return _.map(obj, function(value) {
    +      return (isFunc ? method : value[method]).apply(value, args);
    +    });
    +  };

    Convenience version of a common use case of map: fetching a property.

      _.pluck = function(obj, key) {
    +    return _.map(obj, function(value){ return value[key]; });
    +  };

    Convenience version of a common use case of filter: selecting only objects +containing specific key:value pairs.

      _.where = function(obj, attrs, first) {
    +    if (_.isEmpty(attrs)) return first ? null : [];
    +    return _[first ? 'find' : 'filter'](obj, function(value) {
    +      for (var key in attrs) {
    +        if (attrs[key] !== value[key]) return false;
    +      }
    +      return true;
    +    });
    +  };

    Convenience version of a common use case of find: getting the first object +containing specific key:value pairs.

      _.findWhere = function(obj, attrs) {
    +    return _.where(obj, attrs, true);
    +  };

    Return the maximum element or (element-based computation). +Can't optimize arrays of integers longer than 65,535 elements. +See: https://bugs.webkit.org/show_bug.cgi?id=80797

      _.max = function(obj, iterator, context) {
    +    if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
    +      return Math.max.apply(Math, obj);
    +    }
    +    if (!iterator && _.isEmpty(obj)) return -Infinity;
    +    var result = {computed : -Infinity, value: -Infinity};
    +    each(obj, function(value, index, list) {
    +      var computed = iterator ? iterator.call(context, value, index, list) : value;
    +      computed >= result.computed && (result = {value : value, computed : computed});
    +    });
    +    return result.value;
    +  };

    Return the minimum element (or element-based computation).

      _.min = function(obj, iterator, context) {
    +    if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
    +      return Math.min.apply(Math, obj);
    +    }
    +    if (!iterator && _.isEmpty(obj)) return Infinity;
    +    var result = {computed : Infinity, value: Infinity};
    +    each(obj, function(value, index, list) {
    +      var computed = iterator ? iterator.call(context, value, index, list) : value;
    +      computed < result.computed && (result = {value : value, computed : computed});
    +    });
    +    return result.value;
    +  };

    Shuffle an array.

      _.shuffle = function(obj) {
    +    var rand;
    +    var index = 0;
    +    var shuffled = [];
    +    each(obj, function(value) {
    +      rand = _.random(index++);
    +      shuffled[index - 1] = shuffled[rand];
    +      shuffled[rand] = value;
    +    });
    +    return shuffled;
    +  };

    An internal function to generate lookup iterators.

      var lookupIterator = function(value) {
    +    return _.isFunction(value) ? value : function(obj){ return obj[value]; };
    +  };

    Sort the object's values by a criterion produced by an iterator.

      _.sortBy = function(obj, value, context) {
    +    var iterator = lookupIterator(value);
    +    return _.pluck(_.map(obj, function(value, index, list) {
    +      return {
    +        value : value,
    +        index : index,
    +        criteria : iterator.call(context, value, index, list)
    +      };
    +    }).sort(function(left, right) {
    +      var a = left.criteria;
    +      var b = right.criteria;
    +      if (a !== b) {
    +        if (a > b || a === void 0) return 1;
    +        if (a < b || b === void 0) return -1;
    +      }
    +      return left.index < right.index ? -1 : 1;
    +    }), 'value');
    +  };

    An internal function used for aggregate "group by" operations.

      var group = function(obj, value, context, behavior) {
    +    var result = {};
    +    var iterator = lookupIterator(value || _.identity);
    +    each(obj, function(value, index) {
    +      var key = iterator.call(context, value, index, obj);
    +      behavior(result, key, value);
    +    });
    +    return result;
    +  };

    Groups the object's values by a criterion. Pass either a string attribute +to group by, or a function that returns the criterion.

      _.groupBy = function(obj, value, context) {
    +    return group(obj, value, context, function(result, key, value) {
    +      (_.has(result, key) ? result[key] : (result[key] = [])).push(value);
    +    });
    +  };

    Counts instances of an object that group by a certain criterion. Pass +either a string attribute to count by, or a function that returns the +criterion.

      _.countBy = function(obj, value, context) {
    +    return group(obj, value, context, function(result, key) {
    +      if (!_.has(result, key)) result[key] = 0;
    +      result[key]++;
    +    });
    +  };

    Use a comparator function to figure out the smallest index at which +an object should be inserted so as to maintain order. Uses binary search.

      _.sortedIndex = function(array, obj, iterator, context) {
    +    iterator = iterator == null ? _.identity : lookupIterator(iterator);
    +    var value = iterator.call(context, obj);
    +    var low = 0, high = array.length;
    +    while (low < high) {
    +      var mid = (low + high) >>> 1;
    +      iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;
    +    }
    +    return low;
    +  };

    Safely convert anything iterable into a real, live array.

      _.toArray = function(obj) {
    +    if (!obj) return [];
    +    if (_.isArray(obj)) return slice.call(obj);
    +    if (obj.length === +obj.length) return _.map(obj, _.identity);
    +    return _.values(obj);
    +  };

    Return the number of elements in an object.

      _.size = function(obj) {
    +    if (obj == null) return 0;
    +    return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;
    +  };

    Array Functions

    Get the first element of an array. Passing n will return the first N +values in the array. Aliased as head and take. The guard check +allows it to work with _.map.

      _.first = _.head = _.take = function(array, n, guard) {
    +    if (array == null) return void 0;
    +    return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
    +  };

    Returns everything but the last entry of the array. Especially useful on +the arguments object. Passing n will return all the values in +the array, excluding the last N. The guard check allows it to work with +_.map.

      _.initial = function(array, n, guard) {
    +    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
    +  };

    Get the last element of an array. Passing n will return the last N +values in the array. The guard check allows it to work with _.map.

      _.last = function(array, n, guard) {
    +    if (array == null) return void 0;
    +    if ((n != null) && !guard) {
    +      return slice.call(array, Math.max(array.length - n, 0));
    +    } else {
    +      return array[array.length - 1];
    +    }
    +  };

    Returns everything but the first entry of the array. Aliased as tail and drop. +Especially useful on the arguments object. Passing an n will return +the rest N values in the array. The guard +check allows it to work with _.map.

      _.rest = _.tail = _.drop = function(array, n, guard) {
    +    return slice.call(array, (n == null) || guard ? 1 : n);
    +  };

    Trim out all falsy values from an array.

      _.compact = function(array) {
    +    return _.filter(array, _.identity);
    +  };

    Internal implementation of a recursive flatten function.

      var flatten = function(input, shallow, output) {
    +    each(input, function(value) {
    +      if (_.isArray(value)) {
    +        shallow ? push.apply(output, value) : flatten(value, shallow, output);
    +      } else {
    +        output.push(value);
    +      }
    +    });
    +    return output;
    +  };

    Return a completely flattened version of an array.

      _.flatten = function(array, shallow) {
    +    return flatten(array, shallow, []);
    +  };

    Return a version of the array that does not contain the specified value(s).

      _.without = function(array) {
    +    return _.difference(array, slice.call(arguments, 1));
    +  };

    Produce a duplicate-free version of the array. If the array has already +been sorted, you have the option of using a faster algorithm. +Aliased as unique.

      _.uniq = _.unique = function(array, isSorted, iterator, context) {
    +    if (_.isFunction(isSorted)) {
    +      context = iterator;
    +      iterator = isSorted;
    +      isSorted = false;
    +    }
    +    var initial = iterator ? _.map(array, iterator, context) : array;
    +    var results = [];
    +    var seen = [];
    +    each(initial, function(value, index) {
    +      if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {
    +        seen.push(value);
    +        results.push(array[index]);
    +      }
    +    });
    +    return results;
    +  };

    Produce an array that contains the union: each distinct element from all of +the passed-in arrays.

      _.union = function() {
    +    return _.uniq(concat.apply(ArrayProto, arguments));
    +  };

    Produce an array that contains every item shared between all the +passed-in arrays.

      _.intersection = function(array) {
    +    var rest = slice.call(arguments, 1);
    +    return _.filter(_.uniq(array), function(item) {
    +      return _.every(rest, function(other) {
    +        return _.indexOf(other, item) >= 0;
    +      });
    +    });
    +  };

    Take the difference between one array and a number of other arrays. +Only the elements present in just the first array will remain.

      _.difference = function(array) {
    +    var rest = concat.apply(ArrayProto, slice.call(arguments, 1));
    +    return _.filter(array, function(value){ return !_.contains(rest, value); });
    +  };

    Zip together multiple lists into a single array -- elements that share +an index go together.

      _.zip = function() {
    +    var args = slice.call(arguments);
    +    var length = _.max(_.pluck(args, 'length'));
    +    var results = new Array(length);
    +    for (var i = 0; i < length; i++) {
    +      results[i] = _.pluck(args, "" + i);
    +    }
    +    return results;
    +  };

    Converts lists into objects. Pass either a single array of [key, value] +pairs, or two parallel arrays of the same length -- one of keys, and one of +the corresponding values.

      _.object = function(list, values) {
    +    if (list == null) return {};
    +    var result = {};
    +    for (var i = 0, l = list.length; i < l; i++) {
    +      if (values) {
    +        result[list[i]] = values[i];
    +      } else {
    +        result[list[i][0]] = list[i][1];
    +      }
    +    }
    +    return result;
    +  };

    If the browser doesn't supply us with indexOf (I'm looking at you, MSIE), +we need this function. Return the position of the first occurrence of an +item in an array, or -1 if the item is not included in the array. +Delegates to ECMAScript 5's native indexOf if available. +If the array is large and already in sort order, pass true +for isSorted to use binary search.

      _.indexOf = function(array, item, isSorted) {
    +    if (array == null) return -1;
    +    var i = 0, l = array.length;
    +    if (isSorted) {
    +      if (typeof isSorted == 'number') {
    +        i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);
    +      } else {
    +        i = _.sortedIndex(array, item);
    +        return array[i] === item ? i : -1;
    +      }
    +    }
    +    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
    +    for (; i < l; i++) if (array[i] === item) return i;
    +    return -1;
    +  };

    Delegates to ECMAScript 5's native lastIndexOf if available.

      _.lastIndexOf = function(array, item, from) {
    +    if (array == null) return -1;
    +    var hasIndex = from != null;
    +    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {
    +      return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);
    +    }
    +    var i = (hasIndex ? from : array.length);
    +    while (i--) if (array[i] === item) return i;
    +    return -1;
    +  };

    Generate an integer Array containing an arithmetic progression. A port of +the native Python range() function. See +the Python documentation.

      _.range = function(start, stop, step) {
    +    if (arguments.length <= 1) {
    +      stop = start || 0;
    +      start = 0;
    +    }
    +    step = arguments[2] || 1;
    +
    +    var len = Math.max(Math.ceil((stop - start) / step), 0);
    +    var idx = 0;
    +    var range = new Array(len);
    +
    +    while(idx < len) {
    +      range[idx++] = start;
    +      start += step;
    +    }
    +
    +    return range;
    +  };

    Function (ahem) Functions

    Create a function bound to a given object (assigning this, and arguments, +optionally). Delegates to ECMAScript 5's native Function.bind if +available.

      _.bind = function(func, context) {
    +    if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
    +    var args = slice.call(arguments, 2);
    +    return function() {
    +      return func.apply(context, args.concat(slice.call(arguments)));
    +    };
    +  };

    Partially apply a function by creating a version that has had some of its +arguments pre-filled, without changing its dynamic this context.

      _.partial = function(func) {
    +    var args = slice.call(arguments, 1);
    +    return function() {
    +      return func.apply(this, args.concat(slice.call(arguments)));
    +    };
    +  };

    Bind all of an object's methods to that object. Useful for ensuring that +all callbacks defined on an object belong to it.

      _.bindAll = function(obj) {
    +    var funcs = slice.call(arguments, 1);
    +    if (funcs.length === 0) funcs = _.functions(obj);
    +    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
    +    return obj;
    +  };

    Memoize an expensive function by storing its results.

      _.memoize = function(func, hasher) {
    +    var memo = {};
    +    hasher || (hasher = _.identity);
    +    return function() {
    +      var key = hasher.apply(this, arguments);
    +      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
    +    };
    +  };

    Delays a function for the given number of milliseconds, and then calls +it with the arguments supplied.

      _.delay = function(func, wait) {
    +    var args = slice.call(arguments, 2);
    +    return setTimeout(function(){ return func.apply(null, args); }, wait);
    +  };

    Defers a function, scheduling it to run after the current call stack has +cleared.

      _.defer = function(func) {
    +    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
    +  };

    Returns a function, that, when invoked, will only be triggered at most once +during a given window of time.

      _.throttle = function(func, wait) {
    +    var context, args, timeout, result;
    +    var previous = 0;
    +    var later = function() {
    +      previous = new Date;
    +      timeout = null;
    +      result = func.apply(context, args);
    +    };
    +    return function() {
    +      var now = new Date;
    +      var remaining = wait - (now - previous);
    +      context = this;
    +      args = arguments;
    +      if (remaining <= 0) {
    +        clearTimeout(timeout);
    +        timeout = null;
    +        previous = now;
    +        result = func.apply(context, args);
    +      } else if (!timeout) {
    +        timeout = setTimeout(later, remaining);
    +      }
    +      return result;
    +    };
    +  };

    Returns a function, that, as long as it continues to be invoked, will not +be triggered. The function will be called after it stops being called for +N milliseconds. If immediate is passed, trigger the function on the +leading edge, instead of the trailing.

      _.debounce = function(func, wait, immediate) {
    +    var timeout, result;
    +    return function() {
    +      var context = this, args = arguments;
    +      var later = function() {
    +        timeout = null;
    +        if (!immediate) result = func.apply(context, args);
    +      };
    +      var callNow = immediate && !timeout;
    +      clearTimeout(timeout);
    +      timeout = setTimeout(later, wait);
    +      if (callNow) result = func.apply(context, args);
    +      return result;
    +    };
    +  };

    Returns a function that will be executed at most one time, no matter how +often you call it. Useful for lazy initialization.

      _.once = function(func) {
    +    var ran = false, memo;
    +    return function() {
    +      if (ran) return memo;
    +      ran = true;
    +      memo = func.apply(this, arguments);
    +      func = null;
    +      return memo;
    +    };
    +  };

    Returns the first function passed as an argument to the second, +allowing you to adjust arguments, run code before and after, and +conditionally execute the original function.

      _.wrap = function(func, wrapper) {
    +    return function() {
    +      var args = [func];
    +      push.apply(args, arguments);
    +      return wrapper.apply(this, args);
    +    };
    +  };

    Returns a function that is the composition of a list of functions, each +consuming the return value of the function that follows.

      _.compose = function() {
    +    var funcs = arguments;
    +    return function() {
    +      var args = arguments;
    +      for (var i = funcs.length - 1; i >= 0; i--) {
    +        args = [funcs[i].apply(this, args)];
    +      }
    +      return args[0];
    +    };
    +  };

    Returns a function that will only be executed after being called N times.

      _.after = function(times, func) {
    +    if (times <= 0) return func();
    +    return function() {
    +      if (--times < 1) {
    +        return func.apply(this, arguments);
    +      }
    +    };
    +  };

    Object Functions

    Retrieve the names of an object's properties. +Delegates to ECMAScript 5's native Object.keys

      _.keys = nativeKeys || function(obj) {
    +    if (obj !== Object(obj)) throw new TypeError('Invalid object');
    +    var keys = [];
    +    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
    +    return keys;
    +  };

    Retrieve the values of an object's properties.

      _.values = function(obj) {
    +    var values = [];
    +    for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);
    +    return values;
    +  };

    Convert an object into a list of [key, value] pairs.

      _.pairs = function(obj) {
    +    var pairs = [];
    +    for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);
    +    return pairs;
    +  };

    Invert the keys and values of an object. The values must be serializable.

      _.invert = function(obj) {
    +    var result = {};
    +    for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;
    +    return result;
    +  };

    Return a sorted list of the function names available on the object. +Aliased as methods

      _.functions = _.methods = function(obj) {
    +    var names = [];
    +    for (var key in obj) {
    +      if (_.isFunction(obj[key])) names.push(key);
    +    }
    +    return names.sort();
    +  };

    Extend a given object with all the properties in passed-in object(s).

      _.extend = function(obj) {
    +    each(slice.call(arguments, 1), function(source) {
    +      if (source) {
    +        for (var prop in source) {
    +          obj[prop] = source[prop];
    +        }
    +      }
    +    });
    +    return obj;
    +  };

    Return a copy of the object only containing the whitelisted properties.

      _.pick = function(obj) {
    +    var copy = {};
    +    var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
    +    each(keys, function(key) {
    +      if (key in obj) copy[key] = obj[key];
    +    });
    +    return copy;
    +  };

    Return a copy of the object without the blacklisted properties.

      _.omit = function(obj) {
    +    var copy = {};
    +    var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
    +    for (var key in obj) {
    +      if (!_.contains(keys, key)) copy[key] = obj[key];
    +    }
    +    return copy;
    +  };

    Fill in a given object with default properties.

      _.defaults = function(obj) {
    +    each(slice.call(arguments, 1), function(source) {
    +      if (source) {
    +        for (var prop in source) {
    +          if (obj[prop] == null) obj[prop] = source[prop];
    +        }
    +      }
    +    });
    +    return obj;
    +  };

    Create a (shallow-cloned) duplicate of an object.

      _.clone = function(obj) {
    +    if (!_.isObject(obj)) return obj;
    +    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
    +  };

    Invokes interceptor with the obj, and then returns obj. +The primary purpose of this method is to "tap into" a method chain, in +order to perform operations on intermediate results within the chain.

      _.tap = function(obj, interceptor) {
    +    interceptor(obj);
    +    return obj;
    +  };

    Internal recursive comparison function for isEqual.

      var eq = function(a, b, aStack, bStack) {

    Identical objects are equal. 0 === -0, but they aren't identical. +See the Harmony egal proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.

        if (a === b) return a !== 0 || 1 / a == 1 / b;

    A strict comparison is necessary because null == undefined.

        if (a == null || b == null) return a === b;

    Unwrap any wrapped objects.

        if (a instanceof _) a = a._wrapped;
    +    if (b instanceof _) b = b._wrapped;

    Compare [[Class]] names.

        var className = toString.call(a);
    +    if (className != toString.call(b)) return false;
    +    switch (className) {

    Strings, numbers, dates, and booleans are compared by value.

          case '[object String]':

    Primitives and their corresponding object wrappers are equivalent; thus, "5" is +equivalent to new String("5").

            return a == String(b);
    +      case '[object Number]':

    NaNs are equivalent, but non-reflexive. An egal comparison is performed for +other numeric values.

            return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
    +      case '[object Date]':
    +      case '[object Boolean]':

    Coerce dates and booleans to numeric primitive values. Dates are compared by their +millisecond representations. Note that invalid dates with millisecond representations +of NaN are not equivalent.

            return +a == +b;

    RegExps are compared by their source patterns and flags.

          case '[object RegExp]':
    +        return a.source == b.source &&
    +               a.global == b.global &&
    +               a.multiline == b.multiline &&
    +               a.ignoreCase == b.ignoreCase;
    +    }
    +    if (typeof a != 'object' || typeof b != 'object') return false;

    Assume equality for cyclic structures. The algorithm for detecting cyclic +structures is adapted from ES 5.1 section 15.12.3, abstract operation JO.

        var length = aStack.length;
    +    while (length--) {

    Linear search. Performance is inversely proportional to the number of +unique nested structures.

          if (aStack[length] == a) return bStack[length] == b;
    +    }

    Add the first object to the stack of traversed objects.

        aStack.push(a);
    +    bStack.push(b);
    +    var size = 0, result = true;

    Recursively compare objects and arrays.

        if (className == '[object Array]') {

    Compare array lengths to determine if a deep comparison is necessary.

          size = a.length;
    +      result = size == b.length;
    +      if (result) {

    Deep compare the contents, ignoring non-numeric properties.

            while (size--) {
    +          if (!(result = eq(a[size], b[size], aStack, bStack))) break;
    +        }
    +      }
    +    } else {

    Objects with different constructors are not equivalent, but Objects +from different frames are.

          var aCtor = a.constructor, bCtor = b.constructor;
    +      if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
    +                               _.isFunction(bCtor) && (bCtor instanceof bCtor))) {
    +        return false;
    +      }

    Deep compare objects.

          for (var key in a) {
    +        if (_.has(a, key)) {

    Count the expected number of properties.

              size++;

    Deep compare each member.

              if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
    +        }
    +      }

    Ensure that both objects contain the same number of properties.

          if (result) {
    +        for (key in b) {
    +          if (_.has(b, key) && !(size--)) break;
    +        }
    +        result = !size;
    +      }
    +    }

    Remove the first object from the stack of traversed objects.

        aStack.pop();
    +    bStack.pop();
    +    return result;
    +  };

    Perform a deep comparison to check if two objects are equal.

      _.isEqual = function(a, b) {
    +    return eq(a, b, [], []);
    +  };

    Is a given array, string, or object empty? +An "empty" object has no enumerable own-properties.

      _.isEmpty = function(obj) {
    +    if (obj == null) return true;
    +    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
    +    for (var key in obj) if (_.has(obj, key)) return false;
    +    return true;
    +  };

    Is a given value a DOM element?

      _.isElement = function(obj) {
    +    return !!(obj && obj.nodeType === 1);
    +  };

    Is a given value an array? +Delegates to ECMA5's native Array.isArray

      _.isArray = nativeIsArray || function(obj) {
    +    return toString.call(obj) == '[object Array]';
    +  };

    Is a given variable an object?

      _.isObject = function(obj) {
    +    return obj === Object(obj);
    +  };

    Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.

      each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
    +    _['is' + name] = function(obj) {
    +      return toString.call(obj) == '[object ' + name + ']';
    +    };
    +  });

    Define a fallback version of the method in browsers (ahem, IE), where +there isn't any inspectable "Arguments" type.

      if (!_.isArguments(arguments)) {
    +    _.isArguments = function(obj) {
    +      return !!(obj && _.has(obj, 'callee'));
    +    };
    +  }

    Optimize isFunction if appropriate.

      if (typeof (/./) !== 'function') {
    +    _.isFunction = function(obj) {
    +      return typeof obj === 'function';
    +    };
    +  }

    Is a given object a finite number?

      _.isFinite = function(obj) {
    +    return isFinite(obj) && !isNaN(parseFloat(obj));
    +  };

    Is the given value NaN? (NaN is the only number which does not equal itself).

      _.isNaN = function(obj) {
    +    return _.isNumber(obj) && obj != +obj;
    +  };

    Is a given value a boolean?

      _.isBoolean = function(obj) {
    +    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
    +  };

    Is a given value equal to null?

      _.isNull = function(obj) {
    +    return obj === null;
    +  };

    Is a given variable undefined?

      _.isUndefined = function(obj) {
    +    return obj === void 0;
    +  };

    Shortcut function for checking if an object has a given property directly +on itself (in other words, not on a prototype).

      _.has = function(obj, key) {
    +    return hasOwnProperty.call(obj, key);
    +  };

    Utility Functions

    Run Underscore.js in noConflict mode, returning the _ variable to its +previous owner. Returns a reference to the Underscore object.

      _.noConflict = function() {
    +    root._ = previousUnderscore;
    +    return this;
    +  };

    Keep the identity function around for default iterators.

      _.identity = function(value) {
    +    return value;
    +  };

    Run a function n times.

      _.times = function(n, iterator, context) {
    +    var accum = Array(n);
    +    for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
    +    return accum;
    +  };

    Return a random integer between min and max (inclusive).

      _.random = function(min, max) {
    +    if (max == null) {
    +      max = min;
    +      min = 0;
    +    }
    +    return min + Math.floor(Math.random() * (max - min + 1));
    +  };

    List of HTML entities for escaping.

      var entityMap = {
    +    escape: {
    +      '&': '&amp;',
    +      '<': '&lt;',
    +      '>': '&gt;',
    +      '"': '&quot;',
    +      "'": '&#x27;',
    +      '/': '&#x2F;'
    +    }
    +  };
    +  entityMap.unescape = _.invert(entityMap.escape);

    Regexes containing the keys and values listed immediately above.

      var entityRegexes = {
    +    escape:   new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),
    +    unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')
    +  };

    Functions for escaping and unescaping strings to/from HTML interpolation.

      _.each(['escape', 'unescape'], function(method) {
    +    _[method] = function(string) {
    +      if (string == null) return '';
    +      return ('' + string).replace(entityRegexes[method], function(match) {
    +        return entityMap[method][match];
    +      });
    +    };
    +  });

    If the value of the named property is a function then invoke it; +otherwise, return it.

      _.result = function(object, property) {
    +    if (object == null) return null;
    +    var value = object[property];
    +    return _.isFunction(value) ? value.call(object) : value;
    +  };

    Add your own custom functions to the Underscore object.

      _.mixin = function(obj) {
    +    each(_.functions(obj), function(name){
    +      var func = _[name] = obj[name];
    +      _.prototype[name] = function() {
    +        var args = [this._wrapped];
    +        push.apply(args, arguments);
    +        return result.call(this, func.apply(_, args));
    +      };
    +    });
    +  };

    Generate a unique integer id (unique within the entire client session). +Useful for temporary DOM ids.

      var idCounter = 0;
    +  _.uniqueId = function(prefix) {
    +    var id = ++idCounter + '';
    +    return prefix ? prefix + id : id;
    +  };

    By default, Underscore uses ERB-style template delimiters, change the +following template settings to use alternative delimiters.

      _.templateSettings = {
    +    evaluate    : /<%([\s\S]+?)%>/g,
    +    interpolate : /<%=([\s\S]+?)%>/g,
    +    escape      : /<%-([\s\S]+?)%>/g
    +  };

    When customizing templateSettings, if you don't want to define an +interpolation, evaluation or escaping regex, we need one that is +guaranteed not to match.

      var noMatch = /(.)^/;

    Certain characters need to be escaped so that they can be put into a +string literal.

      var escapes = {
    +    "'":      "'",
    +    '\\':     '\\',
    +    '\r':     'r',
    +    '\n':     'n',
    +    '\t':     't',
    +    '\u2028': 'u2028',
    +    '\u2029': 'u2029'
    +  };
    +
    +  var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;

    JavaScript micro-templating, similar to John Resig's implementation. +Underscore templating handles arbitrary delimiters, preserves whitespace, +and correctly escapes quotes within interpolated code.

      _.template = function(text, data, settings) {
    +    var render;
    +    settings = _.defaults({}, settings, _.templateSettings);

    Combine delimiters into one regular expression via alternation.

        var matcher = new RegExp([
    +      (settings.escape || noMatch).source,
    +      (settings.interpolate || noMatch).source,
    +      (settings.evaluate || noMatch).source
    +    ].join('|') + '|$', 'g');

    Compile the template source, escaping string literals appropriately.

        var index = 0;
    +    var source = "__p+='";
    +    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
    +      source += text.slice(index, offset)
    +        .replace(escaper, function(match) { return '\\' + escapes[match]; });
    +
    +      if (escape) {
    +        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
    +      }
    +      if (interpolate) {
    +        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
    +      }
    +      if (evaluate) {
    +        source += "';\n" + evaluate + "\n__p+='";
    +      }
    +      index = offset + match.length;
    +      return match;
    +    });
    +    source += "';\n";

    If a variable is not specified, place data values in local scope.

        if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
    +
    +    source = "var __t,__p='',__j=Array.prototype.join," +
    +      "print=function(){__p+=__j.call(arguments,'');};\n" +
    +      source + "return __p;\n";
    +
    +    try {
    +      render = new Function(settings.variable || 'obj', '_', source);
    +    } catch (e) {
    +      e.source = source;
    +      throw e;
    +    }
    +
    +    if (data) return render(data, _);
    +    var template = function(data) {
    +      return render.call(this, data, _);
    +    };

    Provide the compiled function source as a convenience for precompilation.

        template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}';
    +
    +    return template;
    +  };

    Add a "chain" function, which will delegate to the wrapper.

      _.chain = function(obj) {
    +    return _(obj).chain();
    +  };

    OOP

    + +

    If Underscore is called as a function, it returns a wrapped object that +can be used OO-style. This wrapper holds altered versions of all the +underscore functions. Wrapped objects may be chained.

    Helper function to continue chaining intermediate results.

      var result = function(obj) {
    +    return this._chain ? _(obj).chain() : obj;
    +  };

    Add all of the Underscore functions to the wrapper object.

      _.mixin(_);

    Add all mutator Array functions to the wrapper.

      each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
    +    var method = ArrayProto[name];
    +    _.prototype[name] = function() {
    +      var obj = this._wrapped;
    +      method.apply(obj, arguments);
    +      if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];
    +      return result.call(this, obj);
    +    };
    +  });

    Add all accessor Array functions to the wrapper.

      each(['concat', 'join', 'slice'], function(name) {
    +    var method = ArrayProto[name];
    +    _.prototype[name] = function() {
    +      return result.call(this, method.apply(this._wrapped, arguments));
    +    };
    +  });
    +
    +  _.extend(_.prototype, {

    Start chaining a wrapped Underscore object.

        chain: function() {
    +      this._chain = true;
    +      return this;
    +    },

    Extracts the result from a wrapped and chained object.

        value: function() {
    +      return this._wrapped;
    +    }
    +
    +  });
    +
    +}).call(this);
    +
    +
    \ No newline at end of file diff --git a/webtagger/static/components/underscore/favicon.ico b/webtagger/static/components/underscore/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..03049683875ee7207b4ee62241fc6977956723c7 GIT binary patch literal 1406 zcmZQzU<5(|0R|w+!H~hqz#zuJz@P!dKp_SNAO?x!16vCj7#y|msTh?T4S~@R7;Yi( a|NnmmMkru{0(Aax^D{300E2>o91H*{%ptM> literal 0 HcmV?d00001 diff --git a/webtagger/static/components/underscore/index.html b/webtagger/static/components/underscore/index.html new file mode 100644 index 0000000..8c5793a --- /dev/null +++ b/webtagger/static/components/underscore/index.html @@ -0,0 +1,2467 @@ + + + + + + + + + Underscore.js + + + + +
    + +
    + +

    + +

    + +

    + Underscore is a + utility-belt library for JavaScript that provides a lot of the + functional programming support that you would expect in + Prototype.js + (or Ruby), + but without extending any of the built-in JavaScript objects. It's the + tie to go along with jQuery's tux, + and Backbone.js's suspenders. +

    + +

    + Underscore provides 80-odd functions that support both the usual + functional suspects: map, select, invoke — + as well as more specialized helpers: function binding, javascript + templating, deep equality testing, and so on. It delegates to built-in + functions, if present, so modern browsers will use the + native implementations of forEach, map, reduce, + filter, every, some and indexOf. +

    + +

    + A complete Test & Benchmark Suite + is included for your perusal. +

    + +

    + You may also read through the annotated source code. +

    + +

    + The project is + hosted on GitHub. + You can report bugs and discuss features on the + issues page, + on Freenode in the #documentcloud channel, + or send tweets to @documentcloud. +

    + +

    + Underscore is an open-source component of DocumentCloud. +

    + +

    Downloads (Right-click, and use "Save As")

    + + + + + + + + + + + + + + + + + +
    Development Version (1.4.4)40kb, Uncompressed with Plentiful Comments
    Production Version (1.4.4)4kb, Minified and Gzipped
    Edge VersionUnreleased, current master, use at your own risk
    + +
    + +

    Collection Functions (Arrays or Objects)

    + +

    + each_.each(list, iterator, [context]) + Alias: forEach +
    + Iterates over a list of elements, yielding each in turn to an iterator + function. The iterator is bound to the context object, if one is + passed. Each invocation of iterator is called with three arguments: + (element, index, list). If list is a JavaScript object, iterator's + arguments will be (value, key, list). Delegates to the native + forEach function if it exists. +

    +
    +_.each([1, 2, 3], alert);
    +=> alerts each number in turn...
    +_.each({one : 1, two : 2, three : 3}, alert);
    +=> alerts each number value in turn...
    + +

    + map_.map(list, iterator, [context]) + Alias: collect +
    + Produces a new array of values by mapping each value in list + through a transformation function (iterator). If the native map method + exists, it will be used instead. If list is a JavaScript object, + iterator's arguments will be (value, key, list). +

    +
    +_.map([1, 2, 3], function(num){ return num * 3; });
    +=> [3, 6, 9]
    +_.map({one : 1, two : 2, three : 3}, function(num, key){ return num * 3; });
    +=> [3, 6, 9]
    + +

    + reduce_.reduce(list, iterator, memo, [context]) + Aliases: inject, foldl +
    + Also known as inject and foldl, reduce boils down a + list of values into a single value. Memo is the initial state + of the reduction, and each successive step of it should be returned by + iterator. The iterator is passed four arguments: the memo, + then the value and index (or key) of the iteration, + and finally a reference to the entire list. +

    +
    +var sum = _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);
    +=> 6
    +
    + +

    + reduceRight_.reduceRight(list, iterator, memo, [context]) + Alias: foldr +
    + The right-associative version of reduce. Delegates to the + JavaScript 1.8 version of reduceRight, if it exists. Foldr + is not as useful in JavaScript as it would be in a language with lazy + evaluation. +

    +
    +var list = [[0, 1], [2, 3], [4, 5]];
    +var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
    +=> [4, 5, 2, 3, 0, 1]
    +
    + +

    + find_.find(list, iterator, [context]) + Alias: detect +
    + Looks through each value in the list, returning the first one that + passes a truth test (iterator). The function returns as + soon as it finds an acceptable element, and doesn't traverse the + entire list. +

    +
    +var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
    +=> 2
    +
    + +

    + filter_.filter(list, iterator, [context]) + Alias: select +
    + Looks through each value in the list, returning an array of all + the values that pass a truth test (iterator). Delegates to the + native filter method, if it exists. +

    +
    +var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
    +=> [2, 4, 6]
    +
    + +

    + where_.where(list, properties) +
    + Looks through each value in the list, returning an array of all + the values that contain all of the key-value pairs listed in properties. +

    +
    +_.where(listOfPlays, {author: "Shakespeare", year: 1611});
    +=> [{title: "Cymbeline", author: "Shakespeare", year: 1611},
    +    {title: "The Tempest", author: "Shakespeare", year: 1611}]
    +
    + +

    + findWhere_.findWhere(list, properties) +
    + Looks through the list and returns the first value that matches + all of the key-value pairs listed in properties. +

    +
    +_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"});
    +=> {year: 1918, newsroom: "The New York Times",
    +  reason: "For its public service in publishing in full so many official reports,
    +  documents and speeches by European statesmen relating to the progress and
    +  conduct of the war."}
    +
    + +

    + reject_.reject(list, iterator, [context]) +
    + Returns the values in list without the elements that the truth + test (iterator) passes. The opposite of filter. +

    +
    +var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
    +=> [1, 3, 5]
    +
    + +

    + every_.every(list, iterator, [context]) + Alias: all +
    + Returns true if all of the values in the list pass the iterator + truth test. Delegates to the native method every, if present. +

    +
    +_.every([true, 1, null, 'yes'], _.identity);
    +=> false
    +
    + +

    + some_.some(list, [iterator], [context]) + Alias: any +
    + Returns true if any of the values in the list pass the + iterator truth test. Short-circuits and stops traversing the list + if a true element is found. Delegates to the native method some, + if present. +

    +
    +_.some([null, 0, 'yes', false]);
    +=> true
    +
    + +

    + contains_.contains(list, value) + Alias: include +
    + Returns true if the value is present in the list. + Uses indexOf internally, if list is an Array. +

    +
    +_.contains([1, 2, 3], 3);
    +=> true
    +
    + +

    + invoke_.invoke(list, methodName, [*arguments]) +
    + Calls the method named by methodName on each value in the list. + Any extra arguments passed to invoke will be forwarded on to the + method invocation. +

    +
    +_.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
    +=> [[1, 5, 7], [1, 2, 3]]
    +
    + +

    + pluck_.pluck(list, propertyName) +
    + A convenient version of what is perhaps the most common use-case for + map: extracting a list of property values. +

    +
    +var stooges = [{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}];
    +_.pluck(stooges, 'name');
    +=> ["moe", "larry", "curly"]
    +
    + +

    + max_.max(list, [iterator], [context]) +
    + Returns the maximum value in list. If iterator is passed, + it will be used on each value to generate the criterion by which the + value is ranked. +

    +
    +var stooges = [{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}];
    +_.max(stooges, function(stooge){ return stooge.age; });
    +=> {name : 'curly', age : 60};
    +
    + +

    + min_.min(list, [iterator], [context]) +
    + Returns the minimum value in list. If iterator is passed, + it will be used on each value to generate the criterion by which the + value is ranked. +

    +
    +var numbers = [10, 5, 100, 2, 1000];
    +_.min(numbers);
    +=> 2
    +
    + +

    + sortBy_.sortBy(list, iterator, [context]) +
    + Returns a sorted copy of list, ranked in ascending order by the + results of running each value through iterator. Iterator may + also be the string name of the property to sort by (eg. length). +

    +
    +_.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });
    +=> [5, 4, 6, 3, 1, 2]
    +
    + +

    + groupBy_.groupBy(list, iterator, [context]) +
    + Splits a collection into sets, grouped by the result of running each + value through iterator. If iterator is a string instead of + a function, groups by the property named by iterator on each of + the values. +

    +
    +_.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); });
    +=> {1: [1.3], 2: [2.1, 2.4]}
    +
    +_.groupBy(['one', 'two', 'three'], 'length');
    +=> {3: ["one", "two"], 5: ["three"]}
    +
    + +

    + countBy_.countBy(list, iterator, [context]) +
    + Sorts a list into groups and returns a count for the number of objects + in each group. + Similar to groupBy, but instead of returning a list of values, + returns a count for the number of values in that group. +

    +
    +_.countBy([1, 2, 3, 4, 5], function(num) {
    +  return num % 2 == 0 ? 'even' : 'odd';
    +});
    +=> {odd: 3, even: 2}
    +
    + +

    + shuffle_.shuffle(list) +
    + Returns a shuffled copy of the list, using a version of the + Fisher-Yates shuffle. +

    +
    +_.shuffle([1, 2, 3, 4, 5, 6]);
    +=> [4, 1, 6, 3, 5, 2]
    +
    + +

    + toArray_.toArray(list) +
    + Converts the list (anything that can be iterated over), into a + real Array. Useful for transmuting the arguments object. +

    +
    +(function(){ return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
    +=> [2, 3, 4]
    +
    + +

    + size_.size(list) +
    + Return the number of values in the list. +

    +
    +_.size({one : 1, two : 2, three : 3});
    +=> 3
    +
    + +

    Array Functions

    + +

    + + Note: All array functions will also work on the arguments object. + However, Underscore functions are not designed to work on "sparse" arrays. + +

    + +

    + first_.first(array, [n]) + Alias: head, take +
    + Returns the first element of an array. Passing n will + return the first n elements of the array. +

    +
    +_.first([5, 4, 3, 2, 1]);
    +=> 5
    +
    + +

    + initial_.initial(array, [n]) +
    + Returns everything but the last entry of the array. Especially useful on + the arguments object. Pass n to exclude the last n elements + from the result. +

    +
    +_.initial([5, 4, 3, 2, 1]);
    +=> [5, 4, 3, 2]
    +
    + +

    + last_.last(array, [n]) +
    + Returns the last element of an array. Passing n will return + the last n elements of the array. +

    +
    +_.last([5, 4, 3, 2, 1]);
    +=> 1
    +
    + +

    + rest_.rest(array, [index]) + Alias: tail, drop +
    + Returns the rest of the elements in an array. Pass an index + to return the values of the array from that index onward. +

    +
    +_.rest([5, 4, 3, 2, 1]);
    +=> [4, 3, 2, 1]
    +
    + +

    + compact_.compact(array) +
    + Returns a copy of the array with all falsy values removed. + In JavaScript, false, null, 0, "", + undefined and NaN are all falsy. +

    +
    +_.compact([0, 1, false, 2, '', 3]);
    +=> [1, 2, 3]
    +
    + +

    + flatten_.flatten(array, [shallow]) +
    + Flattens a nested array (the nesting can be to any depth). If you + pass shallow, the array will only be flattened a single level. +

    +
    +_.flatten([1, [2], [3, [[4]]]]);
    +=> [1, 2, 3, 4];
    +
    +_.flatten([1, [2], [3, [[4]]]], true);
    +=> [1, 2, 3, [[4]]];
    +
    + +

    + without_.without(array, [*values]) +
    + Returns a copy of the array with all instances of the values + removed. +

    +
    +_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
    +=> [2, 3, 4]
    +
    + +

    + union_.union(*arrays) +
    + Computes the union of the passed-in arrays: the list of unique items, + in order, that are present in one or more of the arrays. +

    +
    +_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
    +=> [1, 2, 3, 101, 10]
    +
    + +

    + intersection_.intersection(*arrays) +
    + Computes the list of values that are the intersection of all the arrays. + Each value in the result is present in each of the arrays. +

    +
    +_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
    +=> [1, 2]
    +
    + +

    + difference_.difference(array, *others) +
    + Similar to without, but returns the values from array that + are not present in the other arrays. +

    +
    +_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
    +=> [1, 3, 4]
    +
    + +

    + uniq_.uniq(array, [isSorted], [iterator]) + Alias: unique +
    + Produces a duplicate-free version of the array, using === to test + object equality. If you know in advance that the array is sorted, + passing true for isSorted will run a much faster algorithm. + If you want to compute unique items based on a transformation, pass an + iterator function. +

    +
    +_.uniq([1, 2, 1, 3, 1, 4]);
    +=> [1, 2, 3, 4]
    +
    + +

    + zip_.zip(*arrays) +
    + Merges together the values of each of the arrays with the + values at the corresponding position. Useful when you have separate + data sources that are coordinated through matching array indexes. + If you're working with a matrix of nested arrays, zip.apply + can transpose the matrix in a similar fashion. +

    +
    +_.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]);
    +=> [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]
    +
    + +

    + object_.object(list, [values]) +
    + Converts arrays into objects. Pass either a single list of + [key, value] pairs, or a list of keys, and a list of values. +

    +
    +_.object(['moe', 'larry', 'curly'], [30, 40, 50]);
    +=> {moe: 30, larry: 40, curly: 50}
    +
    +_.object([['moe', 30], ['larry', 40], ['curly', 50]]);
    +=> {moe: 30, larry: 40, curly: 50}
    +
    + +

    + indexOf_.indexOf(array, value, [isSorted]) +
    + Returns the index at which value can be found in the array, + or -1 if value is not present in the array. Uses the native + indexOf function unless it's missing. If you're working with a + large array, and you know that the array is already sorted, pass true + for isSorted to use a faster binary search ... or, pass a number as + the third argument in order to look for the first matching value in the + array after the given index. +

    +
    +_.indexOf([1, 2, 3], 2);
    +=> 1
    +
    + +

    + lastIndexOf_.lastIndexOf(array, value, [fromIndex]) +
    + Returns the index of the last occurrence of value in the array, + or -1 if value is not present. Uses the native lastIndexOf + function if possible. Pass fromIndex to start your search at a + given index. +

    +
    +_.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
    +=> 4
    +
    + +

    + sortedIndex_.sortedIndex(list, value, [iterator], [context]) +
    + Uses a binary search to determine the index at which the value + should be inserted into the list in order to maintain the list's + sorted order. If an iterator is passed, it will be used to compute + the sort ranking of each value, including the value you pass. +

    +
    +_.sortedIndex([10, 20, 30, 40, 50], 35);
    +=> 3
    +
    + +

    + range_.range([start], stop, [step]) +
    + A function to create flexibly-numbered lists of integers, handy for + each and map loops. start, if omitted, defaults + to 0; step defaults to 1. Returns a list of integers + from start to stop, incremented (or decremented) by step, + exclusive. +

    +
    +_.range(10);
    +=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    +_.range(1, 11);
    +=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    +_.range(0, 30, 5);
    +=> [0, 5, 10, 15, 20, 25]
    +_.range(0, -10, -1);
    +=> [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
    +_.range(0);
    +=> []
    +
    + +

    Function (uh, ahem) Functions

    + +

    + bind_.bind(function, object, [*arguments]) +
    + Bind a function to an object, meaning that whenever + the function is called, the value of this will be the object. + Optionally, pass arguments to the function to pre-fill them, + also known as partial application. +

    +
    +var func = function(greeting){ return greeting + ': ' + this.name };
    +func = _.bind(func, {name : 'moe'}, 'hi');
    +func();
    +=> 'hi: moe'
    +
    + +

    + bindAll_.bindAll(object, [*methodNames]) +
    + Binds a number of methods on the object, specified by + methodNames, to be run in the context of that object whenever they + are invoked. Very handy for binding functions that are going to be used + as event handlers, which would otherwise be invoked with a fairly useless + this. If no methodNames are provided, all of the object's + function properties will be bound to it. +

    +
    +var buttonView = {
    +  label   : 'underscore',
    +  onClick : function(){ alert('clicked: ' + this.label); },
    +  onHover : function(){ console.log('hovering: ' + this.label); }
    +};
    +_.bindAll(buttonView);
    +jQuery('#underscore_button').bind('click', buttonView.onClick);
    +=> When the button is clicked, this.label will have the correct value...
    +
    + +

    + partial_.partial(function, [*arguments]) +
    + Partially apply a function by filling in any number of its arguments, + without changing its dynamic this value. A close cousin + of bind. +

    +
    +var add = function(a, b) { return a + b; };
    +add5 = _.partial(add, 5);
    +add5(10);
    +=> 15
    +
    + +

    + memoize_.memoize(function, [hashFunction]) +
    + Memoizes a given function by caching the computed result. Useful + for speeding up slow-running computations. If passed an optional + hashFunction, it will be used to compute the hash key for storing + the result, based on the arguments to the original function. The default + hashFunction just uses the first argument to the memoized function + as the key. +

    +
    +var fibonacci = _.memoize(function(n) {
    +  return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
    +});
    +
    + +

    + delay_.delay(function, wait, [*arguments]) +
    + Much like setTimeout, invokes function after wait + milliseconds. If you pass the optional arguments, they will be + forwarded on to the function when it is invoked. +

    +
    +var log = _.bind(console.log, console);
    +_.delay(log, 1000, 'logged later');
    +=> 'logged later' // Appears after one second.
    +
    + +

    + defer_.defer(function, [*arguments]) +
    + Defers invoking the function until the current call stack has cleared, + similar to using setTimeout with a delay of 0. Useful for performing + expensive computations or HTML rendering in chunks without blocking the UI thread + from updating. If you pass the optional arguments, they will be + forwarded on to the function when it is invoked. +

    +
    +_.defer(function(){ alert('deferred'); });
    +// Returns from the function before the alert runs.
    +
    + +

    + throttle_.throttle(function, wait) +
    + Creates and returns a new, throttled version of the passed function, + that, when invoked repeatedly, will only actually call the original function + at most once per every wait + milliseconds. Useful for rate-limiting events that occur faster than you + can keep up with. +

    +
    +var throttled = _.throttle(updatePosition, 100);
    +$(window).scroll(throttled);
    +
    + +

    + debounce_.debounce(function, wait, [immediate]) +
    + Creates and returns a new debounced version of the passed function that + will postpone its execution until after + wait milliseconds have elapsed since the last time it + was invoked. Useful for implementing behavior that should only happen + after the input has stopped arriving. For example: rendering a + preview of a Markdown comment, recalculating a layout after the window + has stopped being resized, and so on. +

    + +

    + Pass true for the immediate parameter to cause + debounce to trigger the function on the leading instead of the + trailing edge of the wait interval. Useful in circumstances like + preventing accidental double-clicks on a "submit" button from firing a + second time. +

    + +
    +var lazyLayout = _.debounce(calculateLayout, 300);
    +$(window).resize(lazyLayout);
    +
    + +

    + once_.once(function) +
    + Creates a version of the function that can only be called one time. + Repeated calls to the modified function will have no effect, returning + the value from the original call. Useful for initialization functions, + instead of having to set a boolean flag and then check it later. +

    +
    +var initialize = _.once(createApplication);
    +initialize();
    +initialize();
    +// Application is only created once.
    +
    + +

    + after_.after(count, function) +
    + Creates a version of the function that will only be run after first + being called count times. Useful for grouping asynchronous responses, + where you want to be sure that all the async calls have finished, before + proceeding. +

    +
    +var renderNotes = _.after(notes.length, render);
    +_.each(notes, function(note) {
    +  note.asyncSave({success: renderNotes});
    +});
    +// renderNotes is run once, after all notes have saved.
    +
    + +

    + wrap_.wrap(function, wrapper) +
    + Wraps the first function inside of the wrapper function, + passing it as the first argument. This allows the wrapper to + execute code before and after the function runs, adjust the arguments, + and execute it conditionally. +

    +
    +var hello = function(name) { return "hello: " + name; };
    +hello = _.wrap(hello, function(func) {
    +  return "before, " + func("moe") + ", after";
    +});
    +hello();
    +=> 'before, hello: moe, after'
    +
    + +

    + compose_.compose(*functions) +
    + Returns the composition of a list of functions, where each function + consumes the return value of the function that follows. In math terms, + composing the functions f(), g(), and h() produces + f(g(h())). +

    +
    +var greet    = function(name){ return "hi: " + name; };
    +var exclaim  = function(statement){ return statement + "!"; };
    +var welcome = _.compose(exclaim, greet);
    +welcome('moe');
    +=> 'hi: moe!'
    +
    + +

    Object Functions

    + +

    + keys_.keys(object) +
    + Retrieve all the names of the object's properties. +

    +
    +_.keys({one : 1, two : 2, three : 3});
    +=> ["one", "two", "three"]
    +
    + +

    + values_.values(object) +
    + Return all of the values of the object's properties. +

    +
    +_.values({one : 1, two : 2, three : 3});
    +=> [1, 2, 3]
    +
    + +

    + pairs_.pairs(object) +
    + Convert an object into a list of [key, value] pairs. +

    +
    +_.pairs({one: 1, two: 2, three: 3});
    +=> [["one", 1], ["two", 2], ["three", 3]]
    +
    + +

    + invert_.invert(object) +
    + Returns a copy of the object where the keys have become the values + and the values the keys. For this to work, all of your object's values + should be unique and string serializable. +

    +
    +_.invert({Moe: "Moses", Larry: "Louis", Curly: "Jerome"});
    +=> {Moses: "Moe", Louis: "Larry", Jerome: "Curly"};
    +
    + +

    + functions_.functions(object) + Alias: methods +
    + Returns a sorted list of the names of every method in an object — + that is to say, the name of every function property of the object. +

    +
    +_.functions(_);
    +=> ["all", "any", "bind", "bindAll", "clone", "compact", "compose" ...
    +
    + +

    + extend_.extend(destination, *sources) +
    + Copy all of the properties in the source objects over to the + destination object, and return the destination object. + It's in-order, so the last source will override properties of the same + name in previous arguments. +

    +
    +_.extend({name : 'moe'}, {age : 50});
    +=> {name : 'moe', age : 50}
    +
    + +

    + pick_.pick(object, *keys) +
    + Return a copy of the object, filtered to only have values for + the whitelisted keys (or array of valid keys). +

    +
    +_.pick({name : 'moe', age: 50, userid : 'moe1'}, 'name', 'age');
    +=> {name : 'moe', age : 50}
    +
    + +

    + omit_.omit(object, *keys) +
    + Return a copy of the object, filtered to omit the blacklisted + keys (or array of keys). +

    +
    +_.omit({name : 'moe', age : 50, userid : 'moe1'}, 'userid');
    +=> {name : 'moe', age : 50}
    +
    + +

    + defaults_.defaults(object, *defaults) +
    + Fill in null and undefined properties in object with values from the + defaults objects, and return the object. As soon as the + property is filled, further defaults will have no effect. +

    +
    +var iceCream = {flavor : "chocolate"};
    +_.defaults(iceCream, {flavor : "vanilla", sprinkles : "lots"});
    +=> {flavor : "chocolate", sprinkles : "lots"}
    +
    + +

    + clone_.clone(object) +
    + Create a shallow-copied clone of the object. Any nested objects + or arrays will be copied by reference, not duplicated. +

    +
    +_.clone({name : 'moe'});
    +=> {name : 'moe'};
    +
    + +

    + tap_.tap(object, interceptor) +
    + Invokes interceptor with the object, and then returns object. + The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain. +

    +
    +_.chain([1,2,3,200])
    +  .filter(function(num) { return num % 2 == 0; })
    +  .tap(alert)
    +  .map(function(num) { return num * num })
    +  .value();
    +=> // [2, 200] (alerted)
    +=> [4, 40000]
    +
    + +

    + has_.has(object, key) +
    + Does the object contain the given key? Identical to + object.hasOwnProperty(key), but uses a safe reference to the + hasOwnProperty function, in case it's been + overridden accidentally. +

    +
    +_.has({a: 1, b: 2, c: 3}, "b");
    +=> true
    +
    + +

    + isEqual_.isEqual(object, other) +
    + Performs an optimized deep comparison between the two objects, to determine + if they should be considered equal. +

    +
    +var moe   = {name : 'moe', luckyNumbers : [13, 27, 34]};
    +var clone = {name : 'moe', luckyNumbers : [13, 27, 34]};
    +moe == clone;
    +=> false
    +_.isEqual(moe, clone);
    +=> true
    +
    + +

    + isEmpty_.isEmpty(object) +
    + Returns true if object contains no values. +

    +
    +_.isEmpty([1, 2, 3]);
    +=> false
    +_.isEmpty({});
    +=> true
    +
    + +

    + isElement_.isElement(object) +
    + Returns true if object is a DOM element. +

    +
    +_.isElement(jQuery('body')[0]);
    +=> true
    +
    + +

    + isArray_.isArray(object) +
    + Returns true if object is an Array. +

    +
    +(function(){ return _.isArray(arguments); })();
    +=> false
    +_.isArray([1,2,3]);
    +=> true
    +
    + +

    + isObject_.isObject(value) +
    + Returns true if value is an Object. Note that JavaScript + arrays and functions are objects, while (normal) strings and numbers are not. +

    +
    +_.isObject({});
    +=> true
    +_.isObject(1);
    +=> false
    +
    + +

    + isArguments_.isArguments(object) +
    + Returns true if object is an Arguments object. +

    +
    +(function(){ return _.isArguments(arguments); })(1, 2, 3);
    +=> true
    +_.isArguments([1,2,3]);
    +=> false
    +
    + +

    + isFunction_.isFunction(object) +
    + Returns true if object is a Function. +

    +
    +_.isFunction(alert);
    +=> true
    +
    + +

    + isString_.isString(object) +
    + Returns true if object is a String. +

    +
    +_.isString("moe");
    +=> true
    +
    + +

    + isNumber_.isNumber(object) +
    + Returns true if object is a Number (including NaN). +

    +
    +_.isNumber(8.4 * 5);
    +=> true
    +
    + +

    + isFinite_.isFinite(object) +
    + Returns true if object is a finite Number. +

    +
    +_.isFinite(-101);
    +=> true
    +
    +_.isFinite(-Infinity);
    +=> false
    +
    + +

    + isBoolean_.isBoolean(object) +
    + Returns true if object is either true or false. +

    +
    +_.isBoolean(null);
    +=> false
    +
    + +

    + isDate_.isDate(object) +
    + Returns true if object is a Date. +

    +
    +_.isDate(new Date());
    +=> true
    +
    + +

    + isRegExp_.isRegExp(object) +
    + Returns true if object is a RegExp. +

    +
    +_.isRegExp(/moe/);
    +=> true
    +
    + +

    + isNaN_.isNaN(object) +
    + Returns true if object is NaN.
    Note: this is not + the same as the native isNaN function, which will also return + true if the variable is undefined. +

    +
    +_.isNaN(NaN);
    +=> true
    +isNaN(undefined);
    +=> true
    +_.isNaN(undefined);
    +=> false
    +
    + +

    + isNull_.isNull(object) +
    + Returns true if the value of object is null. +

    +
    +_.isNull(null);
    +=> true
    +_.isNull(undefined);
    +=> false
    +
    + +

    + isUndefined_.isUndefined(value) +
    + Returns true if value is undefined. +

    +
    +_.isUndefined(window.missingVariable);
    +=> true
    +
    + +

    Utility Functions

    + +

    + noConflict_.noConflict() +
    + Give control of the "_" variable back to its previous owner. Returns + a reference to the Underscore object. +

    +
    +var underscore = _.noConflict();
    + +

    + identity_.identity(value) +
    + Returns the same value that is used as the argument. In math: + f(x) = x
    + This function looks useless, but is used throughout Underscore as + a default iterator. +

    +
    +var moe = {name : 'moe'};
    +moe === _.identity(moe);
    +=> true
    + +

    + times_.times(n, iterator, [context]) +
    + Invokes the given iterator function n times. Each invocation of + iterator is called with an index argument. +
    + Note: this example uses the chaining syntax. +

    +
    +_(3).times(function(n){ genie.grantWishNumber(n); });
    + +

    + random_.random(min, max) +
    + Returns a random integer between min and max, inclusive. + If you only pass one argument, it will return a number between 0 + and that number. +

    +
    +_.random(0, 100);
    +=> 42
    + +

    + mixin_.mixin(object) +
    + Allows you to extend Underscore with your own utility functions. Pass + a hash of {name: function} definitions to have your functions + added to the Underscore object, as well as the OOP wrapper. +

    +
    +_.mixin({
    +  capitalize : function(string) {
    +    return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase();
    +  }
    +});
    +_("fabio").capitalize();
    +=> "Fabio"
    +
    + +

    + uniqueId_.uniqueId([prefix]) +
    + Generate a globally-unique id for client-side models or DOM elements + that need one. If prefix is passed, the id will be appended to it. +

    +
    +_.uniqueId('contact_');
    +=> 'contact_104'
    + +

    + escape_.escape(string) +
    + Escapes a string for insertion into HTML, replacing + &, <, >, ", ', and / characters. +

    +
    +_.escape('Curly, Larry & Moe');
    +=> "Curly, Larry &amp; Moe"
    + +

    + unescape_.unescape(string) +
    + The opposite of escape, replaces + &amp;, &lt;, &gt;, + &quot;, &#x27;, and &#x2F; + with their unescaped counterparts. +

    +
    +_.unescape('Curly, Larry &amp; Moe');
    +=> "Curly, Larry & Moe"
    + +

    + result_.result(object, property) +
    + If the value of the named property is a function then invoke it; otherwise, return it. +

    +
    +var object = {cheese: 'crumpets', stuff: function(){ return 'nonsense'; }};
    +_.result(object, 'cheese');
    +=> "crumpets"
    +_.result(object, 'stuff');
    +=> "nonsense"
    + +

    + template_.template(templateString, [data], [settings]) +
    + Compiles JavaScript templates into functions that can be evaluated + for rendering. Useful for rendering complicated bits of HTML from JSON + data sources. Template functions can both interpolate variables, using + <%= … %>, as well as execute arbitrary JavaScript code, with + <% … %>. If you wish to interpolate a value, and have + it be HTML-escaped, use <%- … %> When you evaluate a template function, pass in a + data object that has properties corresponding to the template's free + variables. If you're writing a one-off, you can pass the data + object as the second parameter to template in order to render + immediately instead of returning a template function. The settings argument + should be a hash containing any _.templateSettings that should be overridden. +

    + +
    +var compiled = _.template("hello: <%= name %>");
    +compiled({name : 'moe'});
    +=> "hello: moe"
    +
    +var list = "<% _.each(people, function(name) { %> <li><%= name %></li> <% }); %>";
    +_.template(list, {people : ['moe', 'curly', 'larry']});
    +=> "<li>moe</li><li>curly</li><li>larry</li>"
    +
    +var template = _.template("<b><%- value %></b>");
    +template({value : '<script>'});
    +=> "<b>&lt;script&gt;</b>"
    + +

    + You can also use print from within JavaScript code. This is + sometimes more convenient than using <%= ... %>. +

    + +
    +var compiled = _.template("<% print('Hello ' + epithet); %>");
    +compiled({epithet: "stooge"});
    +=> "Hello stooge."
    + +

    + If ERB-style delimiters aren't your cup of tea, you can change Underscore's + template settings to use different symbols to set off interpolated code. + Define an interpolate regex to match expressions that should be + interpolated verbatim, an escape regex to match expressions that should + be inserted after being HTML escaped, and an evaluate regex to match + expressions that should be evaluated without insertion into the resulting + string. You may define or omit any combination of the three. + For example, to perform + Mustache.js + style templating: +

    + +
    +_.templateSettings = {
    +  interpolate : /\{\{(.+?)\}\}/g
    +};
    +
    +var template = _.template("Hello {{ name }}!");
    +template({name : "Mustache"});
    +=> "Hello Mustache!"
    + +

    + By default, template places the values from your data in the local scope + via the with statement. However, you can specify a single variable name + with the variable setting. This can significantly improve the speed + at which a template is able to render. +

    + +
    +_.template("Using 'with': <%= data.answer %>", {answer: 'no'}, {variable: 'data'});
    +=> "Using 'with': no"
    + +

    + Precompiling your templates can be a big help when debugging errors you can't + reproduce. This is because precompiled templates can provide line numbers and + a stack trace, something that is not possible when compiling templates on the client. + The source property is available on the compiled template + function for easy precompilation. +

    + +
    <script>
    +  JST.project = <%= _.template(jstText).source %>;
    +</script>
    + + +

    Chaining

    + +

    + You can use Underscore in either an object-oriented or a functional style, + depending on your preference. The following two lines of code are + identical ways to double a list of numbers. +

    + +
    +_.map([1, 2, 3], function(n){ return n * 2; });
    +_([1, 2, 3]).map(function(n){ return n * 2; });
    + +

    + Calling chain will cause all future method calls to return + wrapped objects. When you've finished the computation, use + value to retrieve the final value. Here's an example of chaining + together a map/flatten/reduce, in order to get the word count of + every word in a song. +

    + +
    +var lyrics = [
    +  {line : 1, words : "I'm a lumberjack and I'm okay"},
    +  {line : 2, words : "I sleep all night and I work all day"},
    +  {line : 3, words : "He's a lumberjack and he's okay"},
    +  {line : 4, words : "He sleeps all night and he works all day"}
    +];
    +
    +_.chain(lyrics)
    +  .map(function(line) { return line.words.split(' '); })
    +  .flatten()
    +  .reduce(function(counts, word) {
    +    counts[word] = (counts[word] || 0) + 1;
    +    return counts;
    +  }, {})
    +  .value();
    +
    +=> {lumberjack : 2, all : 4, night : 2 ... }
    + +

    + In addition, the + Array prototype's methods + are proxied through the chained Underscore object, so you can slip a + reverse or a push into your chain, and continue to + modify the array. +

    + +

    + chain_.chain(obj) +
    + Returns a wrapped object. Calling methods on this object will continue + to return wrapped objects until value is used. +

    +
    +var stooges = [{name : 'curly', age : 25}, {name : 'moe', age : 21}, {name : 'larry', age : 23}];
    +var youngest = _.chain(stooges)
    +  .sortBy(function(stooge){ return stooge.age; })
    +  .map(function(stooge){ return stooge.name + ' is ' + stooge.age; })
    +  .first()
    +  .value();
    +=> "moe is 21"
    +
    + +

    + value_(obj).value() +
    + Extracts the value of a wrapped object. +

    +
    +_([1, 2, 3]).value();
    +=> [1, 2, 3]
    +
    + + + +

    + The Underscore documentation is also available in + Simplified Chinese. +

    + +

    + Underscore.lua, + a Lua port of the functions that are applicable in both languages. + Includes OOP-wrapping and chaining. + (source) +

    + +

    + Underscore.m, an Objective-C port + of many of the Underscore.js functions, using a syntax that encourages + chaining. + (source) +

    + +

    + _.m, an alternative + Objective-C port that tries to stick a little closer to the original + Underscore.js API. + (source) +

    + +

    + Underscore.php, + a PHP port of the functions that are applicable in both languages. + Includes OOP-wrapping and chaining. + (source) +

    + +

    + Underscore-perl, + a Perl port of many of the Underscore.js functions, + aimed at on Perl hashes and arrays. + (source) +

    + +

    + Underscore.cfc, + a Coldfusion port of many of the Underscore.js functions. + (source) +

    + +

    + Underscore.string, + an Underscore extension that adds functions for string-manipulation: + trim, startsWith, contains, capitalize, + reverse, sprintf, and more. +

    + +

    + Ruby's Enumerable module. +

    + +

    + Prototype.js, which provides + JavaScript with collection functions in the manner closest to Ruby's Enumerable. +

    + +

    + Oliver Steele's + Functional JavaScript, + which includes comprehensive higher-order function support as well as string lambdas. +

    + +

    + Michael Aufreiter's Data.js, + a data manipulation + persistence library for JavaScript. +

    + +

    + Python's itertools. +

    + +

    Change Log

    + +

    + 1.4.4Jan. 30, 2013Diff
    +

      +
    • + Added _.findWhere, for finding the first element in a list + that matches a particular set of keys and values. +
    • +
    • + Added _.partial, for partially applying a function without + changing its dynamic reference to this. +
    • +
    • + Simplified bind by removing some edge cases involving + constructor functions. In short: don't _.bind your + constructors. +
    • +
    • + A minor optimization to invoke. +
    • +
    • + Fix bug in the minified version due to the minifier incorrectly + optimizing-away isFunction. +
    • +
    +

    + +

    + 1.4.3Dec. 4, 2012Diff
    +

      +
    • + Improved Underscore compatibility with Adobe's JS engine that can be + used to script Illustrator, Photoshop, and friends. +
    • +
    • + Added a default _.identity iterator to countBy and + groupBy. +
    • +
    • + The uniq function can now take array, iterator, context + as the argument list. +
    • +
    • + The times function now returns the mapped array of iterator + results. +
    • +
    • + Simplified and fixed bugs in throttle. +
    • +
    +

    + +

    + 1.4.2Oct. 1, 2012Diff
    +

      +
    • + For backwards compatibility, returned to pre-1.4.0 behavior when + passing null to iteration functions. They now become no-ops + again. +
    • +
    +

    + +

    + 1.4.1Oct. 1, 2012Diff
    +

      +
    • + Fixed a 1.4.0 regression in the lastIndexOf function. +
    • +
    +

    + +

    + 1.4.0Sept. 27, 2012Diff
    +

      +
    • + Added a pairs function, for turning a JavaScript object + into [key, value] pairs ... as well as an object + function, for converting an array of [key, value] pairs + into an object. +
    • +
    • + Added a countBy function, for counting the number of objects + in a list that match a certain criteria. +
    • +
    • + Added an invert function, for performing a simple inversion + of the keys and values in an object. +
    • +
    • + Added a where function, for easy cases of filtering a list + for objects with specific values. +
    • +
    • + Added an omit function, for filtering an object to remove + certain keys. +
    • +
    • + Added a random function, to return a random number in a + given range. +
    • +
    • + _.debounce'd functions now return their last updated value, + just like _.throttle'd functions do. +
    • +
    • + The sortBy function now runs a stable sort algorithm. +
    • +
    • + Added the optional fromIndex option to indexOf and + lastIndexOf. +
    • +
    • + "Sparse" arrays are no longer supported in Underscore iteration + functions. Use a for loop instead (or better yet, an object). +
    • +
    • + The min and max functions may now be called on + very large arrays. +
    • +
    • + Interpolation in templates now represents null and + undefined as the empty string. +
    • +
    • + Underscore iteration functions no longer accept null values + as a no-op argument. You'll get an early error instead. +
    • +
    • + A number of edge-cases fixes and tweaks, which you can spot in the + diff. + Depending on how you're using Underscore, 1.4.0 may be more + backwards-incompatible than usual — please test when you upgrade. +
    • +
    +

    + +

    + 1.3.3April 10, 2012
    +

      +
    • + Many improvements to _.template, which now provides the + source of the template function as a property, for potentially + even more efficient pre-compilation on the server-side. You may now + also set the variable option when creating a template, + which will cause your passed-in data to be made available under the + variable you named, instead of using a with statement — + significantly improving the speed of rendering the template. +
    • +
    • + Added the pick function, which allows you to filter an + object literal with a whitelist of allowed property names. +
    • +
    • + Added the result function, for convenience when working + with APIs that allow either functions or raw properties. +
    • +
    • + Added the isFinite function, because sometimes knowing that + a value is a number just ain't quite enough. +
    • +
    • + The sortBy function may now also be passed the string name + of a property to use as the sort order on each object. +
    • +
    • + Fixed uniq to work with sparse arrays. +
    • +
    • + The difference function now performs a shallow flatten + instead of a deep one when computing array differences. +
    • +
    • + The debounce function now takes an immediate + parameter, which will cause the callback to fire on the leading + instead of the trailing edge. +
    • +
    +

    + +

    + 1.3.1Jan. 23, 2012
    +

      +
    • + Added an _.has function, as a safer way to use hasOwnProperty. +
    • +
    • + Added _.collect as an alias for _.map. Smalltalkers, rejoice. +
    • +
    • + Reverted an old change so that _.extend will correctly copy + over keys with undefined values again. +
    • +
    • + Bugfix to stop escaping slashes within interpolations in _.template. +
    • +
    +

    + +

    + 1.3.0Jan. 11, 2012
    +

      +
    • + Removed AMD (RequireJS) support from Underscore. If you'd like to use + Underscore with RequireJS, you can load it as a normal script, wrap + or patch your copy, or download a forked version. +
    • +
    +

    + +

    + 1.2.4Jan. 4, 2012
    +

      +
    • + You now can (and probably should, as it's simpler) + write _.chain(list) + instead of _(list).chain(). +
    • +
    • + Fix for escaped characters in Underscore templates, and for supporting + customizations of _.templateSettings that only define one or + two of the required regexes. +
    • +
    • + Fix for passing an array as the first argument to an _.wrap'd function. +
    • +
    • + Improved compatibility with ClojureScript, which adds a call + function to String.prototype. +
    • +
    +

    + +

    + 1.2.3Dec. 7, 2011
    +

      +
    • + Dynamic scope is now preserved for compiled _.template functions, + so you can use the value of this if you like. +
    • +
    • + Sparse array support of _.indexOf, _.lastIndexOf. +
    • +
    • + Both _.reduce and _.reduceRight can now be passed an + explicitly undefined value. (There's no reason why you'd + want to do this.) +
    • +
    +

    + +

    + 1.2.2Nov. 14, 2011
    +

      +
    • + Continued tweaks to _.isEqual semantics. Now JS primitives are + considered equivalent to their wrapped versions, and arrays are compared + by their numeric properties only (#351). +
    • +
    • + _.escape no longer tries to be smart about not double-escaping + already-escaped HTML entities. Now it just escapes regardless (#350). +
    • +
    • + In _.template, you may now leave semicolons out of evaluated + statements if you wish: <% }) %> (#369). +
    • +
    • + _.after(callback, 0) will now trigger the callback immediately, + making "after" easier to use with asynchronous APIs (#366). +
    • +
    +

    + +

    + 1.2.1Oct. 24, 2011
    +

      +
    • + Several important bug fixes for _.isEqual, which should now + do better on mutated Arrays, and on non-Array objects with + length properties. (#329) +
    • +
    • + jrburke contributed Underscore exporting for AMD module loaders, + and tonylukasavage for Appcelerator Titanium. + (#335, #338) +
    • +
    • + You can now _.groupBy(list, 'property') as a shortcut for + grouping values by a particular common property. +
    • +
    • + _.throttle'd functions now fire immediately upon invocation, + and are rate-limited thereafter (#170, #266). +
    • +
    • + Most of the _.is[Type] checks no longer ducktype. +
    • +
    • + The _.bind function now also works on constructors, a-la + ES5 ... but you would never want to use _.bind on a + constructor function. +
    • +
    • + _.clone no longer wraps non-object types in Objects. +
    • +
    • + _.find and _.filter are now the preferred names for + _.detect and _.select. +
    • +
    +

    + +

    + 1.2.0Oct. 5, 2011
    +

      +
    • + The _.isEqual function now + supports true deep equality comparisons, with checks for cyclic structures, + thanks to Kit Cambridge. +
    • +
    • + Underscore templates now support HTML escaping interpolations, using + <%- ... %> syntax. +
    • +
    • + Ryan Tenney contributed _.shuffle, which uses a modified + Fisher-Yates to give you a shuffled copy of an array. +
    • +
    • + _.uniq can now be passed an optional iterator, to determine by + what criteria an object should be considered unique. +
    • +
    • + _.last now takes an optional argument which will return the last + N elements of the list. +
    • +
    • + A new _.initial function was added, as a mirror of _.rest, + which returns all the initial values of a list (except the last N). +
    • +
    +

    + +

    + 1.1.7July 13, 2011
    + Added _.groupBy, which aggregates a collection into groups of like items. + Added _.union and _.difference, to complement the + (re-named) _.intersection. + Various improvements for support of sparse arrays. + _.toArray now returns a clone, if directly passed an array. + _.functions now also returns the names of functions that are present + in the prototype chain. +

    + +

    + 1.1.6April 18, 2011
    + Added _.after, which will return a function that only runs after + first being called a specified number of times. + _.invoke can now take a direct function reference. + _.every now requires an iterator function to be passed, which + mirrors the ECMA5 API. + _.extend no longer copies keys when the value is undefined. + _.bind now errors when trying to bind an undefined value. +

    + +

    + 1.1.5Mar 20, 2011
    + Added an _.defaults function, for use merging together JS objects + representing default options. + Added an _.once function, for manufacturing functions that should + only ever execute a single time. + _.bind now delegates to the native ECMAScript 5 version, + where available. + _.keys now throws an error when used on non-Object values, as in + ECMAScript 5. + Fixed a bug with _.keys when used over sparse arrays. +

    + +

    + 1.1.4Jan 9, 2011
    + Improved compliance with ES5's Array methods when passing null + as a value. _.wrap now correctly sets this for the + wrapped function. _.indexOf now takes an optional flag for + finding the insertion index in an array that is guaranteed to already + be sorted. Avoiding the use of .callee, to allow _.isArray + to work properly in ES5's strict mode. +

    + +

    + 1.1.3Dec 1, 2010
    + In CommonJS, Underscore may now be required with just:
    + var _ = require("underscore"). + Added _.throttle and _.debounce functions. + Removed _.breakLoop, in favor of an ECMA5-style un-break-able + each implementation — this removes the try/catch, and you'll now have + better stack traces for exceptions that are thrown within an Underscore iterator. + Improved the isType family of functions for better interoperability + with Internet Explorer host objects. + _.template now correctly escapes backslashes in templates. + Improved _.reduce compatibility with the ECMA5 version: + if you don't pass an initial value, the first item in the collection is used. + _.each no longer returns the iterated collection, for improved + consistency with ES5's forEach. +

    + +

    + 1.1.2
    + Fixed _.contains, which was mistakenly pointing at + _.intersect instead of _.include, like it should + have been. Added _.unique as an alias for _.uniq. +

    + +

    + 1.1.1
    + Improved the speed of _.template, and its handling of multiline + interpolations. Ryan Tenney contributed optimizations to many Underscore + functions. An annotated version of the source code is now available. +

    + +

    + 1.1.0
    + The method signature of _.reduce has been changed to match + the ECMAScript 5 signature, instead of the Ruby/Prototype.js version. + This is a backwards-incompatible change. _.template may now be + called with no arguments, and preserves whitespace. _.contains + is a new alias for _.include. +

    + +

    + 1.0.4
    + Andri Möll contributed the _.memoize + function, which can be used to speed up expensive repeated computations + by caching the results. +

    + +

    + 1.0.3
    + Patch that makes _.isEqual return false if any property + of the compared object has a NaN value. Technically the correct + thing to do, but of questionable semantics. Watch out for NaN comparisons. +

    + +

    + 1.0.2
    + Fixes _.isArguments in recent versions of Opera, which have + arguments objects as real Arrays. +

    + +

    + 1.0.1
    + Bugfix for _.isEqual, when comparing two objects with the same + number of undefined keys, but with different names. +

    + +

    + 1.0.0
    + Things have been stable for many months now, so Underscore is now + considered to be out of beta, at 1.0. Improvements since 0.6 + include _.isBoolean, and the ability to have _.extend + take multiple source objects. +

    + +

    + 0.6.0
    + Major release. Incorporates a number of + Mile Frawley's refactors for + safer duck-typing on collection functions, and cleaner internals. A new + _.mixin method that allows you to extend Underscore with utility + functions of your own. Added _.times, which works the same as in + Ruby or Prototype.js. Native support for ECMAScript 5's Array.isArray, + and Object.keys. +

    + +

    + 0.5.8
    + Fixed Underscore's collection functions to work on + NodeLists and + HTMLCollections + once more, thanks to + Justin Tulloss. +

    + +

    + 0.5.7
    + A safer implementation of _.isArguments, and a + faster _.isNumber,
    thanks to + Jed Schmidt. +

    + +

    + 0.5.6
    + Customizable delimiters for _.template, contributed by + Noah Sloan. +

    + +

    + 0.5.5
    + Fix for a bug in MobileSafari's OOP-wrapper, with the arguments object. +

    + +

    + 0.5.4
    + Fix for multiple single quotes within a template string for + _.template. See: + Rick Strahl's blog post. +

    + +

    + 0.5.2
    + New implementations of isArray, isDate, isFunction, + isNumber, isRegExp, and isString, thanks to + a suggestion from + Robert Kieffer. + Instead of doing Object#toString + comparisons, they now check for expected properties, which is less safe, + but more than an order of magnitude faster. Most other Underscore + functions saw minor speed improvements as a result. + Evgeniy Dolzhenko + contributed _.tap, + similar to Ruby 1.9's, + which is handy for injecting side effects (like logging) into chained calls. +

    + +

    + 0.5.1
    + Added an _.isArguments function. Lots of little safety checks + and optimizations contributed by + Noah Sloan and + Andri Möll. +

    + +

    + 0.5.0
    + [API Changes] _.bindAll now takes the context object as + its first parameter. If no method names are passed, all of the context + object's methods are bound to it, enabling chaining and easier binding. + _.functions now takes a single argument and returns the names + of its Function properties. Calling _.functions(_) will get you + the previous behavior. + Added _.isRegExp so that isEqual can now test for RegExp equality. + All of the "is" functions have been shrunk down into a single definition. + Karl Guertin contributed patches. +

    + +

    + 0.4.7
    + Added isDate, isNaN, and isNull, for completeness. + Optimizations for isEqual when checking equality between Arrays + or Dates. _.keys is now 25%–2X faster (depending on your + browser) which speeds up the functions that rely on it, such as _.each. +

    + +

    + 0.4.6
    + Added the range function, a port of the + Python + function of the same name, for generating flexibly-numbered lists + of integers. Original patch contributed by + Kirill Ishanov. +

    + +

    + 0.4.5
    + Added rest for Arrays and arguments objects, and aliased + first as head, and rest as tail, + thanks to Luke Sutton's patches. + Added tests ensuring that all Underscore Array functions also work on + arguments objects. +

    + +

    + 0.4.4
    + Added isString, and isNumber, for consistency. Fixed + _.isEqual(NaN, NaN) to return true (which is debatable). +

    + +

    + 0.4.3
    + Started using the native StopIteration object in browsers that support it. + Fixed Underscore setup for CommonJS environments. +

    + +

    + 0.4.2
    + Renamed the unwrapping function to value, for clarity. +

    + +

    + 0.4.1
    + Chained Underscore objects now support the Array prototype methods, so + that you can perform the full range of operations on a wrapped array + without having to break your chain. Added a breakLoop method + to break in the middle of any Underscore iteration. Added an + isEmpty function that works on arrays and objects. +

    + +

    + 0.4.0
    + All Underscore functions can now be called in an object-oriented style, + like so: _([1, 2, 3]).map(...);. Original patch provided by + Marc-André Cournoyer. + Wrapped objects can be chained through multiple + method invocations. A functions method + was added, providing a sorted list of all the functions in Underscore. +

    + +

    + 0.3.3
    + Added the JavaScript 1.8 function reduceRight. Aliased it + as foldr, and aliased reduce as foldl. +

    + +

    + 0.3.2
    + Now runs on stock Rhino + interpreters with: load("underscore.js"). + Added identity as a utility function. +

    + +

    + 0.3.1
    + All iterators are now passed in the original collection as their third + argument, the same as JavaScript 1.6's forEach. Iterating over + objects is now called with (value, key, collection), for details + see _.each. +

    + +

    + 0.3.0
    + Added Dmitry Baranovskiy's + comprehensive optimizations, merged in + Kris Kowal's patches to make Underscore + CommonJS and + Narwhal compliant. +

    + +

    + 0.2.0
    + Added compose and lastIndexOf, renamed inject to + reduce, added aliases for inject, filter, + every, some, and forEach. +

    + +

    + 0.1.1
    + Added noConflict, so that the "Underscore" object can be assigned to + other variables. +

    + +

    + 0.1.0
    + Initial release of Underscore.js. +

    + +

    + + A DocumentCloud Project + +

    + +
    + +
    + + + + + + diff --git a/webtagger/static/components/underscore/index.js b/webtagger/static/components/underscore/index.js new file mode 100644 index 0000000..2cf0ca5 --- /dev/null +++ b/webtagger/static/components/underscore/index.js @@ -0,0 +1 @@ +module.exports = require('./underscore'); diff --git a/webtagger/static/components/underscore/package.json b/webtagger/static/components/underscore/package.json new file mode 100644 index 0000000..e49148e --- /dev/null +++ b/webtagger/static/components/underscore/package.json @@ -0,0 +1,16 @@ +{ + "name" : "underscore", + "description" : "JavaScript's functional programming helper library.", + "homepage" : "http://underscorejs.org", + "keywords" : ["util", "functional", "server", "client", "browser"], + "author" : "Jeremy Ashkenas ", + "repository" : {"type": "git", "url": "git://github.com/documentcloud/underscore.git"}, + "main" : "underscore.js", + "version" : "1.4.4", + "devDependencies": { + "phantomjs": "0.2.2" + }, + "scripts": { + "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true" + } +} diff --git a/webtagger/static/components/underscore/test/arrays.js b/webtagger/static/components/underscore/test/arrays.js new file mode 100644 index 0000000..9b7bb0d --- /dev/null +++ b/webtagger/static/components/underscore/test/arrays.js @@ -0,0 +1,200 @@ +$(document).ready(function() { + + module("Arrays"); + + test("first", function() { + equal(_.first([1,2,3]), 1, 'can pull out the first element of an array'); + equal(_([1, 2, 3]).first(), 1, 'can perform OO-style "first()"'); + equal(_.first([1,2,3], 0).join(', '), "", 'can pass an index to first'); + equal(_.first([1,2,3], 2).join(', '), '1, 2', 'can pass an index to first'); + equal(_.first([1,2,3], 5).join(', '), '1, 2, 3', 'can pass an index to first'); + var result = (function(){ return _.first(arguments); })(4, 3, 2, 1); + equal(result, 4, 'works on an arguments object.'); + result = _.map([[1,2,3],[1,2,3]], _.first); + equal(result.join(','), '1,1', 'works well with _.map'); + result = (function() { return _.take([1,2,3], 2); })(); + equal(result.join(','), '1,2', 'aliased as take'); + + equal(_.first(null), undefined, 'handles nulls'); + }); + + test("rest", function() { + var numbers = [1, 2, 3, 4]; + equal(_.rest(numbers).join(", "), "2, 3, 4", 'working rest()'); + equal(_.rest(numbers, 0).join(", "), "1, 2, 3, 4", 'working rest(0)'); + equal(_.rest(numbers, 2).join(', '), '3, 4', 'rest can take an index'); + var result = (function(){ return _(arguments).tail(); })(1, 2, 3, 4); + equal(result.join(', '), '2, 3, 4', 'aliased as tail and works on arguments object'); + result = _.map([[1,2,3],[1,2,3]], _.rest); + equal(_.flatten(result).join(','), '2,3,2,3', 'works well with _.map'); + result = (function(){ return _(arguments).drop(); })(1, 2, 3, 4); + equal(result.join(', '), '2, 3, 4', 'aliased as drop and works on arguments object'); + }); + + test("initial", function() { + equal(_.initial([1,2,3,4,5]).join(", "), "1, 2, 3, 4", 'working initial()'); + equal(_.initial([1,2,3,4],2).join(", "), "1, 2", 'initial can take an index'); + var result = (function(){ return _(arguments).initial(); })(1, 2, 3, 4); + equal(result.join(", "), "1, 2, 3", 'initial works on arguments object'); + result = _.map([[1,2,3],[1,2,3]], _.initial); + equal(_.flatten(result).join(','), '1,2,1,2', 'initial works with _.map'); + }); + + test("last", function() { + equal(_.last([1,2,3]), 3, 'can pull out the last element of an array'); + equal(_.last([1,2,3], 0).join(', '), "", 'can pass an index to last'); + equal(_.last([1,2,3], 2).join(', '), '2, 3', 'can pass an index to last'); + equal(_.last([1,2,3], 5).join(', '), '1, 2, 3', 'can pass an index to last'); + var result = (function(){ return _(arguments).last(); })(1, 2, 3, 4); + equal(result, 4, 'works on an arguments object'); + result = _.map([[1,2,3],[1,2,3]], _.last); + equal(result.join(','), '3,3', 'works well with _.map'); + + equal(_.last(null), undefined, 'handles nulls'); + }); + + test("compact", function() { + equal(_.compact([0, 1, false, 2, false, 3]).length, 3, 'can trim out all falsy values'); + var result = (function(){ return _.compact(arguments).length; })(0, 1, false, 2, false, 3); + equal(result, 3, 'works on an arguments object'); + }); + + test("flatten", function() { + var list = [1, [2], [3, [[[4]]]]]; + deepEqual(_.flatten(list), [1,2,3,4], 'can flatten nested arrays'); + deepEqual(_.flatten(list, true), [1,2,3,[[[4]]]], 'can shallowly flatten nested arrays'); + var result = (function(){ return _.flatten(arguments); })(1, [2], [3, [[[4]]]]); + deepEqual(result, [1,2,3,4], 'works on an arguments object'); + }); + + test("without", function() { + var list = [1, 2, 1, 0, 3, 1, 4]; + equal(_.without(list, 0, 1).join(', '), '2, 3, 4', 'can remove all instances of an object'); + var result = (function(){ return _.without(arguments, 0, 1); })(1, 2, 1, 0, 3, 1, 4); + equal(result.join(', '), '2, 3, 4', 'works on an arguments object'); + + var list = [{one : 1}, {two : 2}]; + ok(_.without(list, {one : 1}).length == 2, 'uses real object identity for comparisons.'); + ok(_.without(list, list[0]).length == 1, 'ditto.'); + }); + + test("uniq", function() { + var list = [1, 2, 1, 3, 1, 4]; + equal(_.uniq(list).join(', '), '1, 2, 3, 4', 'can find the unique values of an unsorted array'); + + var list = [1, 1, 1, 2, 2, 3]; + equal(_.uniq(list, true).join(', '), '1, 2, 3', 'can find the unique values of a sorted array faster'); + + var list = [{name:'moe'}, {name:'curly'}, {name:'larry'}, {name:'curly'}]; + var iterator = function(value) { return value.name; }; + equal(_.map(_.uniq(list, false, iterator), iterator).join(', '), 'moe, curly, larry', 'can find the unique values of an array using a custom iterator'); + + equal(_.map(_.uniq(list, iterator), iterator).join(', '), 'moe, curly, larry', 'can find the unique values of an array using a custom iterator without specifying whether array is sorted'); + + var iterator = function(value) { return value +1; }; + var list = [1, 2, 2, 3, 4, 4]; + equal(_.uniq(list, true, iterator).join(', '), '1, 2, 3, 4', 'iterator works with sorted array'); + + var result = (function(){ return _.uniq(arguments); })(1, 2, 1, 3, 1, 4); + equal(result.join(', '), '1, 2, 3, 4', 'works on an arguments object'); + }); + + test("intersection", function() { + var stooges = ['moe', 'curly', 'larry'], leaders = ['moe', 'groucho']; + equal(_.intersection(stooges, leaders).join(''), 'moe', 'can take the set intersection of two arrays'); + equal(_(stooges).intersection(leaders).join(''), 'moe', 'can perform an OO-style intersection'); + var result = (function(){ return _.intersection(arguments, leaders); })('moe', 'curly', 'larry'); + equal(result.join(''), 'moe', 'works on an arguments object'); + }); + + test("union", function() { + var result = _.union([1, 2, 3], [2, 30, 1], [1, 40]); + equal(result.join(' '), '1 2 3 30 40', 'takes the union of a list of arrays'); + + var result = _.union([1, 2, 3], [2, 30, 1], [1, 40, [1]]); + equal(result.join(' '), '1 2 3 30 40 1', 'takes the union of a list of nested arrays'); + }); + + test("difference", function() { + var result = _.difference([1, 2, 3], [2, 30, 40]); + equal(result.join(' '), '1 3', 'takes the difference of two arrays'); + + var result = _.difference([1, 2, 3, 4], [2, 30, 40], [1, 11, 111]); + equal(result.join(' '), '3 4', 'takes the difference of three arrays'); + }); + + test('zip', function() { + var names = ['moe', 'larry', 'curly'], ages = [30, 40, 50], leaders = [true]; + var stooges = _.zip(names, ages, leaders); + equal(String(stooges), 'moe,30,true,larry,40,,curly,50,', 'zipped together arrays of different lengths'); + }); + + test('object', function() { + var result = _.object(['moe', 'larry', 'curly'], [30, 40, 50]); + var shouldBe = {moe: 30, larry: 40, curly: 50}; + ok(_.isEqual(result, shouldBe), 'two arrays zipped together into an object'); + + result = _.object([['one', 1], ['two', 2], ['three', 3]]); + shouldBe = {one: 1, two: 2, three: 3}; + ok(_.isEqual(result, shouldBe), 'an array of pairs zipped together into an object'); + + var stooges = {moe: 30, larry: 40, curly: 50}; + ok(_.isEqual(_.object(_.pairs(stooges)), stooges), 'an object converted to pairs and back to an object'); + + ok(_.isEqual(_.object(null), {}), 'handles nulls'); + }); + + test("indexOf", function() { + var numbers = [1, 2, 3]; + numbers.indexOf = null; + equal(_.indexOf(numbers, 2), 1, 'can compute indexOf, even without the native function'); + var result = (function(){ return _.indexOf(arguments, 2); })(1, 2, 3); + equal(result, 1, 'works on an arguments object'); + equal(_.indexOf(null, 2), -1, 'handles nulls properly'); + + var numbers = [10, 20, 30, 40, 50], num = 35; + var index = _.indexOf(numbers, num, true); + equal(index, -1, '35 is not in the list'); + + numbers = [10, 20, 30, 40, 50]; num = 40; + index = _.indexOf(numbers, num, true); + equal(index, 3, '40 is in the list'); + + numbers = [1, 40, 40, 40, 40, 40, 40, 40, 50, 60, 70]; num = 40; + index = _.indexOf(numbers, num, true); + equal(index, 1, '40 is in the list'); + + numbers = [1, 2, 3, 1, 2, 3, 1, 2, 3]; + index = _.indexOf(numbers, 2, 5); + equal(index, 7, 'supports the fromIndex argument'); + }); + + test("lastIndexOf", function() { + var numbers = [1, 0, 1]; + equal(_.lastIndexOf(numbers, 1), 2); + + numbers = [1, 0, 1, 0, 0, 1, 0, 0, 0]; + numbers.lastIndexOf = null; + equal(_.lastIndexOf(numbers, 1), 5, 'can compute lastIndexOf, even without the native function'); + equal(_.lastIndexOf(numbers, 0), 8, 'lastIndexOf the other element'); + var result = (function(){ return _.lastIndexOf(arguments, 1); })(1, 0, 1, 0, 0, 1, 0, 0, 0); + equal(result, 5, 'works on an arguments object'); + equal(_.indexOf(null, 2), -1, 'handles nulls properly'); + + numbers = [1, 2, 3, 1, 2, 3, 1, 2, 3]; + var index = _.lastIndexOf(numbers, 2, 2); + equal(index, 1, 'supports the fromIndex argument'); + }); + + test("range", function() { + equal(_.range(0).join(''), '', 'range with 0 as a first argument generates an empty array'); + equal(_.range(4).join(' '), '0 1 2 3', 'range with a single positive argument generates an array of elements 0,1,2,...,n-1'); + equal(_.range(5, 8).join(' '), '5 6 7', 'range with two arguments a & b, a<b generates an array of elements a,a+1,a+2,...,b-2,b-1'); + equal(_.range(8, 5).join(''), '', 'range with two arguments a & b, b<a generates an empty array'); + equal(_.range(3, 10, 3).join(' '), '3 6 9', 'range with three arguments a & b & c, c < b-a, a < b generates an array of elements a,a+c,a+2c,...,b - (multiplier of a) < c'); + equal(_.range(3, 10, 15).join(''), '3', 'range with three arguments a & b & c, c > b-a, a < b generates an array with a single element, equal to a'); + equal(_.range(12, 7, -2).join(' '), '12 10 8', 'range with three arguments a & b & c, a > b, c < 0 generates an array of elements a,a-c,a-2c and ends with the number not less than b'); + equal(_.range(0, -10, -1).join(' '), '0 -1 -2 -3 -4 -5 -6 -7 -8 -9', 'final example in the Python docs'); + }); + +}); diff --git a/webtagger/static/components/underscore/test/chaining.js b/webtagger/static/components/underscore/test/chaining.js new file mode 100644 index 0000000..16cf7bf --- /dev/null +++ b/webtagger/static/components/underscore/test/chaining.js @@ -0,0 +1,59 @@ +$(document).ready(function() { + + module("Chaining"); + + test("map/flatten/reduce", function() { + var lyrics = [ + "I'm a lumberjack and I'm okay", + "I sleep all night and I work all day", + "He's a lumberjack and he's okay", + "He sleeps all night and he works all day" + ]; + var counts = _(lyrics).chain() + .map(function(line) { return line.split(''); }) + .flatten() + .reduce(function(hash, l) { + hash[l] = hash[l] || 0; + hash[l]++; + return hash; + }, {}).value(); + ok(counts['a'] == 16 && counts['e'] == 10, 'counted all the letters in the song'); + }); + + test("select/reject/sortBy", function() { + var numbers = [1,2,3,4,5,6,7,8,9,10]; + numbers = _(numbers).chain().select(function(n) { + return n % 2 == 0; + }).reject(function(n) { + return n % 4 == 0; + }).sortBy(function(n) { + return -n; + }).value(); + equal(numbers.join(', '), "10, 6, 2", "filtered and reversed the numbers"); + }); + + test("select/reject/sortBy in functional style", function() { + var numbers = [1,2,3,4,5,6,7,8,9,10]; + numbers = _.chain(numbers).select(function(n) { + return n % 2 == 0; + }).reject(function(n) { + return n % 4 == 0; + }).sortBy(function(n) { + return -n; + }).value(); + equal(numbers.join(', '), "10, 6, 2", "filtered and reversed the numbers"); + }); + + test("reverse/concat/unshift/pop/map", function() { + var numbers = [1,2,3,4,5]; + numbers = _(numbers).chain() + .reverse() + .concat([5, 5, 5]) + .unshift(17) + .pop() + .map(function(n){ return n * 2; }) + .value(); + equal(numbers.join(', '), "34, 10, 8, 6, 4, 2, 10, 10", 'can chain together array functions.'); + }); + +}); diff --git a/webtagger/static/components/underscore/test/collections.js b/webtagger/static/components/underscore/test/collections.js new file mode 100644 index 0000000..68a5c17 --- /dev/null +++ b/webtagger/static/components/underscore/test/collections.js @@ -0,0 +1,453 @@ +$(document).ready(function() { + + module("Collections"); + + test("each", function() { + _.each([1, 2, 3], function(num, i) { + equal(num, i + 1, 'each iterators provide value and iteration count'); + }); + + var answers = []; + _.each([1, 2, 3], function(num){ answers.push(num * this.multiplier);}, {multiplier : 5}); + equal(answers.join(', '), '5, 10, 15', 'context object property accessed'); + + answers = []; + _.forEach([1, 2, 3], function(num){ answers.push(num); }); + equal(answers.join(', '), '1, 2, 3', 'aliased as "forEach"'); + + answers = []; + var obj = {one : 1, two : 2, three : 3}; + obj.constructor.prototype.four = 4; + _.each(obj, function(value, key){ answers.push(key); }); + equal(answers.join(", "), 'one, two, three', 'iterating over objects works, and ignores the object prototype.'); + delete obj.constructor.prototype.four; + + var answer = null; + _.each([1, 2, 3], function(num, index, arr){ if (_.include(arr, num)) answer = true; }); + ok(answer, 'can reference the original collection from inside the iterator'); + + answers = 0; + _.each(null, function(){ ++answers; }); + equal(answers, 0, 'handles a null properly'); + }); + + test('map', function() { + var doubled = _.map([1, 2, 3], function(num){ return num * 2; }); + equal(doubled.join(', '), '2, 4, 6', 'doubled numbers'); + + doubled = _.collect([1, 2, 3], function(num){ return num * 2; }); + equal(doubled.join(', '), '2, 4, 6', 'aliased as "collect"'); + + var tripled = _.map([1, 2, 3], function(num){ return num * this.multiplier; }, {multiplier : 3}); + equal(tripled.join(', '), '3, 6, 9', 'tripled numbers with context'); + + var doubled = _([1, 2, 3]).map(function(num){ return num * 2; }); + equal(doubled.join(', '), '2, 4, 6', 'OO-style doubled numbers'); + + if (document.querySelectorAll) { + var ids = _.map(document.querySelectorAll('#map-test *'), function(n){ return n.id; }); + deepEqual(ids, ['id1', 'id2'], 'Can use collection methods on NodeLists.'); + } + + var ids = _.map($('#map-test').children(), function(n){ return n.id; }); + deepEqual(ids, ['id1', 'id2'], 'Can use collection methods on jQuery Array-likes.'); + + var ids = _.map(document.images, function(n){ return n.id; }); + ok(ids[0] == 'chart_image', 'can use collection methods on HTMLCollections'); + + var ifnull = _.map(null, function(){}); + ok(_.isArray(ifnull) && ifnull.length === 0, 'handles a null properly'); + }); + + test('reduce', function() { + var sum = _.reduce([1, 2, 3], function(sum, num){ return sum + num; }, 0); + equal(sum, 6, 'can sum up an array'); + + var context = {multiplier : 3}; + sum = _.reduce([1, 2, 3], function(sum, num){ return sum + num * this.multiplier; }, 0, context); + equal(sum, 18, 'can reduce with a context object'); + + sum = _.inject([1, 2, 3], function(sum, num){ return sum + num; }, 0); + equal(sum, 6, 'aliased as "inject"'); + + sum = _([1, 2, 3]).reduce(function(sum, num){ return sum + num; }, 0); + equal(sum, 6, 'OO-style reduce'); + + var sum = _.reduce([1, 2, 3], function(sum, num){ return sum + num; }); + equal(sum, 6, 'default initial value'); + + var ifnull; + try { + _.reduce(null, function(){}); + } catch (ex) { + ifnull = ex; + } + ok(ifnull instanceof TypeError, 'handles a null (without inital value) properly'); + + ok(_.reduce(null, function(){}, 138) === 138, 'handles a null (with initial value) properly'); + equal(_.reduce([], function(){}, undefined), undefined, 'undefined can be passed as a special case'); + raises(function() { _.reduce([], function(){}); }, TypeError, 'throws an error for empty arrays with no initial value'); + }); + + test('reduceRight', function() { + var list = _.reduceRight(["foo", "bar", "baz"], function(memo, str){ return memo + str; }, ''); + equal(list, 'bazbarfoo', 'can perform right folds'); + + var list = _.foldr(["foo", "bar", "baz"], function(memo, str){ return memo + str; }, ''); + equal(list, 'bazbarfoo', 'aliased as "foldr"'); + + var list = _.foldr(["foo", "bar", "baz"], function(memo, str){ return memo + str; }); + equal(list, 'bazbarfoo', 'default initial value'); + + var ifnull; + try { + _.reduceRight(null, function(){}); + } catch (ex) { + ifnull = ex; + } + ok(ifnull instanceof TypeError, 'handles a null (without inital value) properly'); + + var sum = _.reduceRight({a: 1, b: 2, c: 3}, function(sum, num){ return sum + num; }); + equal(sum, 6, 'default initial value on object'); + + ok(_.reduceRight(null, function(){}, 138) === 138, 'handles a null (with initial value) properly'); + + equal(_.reduceRight([], function(){}, undefined), undefined, 'undefined can be passed as a special case'); + raises(function() { _.reduceRight([], function(){}); }, TypeError, 'throws an error for empty arrays with no initial value'); + + // Assert that the correct arguments are being passed. + + var args, + memo = {}, + object = {a: 1, b: 2}, + lastKey = _.keys(object).pop(); + + var expected = lastKey == 'a' + ? [memo, 1, 'a', object] + : [memo, 2, 'b', object]; + + _.reduceRight(object, function() { + args || (args = _.toArray(arguments)); + }, memo); + + deepEqual(args, expected); + + // And again, with numeric keys. + + object = {'2': 'a', '1': 'b'}; + lastKey = _.keys(object).pop(); + args = null; + + expected = lastKey == '2' + ? [memo, 'a', '2', object] + : [memo, 'b', '1', object]; + + _.reduceRight(object, function() { + args || (args = _.toArray(arguments)); + }, memo); + + deepEqual(args, expected); + }); + + test('find', function() { + var array = [1, 2, 3, 4]; + strictEqual(_.find(array, function(n) { return n > 2; }), 3, 'should return first found `value`'); + strictEqual(_.find(array, function() { return false; }), void 0, 'should return `undefined` if `value` is not found'); + }); + + test('detect', function() { + var result = _.detect([1, 2, 3], function(num){ return num * 2 == 4; }); + equal(result, 2, 'found the first "2" and broke the loop'); + }); + + test('select', function() { + var evens = _.select([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); + equal(evens.join(', '), '2, 4, 6', 'selected each even number'); + + evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); + equal(evens.join(', '), '2, 4, 6', 'aliased as "filter"'); + }); + + test('reject', function() { + var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); + equal(odds.join(', '), '1, 3, 5', 'rejected each even number'); + + var context = "obj"; + + var evens = _.reject([1, 2, 3, 4, 5, 6], function(num){ + equal(context, "obj"); + return num % 2 != 0; + }, context); + equal(evens.join(', '), '2, 4, 6', 'rejected each odd number'); + }); + + test('all', function() { + ok(_.all([], _.identity), 'the empty set'); + ok(_.all([true, true, true], _.identity), 'all true values'); + ok(!_.all([true, false, true], _.identity), 'one false value'); + ok(_.all([0, 10, 28], function(num){ return num % 2 == 0; }), 'even numbers'); + ok(!_.all([0, 11, 28], function(num){ return num % 2 == 0; }), 'an odd number'); + ok(_.all([1], _.identity) === true, 'cast to boolean - true'); + ok(_.all([0], _.identity) === false, 'cast to boolean - false'); + ok(_.every([true, true, true], _.identity), 'aliased as "every"'); + ok(!_.all([undefined, undefined, undefined], _.identity), 'works with arrays of undefined'); + }); + + test('any', function() { + var nativeSome = Array.prototype.some; + Array.prototype.some = null; + ok(!_.any([]), 'the empty set'); + ok(!_.any([false, false, false]), 'all false values'); + ok(_.any([false, false, true]), 'one true value'); + ok(_.any([null, 0, 'yes', false]), 'a string'); + ok(!_.any([null, 0, '', false]), 'falsy values'); + ok(!_.any([1, 11, 29], function(num){ return num % 2 == 0; }), 'all odd numbers'); + ok(_.any([1, 10, 29], function(num){ return num % 2 == 0; }), 'an even number'); + ok(_.any([1], _.identity) === true, 'cast to boolean - true'); + ok(_.any([0], _.identity) === false, 'cast to boolean - false'); + ok(_.some([false, false, true]), 'aliased as "some"'); + Array.prototype.some = nativeSome; + }); + + test('include', function() { + ok(_.include([1,2,3], 2), 'two is in the array'); + ok(!_.include([1,3,9], 2), 'two is not in the array'); + ok(_.contains({moe:1, larry:3, curly:9}, 3) === true, '_.include on objects checks their values'); + ok(_([1,2,3]).include(2), 'OO-style include'); + }); + + test('invoke', function() { + var list = [[5, 1, 7], [3, 2, 1]]; + var result = _.invoke(list, 'sort'); + equal(result[0].join(', '), '1, 5, 7', 'first array sorted'); + equal(result[1].join(', '), '1, 2, 3', 'second array sorted'); + }); + + test('invoke w/ function reference', function() { + var list = [[5, 1, 7], [3, 2, 1]]; + var result = _.invoke(list, Array.prototype.sort); + equal(result[0].join(', '), '1, 5, 7', 'first array sorted'); + equal(result[1].join(', '), '1, 2, 3', 'second array sorted'); + }); + + // Relevant when using ClojureScript + test('invoke when strings have a call method', function() { + String.prototype.call = function() { + return 42; + }; + var list = [[5, 1, 7], [3, 2, 1]]; + var s = "foo"; + equal(s.call(), 42, "call function exists"); + var result = _.invoke(list, 'sort'); + equal(result[0].join(', '), '1, 5, 7', 'first array sorted'); + equal(result[1].join(', '), '1, 2, 3', 'second array sorted'); + delete String.prototype.call; + equal(s.call, undefined, "call function removed"); + }); + + test('pluck', function() { + var people = [{name : 'moe', age : 30}, {name : 'curly', age : 50}]; + equal(_.pluck(people, 'name').join(', '), 'moe, curly', 'pulls names out of objects'); + }); + + test('where', function() { + var list = [{a: 1, b: 2}, {a: 2, b: 2}, {a: 1, b: 3}, {a: 1, b: 4}]; + var result = _.where(list, {a: 1}); + equal(result.length, 3); + equal(result[result.length - 1].b, 4); + result = _.where(list, {b: 2}); + equal(result.length, 2); + equal(result[0].a, 1); + }); + + test('findWhere', function() { + var list = [{a: 1, b: 2}, {a: 2, b: 2}, {a: 1, b: 3}, {a: 1, b: 4}, {a: 2, b: 4}]; + var result = _.findWhere(list, {a: 1}); + deepEqual(result, {a: 1, b: 2}); + result = _.findWhere(list, {b: 4}); + deepEqual(result, {a: 1, b: 4}); + }); + + test('max', function() { + equal(3, _.max([1, 2, 3]), 'can perform a regular Math.max'); + + var neg = _.max([1, 2, 3], function(num){ return -num; }); + equal(neg, 1, 'can perform a computation-based max'); + + equal(-Infinity, _.max({}), 'Maximum value of an empty object'); + equal(-Infinity, _.max([]), 'Maximum value of an empty array'); + equal(_.max({'a': 'a'}), -Infinity, 'Maximum value of a non-numeric collection'); + + equal(299999, _.max(_.range(1,300000)), "Maximum value of a too-big array"); + }); + + test('min', function() { + equal(1, _.min([1, 2, 3]), 'can perform a regular Math.min'); + + var neg = _.min([1, 2, 3], function(num){ return -num; }); + equal(neg, 3, 'can perform a computation-based min'); + + equal(Infinity, _.min({}), 'Minimum value of an empty object'); + equal(Infinity, _.min([]), 'Minimum value of an empty array'); + equal(_.min({'a': 'a'}), Infinity, 'Minimum value of a non-numeric collection'); + + var now = new Date(9999999999); + var then = new Date(0); + equal(_.min([now, then]), then); + + equal(1, _.min(_.range(1,300000)), "Minimum value of a too-big array"); + }); + + test('sortBy', function() { + var people = [{name : 'curly', age : 50}, {name : 'moe', age : 30}]; + people = _.sortBy(people, function(person){ return person.age; }); + equal(_.pluck(people, 'name').join(', '), 'moe, curly', 'stooges sorted by age'); + + var list = [undefined, 4, 1, undefined, 3, 2]; + equal(_.sortBy(list, _.identity).join(','), '1,2,3,4,,', 'sortBy with undefined values'); + + var list = ["one", "two", "three", "four", "five"]; + var sorted = _.sortBy(list, 'length'); + equal(sorted.join(' '), 'one two four five three', 'sorted by length'); + + function Pair(x, y) { + this.x = x; + this.y = y; + } + + var collection = [ + new Pair(1, 1), new Pair(1, 2), + new Pair(1, 3), new Pair(1, 4), + new Pair(1, 5), new Pair(1, 6), + new Pair(2, 1), new Pair(2, 2), + new Pair(2, 3), new Pair(2, 4), + new Pair(2, 5), new Pair(2, 6), + new Pair(undefined, 1), new Pair(undefined, 2), + new Pair(undefined, 3), new Pair(undefined, 4), + new Pair(undefined, 5), new Pair(undefined, 6) + ]; + + var actual = _.sortBy(collection, function(pair) { + return pair.x; + }); + + deepEqual(actual, collection, 'sortBy should be stable'); + }); + + test('groupBy', function() { + var parity = _.groupBy([1, 2, 3, 4, 5, 6], function(num){ return num % 2; }); + ok('0' in parity && '1' in parity, 'created a group for each value'); + equal(parity[0].join(', '), '2, 4, 6', 'put each even number in the right group'); + + var list = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]; + var grouped = _.groupBy(list, 'length'); + equal(grouped['3'].join(' '), 'one two six ten'); + equal(grouped['4'].join(' '), 'four five nine'); + equal(grouped['5'].join(' '), 'three seven eight'); + + var context = {}; + _.groupBy([{}], function(){ ok(this === context); }, context); + + grouped = _.groupBy([4.2, 6.1, 6.4], function(num) { + return Math.floor(num) > 4 ? 'hasOwnProperty' : 'constructor'; + }); + equal(grouped.constructor.length, 1); + equal(grouped.hasOwnProperty.length, 2); + + var array = [{}]; + _.groupBy(array, function(value, index, obj){ ok(obj === array); }); + + var array = [1, 2, 1, 2, 3]; + var grouped = _.groupBy(array); + equal(grouped['1'].length, 2); + equal(grouped['3'].length, 1); + }); + + test('countBy', function() { + var parity = _.countBy([1, 2, 3, 4, 5], function(num){ return num % 2 == 0; }); + equal(parity['true'], 2); + equal(parity['false'], 3); + + var list = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]; + var grouped = _.countBy(list, 'length'); + equal(grouped['3'], 4); + equal(grouped['4'], 3); + equal(grouped['5'], 3); + + var context = {}; + _.countBy([{}], function(){ ok(this === context); }, context); + + grouped = _.countBy([4.2, 6.1, 6.4], function(num) { + return Math.floor(num) > 4 ? 'hasOwnProperty' : 'constructor'; + }); + equal(grouped.constructor, 1); + equal(grouped.hasOwnProperty, 2); + + var array = [{}]; + _.countBy(array, function(value, index, obj){ ok(obj === array); }); + + var array = [1, 2, 1, 2, 3]; + var grouped = _.countBy(array); + equal(grouped['1'], 2); + equal(grouped['3'], 1); + }); + + test('sortedIndex', function() { + var numbers = [10, 20, 30, 40, 50], num = 35; + var indexForNum = _.sortedIndex(numbers, num); + equal(indexForNum, 3, '35 should be inserted at index 3'); + + var indexFor30 = _.sortedIndex(numbers, 30); + equal(indexFor30, 2, '30 should be inserted at index 2'); + + var objects = [{x: 10}, {x: 20}, {x: 30}, {x: 40}]; + var iterator = function(obj){ return obj.x; }; + strictEqual(_.sortedIndex(objects, {x: 25}, iterator), 2); + strictEqual(_.sortedIndex(objects, {x: 35}, 'x'), 3); + + var context = {1: 2, 2: 3, 3: 4}; + iterator = function(obj){ return this[obj]; }; + strictEqual(_.sortedIndex([1, 3], 2, iterator, context), 1); + }); + + test('shuffle', function() { + var numbers = _.range(10); + var shuffled = _.shuffle(numbers).sort(); + notStrictEqual(numbers, shuffled, 'original object is unmodified'); + equal(shuffled.join(','), numbers.join(','), 'contains the same members before and after shuffle'); + }); + + test('toArray', function() { + ok(!_.isArray(arguments), 'arguments object is not an array'); + ok(_.isArray(_.toArray(arguments)), 'arguments object converted into array'); + var a = [1,2,3]; + ok(_.toArray(a) !== a, 'array is cloned'); + equal(_.toArray(a).join(', '), '1, 2, 3', 'cloned array contains same elements'); + + var numbers = _.toArray({one : 1, two : 2, three : 3}); + equal(numbers.join(', '), '1, 2, 3', 'object flattened into array'); + + // test in IE < 9 + try { + var actual = _.toArray(document.childNodes); + } catch(ex) { } + + ok(_.isArray(actual), 'should not throw converting a node list'); + }); + + test('size', function() { + equal(_.size({one : 1, two : 2, three : 3}), 3, 'can compute the size of an object'); + equal(_.size([1, 2, 3]), 3, 'can compute the size of an array'); + + var func = function() { + return _.size(arguments); + }; + + equal(func(1, 2, 3, 4), 4, 'can test the size of the arguments object'); + + equal(_.size('hello'), 5, 'can compute the size of a string'); + + equal(_.size(null), 0, 'handles nulls'); + }); + +}); diff --git a/webtagger/static/components/underscore/test/functions.js b/webtagger/static/components/underscore/test/functions.js new file mode 100644 index 0000000..efa9934 --- /dev/null +++ b/webtagger/static/components/underscore/test/functions.js @@ -0,0 +1,265 @@ +$(document).ready(function() { + + module("Functions"); + + test("bind", function() { + var context = {name : 'moe'}; + var func = function(arg) { return "name: " + (this.name || arg); }; + var bound = _.bind(func, context); + equal(bound(), 'name: moe', 'can bind a function to a context'); + + bound = _(func).bind(context); + equal(bound(), 'name: moe', 'can do OO-style binding'); + + bound = _.bind(func, null, 'curly'); + equal(bound(), 'name: curly', 'can bind without specifying a context'); + + func = function(salutation, name) { return salutation + ': ' + name; }; + func = _.bind(func, this, 'hello'); + equal(func('moe'), 'hello: moe', 'the function was partially applied in advance'); + + func = _.bind(func, this, 'curly'); + equal(func(), 'hello: curly', 'the function was completely applied in advance'); + + func = function(salutation, firstname, lastname) { return salutation + ': ' + firstname + ' ' + lastname; }; + func = _.bind(func, this, 'hello', 'moe', 'curly'); + equal(func(), 'hello: moe curly', 'the function was partially applied in advance and can accept multiple arguments'); + + func = function(context, message) { equal(this, context, message); }; + _.bind(func, 0, 0, 'can bind a function to `0`')(); + _.bind(func, '', '', 'can bind a function to an empty string')(); + _.bind(func, false, false, 'can bind a function to `false`')(); + + // These tests are only meaningful when using a browser without a native bind function + // To test this with a modern browser, set underscore's nativeBind to undefined + var F = function () { return this; }; + var Boundf = _.bind(F, {hello: "moe curly"}); + equal(Boundf().hello, "moe curly", "When called without the new operator, it's OK to be bound to the context"); + }); + + test("partial", function() { + var obj = {name: 'moe'}; + var func = function() { return this.name + ' ' + _.toArray(arguments).join(' '); }; + + obj.func = _.partial(func, 'a', 'b'); + equal(obj.func('c', 'd'), 'moe a b c d', 'can partially apply'); + }); + + test("bindAll", function() { + var curly = {name : 'curly'}, moe = { + name : 'moe', + getName : function() { return 'name: ' + this.name; }, + sayHi : function() { return 'hi: ' + this.name; } + }; + curly.getName = moe.getName; + _.bindAll(moe, 'getName', 'sayHi'); + curly.sayHi = moe.sayHi; + equal(curly.getName(), 'name: curly', 'unbound function is bound to current object'); + equal(curly.sayHi(), 'hi: moe', 'bound function is still bound to original object'); + + curly = {name : 'curly'}; + moe = { + name : 'moe', + getName : function() { return 'name: ' + this.name; }, + sayHi : function() { return 'hi: ' + this.name; } + }; + _.bindAll(moe); + curly.sayHi = moe.sayHi; + equal(curly.sayHi(), 'hi: moe', 'calling bindAll with no arguments binds all functions to the object'); + }); + + test("memoize", function() { + var fib = function(n) { + return n < 2 ? n : fib(n - 1) + fib(n - 2); + }; + var fastFib = _.memoize(fib); + equal(fib(10), 55, 'a memoized version of fibonacci produces identical results'); + equal(fastFib(10), 55, 'a memoized version of fibonacci produces identical results'); + + var o = function(str) { + return str; + }; + var fastO = _.memoize(o); + equal(o('toString'), 'toString', 'checks hasOwnProperty'); + equal(fastO('toString'), 'toString', 'checks hasOwnProperty'); + }); + + asyncTest("delay", 2, function() { + var delayed = false; + _.delay(function(){ delayed = true; }, 100); + setTimeout(function(){ ok(!delayed, "didn't delay the function quite yet"); }, 50); + setTimeout(function(){ ok(delayed, 'delayed the function'); start(); }, 150); + }); + + asyncTest("defer", 1, function() { + var deferred = false; + _.defer(function(bool){ deferred = bool; }, true); + _.delay(function(){ ok(deferred, "deferred the function"); start(); }, 50); + }); + + asyncTest("throttle", 2, function() { + var counter = 0; + var incr = function(){ counter++; }; + var throttledIncr = _.throttle(incr, 32); + throttledIncr(); throttledIncr(); + + equal(counter, 1, "incr was called immediately"); + _.delay(function(){ equal(counter, 2, "incr was throttled"); start(); }, 64); + }); + + asyncTest("throttle arguments", 2, function() { + var value = 0; + var update = function(val){ value = val; }; + var throttledUpdate = _.throttle(update, 32); + throttledUpdate(1); throttledUpdate(2); + _.delay(function(){ throttledUpdate(3); }, 64); + equal(value, 1, "updated to latest value"); + _.delay(function(){ equal(value, 3, "updated to latest value"); start(); }, 96); + }); + + asyncTest("throttle once", 2, function() { + var counter = 0; + var incr = function(){ return ++counter; }; + var throttledIncr = _.throttle(incr, 32); + var result = throttledIncr(); + _.delay(function(){ + equal(result, 1, "throttled functions return their value"); + equal(counter, 1, "incr was called once"); start(); + }, 64); + }); + + asyncTest("throttle twice", 1, function() { + var counter = 0; + var incr = function(){ counter++; }; + var throttledIncr = _.throttle(incr, 32); + throttledIncr(); throttledIncr(); + _.delay(function(){ equal(counter, 2, "incr was called twice"); start(); }, 64); + }); + + asyncTest("throttle repeatedly with results", 6, function() { + var counter = 0; + var incr = function(){ return ++counter; }; + var throttledIncr = _.throttle(incr, 64); + var results = []; + var saveResult = function() { results.push(throttledIncr()); }; + saveResult(); saveResult(); + _.delay(saveResult, 32); + _.delay(saveResult, 80); + _.delay(saveResult, 96); + _.delay(saveResult, 144); + _.delay(function() { + equal(results[0], 1, "incr was called once"); + equal(results[1], 1, "incr was throttled"); + equal(results[2], 1, "incr was throttled"); + equal(results[3], 2, "incr was called twice"); + equal(results[4], 2, "incr was throttled"); + equal(results[5], 3, "incr was called trailing"); + start(); + }, 192); + }); + + asyncTest("throttle triggers trailing call when invoked repeatedly", 2, function() { + var counter = 0; + var limit = 48; + var incr = function(){ counter++; }; + var throttledIncr = _.throttle(incr, 32); + + var stamp = new Date; + while ((new Date - stamp) < limit) { + throttledIncr(); + } + var lastCount = counter; + ok(counter > 1); + + _.delay(function() { + ok(counter > lastCount); + start(); + }, 96); + }); + + asyncTest("debounce", 1, function() { + var counter = 0; + var incr = function(){ counter++; }; + var debouncedIncr = _.debounce(incr, 32); + debouncedIncr(); debouncedIncr(); + _.delay(debouncedIncr, 16); + _.delay(function(){ equal(counter, 1, "incr was debounced"); start(); }, 96); + }); + + asyncTest("debounce asap", 4, function() { + var a, b; + var counter = 0; + var incr = function(){ return ++counter; }; + var debouncedIncr = _.debounce(incr, 64, true); + a = debouncedIncr(); + b = debouncedIncr(); + equal(a, 1); + equal(b, 1); + equal(counter, 1, 'incr was called immediately'); + _.delay(debouncedIncr, 16); + _.delay(debouncedIncr, 32); + _.delay(debouncedIncr, 48); + _.delay(function(){ equal(counter, 1, "incr was debounced"); start(); }, 128); + }); + + asyncTest("debounce asap recursively", 2, function() { + var counter = 0; + var debouncedIncr = _.debounce(function(){ + counter++; + if (counter < 10) debouncedIncr(); + }, 32, true); + debouncedIncr(); + equal(counter, 1, "incr was called immediately"); + _.delay(function(){ equal(counter, 1, "incr was debounced"); start(); }, 96); + }); + + test("once", function() { + var num = 0; + var increment = _.once(function(){ num++; }); + increment(); + increment(); + equal(num, 1); + }); + + test("wrap", function() { + var greet = function(name){ return "hi: " + name; }; + var backwards = _.wrap(greet, function(func, name){ return func(name) + ' ' + name.split('').reverse().join(''); }); + equal(backwards('moe'), 'hi: moe eom', 'wrapped the saluation function'); + + var inner = function(){ return "Hello "; }; + var obj = {name : "Moe"}; + obj.hi = _.wrap(inner, function(fn){ return fn() + this.name; }); + equal(obj.hi(), "Hello Moe"); + + var noop = function(){}; + var wrapped = _.wrap(noop, function(fn){ return Array.prototype.slice.call(arguments, 0); }); + var ret = wrapped(['whats', 'your'], 'vector', 'victor'); + deepEqual(ret, [noop, ['whats', 'your'], 'vector', 'victor']); + }); + + test("compose", function() { + var greet = function(name){ return "hi: " + name; }; + var exclaim = function(sentence){ return sentence + '!'; }; + var composed = _.compose(exclaim, greet); + equal(composed('moe'), 'hi: moe!', 'can compose a function that takes another'); + + composed = _.compose(greet, exclaim); + equal(composed('moe'), 'hi: moe!', 'in this case, the functions are also commutative'); + }); + + test("after", function() { + var testAfter = function(afterAmount, timesCalled) { + var afterCalled = 0; + var after = _.after(afterAmount, function() { + afterCalled++; + }); + while (timesCalled--) after(); + return afterCalled; + }; + + equal(testAfter(5, 5), 1, "after(N) should fire after being called N times"); + equal(testAfter(5, 4), 0, "after(N) should not fire unless called N times"); + equal(testAfter(0, 0), 1, "after(0) should fire immediately"); + }); + +}); diff --git a/webtagger/static/components/underscore/test/index.html b/webtagger/static/components/underscore/test/index.html new file mode 100644 index 0000000..ea7a136 --- /dev/null +++ b/webtagger/static/components/underscore/test/index.html @@ -0,0 +1,44 @@ + + + + Underscore Test Suite + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +

    Underscore Speed Suite

    +

    + A representative sample of the functions are benchmarked here, to provide + a sense of how fast they might run in different browsers. + Each iteration runs on an array of 1000 elements.

    + For example, the 'intersection' test measures the number of times you can + find the intersection of two thousand-element arrays in one second. +

    +
    + + + diff --git a/webtagger/static/components/underscore/test/objects.js b/webtagger/static/components/underscore/test/objects.js new file mode 100644 index 0000000..73bdf6b --- /dev/null +++ b/webtagger/static/components/underscore/test/objects.js @@ -0,0 +1,570 @@ +$(document).ready(function() { + + module("Objects"); + + test("keys", function() { + equal(_.keys({one : 1, two : 2}).join(', '), 'one, two', 'can extract the keys from an object'); + // the test above is not safe because it relies on for-in enumeration order + var a = []; a[1] = 0; + equal(_.keys(a).join(', '), '1', 'is not fooled by sparse arrays; see issue #95'); + raises(function() { _.keys(null); }, TypeError, 'throws an error for `null` values'); + raises(function() { _.keys(void 0); }, TypeError, 'throws an error for `undefined` values'); + raises(function() { _.keys(1); }, TypeError, 'throws an error for number primitives'); + raises(function() { _.keys('a'); }, TypeError, 'throws an error for string primitives'); + raises(function() { _.keys(true); }, TypeError, 'throws an error for boolean primitives'); + }); + + test("values", function() { + equal(_.values({one: 1, two: 2}).join(', '), '1, 2', 'can extract the values from an object'); + equal(_.values({one: 1, two: 2, length: 3}).join(', '), '1, 2, 3', '... even when one of them is "length"'); + }); + + test("pairs", function() { + deepEqual(_.pairs({one: 1, two: 2}), [['one', 1], ['two', 2]], 'can convert an object into pairs'); + deepEqual(_.pairs({one: 1, two: 2, length: 3}), [['one', 1], ['two', 2], ['length', 3]], '... even when one of them is "length"'); + }); + + test("invert", function() { + var obj = {first: 'Moe', second: 'Larry', third: 'Curly'}; + equal(_.keys(_.invert(obj)).join(' '), 'Moe Larry Curly', 'can invert an object'); + ok(_.isEqual(_.invert(_.invert(obj)), obj), 'two inverts gets you back where you started'); + + var obj = {length: 3}; + ok(_.invert(obj)['3'] == 'length', 'can invert an object with "length"') + }); + + test("functions", function() { + var obj = {a : 'dash', b : _.map, c : (/yo/), d : _.reduce}; + ok(_.isEqual(['b', 'd'], _.functions(obj)), 'can grab the function names of any passed-in object'); + + var Animal = function(){}; + Animal.prototype.run = function(){}; + equal(_.functions(new Animal).join(''), 'run', 'also looks up functions on the prototype'); + }); + + test("extend", function() { + var result; + equal(_.extend({}, {a:'b'}).a, 'b', 'can extend an object with the attributes of another'); + equal(_.extend({a:'x'}, {a:'b'}).a, 'b', 'properties in source override destination'); + equal(_.extend({x:'x'}, {a:'b'}).x, 'x', 'properties not in source dont get overriden'); + result = _.extend({x:'x'}, {a:'a'}, {b:'b'}); + ok(_.isEqual(result, {x:'x', a:'a', b:'b'}), 'can extend from multiple source objects'); + result = _.extend({x:'x'}, {a:'a', x:2}, {a:'b'}); + ok(_.isEqual(result, {x:2, a:'b'}), 'extending from multiple source objects last property trumps'); + result = _.extend({}, {a: void 0, b: null}); + equal(_.keys(result).join(''), 'ab', 'extend does not copy undefined values'); + + try { + result = {}; + _.extend(result, null, undefined, {a:1}); + } catch(ex) {} + + equal(result.a, 1, 'should not error on `null` or `undefined` sources'); + }); + + test("pick", function() { + var result; + result = _.pick({a:1, b:2, c:3}, 'a', 'c'); + ok(_.isEqual(result, {a:1, c:3}), 'can restrict properties to those named'); + result = _.pick({a:1, b:2, c:3}, ['b', 'c']); + ok(_.isEqual(result, {b:2, c:3}), 'can restrict properties to those named in an array'); + result = _.pick({a:1, b:2, c:3}, ['a'], 'b'); + ok(_.isEqual(result, {a:1, b:2}), 'can restrict properties to those named in mixed args'); + + var Obj = function(){}; + Obj.prototype = {a: 1, b: 2, c: 3}; + ok(_.isEqual(_.pick(new Obj, 'a', 'c'), {a:1, c: 3}), 'include prototype props'); + }); + + test("omit", function() { + var result; + result = _.omit({a:1, b:2, c:3}, 'b'); + ok(_.isEqual(result, {a:1, c:3}), 'can omit a single named property'); + result = _.omit({a:1, b:2, c:3}, 'a', 'c'); + ok(_.isEqual(result, {b:2}), 'can omit several named properties'); + result = _.omit({a:1, b:2, c:3}, ['b', 'c']); + ok(_.isEqual(result, {a:1}), 'can omit properties named in an array'); + + var Obj = function(){}; + Obj.prototype = {a: 1, b: 2, c: 3}; + ok(_.isEqual(_.omit(new Obj, 'b'), {a:1, c: 3}), 'include prototype props'); + }); + + test("defaults", function() { + var result; + var options = {zero: 0, one: 1, empty: "", nan: NaN, string: "string"}; + + _.defaults(options, {zero: 1, one: 10, twenty: 20}); + equal(options.zero, 0, 'value exists'); + equal(options.one, 1, 'value exists'); + equal(options.twenty, 20, 'default applied'); + + _.defaults(options, {empty: "full"}, {nan: "nan"}, {word: "word"}, {word: "dog"}); + equal(options.empty, "", 'value exists'); + ok(_.isNaN(options.nan), "NaN isn't overridden"); + equal(options.word, "word", 'new value is added, first one wins'); + + try { + options = {}; + _.defaults(options, null, undefined, {a:1}); + } catch(ex) {} + + equal(options.a, 1, 'should not error on `null` or `undefined` sources'); + }); + + test("clone", function() { + var moe = {name : 'moe', lucky : [13, 27, 34]}; + var clone = _.clone(moe); + equal(clone.name, 'moe', 'the clone as the attributes of the original'); + + clone.name = 'curly'; + ok(clone.name == 'curly' && moe.name == 'moe', 'clones can change shallow attributes without affecting the original'); + + clone.lucky.push(101); + equal(_.last(moe.lucky), 101, 'changes to deep attributes are shared with the original'); + + equal(_.clone(undefined), void 0, 'non objects should not be changed by clone'); + equal(_.clone(1), 1, 'non objects should not be changed by clone'); + equal(_.clone(null), null, 'non objects should not be changed by clone'); + }); + + test("isEqual", function() { + function First() { + this.value = 1; + } + First.prototype.value = 1; + function Second() { + this.value = 1; + } + Second.prototype.value = 2; + + // Basic equality and identity comparisons. + ok(_.isEqual(null, null), "`null` is equal to `null`"); + ok(_.isEqual(), "`undefined` is equal to `undefined`"); + + ok(!_.isEqual(0, -0), "`0` is not equal to `-0`"); + ok(!_.isEqual(-0, 0), "Commutative equality is implemented for `0` and `-0`"); + ok(!_.isEqual(null, undefined), "`null` is not equal to `undefined`"); + ok(!_.isEqual(undefined, null), "Commutative equality is implemented for `null` and `undefined`"); + + // String object and primitive comparisons. + ok(_.isEqual("Curly", "Curly"), "Identical string primitives are equal"); + ok(_.isEqual(new String("Curly"), new String("Curly")), "String objects with identical primitive values are equal"); + ok(_.isEqual(new String("Curly"), "Curly"), "String primitives and their corresponding object wrappers are equal"); + ok(_.isEqual("Curly", new String("Curly")), "Commutative equality is implemented for string objects and primitives"); + + ok(!_.isEqual("Curly", "Larry"), "String primitives with different values are not equal"); + ok(!_.isEqual(new String("Curly"), new String("Larry")), "String objects with different primitive values are not equal"); + ok(!_.isEqual(new String("Curly"), {toString: function(){ return "Curly"; }}), "String objects and objects with a custom `toString` method are not equal"); + + // Number object and primitive comparisons. + ok(_.isEqual(75, 75), "Identical number primitives are equal"); + ok(_.isEqual(new Number(75), new Number(75)), "Number objects with identical primitive values are equal"); + ok(_.isEqual(75, new Number(75)), "Number primitives and their corresponding object wrappers are equal"); + ok(_.isEqual(new Number(75), 75), "Commutative equality is implemented for number objects and primitives"); + ok(!_.isEqual(new Number(0), -0), "`new Number(0)` and `-0` are not equal"); + ok(!_.isEqual(0, new Number(-0)), "Commutative equality is implemented for `new Number(0)` and `-0`"); + + ok(!_.isEqual(new Number(75), new Number(63)), "Number objects with different primitive values are not equal"); + ok(!_.isEqual(new Number(63), {valueOf: function(){ return 63; }}), "Number objects and objects with a `valueOf` method are not equal"); + + // Comparisons involving `NaN`. + ok(_.isEqual(NaN, NaN), "`NaN` is equal to `NaN`"); + ok(!_.isEqual(61, NaN), "A number primitive is not equal to `NaN`"); + ok(!_.isEqual(new Number(79), NaN), "A number object is not equal to `NaN`"); + ok(!_.isEqual(Infinity, NaN), "`Infinity` is not equal to `NaN`"); + + // Boolean object and primitive comparisons. + ok(_.isEqual(true, true), "Identical boolean primitives are equal"); + ok(_.isEqual(new Boolean, new Boolean), "Boolean objects with identical primitive values are equal"); + ok(_.isEqual(true, new Boolean(true)), "Boolean primitives and their corresponding object wrappers are equal"); + ok(_.isEqual(new Boolean(true), true), "Commutative equality is implemented for booleans"); + ok(!_.isEqual(new Boolean(true), new Boolean), "Boolean objects with different primitive values are not equal"); + + // Common type coercions. + ok(!_.isEqual(true, new Boolean(false)), "Boolean objects are not equal to the boolean primitive `true`"); + ok(!_.isEqual("75", 75), "String and number primitives with like values are not equal"); + ok(!_.isEqual(new Number(63), new String(63)), "String and number objects with like values are not equal"); + ok(!_.isEqual(75, "75"), "Commutative equality is implemented for like string and number values"); + ok(!_.isEqual(0, ""), "Number and string primitives with like values are not equal"); + ok(!_.isEqual(1, true), "Number and boolean primitives with like values are not equal"); + ok(!_.isEqual(new Boolean(false), new Number(0)), "Boolean and number objects with like values are not equal"); + ok(!_.isEqual(false, new String("")), "Boolean primitives and string objects with like values are not equal"); + ok(!_.isEqual(12564504e5, new Date(2009, 9, 25)), "Dates and their corresponding numeric primitive values are not equal"); + + // Dates. + ok(_.isEqual(new Date(2009, 9, 25), new Date(2009, 9, 25)), "Date objects referencing identical times are equal"); + ok(!_.isEqual(new Date(2009, 9, 25), new Date(2009, 11, 13)), "Date objects referencing different times are not equal"); + ok(!_.isEqual(new Date(2009, 11, 13), { + getTime: function(){ + return 12606876e5; + } + }), "Date objects and objects with a `getTime` method are not equal"); + ok(!_.isEqual(new Date("Curly"), new Date("Curly")), "Invalid dates are not equal"); + + // Functions. + ok(!_.isEqual(First, Second), "Different functions with identical bodies and source code representations are not equal"); + + // RegExps. + ok(_.isEqual(/(?:)/gim, /(?:)/gim), "RegExps with equivalent patterns and flags are equal"); + ok(!_.isEqual(/(?:)/g, /(?:)/gi), "RegExps with equivalent patterns and different flags are not equal"); + ok(!_.isEqual(/Moe/gim, /Curly/gim), "RegExps with different patterns and equivalent flags are not equal"); + ok(!_.isEqual(/(?:)/gi, /(?:)/g), "Commutative equality is implemented for RegExps"); + ok(!_.isEqual(/Curly/g, {source: "Larry", global: true, ignoreCase: false, multiline: false}), "RegExps and RegExp-like objects are not equal"); + + // Empty arrays, array-like objects, and object literals. + ok(_.isEqual({}, {}), "Empty object literals are equal"); + ok(_.isEqual([], []), "Empty array literals are equal"); + ok(_.isEqual([{}], [{}]), "Empty nested arrays and objects are equal"); + ok(!_.isEqual({length: 0}, []), "Array-like objects and arrays are not equal."); + ok(!_.isEqual([], {length: 0}), "Commutative equality is implemented for array-like objects"); + + ok(!_.isEqual({}, []), "Object literals and array literals are not equal"); + ok(!_.isEqual([], {}), "Commutative equality is implemented for objects and arrays"); + + // Arrays with primitive and object values. + ok(_.isEqual([1, "Larry", true], [1, "Larry", true]), "Arrays containing identical primitives are equal"); + ok(_.isEqual([(/Moe/g), new Date(2009, 9, 25)], [(/Moe/g), new Date(2009, 9, 25)]), "Arrays containing equivalent elements are equal"); + + // Multi-dimensional arrays. + var a = [new Number(47), false, "Larry", /Moe/, new Date(2009, 11, 13), ['running', 'biking', new String('programming')], {a: 47}]; + var b = [new Number(47), false, "Larry", /Moe/, new Date(2009, 11, 13), ['running', 'biking', new String('programming')], {a: 47}]; + ok(_.isEqual(a, b), "Arrays containing nested arrays and objects are recursively compared"); + + // Overwrite the methods defined in ES 5.1 section 15.4.4. + a.forEach = a.map = a.filter = a.every = a.indexOf = a.lastIndexOf = a.some = a.reduce = a.reduceRight = null; + b.join = b.pop = b.reverse = b.shift = b.slice = b.splice = b.concat = b.sort = b.unshift = null; + + // Array elements and properties. + ok(_.isEqual(a, b), "Arrays containing equivalent elements and different non-numeric properties are equal"); + a.push("White Rocks"); + ok(!_.isEqual(a, b), "Arrays of different lengths are not equal"); + a.push("East Boulder"); + b.push("Gunbarrel Ranch", "Teller Farm"); + ok(!_.isEqual(a, b), "Arrays of identical lengths containing different elements are not equal"); + + // Sparse arrays. + ok(_.isEqual(Array(3), Array(3)), "Sparse arrays of identical lengths are equal"); + ok(!_.isEqual(Array(3), Array(6)), "Sparse arrays of different lengths are not equal when both are empty"); + + // Simple objects. + ok(_.isEqual({a: "Curly", b: 1, c: true}, {a: "Curly", b: 1, c: true}), "Objects containing identical primitives are equal"); + ok(_.isEqual({a: /Curly/g, b: new Date(2009, 11, 13)}, {a: /Curly/g, b: new Date(2009, 11, 13)}), "Objects containing equivalent members are equal"); + ok(!_.isEqual({a: 63, b: 75}, {a: 61, b: 55}), "Objects of identical sizes with different values are not equal"); + ok(!_.isEqual({a: 63, b: 75}, {a: 61, c: 55}), "Objects of identical sizes with different property names are not equal"); + ok(!_.isEqual({a: 1, b: 2}, {a: 1}), "Objects of different sizes are not equal"); + ok(!_.isEqual({a: 1}, {a: 1, b: 2}), "Commutative equality is implemented for objects"); + ok(!_.isEqual({x: 1, y: undefined}, {x: 1, z: 2}), "Objects with identical keys and different values are not equivalent"); + + // `A` contains nested objects and arrays. + a = { + name: new String("Moe Howard"), + age: new Number(77), + stooge: true, + hobbies: ["acting"], + film: { + name: "Sing a Song of Six Pants", + release: new Date(1947, 9, 30), + stars: [new String("Larry Fine"), "Shemp Howard"], + minutes: new Number(16), + seconds: 54 + } + }; + + // `B` contains equivalent nested objects and arrays. + b = { + name: new String("Moe Howard"), + age: new Number(77), + stooge: true, + hobbies: ["acting"], + film: { + name: "Sing a Song of Six Pants", + release: new Date(1947, 9, 30), + stars: [new String("Larry Fine"), "Shemp Howard"], + minutes: new Number(16), + seconds: 54 + } + }; + ok(_.isEqual(a, b), "Objects with nested equivalent members are recursively compared"); + + // Instances. + ok(_.isEqual(new First, new First), "Object instances are equal"); + ok(!_.isEqual(new First, new Second), "Objects with different constructors and identical own properties are not equal"); + ok(!_.isEqual({value: 1}, new First), "Object instances and objects sharing equivalent properties are not equal"); + ok(!_.isEqual({value: 2}, new Second), "The prototype chain of objects should not be examined"); + + // Circular Arrays. + (a = []).push(a); + (b = []).push(b); + ok(_.isEqual(a, b), "Arrays containing circular references are equal"); + a.push(new String("Larry")); + b.push(new String("Larry")); + ok(_.isEqual(a, b), "Arrays containing circular references and equivalent properties are equal"); + a.push("Shemp"); + b.push("Curly"); + ok(!_.isEqual(a, b), "Arrays containing circular references and different properties are not equal"); + + // More circular arrays #767. + a = ["everything is checked but", "this", "is not"]; + a[1] = a; + b = ["everything is checked but", ["this", "array"], "is not"]; + ok(!_.isEqual(a, b), "Comparison of circular references with non-circular references are not equal"); + + // Circular Objects. + a = {abc: null}; + b = {abc: null}; + a.abc = a; + b.abc = b; + ok(_.isEqual(a, b), "Objects containing circular references are equal"); + a.def = 75; + b.def = 75; + ok(_.isEqual(a, b), "Objects containing circular references and equivalent properties are equal"); + a.def = new Number(75); + b.def = new Number(63); + ok(!_.isEqual(a, b), "Objects containing circular references and different properties are not equal"); + + // More circular objects #767. + a = {everything: "is checked", but: "this", is: "not"}; + a.but = a; + b = {everything: "is checked", but: {that:"object"}, is: "not"}; + ok(!_.isEqual(a, b), "Comparison of circular references with non-circular object references are not equal"); + + // Cyclic Structures. + a = [{abc: null}]; + b = [{abc: null}]; + (a[0].abc = a).push(a); + (b[0].abc = b).push(b); + ok(_.isEqual(a, b), "Cyclic structures are equal"); + a[0].def = "Larry"; + b[0].def = "Larry"; + ok(_.isEqual(a, b), "Cyclic structures containing equivalent properties are equal"); + a[0].def = new String("Larry"); + b[0].def = new String("Curly"); + ok(!_.isEqual(a, b), "Cyclic structures containing different properties are not equal"); + + // Complex Circular References. + a = {foo: {b: {foo: {c: {foo: null}}}}}; + b = {foo: {b: {foo: {c: {foo: null}}}}}; + a.foo.b.foo.c.foo = a; + b.foo.b.foo.c.foo = b; + ok(_.isEqual(a, b), "Cyclic structures with nested and identically-named properties are equal"); + + // Chaining. + ok(!_.isEqual(_({x: 1, y: undefined}).chain(), _({x: 1, z: 2}).chain()), 'Chained objects containing different values are not equal'); + + a = _({x: 1, y: 2}).chain(); + b = _({x: 1, y: 2}).chain(); + equal(_.isEqual(a.isEqual(b), _(true)), true, '`isEqual` can be chained'); + + // Objects from another frame. + ok(_.isEqual({}, iObject)); + }); + + test("isEmpty", function() { + ok(!_([1]).isEmpty(), '[1] is not empty'); + ok(_.isEmpty([]), '[] is empty'); + ok(!_.isEmpty({one : 1}), '{one : 1} is not empty'); + ok(_.isEmpty({}), '{} is empty'); + ok(_.isEmpty(new RegExp('')), 'objects with prototype properties are empty'); + ok(_.isEmpty(null), 'null is empty'); + ok(_.isEmpty(), 'undefined is empty'); + ok(_.isEmpty(''), 'the empty string is empty'); + ok(!_.isEmpty('moe'), 'but other strings are not'); + + var obj = {one : 1}; + delete obj.one; + ok(_.isEmpty(obj), 'deleting all the keys from an object empties it'); + }); + + // Setup remote variables for iFrame tests. + var iframe = document.createElement('iframe'); + jQuery(iframe).appendTo(document.body); + var iDoc = iframe.contentDocument || iframe.contentWindow.document; + iDoc.write( + "" + ); + iDoc.close(); + + test("isElement", function() { + ok(!_.isElement('div'), 'strings are not dom elements'); + ok(_.isElement($('html')[0]), 'the html tag is a DOM element'); + ok(_.isElement(iElement), 'even from another frame'); + }); + + test("isArguments", function() { + var args = (function(){ return arguments; })(1, 2, 3); + ok(!_.isArguments('string'), 'a string is not an arguments object'); + ok(!_.isArguments(_.isArguments), 'a function is not an arguments object'); + ok(_.isArguments(args), 'but the arguments object is an arguments object'); + ok(!_.isArguments(_.toArray(args)), 'but not when it\'s converted into an array'); + ok(!_.isArguments([1,2,3]), 'and not vanilla arrays.'); + ok(_.isArguments(iArguments), 'even from another frame'); + }); + + test("isObject", function() { + ok(_.isObject(arguments), 'the arguments object is object'); + ok(_.isObject([1, 2, 3]), 'and arrays'); + ok(_.isObject($('html')[0]), 'and DOM element'); + ok(_.isObject(iElement), 'even from another frame'); + ok(_.isObject(function () {}), 'and functions'); + ok(_.isObject(iFunction), 'even from another frame'); + ok(!_.isObject(null), 'but not null'); + ok(!_.isObject(undefined), 'and not undefined'); + ok(!_.isObject('string'), 'and not string'); + ok(!_.isObject(12), 'and not number'); + ok(!_.isObject(true), 'and not boolean'); + ok(_.isObject(new String('string')), 'but new String()'); + }); + + test("isArray", function() { + ok(!_.isArray(arguments), 'the arguments object is not an array'); + ok(_.isArray([1, 2, 3]), 'but arrays are'); + ok(_.isArray(iArray), 'even from another frame'); + }); + + test("isString", function() { + ok(!_.isString(document.body), 'the document body is not a string'); + ok(_.isString([1, 2, 3].join(', ')), 'but strings are'); + ok(_.isString(iString), 'even from another frame'); + }); + + test("isNumber", function() { + ok(!_.isNumber('string'), 'a string is not a number'); + ok(!_.isNumber(arguments), 'the arguments object is not a number'); + ok(!_.isNumber(undefined), 'undefined is not a number'); + ok(_.isNumber(3 * 4 - 7 / 10), 'but numbers are'); + ok(_.isNumber(NaN), 'NaN *is* a number'); + ok(_.isNumber(Infinity), 'Infinity is a number'); + ok(_.isNumber(iNumber), 'even from another frame'); + ok(!_.isNumber('1'), 'numeric strings are not numbers'); + }); + + test("isBoolean", function() { + ok(!_.isBoolean(2), 'a number is not a boolean'); + ok(!_.isBoolean("string"), 'a string is not a boolean'); + ok(!_.isBoolean("false"), 'the string "false" is not a boolean'); + ok(!_.isBoolean("true"), 'the string "true" is not a boolean'); + ok(!_.isBoolean(arguments), 'the arguments object is not a boolean'); + ok(!_.isBoolean(undefined), 'undefined is not a boolean'); + ok(!_.isBoolean(NaN), 'NaN is not a boolean'); + ok(!_.isBoolean(null), 'null is not a boolean'); + ok(_.isBoolean(true), 'but true is'); + ok(_.isBoolean(false), 'and so is false'); + ok(_.isBoolean(iBoolean), 'even from another frame'); + }); + + test("isFunction", function() { + ok(!_.isFunction([1, 2, 3]), 'arrays are not functions'); + ok(!_.isFunction('moe'), 'strings are not functions'); + ok(_.isFunction(_.isFunction), 'but functions are'); + ok(_.isFunction(iFunction), 'even from another frame'); + }); + + test("isDate", function() { + ok(!_.isDate(100), 'numbers are not dates'); + ok(!_.isDate({}), 'objects are not dates'); + ok(_.isDate(new Date()), 'but dates are'); + ok(_.isDate(iDate), 'even from another frame'); + }); + + test("isRegExp", function() { + ok(!_.isRegExp(_.identity), 'functions are not RegExps'); + ok(_.isRegExp(/identity/), 'but RegExps are'); + ok(_.isRegExp(iRegExp), 'even from another frame'); + }); + + test("isFinite", function() { + ok(!_.isFinite(undefined), 'undefined is not Finite'); + ok(!_.isFinite(null), 'null is not Finite'); + ok(!_.isFinite(NaN), 'NaN is not Finite'); + ok(!_.isFinite(Infinity), 'Infinity is not Finite'); + ok(!_.isFinite(-Infinity), '-Infinity is not Finite'); + ok(_.isFinite('12'), 'Numeric strings are numbers'); + ok(!_.isFinite('1a'), 'Non numeric strings are not numbers'); + ok(!_.isFinite(''), 'Empty strings are not numbers'); + var obj = new Number(5); + ok(_.isFinite(obj), 'Number instances can be finite'); + ok(_.isFinite(0), '0 is Finite'); + ok(_.isFinite(123), 'Ints are Finite'); + ok(_.isFinite(-12.44), 'Floats are Finite'); + }); + + test("isNaN", function() { + ok(!_.isNaN(undefined), 'undefined is not NaN'); + ok(!_.isNaN(null), 'null is not NaN'); + ok(!_.isNaN(0), '0 is not NaN'); + ok(_.isNaN(NaN), 'but NaN is'); + ok(_.isNaN(iNaN), 'even from another frame'); + ok(_.isNaN(new Number(NaN)), 'wrapped NaN is still NaN'); + }); + + test("isNull", function() { + ok(!_.isNull(undefined), 'undefined is not null'); + ok(!_.isNull(NaN), 'NaN is not null'); + ok(_.isNull(null), 'but null is'); + ok(_.isNull(iNull), 'even from another frame'); + }); + + test("isUndefined", function() { + ok(!_.isUndefined(1), 'numbers are defined'); + ok(!_.isUndefined(null), 'null is defined'); + ok(!_.isUndefined(false), 'false is defined'); + ok(!_.isUndefined(NaN), 'NaN is defined'); + ok(_.isUndefined(), 'nothing is undefined'); + ok(_.isUndefined(undefined), 'undefined is undefined'); + ok(_.isUndefined(iUndefined), 'even from another frame'); + }); + + if (window.ActiveXObject) { + test("IE host objects", function() { + var xml = new ActiveXObject("Msxml2.DOMDocument.3.0"); + ok(!_.isNumber(xml)); + ok(!_.isBoolean(xml)); + ok(!_.isNaN(xml)); + ok(!_.isFunction(xml)); + ok(!_.isNull(xml)); + ok(!_.isUndefined(xml)); + }); + } + + test("tap", function() { + var intercepted = null; + var interceptor = function(obj) { intercepted = obj; }; + var returned = _.tap(1, interceptor); + equal(intercepted, 1, "passes tapped object to interceptor"); + equal(returned, 1, "returns tapped object"); + + returned = _([1,2,3]).chain(). + map(function(n){ return n * 2; }). + max(). + tap(interceptor). + value(); + ok(returned == 6 && intercepted == 6, 'can use tapped objects in a chain'); + }); + + test("has", function () { + var obj = {foo: "bar", func: function () {} }; + ok (_.has(obj, "foo"), "has() checks that the object has a property."); + ok (_.has(obj, "baz") == false, "has() returns false if the object doesn't have the property."); + ok (_.has(obj, "func"), "has() works for functions too."); + obj.hasOwnProperty = null; + ok (_.has(obj, "foo"), "has() works even when the hasOwnProperty method is deleted."); + var child = {}; + child.prototype = obj; + ok (_.has(child, "foo") == false, "has() does not check the prototype chain for a property.") + }); +}); diff --git a/webtagger/static/components/underscore/test/speed.js b/webtagger/static/components/underscore/test/speed.js new file mode 100644 index 0000000..05e3f2a --- /dev/null +++ b/webtagger/static/components/underscore/test/speed.js @@ -0,0 +1,75 @@ +(function() { + + var numbers = []; + for (var i=0; i<1000; i++) numbers.push(i); + var objects = _.map(numbers, function(n){ return {num : n}; }); + var randomized = _.sortBy(numbers, function(){ return Math.random(); }); + var deep = _.map(_.range(100), function() { return _.range(1000); }); + + JSLitmus.test('_.each()', function() { + var timesTwo = []; + _.each(numbers, function(num){ timesTwo.push(num * 2); }); + return timesTwo; + }); + + JSLitmus.test('_(list).each()', function() { + var timesTwo = []; + _(numbers).each(function(num){ timesTwo.push(num * 2); }); + return timesTwo; + }); + + JSLitmus.test('jQuery.each()', function() { + var timesTwo = []; + jQuery.each(numbers, function(){ timesTwo.push(this * 2); }); + return timesTwo; + }); + + JSLitmus.test('_.map()', function() { + return _.map(objects, function(obj){ return obj.num; }); + }); + + JSLitmus.test('jQuery.map()', function() { + return jQuery.map(objects, function(obj){ return obj.num; }); + }); + + JSLitmus.test('_.pluck()', function() { + return _.pluck(objects, 'num'); + }); + + JSLitmus.test('_.uniq()', function() { + return _.uniq(randomized); + }); + + JSLitmus.test('_.uniq() (sorted)', function() { + return _.uniq(numbers, true); + }); + + JSLitmus.test('_.sortBy()', function() { + return _.sortBy(numbers, function(num){ return -num; }); + }); + + JSLitmus.test('_.isEqual()', function() { + return _.isEqual(numbers, randomized); + }); + + JSLitmus.test('_.keys()', function() { + return _.keys(objects); + }); + + JSLitmus.test('_.values()', function() { + return _.values(objects); + }); + + JSLitmus.test('_.intersection()', function() { + return _.intersection(numbers, randomized); + }); + + JSLitmus.test('_.range()', function() { + return _.range(1000); + }); + + JSLitmus.test('_.flatten()', function() { + return _.flatten(deep); + }); + +})(); diff --git a/webtagger/static/components/underscore/test/utility.js b/webtagger/static/components/underscore/test/utility.js new file mode 100644 index 0000000..0bca8c8 --- /dev/null +++ b/webtagger/static/components/underscore/test/utility.js @@ -0,0 +1,266 @@ +$(document).ready(function() { + + var templateSettings; + + module("Utility", { + + setup: function() { + templateSettings = _.clone(_.templateSettings); + }, + + teardown: function() { + _.templateSettings = templateSettings; + } + + }); + + test("#750 - Return _ instance.", 2, function() { + var instance = _([]); + ok(_(instance) === instance); + ok(new _(instance) === instance); + }); + + test("identity", function() { + var moe = {name : 'moe'}; + equal(_.identity(moe), moe, 'moe is the same as his identity'); + }); + + test("random", function() { + var array = _.range(1000); + var min = Math.pow(2, 31); + var max = Math.pow(2, 62); + + ok(_.every(array, function() { + return _.random(min, max) >= min; + }), "should produce a random number greater than or equal to the minimum number"); + + ok(_.some(array, function() { + return _.random(Number.MAX_VALUE) > 0; + }), "should produce a random number when passed `Number.MAX_VALUE`"); + }); + + test("uniqueId", function() { + var ids = [], i = 0; + while(i++ < 100) ids.push(_.uniqueId()); + equal(_.uniq(ids).length, ids.length, 'can generate a globally-unique stream of ids'); + }); + + test("times", function() { + var vals = []; + _.times(3, function (i) { vals.push(i); }); + ok(_.isEqual(vals, [0,1,2]), "is 0 indexed"); + // + vals = []; + _(3).times(function(i) { vals.push(i); }); + ok(_.isEqual(vals, [0,1,2]), "works as a wrapper"); + // collects return values + ok(_.isEqual([0, 1, 2], _.times(3, function(i) { return i; })), "collects return values"); + }); + + test("mixin", function() { + _.mixin({ + myReverse: function(string) { + return string.split('').reverse().join(''); + } + }); + equal(_.myReverse('panacea'), 'aecanap', 'mixed in a function to _'); + equal(_('champ').myReverse(), 'pmahc', 'mixed in a function to the OOP wrapper'); + }); + + test("_.escape", function() { + equal(_.escape("Curly & Moe"), "Curly & Moe"); + equal(_.escape("Curly & Moe"), "Curly &amp; Moe"); + equal(_.escape(null), ''); + }); + + test("_.unescape", function() { + var string = "Curly & Moe"; + equal(_.unescape("Curly & Moe"), string); + equal(_.unescape("Curly &amp; Moe"), "Curly & Moe"); + equal(_.unescape(null), ''); + equal(_.unescape(_.escape(string)), string); + }); + + test("template", function() { + var basicTemplate = _.template("<%= thing %> is gettin' on my noives!"); + var result = basicTemplate({thing : 'This'}); + equal(result, "This is gettin' on my noives!", 'can do basic attribute interpolation'); + + var sansSemicolonTemplate = _.template("A <% this %> B"); + equal(sansSemicolonTemplate(), "A B"); + + var backslashTemplate = _.template("<%= thing %> is \\ridanculous"); + equal(backslashTemplate({thing: 'This'}), "This is \\ridanculous"); + + var escapeTemplate = _.template('<%= a ? "checked=\\"checked\\"" : "" %>'); + equal(escapeTemplate({a: true}), 'checked="checked"', 'can handle slash escapes in interpolations.'); + + var fancyTemplate = _.template("
      <% \ + for (var key in people) { \ + %>
    • <%= people[key] %>
    • <% } %>
    "); + result = fancyTemplate({people : {moe : "Moe", larry : "Larry", curly : "Curly"}}); + equal(result, "
    • Moe
    • Larry
    • Curly
    ", 'can run arbitrary javascript in templates'); + + var escapedCharsInJavascriptTemplate = _.template("
      <% _.each(numbers.split('\\n'), function(item) { %>
    • <%= item %>
    • <% }) %>
    "); + result = escapedCharsInJavascriptTemplate({numbers: "one\ntwo\nthree\nfour"}); + equal(result, "
    • one
    • two
    • three
    • four
    ", 'Can use escaped characters (e.g. \\n) in Javascript'); + + var namespaceCollisionTemplate = _.template("<%= pageCount %> <%= thumbnails[pageCount] %> <% _.each(thumbnails, function(p) { %>
    \">
    <% }); %>"); + result = namespaceCollisionTemplate({ + pageCount: 3, + thumbnails: { + 1: "p1-thumbnail.gif", + 2: "p2-thumbnail.gif", + 3: "p3-thumbnail.gif" + } + }); + equal(result, "3 p3-thumbnail.gif
    "); + + var noInterpolateTemplate = _.template("

    Just some text. Hey, I know this is silly but it aids consistency.

    "); + result = noInterpolateTemplate(); + equal(result, "

    Just some text. Hey, I know this is silly but it aids consistency.

    "); + + var quoteTemplate = _.template("It's its, not it's"); + equal(quoteTemplate({}), "It's its, not it's"); + + var quoteInStatementAndBody = _.template("<%\ + if(foo == 'bar'){ \ + %>Statement quotes and 'quotes'.<% } %>"); + equal(quoteInStatementAndBody({foo: "bar"}), "Statement quotes and 'quotes'."); + + var withNewlinesAndTabs = _.template('This\n\t\tis: <%= x %>.\n\tok.\nend.'); + equal(withNewlinesAndTabs({x: 'that'}), 'This\n\t\tis: that.\n\tok.\nend.'); + + var template = _.template("<%- value %>"); + var result = template({value: " + + + + diff --git a/webtagger/webtagger.py b/webtagger/webtagger.py new file mode 100644 index 0000000..6a6178a --- /dev/null +++ b/webtagger/webtagger.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +import subprocess +import os +import json +from flask import Flask, request, render_template +app = Flask(__name__) + +@app.route("/") +def docs(): + return render_template('index.html') + +@app.route("/tagger",methods=['POST']) +def cleaner(): + # Receive String from post parametre Raw text ( Json ) + dirtyString= request.json[u'string'] + # send the String throught LIA_TAGG script thank's to pipe + # lia_clean split a word by line et markup the sentences + p=subprocess.Popen([os.environ["LIA_TAGG"]+'/script/lia_clean'],stdin=subprocess.PIPE,stdout=subprocess.PIPE) + (cleanString, err) = p.communicate(input=dirtyString.encode('iso8859-1','backslashreplace')) + #lia_tagg+lemm tagg words with function and give the lemm for each word + p2=subprocess.Popen([os.environ["LIA_TAGG"]+'/script/lia_tagg+lemm','-guess'],stdin=subprocess.PIPE,stdout=subprocess.PIPE) + (taggedString,err) =p2.communicate(input=cleanString) + # This is used beceause lia_tagg deal with iso8859 only + taggedString = taggedString.decode('iso8859').encode("utf8") + textTable = taggedString.split('\n') + # Creating a dictionary in order to encode it into Json + textDictionary = list() + for line in textTable : + lineTable =line.split() + #print lineTable + if lineTable: + wordDict=dict([('word',lineTable[0]),('markup',lineTable[1]),('lemm',lineTable[2])]) + textDictionary.append(wordDict) + textJson = json.JSONEncoder().encode(textDictionary) + return textJson +if __name__ == '__main__': + app.debug = True + app.run(host='0.0.0.0') diff --git a/webtagger/webtagger.pyc b/webtagger/webtagger.pyc new file mode 100644 index 0000000000000000000000000000000000000000..460bc0e881c5d46419a5905a86bc78fa1c152fb3 GIT binary patch literal 1506 zcmbtU&2G~`5T3Q;rauXV18R|wFcODIh#GO?fDjde773M-<`f}Cu6IbB*lV-9E>vny z<;DYW=D?Hj2s{AHOj249oUpT-Z)Rs_XXcxA_`SRO*?)SS!QyGr{}USSD@~ey3JQSX zFRWmwL?1vAKpDa?gt7(07L*YTBTyIuF2NbuwE^2OT?QSps9W$6M89&bk3cVhZo^oS zUg_m?gH`sRS6~)^{Q|hg_M?vM>VjScy#{BXl#%ETdL4>1|3S}QFC^$Anw}S_oB1{& zi|-nA-meQb8tuqqSr@5CuSl2tNKd!o!~`-iQGFN+>;?ej{H z#-+(UBr%y(B_^}HDDu=K&SnXLkx$3t#GySxo4m(E7B8c%`q*>zb(J{|+_85E1SfN2 zNvK3Wsk9T@{Z|JAiGPVqc}V=<2oP_l^O;IdIN*$?gaf$23n82UY!E3MJG(l9on0Tm zGz9WG6 zU>y9zYXm3JxmWc!ujIG|dYz&@35b}hl;>VU6EvK=^ENkQ$JzsdvBeDYBh;}lz2)xk z5*kfrv7cZ(-x2#tBr0Y+5K{ay8NPh6JsNE9?6_+rBrdag?S;pzz|=^WIZv+q{A^t{ zUX;117btaEo_mhxFwJI;T5@8MIxjd`z#JP)g zWiY11d}9rz(OV&#J~yNE!_-yAbNjmHu(lN)#|Hb|@ zzeXUd%Ca$e##e*GK$BG(dkke==hh$3OFOscLM&vygwmvXq2QQmAF>;3<>>ms#a;Qo zYr@wx#0vCp;a-=s-S8Q2D8QR87V7IWK}iwX$( hzcO%_J}N8S6!@6AmDca5j=HHj!Dj3BwT@a*KLKkcMsolF literal 0 HcmV?d00001